rsyslog是比syslog功能更強大的日誌記錄系統,能夠將日誌輸出到文件,數據庫和其它程序。Centos 6.x默認的rsyslog版本是5.x。linux
網上關於rsyslog的安裝配置文檔卻是很多,但大多數都是一些基礎配置,可參考的價值不大。另外如何收集多臺多tomcat應用日誌的文檔更是幾乎沒有,斷斷續續折騰了幾天,總算有了一個結果,下面就關於如何配置收集tomcat及其下面部署的程序日誌進行說明。數據庫
1、升級Rsyslogtomcat
操做系統是Centos 6.8,默認安裝的Rsyslog版本是5.8.10,可經過rsyslogd -v命令查看:服務器
$ rsyslogd -v rsyslogd 5.8.10, compiled with: FEATURE_REGEXP: Yes FEATURE_LARGEFILE: No GSSAPI Kerberos 5 support: Yes FEATURE_DEBUG (debug build, slow code): No 32bit Atomic operations supported: Yes 64bit Atomic operations supported: Yes Runtime Instrumentation (slow code): No See http://www.rsyslog.com for more information.
使用yum對rsyslog進行升級(須要root權限):app
# cd /etc/yum.repos.d # wget http://rpms.adiscon.com/v8-stable/rsyslog.repo # yum update rsyslog
升級完成後,版本爲8.26.0異步
$ rsyslogd -v rsyslogd 8.26.0, compiled with: PLATFORM: x86_64-redhat-linux-gnu PLATFORM (lsb_release -d): FEATURE_REGEXP: Yes GSSAPI Kerberos 5 support: No FEATURE_DEBUG (debug build, slow code): No 32bit Atomic operations supported: Yes 64bit Atomic operations supported: Yes memory allocator: system default Runtime Instrumentation (slow code): No uuid support: Yes Number of Bits in RainerScript integers: 64 See http://www.rsyslog.com for more information.
注意:Rsyslog服務端和客戶端都進行升級。tcp
2、客戶端配置測試
一、防火牆配置ui
若是啓用了iptables防火牆,注意開放默認的514端口,固然也能夠經過配置文件使用其它端口。spa
iptables -A INPUT -m state --state NEW -m udp -p udp -i eth0 --dport 514 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp -i eth0 --dport 514 -j ACCEPT
說明:rsyslog能夠經過tcp協議傳輸日誌,也能夠經過udp協議傳輸。有些服務器我採用的tcp協議,有些用了udp協議,想對比看看哪一種更適合咱們的環境,所以全部服務器都創建了以上兩條規則。eth0是內網網卡。
二、配置rsyslog
編輯配置文件/etc/rsyslog.conf,去掉如下配置項前的註釋,若是沒有就添加該配置項。
module(load="imuxsock") module(load="imklog") module(load="imfile") #使用udp協議 module(load="imudp") input(type="imudp" port="514") #使用tcp協議 module(load="imtcp" MaxSessions="500") input(type="imtcp" port="514")
新增配置:
ruleset(name="remote"){ action(type="omfwd" target="Rsyslog服務端主機IP" port="514" #端口 protocol="tcp" #使用協議 queue.type="linkedList" #使用異步處理 queue.spoolDirectory="/app/wutongshu/rsyslog" #隊列目錄 queue.fileName="remoteQueue_10_139_54_53" #隊列名稱 queue.maxDiskSpace="5g" #隊列佔最大磁盤空間 queue.saveOnShutdown="on" #保存內存數據若是rsyslog關閉 action.resumeRetryCount="-1" #無限重試插入失敗 ) stop }
新增子配置文件:/etc/rsyslog.d/tomcat-8080.conf
$WorkDirectory /app/wutongshu/rsyslog #默認爲/var/lib/rsyslog input(type="imfile" File="/app/wutongshu/tomcat-8080/logs/catalina.out" #日誌路徑 #StateFile="catalina.out-8080" #新版本中不須要設置 Facility="local1" Severity="info" Tag="catalina-10.139.54.53-8080" #定義日誌標籤,重要,服務端根據這個標籤能夠識別日誌 PersistStateInterval="1" #回寫偏移量數據到文件間隔時間(秒),根據實際狀況而定 Ruleset="remote" #rsyslog.conf中定義的rule名稱 ) ######################################################################### input(type="imfile" File="/app/wutongshu/log/channelmanage/channelinfo.log" #StateFile="channelmanage-8080" Facility="local2" Severity="info" Tag="channe-10.139.54.53-8080" PersistStateInterval="1" Ruleset="remote" ) ######################################################################### input(type="imfile" File="/app/wutongshu/log/channelmanage/channelerror.log" #StateFile="channelmanage-error-8080" Facility="local3" Severity="info" Tag="channelerror-10.139.54.53-8080" PersistStateInterval="1" Ruleset="remote" )
根據實際狀況,能夠在/etc/rsyslog.d添加多個配置文件,個人服務器上面都有兩個tomcat實例,所以還有一個配置文件是tomcat-8090.conf,跟上面相似,只是應用不一樣,日誌路徑,端口不一樣。
最後在/etc/rsyslog.conf中將
*.info;mail.none;authpriv.none;cron.none; /var/log/messages
修改成:
*.info;mail.none;authpriv.none;cron.none;local1.none;local2.none;local3.none;local4.none;local5.none;local6.none /var/log/messages
做用爲不將自定義的日誌記錄到/var/log/message文件中,否則的話日誌量大很容將/根目佔滿,後果可想而知。
3、服務端配置
一、防火牆配置
與客戶端一致:
iptables -A INPUT -m state --state NEW -m udp -p udp -i eth0 --dport 514 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp -i eth0 --dport 514 -j ACCEPT
二、配置rsyslog
編輯/etc/rsyslog.conf,去掉如下配置項前的註釋,若是沒有就添加該配置項。
$PreserveFQDN on #用於正確的獲取主機名,暫時應該沒用到 $FileOwner wutongshu #存儲的文件屬主 $FileGroup app #文件屬主 $FileCreateMode 0644 #生成的文件權限 $DirCreateMode 0755 #生成的目錄權限 $Umask 0022 $PrivDropToUser root #能夠刪除日誌的用戶 $PrivDropToGroup root #能夠刪除日誌的用戶組 module(load="imuxsock") module(load="imklog") module(load="imudp") input(type="imudp" port="514") module(load="imtcp" MaxSessions="500") input(type="imtcp" port="514") #如下爲部分配置 $template SpiceTmpl,"%msg:2:$%\n" #定義一個模塊,去掉開頭的空格 $template ChannelmanageCatalinaDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/catalina_%$YEAR%-%$MONTH%-%$DAY%.log" #定義文件存儲路徑及名稱,%%中間的爲變量 $template ChannelmanageInfoDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/channelmanage_%$YEAR%-%$MONTH%-%$DAY%.log" #定義文件存儲路徑及名稱,%%中間的爲變量 $template ChannelmanageErrorDynaFile,"/app/wutongshu/rsyslog/%fromhost-ip%/channelmanage/error_%$YEAR%-%$MONTH%-%$DAY%.log" :rawmsg,contains,"catalina-10.139.54.53-8080" ?ChannelmanageCatalinaDynaFile;SpiceTmpl #contains過濾tag爲catalina-10.139.54.53-8080日誌存儲到ChnnelmanageCatalinaDynaFile模板定義的日誌中去 :rawmsg,contains,"channe-10.139.54.53-8080" ?ChannelmanageInfoDynaFile;SpiceTmpl :rawmsg,contains,"channelerror-10.139.54.53-8080" ?ChannelmanageErrorDynaFile;SpiceTmpl
4、重啓服務,收集日誌
先重啓服務端Rsyslog,而後重啓客戶端。命令:
/etc/init.d/rsyslog restart
若是不出意外,服務端會成日誌目錄及日誌,固然首次會比較慢,有一個傳輸的過程。
在客戶端../rsyslog目錄下會發現傳輸的狀態文件和隊列文件:
state文件以imfile-state:開頭,後面爲日誌路徑,路徑中的/以-替代。
最後展現下服務端收集日誌的部分效果圖:
遇到的坑:配置第一臺客戶端在服務端全部日誌服務端都正常能接收到,後面配置的幾臺只能收到catalina.out日誌,其它日誌死活不行,配置檢查了不少遍,來回測試了不少遍,而後花了很長時間看官網文檔,始終沒有找到緣由。在快要放棄的時候發現服務端配置文件一個規律,能接收到日誌的tag定義的比較短,不能接收的tag定義的字符串都很長。以後隨便找了一臺,將tag改短,重啓服務後果真收到了日誌。真是坑。。若是一開始定義的tag也比較長,估計就沒這麼幸運發現問題所在了。