网站内容更新监控(ELK与zabbix有什么关系?放到一起是什么目的 )
优采云 发布时间: 2021-11-27 10:06网站内容更新监控(ELK与zabbix有什么关系?放到一起是什么目的
)
一、 ELK和zabbix是什么关系?
ELK大家应该都不陌生,zabbix也不陌生。所以如果你把 ELK 和 zabbix 放在一起,你可能会有疑问?将这两者放在一起的目的是什么?听我说。
ELK 是一套日志采集工具包。它实际上由三个软件组成:Elasticsearch、Logstash 和 Kibana。通过ELK可以采集系统日志、网站日志、应用系统日志等各种日志数据,还可以查看日志。过滤、清洗,然后集中存储,可用于实时检索和分析。这是ELK的基本功能。
但是有时候,我们在采集日志的时候,希望能够及时提取日志中的异常信息(警告、错误、故障等),因为日志中的异常信息意味着操作系统和应用程序可能有问题。如果能够将日志中的故障信息及时通知运维人员,运维人员可以在第一时间进行故障排除和处理,从而避免很多故障。
那么如何将ELK采集的日志数据中的异常信息及时通知运维人员呢?这就需要用到zabbix,ELK(更准确的说是logstash)可以实时读取日志的内容,而且还可以过滤日志信息。通过ELK的读取和过滤功能,可以过滤掉日志中的一些异常关键字(error、failed、OutOff、Warning),然后使用logstash的zabbix插件过滤错误日志信息发送到zabbix,然后经过zabbix接收到这些数据后,结合自身的机制,然后发起报警动作,从而实现了zabbix对日志异常实时报警的功能。
二、Logstash 和 zabbix 插件的使用
Logstash支持多种输出媒体,如syslog、HTTP、TCP、elasticsearch、kafka等,有时我们想在采集到的日志中输出一些错误信息,当出现警告时,我们使用logstash-output-zabbix插件. 该插件可以将Logstash与zabbix集成,即对Logstash采集到的数据进行过滤,将带有错误标识的日志输出到zabbix,最后通过zabbix的报警机制触发报警。
logstash-output-zabbix 是一个社区维护的插件。Logstash 中默认没有安装它,但它也很容易安装。只需在 logstash 中运行以下命令:
/usr/local/logstash/bin/logstash-plugin install logstash-output-zabbix
其中/usr/local/logstash为Logstash的安装目录。
另外,logstash-plugin命令还有很多用途,我们来看看:
2.1、 列出当前安装的插件
将列出所有已安装的插件
/usr/local/logstash/bin/logstash-plugin list
#将列出已安装的插件及版本信息
/usr/local/logstash/bin/logstash-plugin list --verbose
#将列出包含namefragment的所有已安装插件
/usr/local/logstash/bin/logstash-plugin list "http"
#将列出特定组的所有已安装插件( input,filter,codec,output)
/usr/local/logstash/bin/logstash-plugin list --group input
2.2、安装插件
安装插件,例如安装kafka插件,执行如下命令:
/usr/local/logstash/bin/logstash-plugin 安装 logstash-output-kafka
要使用此命令安装插件,您的计算机需要能够访问 Internet。这种插件安装方式会检索托管在公共仓库()上的插件,然后下载到本地机器上,自动安装在Logstash安装之上。
2.3、更新插件
每个插件都有自己的发布周期和版本更新,这些更新通常与Logstash的发布周期无关。因此,有时需要单独更新插件,可以使用 update 子命令获取插件的最新版本。
所有已安装的插件都会更新
/usr/local/logstash/bin/logstash-plugin update
只会更新指定的插件
/usr/local/logstash/bin/logstash-plugin update logstash-output-kafka
2.4、删除插件
如果需要从Logstash插件中移除插件,可以执行以下命令:
/usr/local/logstash/bin/logstash-plugin remove logstash-output-kafka
这将删除 logstash-output-kafka 插件。
三、logstash-output-zabbix 插件使用
安装logstash-output-zabbix后,可以在logstash配置文件中使用。
下面是一个使用logstash-output-zabbix的例子:
zabbix {
zabbix_host => "[@metadata][zabbix_host]"
zabbix_key => "[@metadata][zabbix_key]"
zabbix_server_host => "x.x.x.x"
zabbix_server_port => "xxxx"
zabbix_value => "xxxx"
}
在:
zabbix_host:表示Zabbix主机名字段名称, 可以是单独的一个字段, 也可以是 @metadata 字段的子字段, 是必需的设置,没有默认值。
zabbix_key:表示Zabbix项目键的值,也就是zabbix中的item,此字段可以是单独的一个字段, 也可以是 @metadata 字段的子字段,没有默认值。
zabbix_server_host:表示Zabbix服务器的IP或可解析主机名,默认值是 "localhost",需要设置为zabbix server服务器所在的地址。
zabbix_server_port:表示Zabbix服务器开启的*敏*感*词*端口,默认值是10051。
zabbix_value:表示要发送给zabbix item监控项的值对应的字段名称,默认值是 "message",也就是将"message"字段的内容发送给上面zabbix_key定义的zabbix item监控项,当然也可以指定一个具体的字段内容发送给zabbix item监控项。
四、将logstash与zabbix集成
这里我们使用logstash采集日志,然后读取日志,最后选择关键字过滤,调用zabbix告警流程,看看如何配置logstash实现zabbix告警。
先说明一下我们的应用需求:通过对系统日志文件的监控,然后过滤掉日志信息中的一些关键字,比如ERR、error、ERROR、Failed、WARNING等,过滤掉日志中的信息,然后发送到zabbix上,最后借助zabbix的报警功能实现系统日志中上述关键字的报警。
对于过滤关键字和告警,不同的业务系统可能有不同的关键字。比如http系统,可能需要过滤500、403、503等错误码。对于java相关的系统可能需要过滤OutOfMemoryError、PermGen、Java heap等关键字,在一些业务系统的日志输出中,可能会有一些自定义的错误信息,所以这些也需要作为过滤关键字使用。
4.1、 配置logstash事件配置文件
下一步是创建一个logstash 事件配置文件。配置文件分为三部分来介绍,首先是输入部分,内容如下:
input {
file {
path => ["/var/log/secure"]
type => "system"
start_position => "beginning"
}
}
输入部分是从/var/log/secure文件中读取数据,start_position表示从secure文件的开头读取内容。
其次是过滤部分,内容如下:
filter {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:message_timestamp} %{SYSLOGHOST:hostname} %{DATA:message_program}(?:\[%{POSINT:messag
e_pid}\])?: %{GREEDYDATA:message_content}" } #这里通过grok对message字段的数据进行字段划分,这里将message字段划分了5个子字段。其中,message_content字段会在output中用到。
}
mutate {
add_field => [ "[zabbix_key]", "oslogs" ] #新增的字段,字段名是zabbix_key,值为oslogs。
add_field => [ "[zabbix_host]", "%{host}" ] #新增的字段,字段名是zabbix_host,值可以在这里直接定义,也可以引用字段变量来获取。这里的%{host}获取的就是日志数据的主机名,这个主机名与zabbix web中“主机名称”需要保持一致。
}
mutate { #这里是删除不需要的字段
remove_field => "@version"
remove_field => "message"
}
date { #这里是对日志输出中的日期字段进行转换,其中message_timestamp字段是默认输出的时间日期字段,将这个字段的值传给 @timestamp字段。
match => [ "message_timestamp","MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
}
}
过滤器部分是一个关键点。在这部分中,重点是 message_timestamp 字段和 message_content 字段。
最后是输出部分,如下:
output {
if [message_content] =~ /(ERR|error|ERROR|Failed)/ { #定义在message_content字段中,需要过滤的关键字信息,也就是在message_content字段中出现给出的这些关键字,那么就将这些信息发送给zabbix。
zabbix {
zabbix_host => "[zabbix_host]" #这个zabbix_host将获取上面filter部分定义的字段变量%{host}的值
zabbix_key => "[zabbix_key]" #这个zabbix_key将获取上面filter部分中给出的值
zabbix_server_host => "172.16.213.140" #这是指定zabbix server的IP地址
zabbix_server_port => "10051" #这是指定zabbix server的*敏*感*词*端口
zabbix_value => "message_content" #这个很重要,指定要传给zabbix监控项item(oslogs)的值, zabbix_value默认的值是"message"字段,因为上面我们已经删除了"message"字段,因此,这里需要重新指定,根据上面filter部分对"message"字段的内容划分,这里指定为"message_content"字段,其实,"message_content"字段输出的就是服务器上具体的日志内容。
}
}
#stdout { codec => rubydebug } #这里是开启调试模式,当第一次配置的时候,建议开启,这样过滤后的日志信息直接输出的屏幕,方便进行调试,调试成功后,即可关闭。
}
将以上三部分合并成一个文件file_to_zabbix.conf,然后启动logstash服务:
[root@logstashserver ~]#cd /usr/local/logstash
[root@logstashserver logstash]#nohup bin/logstash -f config/file_to_zabbix.conf --path.data /data/osdata &
这里–path.data是指定这个logstash进程的数据存放目录,用于在一个服务器上启动多个logstash进程的环境。
4.2、zabbix平台配置日志告警
登录zabbix web平台,选择Configuration—>Template—>Create a template,设置名称为logstash-output-zabbix,如下图:
接下来在该模块下创建一个应用集,点击应用集->创建应用集,如下图:
然后在该模块下创建监控项,点击监控项->创建监控项,如下图:
至此zabbix监控logstash日志数据配置完成。
这里我们以客户端172.16.213.157主机为例,即*敏*感*词*172.16.213.@ >157 当发现异常日志时,主机上的系统日志数据会发出警报。
创建上面的模板和监控项,然后需要将这个模板链接到172.16.213.157主机,选择“配置”-“主机”,然后选择17 2.16.213.157主机,选择“模板”选项卡,将上面创建的模板添加到172.16.213. @>157 在主机上,如下图:
这样上面创建的监控项就会在172.16.213.157主机上自动生效。
下面我们模拟一个故障,在任意一台主机上通过SSH登录172.16.213.157主机,然后输入错误密码生成/var/log/系统错误日志的安全文件,然后查看logstash是否可以过滤,是否可以发送到zabbix。
首先,让系统文件 /var/log/secure 产生类似于以下内容的内容:
Sep 5 16:01:04 localhost sshd[27159]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.16.213.127 user=root
Sep 5 16:01:06 localhost sshd[27159]: Failed password for root from 172.16.213.127 port 59913 ssh2
有关键字Failed我们要过滤,所以logstash会过滤掉这个内容并发送给zabbix。
然后,登录zabbix web平台,点击监控--->最新数据,如果zabbix能收到日志,可以看到下图最新数据: