开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
zabbix监控
zabbix监控
28 0
zabbix添加端口监控
日常运维中不仅仅有URL监控,服务监控,往往在服务的运行还伴随有端口的监控,下面就来介绍zabbix如何添加端口监控 在相应主机中选择监控项,并添加监控项 图片.png 1.添加一个名称 2.健值选择添加选择net.tcp.listen[port] 图片.png 3.将[port]里面的端口改成你要监控的端口即可 4.一般添加完端口的监控项没有什么意义,能实现监控还需要添加一个触发器,这样在端口或服务出现问题的时候才会报警,通知到我们。
1501 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
《Zabbix 监控常用手册》
立即下载
Deep Reinforcement Learning fo
立即下载
低代码开发师(初级)实战教程
立即下载