zabbix日志监控

简介:

Zabbix可以使用log监控类型来监控日志文件。


在配置Item的时候,Type选择Zabbix agent (active),这里主要需要配置的是Key。下面是监控日志的两种key——log和logtr。

    log[/path/to/some/file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]

    logtr[/path/to/some/filename_format,<regexp>,<encoding>,<maxlines>,<mode>,<output>]

    ◆ regexp:要匹配内容的正则表达式,或者直接写你要检索的内容也可以,例如我想检索带ERROR关键词的记录

    ◆ encoding:编码相关,留空即可

    ◆ maxlines:一次性最多提交多少行,这个参数覆盖配置文件zabbxi_agentd.conf中的’MaxLinesPerSecond’,我们也可以留空

    ◆ mode:默认是all,也可以是skip,skip会跳过老数据

    ◆ output:输出给zabbix server的数据。可以是\1、\2一直\9,\1表示第一个正则表达式匹配出得内容,\2表示第二个正则表达式匹配错的内容。


如果仔细看可以发现,第一个参数不一样,logrt的第一个参数可以使用正则表达式。针对日志回滚用得,例如我们每天都切割nginx日志,日志名位www.a.com_2015-01-01.log、www.a.com_2015-01-02.log等等,使用log肯定不合适,如果文件名使用正则,那么新增的日志文件会立即加入监控。

备注:不管新日志、老日志,只要他们有变更,zabbix都会监控。

    只要配置了<regexp>,Zabbix会根据<regexp>的正则表达式来匹配日志中的内容。注意,一定要保证Zabbix用户对日志文件有可读权限,否则这个Item的状态会变成“unsupported”。


注意事项:

 1、Zabbix Server和Zabbix Agent会追踪日志文件的大小和最后修改时间,并且分别记录在字节计数器和最新的时间计数器中。

    2、Agent会从上次读取日志的地方开始读取日志。

    3、字节计数器和最新时间计数器的数据会被记录在Zabbix数据库,并且发送给Agent,这样能够保证Agent从上次停止的地方开始读取日志。

    4、当日志文件大小小于字节计数器中的数字时,字节计数器会变为0,从头开始读取文件。

    5、所有符合配置的文件,都会被监控。

    6、一个目录下的多个文件如果修改时间相同,会按照字母顺序来读取。

    7、到每个Update interval的时间时,Agent会检查一次目录下的文件。

    8、Zabbix Agent每秒发送日志量,有一个日志行数上限,防止网络和CPU负载过高,这个数字在zabbix_agentd.conf中的MaxLinePerSecond。

    9、在logtr中,正则表达式只对文件名有效,对文件目录无效。


监控案例:

公司的云泊系统中会记录Pms终端连接的三种状态,

1、断开连接 

2、连接成功

3、重连成功

这些日志使我们想要获取到的。其他的是一些Debug日志和Error日志,这些我们不关心

所以我们需要将需要监控的日志获取到。以下是我们想要获取的日志信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ApiServer | 2016-07-12 10:18:49.509 | INFO  | send mail successfully, content:2016-07-12 10:18:47, 停车场:智慧园停车场重连成功
ApiServer | 2016-07-12 10:02:10.576 | INFO  | send mail successfully, content:2016-07-12 10:02:08, 停车场:智慧园停车场重连成功
ApiServer | 2016-07-12 11:14:15.021 | INFO  | send mail successfully, content:2016-07-12 11:14:13, 停车场:智慧园停车场重连成功
ApiServer | 2016-07-12 11:18:33.241 | INFO  | send mail successfully, content:2016-07-12 11:18:30, 停车场:智慧园停车场重连成功
ApiServer | 2016-07-12 12:04:49.299 | INFO  | send mail successfully
ApiServer | 2016-07-12 11:22:13.236 | INFO  | send mail successfully, content:2016-07-12 11:22:11, 停车场
ApiServer | 2016-07-12 12:33:22.945 | INFO  | send mail successfully, content:2016-07-12 12:33:21, 智慧园停车场连接断开
ApiServer | 2016-07-12 12:33:22.945 | INFO  | send mail successfully, content:2016-07-12 12:33:21, 智慧园停车场连接断开
ApiServer | 2016-07-12 12:33:22.945 | INFO  | send mail successfully, content:2016-07-12 12:33:21, 智慧园停车场连接断开
ApiServer | 2016-07-12 12:33:22.945 | INFO  | send mail successfully, content:2016-07-12 12:33:21, 智慧园停车场连接断开
ApiServer | 2016-07-12 03:29:51.751 | INFO  | send mail successfully, content:2016-07-12 03:29:50, 智慧园停车场连接断开
ApiServer | 2016-07-12 04:14:09.640 | INFO  | send mail successfully, content:2016-07-12 04:14:08, 智慧园停车场连接断开
ApiServer | 2016-07-12 05:45:17.496 | INFO  | send mail successfully, content:2016-07-12 05:45:16, 智慧园停车场连接断开
ApiServer | 2016-07-12 07:53:22.012 | INFO  | send mail successfully, content:2016-07-12 07:53:20, 智慧园停车场连接断开
ApiServer | 2016-07-12 08:24:52.001 | INFO  | send mail successfully, content:2016-07-12 08:24:50, 智慧园停车场连接断开
ApiServer | 2016-07-12 12:33:28.890 | INFO  | send mail successfully, content:2016-07-12 12:33:27, 停车场:智慧园停车场连接成功
ApiServer | 2016-07-12 09:53:49.780 | INFO  | send mail successfully, content:2016-07-12 09:53:48, 停车场:智慧园停车场重连成功


创建监控项:

注意:我这里是测试环境,并非生产环境。

wKioL1eEmuPg_I3zAAI1jS1y4nw976.png

这里我匹配的关键字是停车场


创建trigger:

wKioL1eEm0SxaOQiAAHLLmzGkzI213.png


Trigger的解释:

1
(({10.10.10.202:log[ /mnt/test .log,停车场,,,,].regexp(断开)}) #0)&{10.10.10.202:log[/mnt/test.log,停车场,,,,].nodata(30)}=0

A:

1
(({10.10.10.202:log[ /mnt/test .log,停车场,,,,].regexp(断开)}) #0)

log中包含了‘停车场’且包含‘断开’字符串,则表达式为真。


B:

1
{10.10.10.202:log[ /mnt/test .log,停车场,,,,].nodata(30)}=0

表示30秒内有数据产生则表达式为真,即30秒内如果没有新数据了,则表达式为假。为假,则告警恢复了。


A&B:表示A、B都为真,才为真。即item返回数据中会包含"断开",则触发器被触发,30秒内没有新数据的话,触发器恢复。这样就保证了触发器不会一直在触发状态。


再来看一个例子

1
{Template OS Linux:system.localtime.nodata(5m)}=1&{Template OS Linux:icmpping.last(0)}=1

这个是zabbix自带的linux os template中的一个监控项,

1
system.localtime.nodata(5m)}=1

表示5分钟内没有数据为真,注意等号后面是1.


这里有一个问题:如果系统产生一条日志被匹配到了,触发了告警。此时告警没有恢复,那么接下来的30秒之类如果还有日志被匹配到了,那么它是不会触发告警的。而nodata的时间间隔最少为30秒,所以我们无法通过调整时间来解决这个问题。那么我们可以通过创建多个trigger来解决这个问题。

前面说了状态有三种,所以我们创建的trigger有3个,这样能保证每一个状态的日志都能触发告警。


下面是另外两个状态的trigger

wKiom1eEoabBIIGjAADmqtEnhqk064.png

wKioL1eEoabg0cQCAADoK_FfHX4626.png










本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1825761,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
消息中间件 存储 运维
Zabbix与ELK整合实现对安全日志数据的实时监控告警
Zabbix与ELK整合实现对安全日志数据的实时监控告警
Zabbix与ELK整合实现对安全日志数据的实时监控告警
|
9月前
|
监控
Zabbix的问题日志清单查看
Zabbix的问题日志清单查看
83 0
|
11月前
|
SQL 存储 监控
从Zabbix数据库入手,获取更详细的审计日志
从Zabbix数据库入手,获取更详细的审计日志
264 0
|
监控 关系型数据库 MySQL
|
监控 Linux 机器学习/深度学习

推荐镜像

更多