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邮件告警设置方式,可以自行百度