syslogd是Linux下的一個記錄日志文件服務。從結構來說,可以理解為這個服務下面有一系列的子服務,例如mail、auth、cron、kern等等,這些子服務對外提供日志記錄的功能,而當其它的程序或服務需要記錄日志的時候,就可以直接調用這些子服務將日志記錄到設定的地方。而配置這整個守護進程以及其子服務的地方就是/etc/syslog.conf這個文件。
說明
而目前不少的Linux發行版已經
用rsyslogd將syslogd代替了。rsyslogd是syslogd的升級版,其配置語法與syslogd的配置文件一致。
需要說明的是,在更老的版本中,syslogd作為服務端的配置是在/etc/sysconfig/syslog.conf配置文件中的,而現在很多的發行版采用了rsyslog之后就沒有這個配置文件了。甚至在ubuntu中本身就不存在/etc/sysconfig/這個文件夾,這跟紅帽系的發行版就不一樣。而在rsyslog的配置文件中,也有少許不同:
# ubuntu下的寫法 # provides UDP syslog reception module(load="imudp") input(type="imudp" port="514") # provides TCP syslog reception module(load="imtcp") input(type="imtcp" port="514") # centos下的寫法 # udp協議 $ModLoad imudp $UDPServerRun 514 # tcp協議 $ModLoad imtcp $InputTCPServerRun 514
上面的兩種寫法作用都是一樣的。
配置文件語法
基礎的配置語法可以參照《鳥哥的Linux私房菜:基礎學習篇》第19章的內容。下面是將rsyslog配置成客戶端/服務器這種結構。
不同的發行版的配置形式有所不同,下面僅以ubuntu16.04LTS版為例說明。
配置
服務器端
以ubuntu作為日志系統的服務器,需要進行一下簡單的配置:
1. 在/etc/rsyslog.conf配置文件以下的語句去掉注釋:
# provides UDP syslog reception module(load="imudp") input(type="imudp" port="514") # provides TCP syslog reception module(load="imtcp") input(type="imtcp" port="514")
2. # 定義模板(可選),如果沒有模板就跟本機的日志文件混在一起
$template templatename , '/var/log/%HOSTNAME%/%PROGRAMNAME%.log' * # 使用日志模板寫入日志 *.* ?templatename &~
"& ~"表示了一個重定向規則,被用來告知rsyslog守護進程停止對日志消息的進一步處理,並且不要在本地寫入。如果沒有使用該重定向規則,那么所有的遠程消息都會在寫入上述描述的日志文件之外同時被寫入到本地日志文件,這就意味着日志消息實際上被寫了兩次。使用該規則的另外一個結果就是syslog服務器本身的日志消息只會被以該機器主機名命名的專有文件中。
客戶端
在客戶端方面,只要將對應的子服務的目標儲存文件寫成遠程的ip:port 即可,例如:
# mail @指明用udp協議傳輸 mail.* @192.168.150.138:514 # auth @@指明用udp協議傳輸 auth.* @@192.168.150.138:514 # 更常見的是全部日志文件都指向遠程主機 *.* @192.168.150.138:514
3. 修改了配置文件之后,無論是客戶端還是服務器端,都要重啟rsyslogd服務
sudo service rsyslog restart