我说zabbix日志监控
首先,我要感慨 真是好记性不如乱笔头!
网上有很多关于zabbix日志的,而我写这篇分享是纯粹因为下午完善了一个脚本,加入了写日志部分,顺便就把日志加入了监控。而在添加监控项的时候,我查阅了几年前写的文档,发现了有更好的实现方法,可以提升日志采集效率,减少磁盘空间……还是惊讶多年后会再次更新这个文档!
因为很多企业和运维人员都还在大规模使用zabbix,这里我就把zabbix日志监控的实践分享一下:
1.懒人方法
log[文本路径],如:
log[/var/log/messages]
log[c:\1.txt]
触发器表达式写法:
{主机名:key.函数(参数)}<表达式>
日志关键字告警触发器写法实例:
/var/log/messages日志中出现Failed错误关键字
{WebServer:log[/var/log/messages].str(Failed)}=1
and
{WebServer:log[/var/log/messages].nodata(300)}=0
这种方式触发器的时候才体现了匹配关键字,会导致整个日志文件内容都会被采集入库,试想一个tomcat的catalina.out的日志……大大消耗了zabbix-db的磁盘空间。
2.推荐方法
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]
推荐添加监控项时,不要偷懒,通过业务梳理,把第二个参数regexp的关键字加上,如log[/var/log/messages,"(error|failed)",,,,],则匹配到预设关键字的日志内容才会被采集入库,大大减少了日志内容占用的磁盘空间。
item表达式:
log[/tomcat/logs/catalina.out,"StackOverflowError|OutOfMemoryError",,,,]
触发器:
({Templates log:log[/tomcat/logs/catalina.out,"StackOverflowError|OutOfMemoryError",,,,].regexp(StackOverflowError|OutOfMemoryError)}<>0)
and
({Templates log:log[/tomcat/logs/catalina.out,"StackOverflowError|OutOfMemoryError",,,,].nodata(300)}=0)
当然,现在使用ES收集日志已经成为了日志收集的主流手段,对于大日志文件,我还是推荐使用ES,而对于小文件日志,使用zabbix监控也不失为一种较好的手段。