通過logstash過濾nginx-error日志,篩選日志中比較嚴(yán)重報(bào)錯(cuò),并進(jìn)行報(bào)警。
目前成都創(chuàng)新互聯(lián)公司已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、市中網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
由于網(wǎng)絡(luò)上很多帖子都是要么寫了怎么篩選報(bào)錯(cuò),要么就只翻譯了logstash-zabbix-output插件的使用說明,并沒有一個(gè)完整的配置,整個(gè)項(xiàng)目做完,整理出來供大家閱讀。
【軟件版本】
zabbix 版本:2.4.8
logstash 版本:2.4.0
JDK 版本: 1.8.0_101
【zabbix配置】
首先配置zabbix的item,使其能夠成功接收logstash發(fā)送過來的信息.
創(chuàng)建Template:“Configuration” -> “Templates” -> “Create template”
這里我對(duì)Template的名字叫“Log file check”
然后創(chuàng)建Application:“Create applicaton”
Application名字還叫“Log file check”
最后創(chuàng)建item:“Create item”:
注意四個(gè)地方:
Type 一定要選擇“Zabbix trapper”,否則無法接收logstash發(fā)送的信息;
Key 一定要寫正確,最好不要有空格,需要在logstash中配置;
Type of information 選擇 “Text”,因?yàn)槲覀鬟^來的值是一段報(bào)錯(cuò)日志,所以選擇文本;
Allowed hosts:允許傳送的主機(jī),一定要設(shè)定為logstash所在的主機(jī)。
【Logstash配置】
注:logstash的下載及安裝不介紹。
安裝目錄:/opt/logstash/
由于日志量并沒有達(dá)到上W級(jí),因此針對(duì)logstash進(jìn)行了一些優(yōu)化,降低了部分性能:
# vim /opt/logstash/bin/logstash LS_HEAP_SIZE=500m LS_JAVA_OPTS="-server -Xmx200m"
【安裝logstash-output-zabbix插件】
/opt/logstash/bin/logstash-plugin install logstash-output-zabbix
logstash 配置文件:
input {
file {
type => "error-log" # 指定類型,用于以后判斷操作
path => "/tmp/test.log" # 文件路徑
start_position => "beginning" # 文件開始位置
codec => multiline { # 使用多行匹配方式進(jìn)行過濾
pattern => "^\d{4}" # 以4個(gè)數(shù)字開頭的為第一行,
negate => true # 所有不以4個(gè)數(shù)字開頭的,均歸于上一行(下面what配置)
what => "previous"
}
}
}
filter {
grok {
match => {
message:\s+\n.*Code:(?\d+).*Message:(?.+)\n.*File:(?.+)\n.*Line:(?\s+\d+).*" # 對(duì)于匹配規(guī)則,還是要針對(duì)自己場(chǎng)景自己寫 } add_tag => [ "zabbix-sender" ] # 添加一個(gè)標(biāo)簽 add_field => [ # 設(shè)定agent主機(jī)的主機(jī)名和key的映射 "zabbix_host", "web01", # 主機(jī)名 "zabbix_key", "logstash" # 添加item時(shí),設(shè)定的key名稱 ]} if "_grokparsefailure" in [tags] { # 如果過濾報(bào)錯(cuò),那么移除報(bào)錯(cuò)標(biāo)簽,不進(jìn)行其他處理 mutate { remove_tag => "_grokparsefailure" } }
}
output { # 輸出配置
stdout { # 測(cè)試時(shí)可以開啟終端輸出
codec => rubydebug
#codec => json # 可以選擇json格式的輸出還是rubydebug格式的輸出
}
zabbix { # 發(fā)送給zabbix的配置
zabbix_host => "zabbix_host" # zabbix_host指上面映射的主機(jī),不能用ip
zabbix_key => "zabbix_key" # zabbix_key指上面映射的key,意思就
是發(fā)送給某主機(jī)的某key,值為zabbix_value
zabbix_server_host => "192.168.1.229" # zabbix server
zabbix_server_port => "10051" # zabbix server port 默認(rèn)為10051
zabbix_value => "Message" # 要發(fā)送的key值
}
}
如果需要進(jìn)行測(cè)試,可以在zabbix agent使用zabbix_sender進(jìn)行測(cè)試:
/opt/zabbix/sender -z zabbix-server -p port -s agentservername -k keyname -o keyvalue
所有配置完成后,可以在監(jiān)測(cè)日志文件中輸入一些測(cè)試數(shù)據(jù),并在zabbix web上查看是否正常出現(xiàn)數(shù)據(jù):
【配置報(bào)警】
“configuration” -> “Templates” -> “Triggers” -> “Create Trigger”:
Name:log error check
Expression:判斷獲取值的長(zhǎng)度是否為0,如果不為0,trigger為problem狀態(tài),發(fā)送報(bào)警
其他關(guān)于報(bào)警相關(guān)配置請(qǐng)自行某度······
參考資料:
http://blog.sina.com.cn/s/blog_7ba28b620102xw2w.html
https://www.elastic.co/guide/en/logstash/current/plugins-outputs-zabbix.html
https://www.zabbix.org/wiki/Docs/protocols/zabbix_sender/2.0