ELK-使用logstash-output-zabbix插件实现日志通过zabbix告警

实现的效果:elk收集上来的日志中含有报错时(例如error等),logstash过滤出来将这部分日志打到zabbix,再通过zabbix结合钉钉或者企业微信告警。

在这里插入图片描述

要在已有elk、zabbix等平台,且日志已经收集到elk的前提下再通过logstash-output-zabbix插件去实现日志zabbix告警。


logstash-output-zabbix插件安装

在部署有logstash的机器上,安装logstash-output-zabbix插件

查看已安装的插件
/usr/share/logstash/bin/logstash-plugin list
在这里插入图片描述

安装logstash-output-zabbix插件
/usr/share/logstash/bin/logstash-plugin install logstash-output-zabbix
在这里插入图片描述


编辑logstash配置文件

安装好插件后,就可以配置logstash了,配置文件的位置如下
在这里插入图片描述

我这里以收集交换机的日志为例
vim /etc/logstash/conf.d/switch_zabbix.conf

主要分为三个部分
input输入源,配置日志信息的来源
filter过滤器,将日志处理成想要的格式
output输出源,将日志发送到指定的位置

input { #输入源,指定日志数据的来源
  redis {
    host => "192.168.30.30" #指定redis的服务器
    port => "6379"
    db => "0" #制定对应的数据库
    key => "192.168.10.10_log" #指定对应的键
    data_type => "list" #列表形式
  }
}

filter { #过滤器
  grok {
          match => { "message" => "%{SYSLOGTIMESTAMP:message_timestamp} %{SYSLOGHOST:hostname} %{DATA:message_program}(?:\[%{POSINT:message_pid}\])?: %{GREEDYDATA:message_content}" }
       }  #通过grok对message字段的数据进行字段划分,将message字段划分为5个子字段。其中,message_content字段会在output中用到。
  mutate {
    add_field => ["[zabbix_key]","oslogs"] #自定义新增的字段,字段名是zabbix_key,值为oslogs,zabbix中会用到
    add_field => ["[zabbix_host]","192.168.10.10"] #自定义新增的字段,主机名与zabbix web中“主机名称”需要保持一致
    remove_field => ["@version","message"] #删除不需要的字段
    convert => ["upstream_time", "float"] #将时间进行转换,方便后期使用
    convert => ["request_time", "float"]
  }
}

output { #输出源
   stdout {}  
    if [message_content]  =~ /(changed to up|changed to down)/ {  #定义在message_content字段中,需要过滤的关键字信息,当message_content字段中出现给出的这些关键字,那么就将这些信息发送给zabbix。
       zabbix {
                            zabbix_host =>"[zabbix_host]" #这个zabbix_host对应上面filter部分中给出的值
                            zabbix_key =>"[zabbix_key]" #这个zabbix_key对应上面filter部分中给出的值
                            zabbix_server_host =>"192.168.20.20" #zabbix服务的IP地址
                            zabbix_server_port =>"10051"  #zabbix端口号
                            zabbix_value =>"message_content"  #指定要传给zabbix监控项item(oslogs)的值, zabbix_value默认的值是"message"字段,因为上面我们已经删除了"message"字段,因此,这里需要重新指定,根据上面filter部分对"message"字段的内容划分,这里指定为"message_content"字段,其实,"message_content"字段输出的就是服务器上具体的日志内容。

      }
    }

}

添加完配置文件后,重启logstash
systemctl restart logstash


在zabbix上创建模板

在这里插入图片描述

创建监控项

这里的键值就是前面logstash配置文件中自定义的值
在这里插入图片描述

创建触发器

在这里插入图片描述

根据模板创建主机
在这里插入图片描述

查看最新数据,验证日志是否打到了zabbix

可以看到在logstash中定义的关键字信息相关的日志已经被发送到zabbix

 if [message_content]  =~ /(changed to up|changed to down)/ {  
       zabbix {
                            zabbix_host =>"[zabbix_host]" 
                            zabbix_key =>"[zabbix_key]" 
                            zabbix_server_host =>"192.168.20.20"
                            zabbix_server_port =>"10051" 
                            zabbix_value =>"message_content" 
                       
                       }
             }

在这里插入图片描述

后续工作,依据具体使用需求将zabbix告警发送到钉钉或企业微信即可。


参考文章:https://blog.csdn.net/wanger5354/article/details/122620615?fromshare=blogdetail&sharetype=blogdetail&sharerId=122620615&sharerefer=PC&sharesource=Wangjiachenga&sharefrom=from_link

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐