Logstash过滤日志发送到Zabbix并报警
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邮件告警设置方式,可以自行百度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!