标签:zabbix用户参数 zabbix自定义agent zabbix自定义监控 zabbix日志 日志分析
最近开发人员提了一个新的监控需求,当一个日志文件中出现的错误的次数增加时(日志文件中的错误关键字出现数量增加)则触发报警。
我觉得这是一个无聊的问题,问题之所以无聊,是因为该问题本身就具有局限性(自己给自己挖坑)。首先,日志文件不可能无穷的增大,因此当日志文件因为人为维护时发生的任何变化必会触发报警;
其次,通过检测错误关键字或者错误代码的方法也可能不靠谱,例如日志中可能出现一些并不是错误代码但与错误代码相同的数字,因此错误关键字和错误代码需要同时监测;
再如产生日志的进程的重新启动或者挂起,日志切割(logrotate)等都会导致存储的计数发生变化,很多情况都会触发虚假报警,因此这个问题真的很无聊!
并不是说要检测到这个错误的次数真的很复杂(实际也确实不简单),如果要检测是否有问题大可不必这样做,对于程序而言,所有影响程序正确执行的任何问题全都是异常,只要异常被捕获并被正确处理势必可以清晰的知道问题出在哪里,该如何解决。因此设计初期如果不提前做好这些打算,日后处理起来只能以无聊来讽刺了。
废话不说了,有两个方法可以简易实现,在此贴一下。
方法1:写两个脚本,一个持续运行,一个供监控软件运行,其中持续运行的脚本可以由crontab来做,供监控软件运行的命令行和脚本无论逻辑有多复杂流程有多少条必须具有退出运行的处理。
方法2:利用监控软件自带的diff或change,变化趋势由监控软件判断(以Zabbix为例),Zabbix的Trigger的表达式能轻松的将采集到数据以各种表达式计算出用户想要的数据,省却了用户自己编写程序或脚本解决文字比较、数字计算和趋势计算等较为复杂的问题。
方法1:getdata.sh在后台运行用来提供数据,checkdata.sh给Zabbix运行,用来查询数据。
#!/bin/bash # Name: getdata.sh javalogfile=/data/tomcat/tomcat-cstest/logs/catalina.out pathtojavalogfile=$(dirname $javalogfile) zabbixstatusfile=pathtojavalogfile/.zabbixstatus.catalina.out errorkeyword=13003 previoustime=$(grep "$errorkeyword" $javalogfile | wc -l) currenttime=$(grep "$errorkeyword" $javalogfile | wc -l) if [[ ! $previoustime -eq $currenttime ]]; then echo 0 exit 1 fi while [[ $previoustime -eq $currenttime ]]; do # 其实此处就像crontab,while+sleep=crontab sleep 2 currenttime=$(grep "$errorkeyword" $javalogfile | wc -l) if [[ $currenttime -gt $previoustime ]]; then previoustime=$currenttime echo 0 >>$zabbixstatusfile elif [[ $currenttime -le $previoustime ]]; then echo 1 >>$zabbixstatusfile fi done #!/bin/bash # Name: checkdata.sh javalogfile=/data/tomcat/tomcat-cstest/logs/catalina.out pathtojavalogfile=$(dirname $javalogfile) zabbixstatusfile=pathtojavalogfile/.zabbixstatus.catalina.out grep "0" $zabbixstatusfile if [[ $? -eq 0 ]]; then echo 0 true > $zabbixstatusfile exit 1 else echo 1 exit 0 fi
方法2:产生数据和查询数据都交给Zabbix去做。
# single line for Zabbix # ItemName: cs connection error # TemplateNmae: Template App JavaLogMonitor # ApplicationName: JavaErrorCodeTextFound # TriggerName: cs connection error is occur # # /etc/zabbix/zabbix_agentd.conf.d/userparameter_csconnerr.conf # /etc/zabbix/zabbix_agentd.conf.d/userparameter_cs.conf # {Template App JavaLogMonitor:csprocess.cs.csconnerr[*].diff(0)}>0 # For /bin/bash, such as CentOS # UserParameter=csprocess.cs.csconnerr[*],javalogfile=/data/tomcat/tomcat-cstest/logs/catalina.out;errorkeyword=13003;if [[ -f $javalogfile ]]; then echo $(grep "$errorkeyword" $javalogfile | wc -l); exit 0; else echo 0; exit 1; fi # For /bin/sh, such as Ubuntu UserParameter=csprocess.cs.csconnerr[*],javalogfile=/data/tomcat/tomcat-cstest/logs/catalina.out;errorkeyword=13003;if test -f $javalogfile ; then echo $(grep "$errorkeyword" $javalogfile | wc -l); exit 0; else echo 0; exit 1; fi
--end--
本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1678879
标签:zabbix用户参数 zabbix自定义agent zabbix自定义监控 zabbix日志 日志分析
原文地址:http://dgd2010.blog.51cto.com/1539422/1678879