Rsyslog日誌服務搭建

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也比較長,估計就沒這麼幸運發現問題所在了。

相關文章
相關標籤/搜索