博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Zabbix监控之检测程序日志中错误发生的次数
阅读量:6470 次
发布时间:2019-06-23

本文共 2944 字,大约阅读时间需要 9 分钟。

最近开发人员提了一个新的监控需求,当一个日志文件中出现的错误的次数增加时(日志文件中的错误关键字出现数量增加)则触发报警。

我觉得这是一个无聊的问题,问题之所以无聊,是因为该问题本身就具有局限性(自己给自己挖坑)。首先,日志文件不可能无穷的增大,因此当日志文件因为人为维护时发生的任何变化必会触发报警;

其次,通过检测错误关键字或者错误代码的方法也可能不靠谱,例如日志中可能出现一些并不是错误代码但与错误代码相同的数字,因此错误关键字和错误代码需要同时监测;

再如产生日志的进程的重新启动或者挂起,日志切割(logrotate)等都会导致存储的计数发生变化,很多情况都会触发虚假报警,因此这个问题真的很无聊!

并不是说要检测到这个错误的次数真的很复杂(实际也确实不简单),如果要检测是否有问题大可不必这样做,对于程序而言,所有影响程序正确执行的任何问题全都是异常,只要异常被捕获并被正确处理势必可以清晰的知道问题出在哪里,该如何解决。因此设计初期如果不提前做好这些打算,日后处理起来只能以无聊来讽刺了。

废话不说了,有两个方法可以简易实现,在此贴一下。

方法1:写两个脚本,一个持续运行,一个供监控软件运行,其中持续运行的脚本可以由crontab来做,供监控软件运行的命令行和脚本无论逻辑有多复杂流程有多少条必须具有退出运行的处理。

方法2:利用监控软件自带的diff或change,变化趋势由监控软件判断(以Zabbix为例),Zabbix的Trigger的表达式能轻松的将采集到数据以各种表达式计算出用户想要的数据,省却了用户自己编写程序或脚本解决文字比较、数字计算和趋势计算等较为复杂的问题。

方法1:getdata.sh在后台运行用来提供数据,checkdata.sh给Zabbix运行,用来查询数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/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去做。

1
2
3
4
5
6
7
8
9
10
11
12
# 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--

本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1678879,如需转载请自行联系原作者

你可能感兴趣的文章
bzoj1106[POI2007]立方体大作战tet*
查看>>
spring boot configuration annotation processor not found in classpath问题解决
查看>>
由中序遍历和后序遍历求前序遍历
查看>>
我学习参考的网址
查看>>
[Processing]点到线段的最小距离
查看>>
GitHub使用教程、注册与安装
查看>>
<<The C Programming Language>>讀書筆記
查看>>
git代码冲突
查看>>
解析查询 queryString 请求参数的函数
查看>>
学生选课系统数据存文件
查看>>
git bash 风格调整
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
C#技术------垃圾回收机制(GC)
查看>>
漫谈并发编程(三):共享受限资源
查看>>
【转】github如何删除一个仓库
查看>>
状态模式
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
JavaNIO基础02-缓存区基础
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>