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--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值