网站内容更新监控(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能收到日志,可以看到下图最新数据:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线