ryslog工作流佳魔,輸入-處理-輸出鸿市。linux系統(tǒng)自帶的日志收集工具嘁酿,依賴守護(hù)進(jìn)程。在linux系統(tǒng)中牙肝,/var/log/message,/var/log/cron,都是系統(tǒng)通過(guò)rsyslog收集的唉俗。我看了好多文章,都測(cè)試了一遍配椭,整理了一下虫溜。
模塊
模塊modules,比如imfile.so,這個(gè)地方可以通過(guò)lsof |grep rsyslog來(lái)查看
module(load="imfile")#如果需要讀文件讀時(shí)候,需要加載imfile模塊
module(load="imtcp") # 開啟tcp,
input(type="imtcp" port="514")
規(guī)則:
facility.severity? ? target
local5.*? @@remote-host:514 ##local5下的所有類型通過(guò)tcp遠(yuǎn)程輸出
*.info;mail.none;authpriv.none;cron.none;local5.none;local6.none/var/log/messages##所有的info存入/var/log/message,但是cron,local5,local6不存儲(chǔ)股缸,這里是為了防止自定義的日志衡楞,寫入message,? 導(dǎo)致文件過(guò)大
facility
facility可以理解成日志類型,
auth #pam產(chǎn)生的日志敦姻,認(rèn)證日志
authpriv #ssh,ftp等登錄信息的驗(yàn)證信息瘾境,認(rèn)證授權(quán)認(rèn)證
cron #時(shí)間任務(wù)相關(guān)
kern #內(nèi)核
lpr #打印
mail #郵件
mark(syslog) #rsyslog服務(wù)內(nèi)部的信息,時(shí)間標(biāo)識(shí)
news #新聞組
user #用戶程序產(chǎn)生的相關(guān)信息
uucp #unix to unix copy, unix主機(jī)之間相關(guān)的通訊
local 1~7 #自定義的日志設(shè)備,這個(gè)地方我們業(yè)務(wù)自定義坎背,測(cè)試期間用的local5
serverity,
debug #有調(diào)式信息的,日志信息最多
info #一般信息的日志寄雀,最常用
notice #最具有重要性的普通條件的信息
warning, warn #警告級(jí)別
err, error #錯(cuò)誤級(jí)別,阻止某個(gè)功能或者模塊不能正常工作的信息
crit #嚴(yán)重級(jí)別陨献,阻止整個(gè)系統(tǒng)或者整個(gè)軟件不能正常工作的信息
alert #需要立刻修改的信息
emerg, panic #內(nèi)核崩潰等嚴(yán)重信息
properties,
屬性盒犹,可以理解為內(nèi)置變量,
msg #匹配message中的msg部分
rawmsg #從socket收到的信息眨业,一般用來(lái)debug
rawmsg-after-pri #和rawmsg類似急膀,但是syslog PRI被移除了
hostname #message的主機(jī)名
source #HOSTNAME的別名
fromhost #message來(lái)源的主機(jī)名,一般是用在relay chain中
fromhost-ip #同fromhost龄捡,不過(guò)獲取的是ip卓嫂,這個(gè)地方在f
syslogtag #message的tag
programname #是tag的靜態(tài)部分,例如tag是named[123456]聘殖,則programname是named晨雳,這個(gè)地方在php生成的消息的時(shí)候,會(huì)帶[]這種字符奸腺,做模板最好用這個(gè)
表達(dá)式:
contains 屬性包含指定的字符串
isequal 屬性等于指定的字符串
startswith 屬性由指定字符串開始
regex POSIX BRE 正則表達(dá)式
ereregex POSIX ERE 正則表達(dá)式
:fromhost-ip, isequal, "127.0.0.1" ?TestFormat
if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog
模板
消息格式
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat ## 默認(rèn)<接收內(nèi)容的時(shí)間> <發(fā)送者的hostname> <$InputFileTag> <原始消息%msg%>
$template MsgFormat,"%msg%\n" ##只保留原始消息
###模板餐禁,給不同的類型配置模板,根據(jù)rule規(guī)則過(guò)濾突照,這個(gè)地方要和client約定好
template(name="NgAccessFormat" type="string"
string= "/data/log/ngaccessremote/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%.log"
)
template(name="NgErrorFormat" type="string"
string= "/data/log/ngerrorremote/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%.log"
)
template(name="PhpfpmFormat" type="string"
string= "/data/log/phpfpmremote/%fromhost-ip%/%$YEAR%/%$MONTH%/%$DAY%.log"
)
###這里要保證不同的日志不要命中同一個(gè)
:syslogtag,startswith,"errorng" ?NgErrorFormat;MsgFormat
:syslogtag,startswith,"access" ?NgAccessFormat;MsgFormat
:syslogtag,startswith,"phpfpm" ?PhpfpmFormat;MsgFormat
:syslogtag,startswith,"codelog" ?CodeLogFormat;MsgFormat
權(quán)限
###設(shè)置生成的文件權(quán)限帮非,默認(rèn)是rwx------
$FileOwner root
$FileGroup root
$DirCreateMode 0755
$FileCreateMode 0755
$Umask 0022
隊(duì)列
這個(gè)隊(duì)列是對(duì)output而言,在輸出數(shù)據(jù)對(duì)時(shí)候讹蘑,加緩存隊(duì)列末盔,可以保證消息發(fā)送對(duì)端失敗對(duì)情況緩存起來(lái)。比如tcp遠(yuǎn)程發(fā)送消息的時(shí)候座慰,對(duì)方宕機(jī)陨舱,可以使消息緩存,網(wǎng)絡(luò)恢復(fù)就可以繼續(xù)發(fā)出版仔。緩存分內(nèi)存隅忿,磁盤,還有內(nèi)存+磁盤邦尊。
direact:沒有隊(duì)列背桐,默認(rèn)情況
disk:磁盤,這個(gè)情況下蝉揍,如果傳輸失敗會(huì)在workdirectory下看到相應(yīng)記錄链峭,我在測(cè)試的時(shí)候,把server的端口關(guān)掉又沾,就可以模擬網(wǎng)絡(luò)失敗弊仪∥蹩ǎ可以通過(guò)tcpdump抓包來(lái)看。
LinkedList,FixedArray 內(nèi)存
$WorkDirectory /var/lib/rsyslog
$ActionQueueType LinkedList
$ActionQueueFileName local5 ###定義內(nèi)存励饵,同時(shí)制定名字就是內(nèi)存+緩存的方式
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
local5.* @@ip:514
配置
在配置機(jī)器的時(shí)候驳癌,要注意兩個(gè)地方。
1役听,selinux狀態(tài)颓鲜,不要是mac模式,否則syslogd進(jìn)程沒辦法讀取imfile里定義的文件典予,即使777也沒用
2甜滨,如果需要tcp 或者udp,而且防火墻開了,記得開一下端口瘤袖。telnet 一下
3衣摩,如果使用了內(nèi)存加磁盤的方式,注意一下默認(rèn)內(nèi)存限制捂敌。
官網(wǎng)地址
http://www.rsyslog.com/doc/v8-stable/
后續(xù)
這個(gè)只是完成了日志的收集艾扮,后面是用通用的elk,還是其他工具,待研究占婉。
這個(gè)rsyslog是基于tcp,查網(wǎng)上資料都說(shuō)帶寬性能好栏渺,logstash耗性能,后續(xù)會(huì)繼續(xù)壓測(cè)锐涯,和性能測(cè)試磕诊。