Linux 之 rsyslog 系統日誌轉發

一、rsyslog 介紹

  ryslog 是一個快速處理收集系統日誌的程序,提供了高性能、安全功能和模塊化設計。rsyslog 是syslog 的升級版,它將多種來源輸入輸出轉換結果到目的地,據官網介紹,現在可以處理100萬條信息。

  特性:1.多線程

     2.支持加密協議:ssl,tls,relp

     3.mysql、oracle、postgreSQL

     4.等等..

 

二、實踐部署()

2.1 環境圖

  

2.2.rsyslog server上部署操作

安裝rsyslog 程序(rsyslog默認已經在各發行版安裝,如果系統中沒有的話,可以用yum 進行安裝,如下:)

[root@opm ~]# yum install rsyslog -y

編輯rsyslog配置文件,路徑 /etc/rsyslog.conf,修改前最好先備份一份,修改後的文件內容如下

複製代碼
[root@opm log]# grep -v "^#" /etc/rsyslog.conf | grep -v "^$"
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$ModLoad immark  # provides --MARK-- message capability
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
$WorkDirectory /var/lib/rsyslog
$AllowedSender tcp, 192.168.30.0/24
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
:fromhost-ip, !isequal, "127.0.0.1" ?Remote
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                /data/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
複製代碼

 

a.$AllowedSender tcp, 192.168.30.0/24 允許 30.0網段內的主機以tcp協議來傳輸

b.$template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"  定義模板,接受日誌文件路徑,區分了不同主機的日誌

c.:fromhost-ip, !isequal, "127.0.0.1" ?Remote 過濾server 本機的日誌。

d.$InputTCPServerRun 514 開啓tcp,tcp和udp 可以共存的

 

創建日誌目錄,儘量選擇系統內比較大的區域創建,因爲考慮到要存放很多服務器的日誌文件。

[root@opm ~]# mkdir -pv /data/log

修改完成無誤後,重啓rsyslog服務,並查看監聽端口,514 是否是tcp協議

[root@opm ~]# systemctl restart rsyslog
[root@opm ~]# netstat -aulntp | grep rsyslog
tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      20228/rsyslogd      
tcp6       0      0 :::514                  :::*                    LISTEN      20228/rsyslogd      
udp        0      0 0.0.0.0:514             0.0.0.0:*                           20228/rsyslogd      
udp6       0      0 :::514                  :::*                                20228/rsyslogd      

2.3 客戶端上操作:

node1 上進行配置

打開配置文件,老樣子,先備份下在進行修改 /etc/rsyslog.conf,修改完記得要重啓程序

複製代碼
[root@node1 ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#"
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template myFormat,"%timestamp% %fromhost-ip% %msg%\n"
$ActionFileDefaultTemplate myFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                @@192.168.30.55
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
複製代碼

ceph1 上進行配置,重啓rsyslog程序

打開配置文件/etc/rsyslog.conf

複製代碼
[root@ceph1 ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#"
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                @@192.168.30.55
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
$template myFormat,"%timestamp% %fromhost-ip%%msg%\n"
$ActionFileDefaultTemplate myFormat
複製代碼

最後重啓客戶端上的rsyslog程序

 

2.4 驗證,在服務器上進到 /data/log 目錄下,進行查看,會發現以下類似的文件結構

複製代碼
[root@opm ~]# tree /data/log/
/data/log/
├── 192.168.30.56 └── 192.168.30.56_2016-05-05.log
├── 192.168.30.57 └── 192.168.30.57_2016-05-05.log
└── messages

2 directories, 3 files
複製代碼

messages:server 端的系統日誌
文件夾192.168.30.56: node1 客戶端的日誌
文件夾192.168.30.57: ceph1 客戶端的日誌

我們這裏只查看node1 的系統日誌吧。server 上進行操作

複製代碼
[root@opm ~]# tail -f /data/log/192.168.30.56/192.168.30.56_2016-05-05.log 
May  5 20:50:45 node1 rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="9296" x-info="http://www.rsyslog.com"] exiting on signal 15.
May  5 20:50:45 node1 rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="9334" x-info="http://www.rsyslog.com"] start
May  5 20:50:45 node1 systemd: Stopping System Logging Service...
May  5 20:50:45 node1 systemd: Starting System Logging Service...
May  5 20:50:45 node1 systemd: Started System Logging Service.
複製代碼

這裏還可以在node1上在命令行裏輸入 logger “this is test ” 發送消息,server上進行查看下

[root@opm ~]# tail -1f /data/log/192.168.30.56/192.168.30.56_2016-05-05.log 
May  5 20:52:46 node1 root: this is test

 

2.5.如果驗證失敗的話,先檢查selinux 是否關閉。後將udp 514 端口和tcp 514端口允許30網段訪問即可,或者關閉iptables 服務。另外說明centos7上 默認防火牆是firewalld。該操作在每臺機器上進行。

 

三、收集系統其它服務日誌,在客戶端node1 上操作,示例以openstack-nova 服務的日誌爲例:

3.1.先修改配置文件 /etc/rsyslog.conf,完整內容如下:

複製代碼
[root@node1 ~]# egrep -v '^#|^$' /etc/rsyslog.conf
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$ModLoad immark  # provides --MARK-- message capability
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                @@192.168.30.67
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
module(load="imfile" PollingInterval="5")
$InputFileName /var/log/nova/nova-compute.log
$InputFileTag nova-info:
$InputFileStateFile state-nova-info
$InputRunFileMonitor
複製代碼

其實只添加了後5行的內容,對每項簡單解釋下

module(load="imfile" PollingInterval="5")        加載imfile 模塊,並5秒刷新一次
$InputFileName /var/log/nova/nova-compute.log     要監控的日誌文件路徑 
$InputFileTag nova-info:                  定義文件標籤 ,注意最後是冒號:
$InputFileStateFile state-nova-info            定義狀態文件
$InputRunFileMonitor                  激活讀取,可以設置多組日誌讀取,每組結束時設置本參數             

 3.2.修改完成後,重啓客戶端的rsyslog服務

[root@node1 ~]# systemctl restart rsyslog

3.3 驗證,在rsyslog服務器上查看日誌,如下圖

 

四、總結

  以前不知道這個,總以爲日誌轉發很難,現在感覺rsyslog還是挺簡單的。不過簡單是因爲我們只是用了最簡單方法,而且功能也是隻用了系統日誌的轉發,後續會嘗試如何記錄轉發其它服務的日誌,比如mysql、zabbix、以及nova 服務的日誌。這些纔是最終的目的。

轉自:http://www.cnblogs.com/hanyifeng/p/5463338.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章