Rsyslog日志服務搭建收集tomcat日志【轉】


syslog是比syslog功能更強大的日志記錄系統,可以將日志輸出到文件,數據庫和其它程序。Centos 6.x默認的rsyslog版本是5.x。

網上關於rsyslog的安裝配置文檔倒是不少,但大多數都是一些基礎配置,可參考的價值不大。另外如何收集多台多tomcat應用日志的文檔更是幾乎沒有,斷斷續續折騰了幾天,總算有了一個結果,下面就關於如何配置收集tomcat及其下面部署的程序日志進行說明。

一、升級Rsyslog

操作系統是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權限):

# 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服務端和客戶端都進行升級。

二、客戶端配置

1、防火牆配置

如果啟用了iptables防火牆,注意開放默認的514端口,當然也可以通過配置文件使用其它端口。

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是內網網卡。

2、配置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文件中,不然的話日志量大很容將/根目占滿,后果可想而知。

 三、服務端配置

1、防火牆配置

與客戶端一致:

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

2、配置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

四、重啟服務,收集日志

先重啟服務端Rsyslog,然后重啟客戶端。命令:

/etc/init.d/rsyslog restart

如果不出意外,服務端會成日志目錄及日志,當然首次會比較慢,有一個傳輸的過程。

在客戶端../rsyslog目錄下會發現傳輸的狀態文件和隊列文件:

state文件以imfile-state:開頭,后面為日志路徑,路徑中的/以-替代。

最后展示下服務端收集日志的部分效果圖:

遇到的坑:配置第一台客戶端在服務端所有日志服務端都正常能接收到,后面配置的幾台只能收到catalina.out日志,其它日志死活不行,配置檢查了很多遍,來回測試了很多遍,然后花了很長時間看官網文檔,始終沒有找到原因。在快要放棄的時候發現服務端配置文件一個規律,能接收到日志的tag定義的比較短,不能接收的tag定義的字符串都很長。之后隨便找了一台,將tag改短,重啟服務后果然收到了日志。真是坑。。如果一開始定義的tag也比較長,估計就沒這么幸運發現問題所在了。

轉自

Rsyslog日志服務搭建 - K‘e0llm - 博客園
https://www.cnblogs.com/Eivll0m/p/6700828.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM