1、應用場景
將Nginx日志中,所有報500錯誤的信息,通過Logstash篩選之后,將數據發送到zabbix並接收,Zabbix接收消息之后,通過觸發器進行郵件報警。
2、安裝logstash-output-zabbix
logstash-output-zabbix是一個社區維護的插件,它默認不安裝,但是它安裝起來也很容易,直接在logstash中運行即可:
bin/logstash-plugin install logstash-output-zabbix
3、修改Logstash配置文件
在Logstash的config目錄中創建一個nginx.conf的文件:
input {
beats {
port => 5044
}
}
filter {
if "wxself.gtafe.com" in [tags] {
grok {
match => { "message" => "%{IP:remote_addr} (?:%{DATA:remote_user}|-) \[%{HTTPDATE:timestamp}\] %{IPORHOST:http_host} %{DATA:request_method} %{DATA:request_uri} %{NUMBER:status} (?:%{NUMBER:body_bytes_sent}|-) (?:%{DATA:request_time}|-) \"(?:%{DATA:http_referer}|-)\" \"%{DATA:http_user_agent}\" (?:%{DATA:http_x_forwarded_for}|-) \"(?:%{DATA:http_cookie}|-)\""}
}
mutate {
convert => ["status","integer"]
convert => ["body_bytes_sent","integer"]
convert => ["request_time","float"]
add_field => [ "[@metadata][zabbix_key]" , "logstash-api-access" ] 在消息中添加zabbix中item的key值
add_field => [ "[@metadata][zabbix_host]" , "EIP_weixin" ] 在消息中添加zabbix中的host值,主機名
}
geoip {
source=>"remote_addr"
}
date {
match => [ "timestamp","dd/MMM/YYYY:HH:mm:ss Z"]
}
useragent {
source=>"http_user_agent"
}
}
}
output {
if "wxself.gtafe.com" in [tags] {
elasticsearch {
hosts => ["10.1.129.101:9200"]
index => "logstash-wxself.gtafe.com_10.1.134.60"
user => 'elastic'
password => '123456'
}
}
if [status] == 500 { 過濾Nginx日志中status狀態是500的信息
zabbix {
zabbix_host => "[@metadata][zabbix_host]"
zabbix_key => "[@metadata][zabbix_key]"
zabbix_server_host => "10.1.134.220"
zabbix_server_port => "10051"
zabbix_value => "message"
}
}
stdout { codec => rubydebug }
}
4、配置Zabbix
在Zabbix的主機中創建一個監控項:
注意:監控項中的類型,需要設置成Zabbix采集器,即Zabbix trapper
如果Nginx日志中有500錯誤產生時,則Logstash會把信息發送給Zabbix
配置觸發器:
觸發器配置完成后,如果3分鍾內有500的日志信息接收到,則會觸發事件
具體Zabbix郵件告警設置方式,可以自行百度