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

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/1678879

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

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

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

再如产生日志的进程的重新启动或者挂起,日志切割(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--

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1678879

时间: 2024-11-02 11:07:12

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

事件日志中的"TermService" 服务的性能库

  发现事件记录: "TermService" 服务的性能库 "C:WINDOWSsystem32perfts.dll" 的配置信息  同在注册表中保存的受信任性能库信息不匹配.此库中的函数不会作为受信任函数处理. TermService是系统的一个服务. Terminal Services 提供一个多会话环境,客户端设备可以在此环境中访问虚拟 Windows 桌面会话和服务器上运行的基于 Windows 的程序.Terminal Services 使用户可以远程管

linux中Zabbix监控Memcached PHP-FPM Tomcat Nginx MySQL 网站日志

Zabbix作为监控软件非常的灵活,支持的数据类型非常丰富,比如数字(无正负),数字(浮点),日志,文字等.我们需要做的就是使用脚本来收集好数据,然后zabbix收集并画图,设置告警线.这里我们来学习使用Zabbix监控Memcached.PHP-FPM.Tomcat.Nginx.MySQL及网站日志.  Memcached监控   自定义键值   UserParameter=memcached.stat[*],/data/sh/memcached-status.sh "$1" mem

细数云计算应用程序部署中的常见错误

当很多企业在云计算中部署应用程序时,他们通常会犯下一些常见的错误.其中,最明显的常见错误通常集中于应用程序性能.应用程序安全性以及监控虚拟环境的工具.当然,也有一些其他的常见错误. 与在http://www.aliyun.com/zixun/aggregation/14039.html">私有云计算中部署应用程序相关的错误比在公共云计算中部署应用程序所面临的挑战更具紧迫性.IT企业负责管理私有云计算的实施工作,而如今的企业则更侧重于私有云计算而不是公共云计算. 企业不能完成必要的前期规划以

apache2中修改错误日志中的错误级别

一.遇到问题 因为写日志会给系统带来很大的损耗.关闭日志以后,甚至最高可以提高整体性能近40%(粗略估计)那么如何关闭日志呢?可以通过降低log级别的办法来减少日志读写. 这里要提醒的是,这么做将给"入侵检测"以及其他基于日志分析的工作带来麻烦.所以请谨慎使用.  二.解决问题 编辑conf文件夹下的httpd.conf,找到如下内容:  #  # LogLevel: Control the number of messages logged to the error_log.  #

zabbix监控MySQL日志文件的例子

一般情况下,日志最先反映出应用当前的问题,在海量日志里面找到我们异常记录,然后记录下来,并且根据情况报警,大家可以监控系统日志.nginx.Apache.业务日志.这边我拿常见的MySQL日志做监控,大家看演示. 监控日志key 首先要了解key,log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>] file:文件名,写绝对路径 regexp:要匹配内容的正则表达式,或者直接写你要检索的

用vi命令删除日志中的所有内容并对日志进行实时监控_unix linux

很多时候我们对应用程序的排错需要查看日志文件,然而日志中通常有许多我们以前的应用程序产生的日志,其他的日志过多的时候,有时候看起当前应用程序产生的日志的时候有点费力,这时候我们可能想通过清除先前的日志,使得当前产生的日志看起来清晰: vi test.log :0,$d :wq 注释: :0,$d是删除第0行到最后一行的意思::wq是保存并退出的意思. 然后输入如下命令,就可以实时监控test.log里面的内容了: tail -f test.log 注释:tail命令是查看test.log文件的后

PHP中错误与异常的日志记录用法分析_php技巧

本文分析了PHP中错误与异常的日志记录用法.分享给大家供大家参考,具体如下: 提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 PHP 的 error 日志.虽然看起来是个很简单的问题,但里面其实又牵扯到应用配置以及日志记录位置的问题,如果是在 ubuntu 等系统下使用 apt-get 的方式来安装,其自有一套较为合理的的配置文件可用.再者运行的应用程序中的配置也会影响到日志记录的方式及内容. 错误与异常的区别 关于错误

linux中zabbix监控php-fpm性能状态

不多说,首先你需要开启php-fpm的状态页,请参考凉白开前面写的文章<启用php-fpm状态详解>,然后更我一步一步来完成zabbix对php-fpm的监控. zabbix客户端配置 增加自定义key    代码如下 复制代码 # cat zabbix_agentd.conf | grep 'php-fpm' UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1/status?xml" | g

linux中Zabbix监控交换机设置步骤

说明: Zabbix监控服务端已经配置完成,现在要使用Zabbix对交换机进行监控. 具体操作: 以下操作在被监控的交换机上进行,这里以Cisco交换机为例. 一.登录到Cisco交换机,开启snmp服务 注意:使用telnet或者仿真终端登录到交换机特权配置模式 enable #切换到特权模式 configure terminal #进入全局配置模式 snmp-server community public ro #打开交换机snmp服务,设置团体名称为public,只读 snmp-serve