rsyslog日誌服務器搭建

第1章 簡介

1.1 Rsyslog介紹

  rsyslog是比syslog功能更強大的日誌記錄系統,可以將日誌輸出到文件,數據庫和其它程序。

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

特性:

1、可以直接將日誌寫入到數據庫。

   2、日誌隊列(內存隊列和磁盤隊列)。

   3、靈活的模板機制,可以得到多種輸出格式。

   4、插件式結構,多種多樣的輸入、輸出模塊。

   5、可以把日誌存放在Mysql PostgreSQLOracle等數據庫中

http://www.cnblogs.com/Eivll0m/p/6700828.html

LogAnalyzer介紹

LogAnalyzer 是一款syslog日誌和其他網絡事件數據的Web前端。它提供了對日誌的簡單瀏覽、搜索、基本分析和一些圖表報告的功能。數據可以從數據庫或一般的syslog文本文件中獲取,所以LogAnalyzer不需要改變現有的記錄架構。基於當前的日誌數據,它可以處理syslog日誌消息,Windows事件日誌記錄,支持故障排除,使用戶能夠快速查找日誌數據中看出問題的解決方案。

LogAnalyzer 獲取客戶端日誌會有兩種保存模式,一種是直接讀取客戶端/var/log/目錄下的日誌並保存到服務端該目錄下,一種是讀取後保存到日誌服務器數據庫中,推薦使用後者。

LogAnalyzerLogZilla是分析系統日誌,並用web界面展示的的工具,一般只用在syslog,syslog-ng,rsyslog日誌系統中

LogAnalyzer 採用php開發,所以日誌服務器需要php的運行環境,本文采用LNMP

1.2 Rsyslog工作流程


簡單的來說:首先數據通過輸入模塊進入主隊列,然後經由過濾條件分解到各個子隊列,最後交給輸出模塊。

1.3Rsyslog日誌服務器的優勢

1、日誌統一,集中式管理 

2、日誌實時傳送到一個更加安全的遠端服務器上,真正記錄用戶行爲,使日誌的2次更改可能性大大降低,從而能夠對日誌進行真實回放,便於問題追蹤。

 

 

 

 

第2章 系統環境


Rsyslog Server OSCentOS 6.8

Rsyslog Server IP10.10.16.253

Rsyslog 版本:rsyslog-8.30.0-8.el6.i686

LogAnalyzer 版本:LogAnalyzer 3.6.5 (v3-stable)

防火牆已關閉/iptables:Firewall is not running.

SELINUX=disabled

Rsyslog Client OSRHEL 6.4

Rsyslog Client IP10.10.16.254

第3章 實踐部署

3.1 升級Rsyslog

操作系統是Centos6.8,默認安裝的Rsyslog版本是5.8.10,可通過rsyslogd -v命令查看:

# rsyslogd -v

rsyslogd 5.8.10, compiled with:

         FEATURE_REGEXP:                                   Yes

         FEATURE_LARGEFILE:                   No

         GSSAPI Kerberos 5support:              Yes

         FEATURE_DEBUG (debugbuild, slow code):  No

         32bit Atomicoperations supported:  Yes

         64bit Atomicoperations supported:  Yes

         RuntimeInstrumentation (slow code):      No

See http://www.rsyslog.com for more information.

使用yumrsyslog進行升級(需要root權限)

# cd /etc/yum.repos.d

# wgethttp://rpms.adiscon.com/v8-stable/rsyslog.repo   

# yum update rsyslog

升級完成之後,版本爲8.30.0

# rsyslogd-v

rsyslogd 8.30.0, compiled with:

         PLATFORM:                                x86_64-redhat-linux-gnu

         PLATFORM(lsb_release -d):            

         FEATURE_REGEXP:                                   Yes

         GSSAPIKerberos 5 support:              No

         FEATURE_DEBUG(debug build, slow code):  No

         32bitAtomic operations supported:  Yes

         64bitAtomic operations supported:  Yes

         memoryallocator:                      systemdefault

         RuntimeInstrumentation (slow code):      No

         uuidsupport:                                Yes

         Numberof Bits in RainerScript integers: 64

See http://www.rsyslog.com for more information.

注意:Rsyslog服務端和客戶端都進行升級。

 

3.2 服務端配置

開啓相關日誌模塊

# vi /etc/rsyslog.conf

$ModLoad immark   #immark是模塊名,支持日誌標記

$ModLoad imudp   #imupd是模塊名,支持udp協議

$UDPServerRun 514   #允許514端口接收使用UDPTCP協議轉發過來的日誌 

服務端支持rsyslog-mysql模塊,可開啓UDP服務端口獲取網內其他LINUX系統日誌

# vi /etc/rsyslog.conf

$ModLoad ommysql

*.* :ommysql:localhost,Syslog,rsyslog,123456

#### MODULES #### 下添加上面兩行。

說明:localhost 表示本地主機,Syslog 爲數據庫名,rsyslog 爲數據庫的用戶,123456爲該用戶密碼。

重啓rsyslog 服務

# /etc/init.d/rsyslog restart

3.3 客戶端配置

  • 防火牆配置

如果啓用了iptables防火牆,注意開放默認的514端口,也可以配置文件使用其他端口。

iptables -A INPUT -m state --state NEW -m udp -pudp -i eth0 --dport 514 -j ACCEPT

iptables -A INPUT -m state --state NEW -m tcp -ptcp -i eth0 --dport 514 -j ACCEPT

說明:rsyslog可以通過tcp協議傳輸日誌,也可以通過udp協議傳輸。有些服務器我採用的tcp協議,有些用了udp協議,想對比看看哪種更適合我們的環境,因此所有服務器都建立了以上兩條規則。

  • 配置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") # needs to be donejust once

input(type="imtcp" port="514")配置rsyslog 客戶端發送本地日誌到服務端

# vi /etc/rsyslog.conf

*.*@@10.10.16.253:254

行尾新增上面這行內容,即客戶端將本地日誌發送到服務器。

重啓rsyslog 服務

# /etc/init.d/rsyslog restart

編輯/etc/bashrc,將客戶端執行的所有命令寫入系統日誌/var/log/messages中。

# vi /etc/bashrc

在文件尾部增加一行

export PROMPT_COMMAND='{ msg=$(history 1 | { read xy; echo $y; });logger "[euid=$(whoami)]":$(who ami):[`pwd`]"$msg"; }'

設置其生效

# source /etc/bashrc

客戶端配置完畢。

3.4 測試rsyslog server是否可以正常接收client端日誌

Client 端測試:

輸入任何命令即可

Server端偵測:tailf /var/log/messages


說明接收正常,包括你重啓機器的一些Log都可以查到

這只是簡單的採集系統日誌,並不是我們想要的,以下介紹對tomcat日誌進行採集

3.5 利用rsyslog對非系統日誌進行遠程傳輸

在客戶端的/etc/rsyslog.conf添加如下信息

$ModLoad imfile # needs to be done just once 引入模板

# logstash - test - remote send file.測試遠程發送日誌

$InputFileName /usr/local/tomcat/logs/catalina.out#指定監控日誌文件

$InputFilePollInterval 10 #指定每10秒輪詢一次文件

$InputFileTag 10.10.16.254 #指定文件的tag,隨便寫即可

$InputFileStateFile /var/lib/rsyslog/10.10.16.254.log#指定狀態文件存放位置,如不指定會報錯。

$InputFileSeverity info #設置監聽日誌級別

$InputFileFacility local1 #指定設備

$InputRunFileMonitor #啓動此監控,沒有此項,上述配置不生效。

 

 

*.*                    @@10.10.16.253:514    #遠程發送源tcp協議遠程發送

代碼說明:

利用以上模板對客戶端內應用日誌進行監控,並將日誌文件每十秒掃描一次,發送至遠程服務器,可以在遠程服務器配置過濾條件,將日誌文件進行分級別保存。

修改完畢請重啓rsyslog/etc/init.d/rsyslog restart

在服務器端的/etc/rsyslog.conf裏面配置如下信息

注意:開啓udptcp協議

#指定使用設備名稱和日誌級別對系統日誌進行過濾,日誌文件名是年月日時.log

$templateRemoteSyslogfacility-textSys,"/data/log/%syslogfacility-text%/%syslogseverity-text%/%$year%_%$month%_%$day%_%$hour%.log"

:syslogfacility-text, !isequal, "local1"?RemoteSyslogfacility-textSys

 

#指定使用設備名稱、日誌tag信息和日誌級別對系統日誌進行過濾,日誌文件名是年月日時.log

$templateRemoteSyslogfacility-textApp,"/data/log/%syslogfacility-text%/%syslogtag%/%syslogseverity-text%/%$year%_%$month%_%$day%_%$hour%.log"

:syslogfacility-text,isequal, "local1" ?RemoteSyslogfacility-textApp

#重啓rsyslog,在/data/log目錄下可以看到生成了部分客戶端的日誌文件

[root@yd ~]# tree /data/log/

/data/log/

├── cron

│  └── info

│       └── 2017_10_26_16.log

├── kern

│  └── info

│       ├── 2017_10_26_15.log

│       └── 2017_10_26_16.log

├── local1

│  └── 10.0.0.50

│       └── info

│           ├── 2017_10_26_15.log

│           └── 2017_10_26_16.log

├── messages

├── syslog

上述配置通過模板指定過濾條件,過濾條件可以自己指定。

通過啓動和關閉tomcat,在server端可以實時看到client端實時日誌輸出情況:

tailf /var/log/messages

tailf/data/log/local1/10.0.0.50/info/2017_10_26_16.log   #也可以看到日誌輸出同上

 

客戶端和服務端配置文件展示:

服務端

[root@yd ~]# grep -v "^#"/etc/rsyslog.conf | grep -v "^$"

module(load="imuxsock") # providessupport for local system logging (e.g. via logger command)

module(load="imklog")   # provides kernel logging support(previously done by rklogd)

module(load="imudp") # needs to be donejust once

input(type="imudp" port="514")

module(load="imtcp") # needs to be donejust once

input(type="imtcp" port="514")

$templateRemoteSyslogfacility-textSys,"/data/log/%syslogfacility-text%/%syslogseverity-text%/%$year%_%$month%_%$day%_%$hour%.log"

:syslogfacility-text, !isequal, "local1"?RemoteSyslogfacility-textSys

$templateRemoteSyslogfacility-textApp,"/data/log/%syslogfacility-text%/%syslogtag%/%syslogseverity-text%/%$year%_%$month%_%$day%_%$hour%.log"

:syslogfacility-text, isequal, "local1"?RemoteSyslogfacility-textApp

$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat

$IncludeConfig /etc/rsyslog.d/*.conf

*.info;mail.none;authpriv.none;cron.none                /var/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

客戶端

[root@jenkins logs]# grep -v "^#"/etc/rsyslog.conf | grep -v "^$"

module(load="imuxsock") # providessupport for local system logging (e.g. via logger command)

module(load="imklog")   # provides kernel logging support(previously done by rklogd)

$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat

$IncludeConfig /etc/rsyslog.d/*.conf

*.info;mail.none;authpriv.none;cron.none                /var/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

$ModLoad imfile # needs to be done just once 引入模板

$InputFileName /usr/local/tomcat/logs/catalina.out#指定監控日誌文件

$InputFilePollInterval 10 #指定每10秒輪詢一次文件

$InputFileTag 10.10.16.254 #指定文件的tag,隨便寫即可

$InputFileStateFile/var/lib/rsyslog/10.10.16.254.log #指定狀態文件存放位置,如不指定會報錯。

$InputFileSeverity info #設置監聽日誌級別

$InputFileFacility local1 #指定設備

$InputRunFileMonitor #啓動此監控,沒有此項,上述配置不生效。

*.*                    @@10.10.16.253:514    #遠程發送源tcp協議遠程發送

注:修改之前一定對原文件進行備份

server端執行命令:

tailf /var/log/messages            或者   tailf /data/log/local1/ 2017_10_27_15.txt

在客戶端執行命令:

tailf `pwd`/localhost_access_log.2017-10-27.txt               

通過訪問瀏覽器可以查看日誌有輸出

客戶端:

 

第4章 收集多臺多tomcat應用日誌

4.1 客戶端配置

1、防火牆配置/etc/sysconfig/iptables

如果啓用了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 -ptcp -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="10.10.16.224"

port="514" #端口

protocol="tcp" #使用協議

queue.type="linkedList" #使用異步處理

queue.spoolDirectory="/app/wangyouyao/rsyslog"#隊列目錄

queue.fileName="remoteQueue_10_10_16_225"#隊列名稱

queue.maxDiskSpace="5g" #隊列佔最大磁盤空間

queue.saveOnShutdown="on" #保存內存數據如果rsyslog關閉

action.resumeRetryCount="-1" #無限重試插入失敗

    )

stop

}

3、新增子配置文件:/etc/rsyslog.d/tomcat-8080.conf

[root@web rsyslog]# cat/etc/rsyslog.d/tomcat-8080.conf

$WorkDirectory/app/wangyouyao/rsyslog  #默認爲/var/lib/rsyslog,這裏可以自己定義

 

input(type="imfile"

        File="/usr/local/tomcat/logs/catalina.out"  #日誌路徑

       #StateFile="catalina.out-8080" #新版本中不需要設置

        Facility="local1"

        Severity="info"

       Tag="catalina-10.10.16.254-8080" #定義日誌標籤,重要,服務端根據這個標籤可以識別日誌

        PersistStateInterval="1" #回寫偏移量數據到文件間隔時間(),根據實際情況而定

        Ruleset="remote"#rsyslog.conf中定義的rule名稱

        )

 

#########################################################################

 

input(type="imfile"

       File="/usr/local/tomcat/logs/host-manager.2017-11-08.log"

        #StateFile="host-manage-8080"

        Facility="local2"

        Severity="info"

       Tag="channe-10.10.16.254-8080"

        PersistStateInterval="1"

        Ruleset="remote"

        )

 

#########################################################################

 

input(type="imfile"

       File="/usr/local/tomcat/logs/localhost_access_log.2017-11-08.txt"

        #StateFile="localhost-8080"

        Facility="local3"

        Severity="info"

       Tag="access-10.10.16.254-8080"

        PersistStateInterval="1"

        Ruleset="remote"

        )

【注意:】

根據實際情況,可以在/etc/rsyslog.d添加多個配置文件,如果服務器上面有兩個tomcat實例,因此還有一個配置文件是tomcat-8090.conf,跟上面類似,只是應用不同,日誌路徑,端口不同。

4、最後在/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文件中,不然的話日誌量大很容將/根目佔滿,後果可想而知。

4.2 服務端配置

編輯/etc/rsyslog.conf,去掉以下配置項前的註釋,如果沒有就添加該配置項。

$PreserveFQDN on #用於正確的獲取主機名,暫時應該沒用到

#$FileOwner wangyouyao #存儲的文件屬主

#$FileGroup app #文件屬主

$FileCreateMode 0644 #生成的文件權限

$DirCreateMode 0755 #生成的目錄權限

$Umask 0022

$PrivDropToUser root #可以刪除日誌的用戶

$PrivDropToGroup root #可以刪除日誌的用戶組

#### MODULES ####

 

module(load="imuxsock") # providessupport for local system logging (e.g. via logger command)

module(load="imklog")   # provides kernel logging support(previously done by rklogd)

#module(load"immark")  # provides --MARK-- message capability

 

# Provides UDP syslog reception

# for parameters seehttp://www.rsyslog.com/doc/imudp.html

module(load="imudp") # needs to be donejust once

input(type="imudp" port="514")

 

# Provides TCP syslog reception

# for parameters see http://www.rsyslog.com/doc/imtcp.html

module(load="imtcp"MaxSessions="500") # needs to be done just once

input(type="imtcp" port="514")

#以下爲部分配置

$template  SpiceTmpl,"%msg:2:$%\n" #定義一個模塊,去掉開頭的空格

$template  ChannelmanageCatalinaDynaFile,"/app/wangyouyao/rsyslog/%fromhost-ip%/channelmanage/catalina_%$YEAR%-%$MONTH%-%$DAY%.log"#>定義>文件存儲路徑及名稱,%%中間的爲變量

$template  ChannelmanageInfoDynaFile,"/app/wangyouyao/rsyslog/%fromhost-ip%/channelmanage/channelmanage_%$YEAR%-%$MONTH%-%$DAY%.log"#定義文件存儲路徑及名稱,%%中間的爲變量

$template  ChannelmanageAcessDynaFile,"/app/wangyouyao/rsyslog/%fromhost-ip%/channelmanage/access_%$YEAR%-%$MONTH%-%$DAY%.log"

:rawmsg,contains,"catalina-10.10.16.254-8080"?ChannelmanageCatalinaDynaFile;SpiceTmpl#contains過濾tagcatalina-10.139.54.53-8080>志存>儲到ChnnelmanageCatalinaDynaFile模板定義的日誌中去

:rawmsg,contains,"channe-10.10.16.254-8080"?ChannelmanageInfoDynaFile;SpiceTmpl

:rawmsg,contains,"access-10.10.16.254-8080"?ChannelmanageAcessDynaFile;SpiceTmpl

 

 

4.3 重啓服務,收集日誌

先重啓服務端Rsyslog,然後重啓客戶端。命令:

/etc/init.d/rsyslog restart

服務端會生成日誌目錄及日誌,當然首次會比較慢,有一個傳輸的過程。

客戶端/app/wangyouyao/rsyslog目錄下回發現傳輸的狀態文件和隊列文件

[root@web rsyslog]# ll

total 8

-rw------- 1 root root 271 Nov  3 16:58imfile-state:-usr-local-tomcat-logs-catalina.out

-rw------- 1 root root 292 Nov  3 17:00 imfile-state:-usr-local-tomcat-logs-localhost_access_log.2017-11-03.txt

state文件以imfile-state:開頭,後面爲日誌路徑,路徑中的/-替代。

[root@db01 ~]# tree /app/wangyouyao/rsyslog/

/app/wangyouyao/rsyslog/

└──10.10.16.254

    └── channelmanage

        ├── access_2017-11-07.log

        ├── access_2017-11-08.log

        ├── catalina_2017-11-07.log

        └── catalina_2017-11-08.log

 

2directories, 4 files

 

服務端配置文件有一個規律,能接收到日誌的tag定義的比較短,不能接收的tag定義的字符串都很長。通過將tag改短,重啓服務後就能收到了日誌。

通過不斷刷新瀏覽器,可以看到服務端業務成功日誌收集:tailf /var/log/messages


  • 通過修改客戶端/etc/rsyslog.d/tomcat-8080文件可以自定義針對不同目錄下的日誌文件進行收集


 

第5章 Rsyslog配置文件詳解

#### MODULES 日誌的模塊####

$ModLoad imuxsock   #imuxsock是模塊名,支持本地系統日誌的模塊

$ModLoad imklog     #imklog是模塊名,支持內核日誌的模塊

#module(load="imfile")   #文本文件輸入模塊,提供轉換任何標準輸入文件爲一個syslog消息(客)

#$ModLoad immark    #immark是模塊名,支持日誌標記

#$ModLoad imudp     #imupd是模塊名,支持udp協議

#$UDPServerRun 514  #允許514端口接收使用UDPTCP協議轉發過來的日誌

#$ModLoad imtcp     #imtcp是模塊名,支持tcp協議

#$InputTCPServerRun 514

#### GLOBAL DIRECTIVES ####定義全局日誌格式的指令

$ActionFileDefaultTemplateRSYSLOG_TraditionalFileFormat #定義日誌格式默認模板

$IncludeConfig /etc/rsyslog.d/*.conf   #載入rsyslog.d文件中所有以conf結尾的文件

#### RULES ####

*.info;mail.none;authpriv.none;cron.none    /var/log/messages

#####記錄所有日誌類型的info級別以及大於info級別的信息到/var/log/messages,但是mail郵件信息,authpriv驗證方面的信息和cron時間#任務相關的信息除外

authpriv.*             /var/log/secure

#####authpriv驗證相關的所有信息存放在/var/log/secure

mail.*                -/var/log/maillog

#####郵件的所有信息存放在/var/log/maillog; 這裏有一個-符號, 表示是使用異步的方式記錄, 因爲日誌一般會比較大

cron.*                /var/log/cron

####計劃任務有關的信息存放在/var/log/cron

*.emerg                * (*表示所有用戶)

###記錄所有的大於等於emerg級別信息, wall方式發送給每個登錄到系統的人

uucp,news.crit        /var/log/spooler

####記錄uucp,news.crit等存放在/var/log/spooler

local7.*              /var/log/boot.log

####本地服務器的啓動的所有日誌存放在/var/log/boot.log

###rsyslog.conf中日誌規則的定義的格式

facitlity.priority          Target

#facility: 日誌設備(可以理解爲日誌類型):

==============================================================

auth        #pam產生的日誌,認證日誌

authpriv    #ssh,ftp等登錄信息的驗證信息,認證授權認證

cron        #時間任務相關

kern        #內核

lpr         #打印

mail        #郵件

mark(syslog) #rsyslog服務內部的信息,時間標識

news        #新聞組

user        #用戶程序產生的相關信息

uucp        #unix to unix copy, unix主機之間相關的通訊

local 1~7   #自定義的日誌設備

===============================================================

#priority: 級別日誌級別:

=====================================================================

debug           #有調式信息的,日誌信息最多

info            #一般信息的日誌,最常用

notice          #最具有重要性的普通條件的信息

warning, warn   #警告級別

err, error      #錯誤級別,阻止某個功能或者模塊不能正常工作的信息

crit            #嚴重級別,阻止整個系統或者整個軟件不能正常工作的信息

alert           #需要立刻修改的信息

emerg, panic    #內核崩潰等嚴重信息

###從上到下,級別從低到高,記錄的信息越來越少,如果設置的日誌內性爲err,則日誌不會記錄比err級別低的日誌,只會記錄比err更高級別的日誌,也包括err本身的日誌。

=====================================================================

Target

  #文件, /var/log/messages

  #用戶, root*(表示所有用戶)

  #日誌服務器,@172.16.22.1

  #管道        | COMMAND

Lognanlyzer請參考:

http://blog.csdn.net/u010781856/article/details/47444485

http://www.cnblogs.com/mchina/p/linux-centos-rsyslog-loganalyzer-mysql-log-server.html

 

 

 


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