Zabbix监控之检测程序日志中错误发生的次数

简介:

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

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

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

再如产生日志的进程的重新启动或者挂起,日志切割(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,如需转载请自行联系原作者



相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
11月前
|
监控 应用服务中间件 nginx
基于Zabbix的SLA监控体系构建与实践
本文由Zabbix社区专家褚凤彬分享,详解SLA在Zabbix中的应用。通过Trigger与Service联动,构建Web应用的多层级监控体系,并介绍SLA计算规则、维护期处理及升级注意事项,助力企业精准掌控服务可用性。
777 36
|
12月前
|
JSON 缓存 测试技术
程序出错瞎找?教你写“会说话”的错误日志,秒定位原因
错误日志是排查问题的“导航地图”。本文详解错误三大来源:参数非法、交互故障、逻辑疏漏,并分享写好日志的6大原则——完整、具体、直接、集成经验、格式统一、突出关键字,助你快速定位问题,提升系统可维护性。
731 0
|
运维 监控 安全
Syslog 日志分析与异常检测技巧
系统日志蕴含设备运行关键信息,但分析提取颇具挑战。本文详解从命令行工具(如 Grep、Tail、Awk)到专业软件(如 EventLog Analyzer)的全流程日志分析技巧,助你高效挖掘 Syslog 价值,提升运维与安全响应能力。
881 4
|
运维 监控 安全
【案例分享】中国通号卡斯柯公司:ZABBIX如何破解轨道交通监控难题
本文根据2023上海峰会上朱林贤的演讲整理,聚焦中国通号卡斯柯公司如何借助Zabbix实现轨道交通信号系统的智能化管理。作为中外合资企业,卡斯柯通过统一平台整合设备监控,大幅降低成本并提升灵活性,成功应用于国内外项目。文章探讨了传统监控系统的痛点、研发维护经验及国产化与开源技术挑战,为行业转型提供了宝贵启示。未来,开放协作将是推动轨道交通智能化发展的关键。
856 8
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
437 25
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
277 23
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
461 22
|
存储 缓存 监控
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
693 9

推荐镜像

更多