Chinaunix首页 | 论坛 | 博客
  • 博客访问: 339379
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 577
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-27 14:21
个人简介

知道自己该干嘛,知道自己能干嘛

文章分类

全部博文(52)

文章存档

2019年(1)

2018年(8)

2017年(2)

2016年(11)

2015年(3)

2014年(10)

2013年(17)

我的朋友

分类: 系统运维

2013-04-28 18:42:39

           前几日,领导有了新需求,说让我监控日志,日志里有报错就发邮件或者短信报警,我能咋地,我只能照办,还好咱有zabbix 这个好帮手,对各种BT的监控需求有很强的扩展性,之前用过nagios ,这种需求也可以通过自己写的脚本完成,只要定义个好返回值就行了,现在改为zabbix,zabbix也可以使用agent用户自定义UserParameter来完成。
           开始不知道思路,不知道如何是确定时间间隔,每次都去读取增量日志,来判断是否有了新的错误,然后报警,经过群友提示,去翻查了nagios的 check_log 代码 (bash 版的),确定了思路,使用简单的 cp,diff,grep 即可搞定,而且我们写的脚本也要灵活一点,从server自己定义的key上传递参数,来控制脚本监控的日志,和过滤的关键字。
            ① 添加 zabbi_agent UserParameter 功能
            修改 zabbix_agentd.conf 文件,配置文件中写的格式是 UserParameter=, (注意:执行的命令的权限问题
            1.  配置一个简单的事例
            UserParameter=test.test,/bin/echo "Cs"
            我们可以在zabbix_server 使用 zabbix_get 来测试是否可以取到值
            /usr/local/zabbix/bin/zabbix_get -s zabbix_agent_IP -k"test.test"
            Cs
            很好,我们的用户自定义参数成功 
            2. 查看mysql进程数例子
            UserParameter=mysql_processlist.count,/usr/bin/mysql -uroot -ppasswd -e "show full processlist"| wc -l
            3.检查日志的事例
            UserParameter=check.log[*],/bin/bash /usr/local/zabbix/bin/check_log $1 $2
            可以传递参数,控制检查日志的名称,和要过滤的关键字(我已赋予zabbix用户sudo权限
            脚本内容如下:
            #!/bin/bash
            [ ! -f "${1}.bak" ] && /usr/bin/sudo /bin/cp -fr "${1}" "${1}.bak"                        // 第一次检查的时候执行copy bak文件,用于下次检查的比对
            sudo /usr/bin/diff -w  "${1}" "${1}.bak" | /bin/grep -q -i "$2";/bin/echo $?      // 比对日志,并用grep 过滤关键字;并返回执行结果(0||1
            sudo cp -fr  "${1}"  "${1}.bak"                                                                               // 生成备份文件,供下次比对
            三个步骤解决增量比较的问题,很科学 
            ② 定义 item
            
               可以看出我们已经传递给了脚本,检查文件的名称和匹配过滤的关键字
               ③ 定义 tigger
               如果grep过滤出关键字,返回结果会是 0 反之就是 1,所以我们采用 last 函数就可以加以判断
               
                ④ 验证
                使用logger 命令添加 error 字段,查看lastdata是否有显示
                [root@host211 log]# date "+%F %T";logger error
                2013-04-28 18:17:55
                [root@host211 log]# tail -f /var/log/messages
                Apr 28 18:17:55 localhost cailu: error
               
                可以看到已经触发成功,曲线有了波动,我们再通过Events标签项来查看
                
                在Events也有显示,大功告成
                本身zabbix官方带的key也可以检测日志,但是好像不支持messages 这种日志格式,官方的key是 
                log[文件名格式:日志文件路径,,,,]

                                                                                                                                                                            
                                                                                                                                                                     emar_Cail

             

               
               
               
               
               
            
           
           
阅读(5071) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~