第1章 簡介
1.1 Rsyslog介紹
rsyslog是比syslog功能更強大的日誌記錄系統,可以將日誌輸出到文件,數據庫和其它程序。
ryslog 是一個快速處理收集系統日誌的程序,提供了高性能、安全功能和模塊化設計。rsyslog 是syslog 的升級版,它將多種來源輸入輸出轉換結果到目的地,並可定製和過濾、篩選。據官網介紹,現在可以處理100萬條信息。
特性:
1、可以直接將日誌寫入到數據庫。
2、日誌隊列(內存隊列和磁盤隊列)。
3、靈活的模板機制,可以得到多種輸出格式。
4、插件式結構,多種多樣的輸入、輸出模塊。
5、可以把日誌存放在Mysql ,PostgreSQL,Oracle等數據庫中
http://www.cnblogs.com/Eivll0m/p/6700828.html
LogAnalyzer介紹
LogAnalyzer 是一款syslog日誌和其他網絡事件數據的Web前端。它提供了對日誌的簡單瀏覽、搜索、基本分析和一些圖表報告的功能。數據可以從數據庫或一般的syslog文本文件中獲取,所以LogAnalyzer不需要改變現有的記錄架構。基於當前的日誌數據,它可以處理syslog日誌消息,Windows事件日誌記錄,支持故障排除,使用戶能夠快速查找日誌數據中看出問題的解決方案。
LogAnalyzer 獲取客戶端日誌會有兩種保存模式,一種是直接讀取客戶端/var/log/目錄下的日誌並保存到服務端該目錄下,一種是讀取後保存到日誌服務器數據庫中,推薦使用後者。
LogAnalyzer和LogZilla是分析系統日誌,並用web界面展示的的工具,一般只用在syslog,syslog-ng,rsyslog日誌系統中
LogAnalyzer 採用php開發,所以日誌服務器需要php的運行環境,本文采用LNMP。
1.2 Rsyslog工作流程
簡單的來說:首先數據通過輸入模塊進入主隊列,然後經由過濾條件分解到各個子隊列,最後交給輸出模塊。
1.3Rsyslog日誌服務器的優勢
1、日誌統一,集中式管理
2、日誌實時傳送到一個更加安全的遠端服務器上,真正記錄用戶行爲,使日誌的2次更改可能性大大降低,從而能夠對日誌進行真實回放,便於問題追蹤。
第2章 系統環境
Rsyslog Server OS:CentOS 6.8
Rsyslog Server IP:10.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 OS:RHEL 6.4
Rsyslog Client IP:10.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.
使用yum對rsyslog進行升級(需要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端口接收使用UDP和TCP協議轉發過來的日誌
服務端支持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裏面配置如下信息:
注意:開啓udp、tcp協議
#指定使用設備名稱和日誌級別對系統日誌進行過濾,日誌文件名是年月日時.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過濾tag爲catalina-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端口接收使用UDP和TCP協議轉發過來的日誌
#$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