1. 监控目的
使用zabbix监控日志文件的功能,及时发现nginx、mysql、syslog、keepalived的异常信息,并及时触发告警。
2. 配置步骤
4.1 日志文件权限配置
因为zabbix_agentd在运行时,一般场景我们都是指定其以zabbix这一身份在运行,但各应用系统的日志文件,zabbix不一定有权限读取,所以需要先给相应的日志文件设置zabbix可读,可以通过setfacl来实现。相关操作如下。
[root@monitor-server2 logs]# ll /usr/local/mysql/data/monitor-server2.err
-rw-r-----. 1 mysql root 40820 May 2 10:55 monitor-server2.err
#默认zabbix对mysql日志文件没有任何权限
[root@monitor-server2 logs]# setfacl -m u:zabbix:r /usr/local/mysql/data/monitor-server2.err
#设置zabbix对mysql的err日志有读权限
[root@monitor-server2 logs]# ll /usr/local/mysql/data/monitor-server2.err
-rw-r-----+ 1 mysql root 40820 May 2 10:55 /usr/local/mysql/data/monitor-server2.err
#加号表示此文件设置了facl
[root@monitor-server2 logs]# ll /usr/local/nginx/logs/error.log
-rw-r--r--. 1 nginx nginx 153341 May 1 15:38 /usr/local/nginx/logs/error.log
#默认情况下nginx的error日志,zabbix对其有读取权限
[root@monitor-server2 logs]# setfacl -m u:zabbix:r /var/log/messages
#设置zabbix对/var/log/messages文件可读
4.2 配置监控log文件的item
配置监控模板
为配置简便起见,我这里针对不同应用程序的日志文件分别创建不同的Template,然后根据被监控主机的业务类型来进行模板的调用。这种方式比较适用于相对规范的网络环境,至少同一类型的业务系统它们的日志文件路径一致。下面是相应的操作步骤。
分别针对不同的日志文件定义模板
模板中item的配置-1
针对多实例的keepalived定义了不同的item
模板中item的配置-3
针对监控到的日志信息可以设置trigger,在发现异常日志信息时触发告警通知。
如下为当监控到keepalived vrrp状态改变时的trigger配置:
根据监控到的item值设定相应的trigger
其它日志文件对应的trigger配置方法类似,不再赘述。
调用监控模板
给监控日志文件使用的模板定义完成后,针对不同的主机调用相应的模板即可。
调用的监控模板
验证trigger
我选择keepalived日志监控进行验证,为了使监控较全面一些,我增加了一定程度上能够监控到keepalived服务的Starting或者Stopping的item,并配置了对应的trigger。如下所示:
在keepalived log模板中增加了监控keepalived启动或停止的item
然后停掉server2的Keepalived服务,观察Problems的输出:
server2 keepalived服务停掉状态发生改变,同时server1的VI_2状态也发生改变
下图是文中涉及到的日志的一个整体的监控效果,取的是Latest data:
日志监控Latest data查询结果
5. 总结
使用zabbix监控日志文件配置要点:
确保zabbix对相应的日志文件有读的权限。
准确使用log或者logrt并结合正则表达式匹配到相应的信息。
灵活过滤出关键信息,以便于配置trigger,如只取keepalive的state关键字段,便于比较前后的状态是否一致,从而判断keepalived vrrp状态是否改变。
zabbix agent对新加入监控的日志会读取所有内容,监控上以后只会读取日志的更新内容。
将zabbix自己的日志监控上,非常有帮助。
针对各应用需要监控的日志按需添加,如监控nginx的access.log,当出现50x之类的错误时,及时告警等。