Logstash错误日志发送到Zabbix并报警
1.安装logstash-output-zabbix
logstash-output-zabbix
是一个社区维护的插件,它默认不安装,但是它安装起来也很容易,直接在logstash中运行即可:
./bin/logstash-plugin install logstash-output-zabbix
对于内网环境,我们可以将插件打包然后在内网环境进行本地安装即可:
# ./bin/logstash-plugin prepare-offline-pack --overwrite --output /root/logstash-output-zabbix.zip logstash-output-zabbix
Offline package created at: /root/logstash-output-zabbix.zip
You can install it with this command `bin/logstash-plugin install file:///root/logstash-output-zabbix.zip`
2.创建一个logstash测试文件,测试到zabbix的输出是否在正常
input {
file {
path => "/home/elk/test.log"
start_position => "beginning"
add_field => [ "[@metadata][zabbix_key]" , "logstash" ]
add_field => [ "[@metadata][zabbix_host]" , "node1" ]
}
}
output {
stdout { codec => rubydebug }
zabbix {
zabbix_host => "[@metadata][zabbix_host]"
zabbix_key => "[@metadata][zabbix_key]"
zabbix_server_host => "192.168.20.200"
zabbix_server_port => "10051"
zabbix_value => "message"
}
}
3.配置zabbix
新建模板:logstash-output-zabbix
,新建es群组;
在模板中创建监控项,类型选择zabbix采集器,信息类型设置为文本,键值和logstash配置文件中的zabbix_key
对应
添加一个名为node1的主机,名称需要和logstash配置文件中的zabbix_host
对应,添加logstash-output-zabbix模板
直接指定现有主机会出现如下问题:
[WARN ][logstash.outputs.zabbix ] Zabbix server at 192.168.20.200 rejected all items sent. {:zabbix_host=>”node1”}
4.查看zabbix获取到最新数据
echo "text" >>test.log
5.自定义字段来区分来自不同主机不同服务的错误日志
以收集一台服务器上不同服务的错误日志为例:
filebeat配置如下:对每个日志添加一个能区分不同服务的字段
filebeat.prospectors:
- type: log
enabled: true
paths:
- /home/elk/server1_error.log
fields:
test: server1_error
- type: log
enabled: true
paths:
- /home/elk/server2_error.log
fields:
test: server2_error
logstash配置如下所示:
添加一个messager
字段,格式为%{[beat][name]}-%{[fields][test]}-%{message}
,如果不想在报警邮件中包含错误日志内容设置为%{[beat][name]}-%{[fields][test]}
即可。
input {
beats {
port => "5044"
}
}
filter {
mutate{
add_field => [ "[@metadata][zabbix_key]" , "logstash" ]
add_field => [ "[@metadata][zabbix_host]" , "node1" ]
add_field => [ "messager","%{[beat][name]}-%{[fields][test]}-%{message}" ]
#remove_field =>["message"]
}
}
output {
stdout { codec => rubydebug }
zabbix {
zabbix_host => "[@metadata][zabbix_host]"
zabbix_key => "[@metadata][zabbix_key]"
zabbix_server_host => "192.168.20.200"
zabbix_server_port => "10051"
zabbix_value => "messager"
}
}
通过
beat.name
来区分不同主机,通过fields.test
字段区分不同的服务日志
6.测试
echo "test1" >>server1_error.log
echo "test2" >>server2_error.log
7.设置触发器
思路:logstash收集服务日志,如果有错误日志会将错误信息发送到zabbix进行报警通知,所以触发器这里可以设定有有数据就报警。通过字符串长度进行判断。
勾选多重问题事件生成可以实现每条数据的邮件报警
邮件报警: