vlambda博客
学习文章列表

【修改后重发】ELK日志平台:ELK按需将日志发送至Zabbix实现监控告警


之前发的的确实漏掉了oslogs的定义,感谢 渐行渐远 同学的反馈,修改后在此重新发布,希望对大家有所帮助。


一、 ELK与Zabbix

我们希望在收集日志的时候,能够将日志中警告、错误、失败等异常信息可以及时提取出来并告警,并第一时间通知运维人员,这样就可以第一时间进行故障排查及处理,也可以避免不必要的故障发生。ELK本身也可以设置邮件方式进行告警,但没有那么直观。如果结合Zabbix就可以更加直观明了实现异常日志实时告警。



二、Logstash中的Zabbix插件

Logstash有N多个插件,这里就用到了logstash-output-zabbix这个插件,最后通过zabbix的告警机制进行触发、告警。logstash-output-zabbix是一个社区维护的插件,默认没有在Logstash中安装,需要自己安装,直接在logstash中运行如下命令即可完成安装:

/usr/share/logstash/bin/logstash-plugin install logstash-output-zabbix

其中,yum安装的logstash,安装目录在这/usr/share/logstash,根据自己安装的实际路径进行修改即可


1、列出目前已经安装的插件

# 列出所有已安装的插件

/usr/share/logstash/bin/logstash-plugin list


# 列出已安装的插件及版本信息

/usr/share/logstash/bin/logstash-plugin list --verbose


# 列出包含namefragment的所有已安装插件

/usr/share/logstash/bin/logstash-plugin list "http"


# 列出特定组的所有已安装插件( input,filter,codec,output)

/usr/share/logstash/bin/logstash-plugin list --group input


2、安装插件

要安装某个插件,例如安装zabbix插件,可执行如下命令:

#/usr/share/logstash/bin/logstash-plugin install logstash-output-zabbix

Validating logstash-output-zabbix

Installing logstash-output-zabbix

Installation successful

注:要使用此命令安装插件,需要你的电脑可以访问互联网。此插件安装方法,会检索托管在公共存储库(RubyGems.org)上的插件,然后下载到本地机器并在Logstash安装之上进行自动安装。


3、插件更新

每个插件有自己的发布周期和版本更新,可以使用update子命令获得最新版本的插件。


# 将更新所有已安装的插件

/usr/share/logstash/bin/logstash-plugin update


# 将仅更新指定的插件

/usr/share/logstash/bin/logstash-plugin update logstash-output-zabbix


4、插件删除

如果要删除Logstash中插件,可执行如下命令,如删除了zabbix插件

/usr/share/logstash/bin/logstash-plugin remove logstash-output-zabbix


三、logstash-output-zabbix插件的使用

logstash-output-zabbix安装好之后,就可以在logstash配置文件中使用了,

下面是一个logstash-output-zabbix使用的例子:

zabbix {

       zabbix_host => "[zabbix_host]"

       zabbix_key => "[zabbix_key]"

       zabbix_server_host => "x.x.x.x"

       zabbix_server_port => "10051"

      zabbix_value => "message"

           }

注:

zabbix_host:表示Zabbix主机名字段名称。

zabbix_key:表示Zabbix项目键的值。

zabbix_server_port:表示Zabbix服务器开启的监听端口,默认值是10051。

zabbix_value:表示要发送给zabbix item监控项的值对应的字段名称,默认值是 "message"。


四、logstash和zabbix整合

通过对系统日志文件的监控,然后去过滤日志信息中的一些关键字,如ERR、error、ERROR、Failed、WARNING等,将日志中这些信息过滤出来,然后发至Zabbix上,最后,通过Zabbix的报警功能实现对带有关键字的日志告警。


1、配置logstash事件配置文件

手动创建一个logstash配置文件/etc/logstash/conf.d/elklog_to_zabbix.conf,这里将配置文件分成三个部分来介绍,首先是input部分:

input {

       file {

       path => ["/var/log/secure"]

       start_position => "beginning"

       }

}

input部分是从/var/log/secure文件中读取数据,start_position 表示从secure文件开头读取内容。


filter {

   if [message] =~ /(TokenElevationTypeDefault|Removed slice)/ {

     drop{}   # 丢弃message中包含这些关键字的行日志

   }


   if [fields][log_topic] == "system_log" {

        mutate {

           add_field => [ "[zabbix_key]","oslogs" ]

           add_field => [ "[zabbix_host]","%{[host][name]}" ]

           remove_field => "@version"  # 删除不需要的字段

         }

       }

}

注:这里加了判断,只针对“system_log”进行zabbix相关项的添加,也就是说只有这部分日志才有可能会通过zabbix报警。“system_log”是在日志发送端定义的标识。根据你的实际情况可以增加判断,也可以不增加判断。

remove_field是删除不需要的字段,因为日志太长,可以按实际需要删除掉不需要的字段来缩减日志。

  fields:

    log_topic: system_log


最后output部分,内容如下:

output {

        if [message] =~ /(Error|error|ERROR|FAILED|Failed|failed|错误|失败)/ {

           zabbix {

              zabbix_host => "[zabbix_host]"

              zabbix_key => "[zabbix_key]"

              zabbix_server_host => "x.x.x.x"

              zabbix_server_port => "10051"

              zabbix_value => "message"

                  }

         }

注:根据实际情况添加关键字,触发就会把相应的日志内容转发至Zabbix里,再通过以下配置即可实现告警。


启动logstash服务:

#cd /usr/share/logstash 

#bin/logstash -f config/elklog_to_zabbix.conf --path.data /data/osdata &

这里的–path.data是指定此logstash进程的数据存储目录,用于在一个服务器上启动多个logstash进程的环境中。


2、zabbix平台配置日志告警

登录zabbix web平台,选择配置-->模板-->创建模板,名称定为logstash-output-zabbix:

【修改后重发】ELK日志平台:ELK按需将日志发送至Zabbix实现监控告警

接着再创建应用集,点击应用集-->创建应用集:

【修改后重发】ELK日志平台:ELK按需将日志发送至Zabbix实现监控告警

然后再创建监控项,点击监控项-->创建监控项:

【修改后重发】ELK日志平台:ELK按需将日志发送至Zabbix实现监控告警

至此,Zabbix监控日志的配置就完成了。



自己可以模拟一个登录失败的情况,在系统的/var/log/secure文件产生错误日志。有Failed关键字,会自动发送至zabbix上。登录zabbix web平台,就可以看到日志信息。


Zabbix已经可以收到logstash的发送过来的日志信息了,再创建一个触发器就可以进行告警了,进入logstash-output-zabbix模板,继续创建触发器:

【修改后重发】ELK日志平台:ELK按需将日志发送至Zabbix实现监控告警

这里触发器的触发条件是,长度大于0就告警,也就是说接收到数据就进行告警