【修改后重发】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:
接着再创建应用集,点击应用集-->创建应用集:
然后再创建监控项,点击监控项-->创建监控项:
至此,Zabbix监控日志的配置就完成了。
自己可以模拟一个登录失败的情况,在系统的/var/log/secure文件产生错误日志。有Failed关键字,会自动发送至zabbix上。登录zabbix web平台,就可以看到日志信息。
Zabbix已经可以收到logstash的发送过来的日志信息了,再创建一个触发器就可以进行告警了,进入logstash-output-zabbix模板,继续创建触发器:
这里触发器的触发条件是,长度大于0就告警,也就是说接收到数据就进行告警。