系统监控:msn在线机器人实时报警

原贴:http://www.hiadmin.com/tag/sendmsg/

系统监控:msn在线机器人实时报警

七月 23rd, 2008 | 20 Comments | Posted in 系统监控 < by Michael Field >

一、实际需求
在应用各种监控软件(比如:cacti、nagios、sitescope等)的时候,我一般都会用到它的email阀值报警功能。如果这时候再加上一个 msn在线监控机器人为你把关,第一时间给你发出msn报警信息,是不是能让你更快的处理问题呢。以下我为大家介绍一个msn command line 的小程序来实现这个功能。
软件下载地址:sendMsg

二、运行环境
一个支持php的系统环境就可以啦,当然要能上网,不然怎么发消息呢。
我的做法是和cacti监控服务器放一起,不需要额外的设备和资源投入。
注册一个msn的帐号用于监控机器人。比如:test@test.com 密码:123456
需要收到消息的msn帐号必须加监控帐号test@test.com为好友,不然收不到消息。

三、sendMsg用法
sendMsg.zip包中所有文件如下:

# ls -l sendMsg/
-
rw - r -- r -- 1 root root 1213 Jul 29   2007 index . php // 测试页面, web 中打开开始测试;很容易做。
-
rw - r -- r -- 1 root root 3894 Jul 29   2007 msnpauth - 1.1.3 . php
-
rw - r -- r -- 1 root root 3372 Jul 29   2007 msnpauth . php
-
rw - r -- r -- 1 root root 4586 Jul 29   2007 sendMsg . php
-
rw - r -- r -- 1 root root   223 Jul 29   2007 simple . php
-
rw - r -- r -- 1 root root 1424 Jul 29   2007 template . tpl

该程序也是通过登录msn服务器、建立IM会话,发送消息;
基本PHP语法如下:

$sendMsg = new sendMsg () ;
$sendMsg -> login ( ' test@test.com ' , ' 123456 ' ) ;
//刚才建立的用于举例的
msn 监控机器人帐号
$sendMsg -> createSession ( ' recipient@hotmail.com ' ) ;
//接受信息人的
msn 帐号
$sendMsg -> sendMessage ( ' message ' , ' Times New Roman ' , ' FF0000 ' ) ;
//第一个是具体信息内容,后面可以设定字体和颜色;
$sendMsg -> sendMessage ( iconv ( " GBK " , " UTF-8 " , 测试 ) , ' Times New Roman ' , ' 008000 ' ) ;
//也利用
iconv 转换 gbk utf8 来发送中文信息;

效果如下:

四、实际应用
这里是我自己写的一个应用发送msn信息的php脚本:仅供参考,如果大家有更好请和我交流。

#!/usr/bin/php
<?
if ( $argc != 3 ) {
die ( " Usage: send_cndmonitor.php <msn-address> <messages> /n " ) ;
}
array_shift ( $argv ) ;
$msnaddr = $argv [ 0 ] ;
$messages = $argv [ 1 ] ;
include ( ' sendMsg.php ' ) ;
$sendMsg = new sendMsg () ;
$sendMsg -> login ( ' test@test.com ' , ' 123456 ' ) ;
$sendMsg -> createSession ( $msnaddr ) ;
$sendMsg -> sendMessage ( $messages , ' Times New Roman ' , ' 008000 ' ) ;
?>

主要是为了能被其他脚本调用,用于发送一个报警信息。缺点是不能判定错误,所以实际运用中存在故障,需要网络流畅的环境下使用。

我们的生产环境已经存在大量的监控系统,所以针对错误信息已经整理到数据库中,因此我只需要从数据库导出目前存在error信息的文本文件,然后根据节点位置发送给相关维护负责人即可。

为了能判定和确保发送正确,我利用sendMsg中的index.php的页面和shell脚本相结合来循环发送,实在抱歉本人PHP程度有限;
脚本如下:(这是我实例中使用的一个工作脚本,仅供大家借鉴)

#!/bin/sh
wget -- user = monitor -- password = 123456 http :// 127.0.0.1 / monitor / msn . txt - O / var / www / html / sendMsg / msn . txt .1 >/ dev / null 2 >& 1
#下载msn要发送的信息,因为页面都是认证的所以用了wget的user和password;
now = ` date +%Y-%m-%d-%H:%M `
[ - f / var / www / html / sendMsg / msn . txt ] && oldmd5 = ` md5sum var/www/html/sendMsg/msn.txt |awk '{print $1 }' |tee /var/log/cdn_status_old.md5 ` || exit 0
[ - f / var / www / html / sendMsg / msn . txt .1 ] && newmd5 = ` md5sum var/www/html/sendMsg/msn.txt.1 |awk '{print $1 }' |tee /var/log/cdn_status_new.md5 ` || exit 0
SA = ( admin1 admin2 admin3 admin4 )
# 相关负责人列表和下载的msn信息的中的名字对应;
msnaddr = ( admin1 @msn . com admin2 @msn . com admin3 @msn . com admin4 @msn . com )
# 相关负责人的msn帐号和SA变量中的的名字顺序一一对应;
sendMsg ()
{
num = 0
while [ $num - lt 1 ] ;
do
wget -- post - data " sender=test@test.com&password=123456&recipient= ${1} &message= ${2} " http :// 127.0.0.1 / sendMsg / index . php - O / var / www / html / sendMsg / index . php .1 >/ dev / null 2 >& 1
# 使用wget post-data发送post参数给index.php页面,用以发送msn信息。
if [ - f / var / www / html / sendMsg / index . php .1 ] ; then
if cat / var / www / html / sendMsg / index . php .1 | grep - i successfully >/ dev / null 2 >& 1 ; then
num = 1 #判断信息发送成功
elif cat / var / www / html / sendMsg / index . php .1 | grep - i " The user appears to be offline " >/ dev / null 2 >& 1 ; then
num = 1 #判断msn接受人为是否在线状态
echo " The user is offline. "
exit 0
elif cat / var / www / html / sendMsg / index . php .1 | grep - i " Something went wrong trying to connect to the server " >/ dev / null 2 >& 1 ; then
num = 1 #判断msn 服务器存在连接问题
echo " MSN server is wrong. "
exit 0
else
num = 0 #除了以上三种情况退出循环外,其他情况重试。
fi
rm - f / var / www / html / sendMsg / index . php .1
else
num = 0
fi
done
}
 
if [[ $oldmd5 == $newmd5 ]] ; then #校验msn的信息是否是已经发送过的,主要是为了不重复发送错误信息。
rm - f / var / www / html / sendMsg / msn . txt .1
exit 0
else
mv / var / www / html / sendMsg / msn . txt / var / www / html / sendMsg / bak / msn $now . txt - f
mv / var / www / html / sendMsg / msn . txt .1 / var / www / html / sendMsg / msn . txt - f
#备份已发送的msn错误信息
 
fi
 
for i in ` seq 0 1 3 ` #根据维护人员的数量进行判断和循环
do
if cat / var / www / html / sendMsg / msn . txt | grep - i $ { SA [ $i ]} ; then
messages = ` cat /var/www/html/sendMsg/msn.txt |grep -i ${SA[ $i ]} `
sendMsg " ${msnaddr[ $i ]} " " $messages "
else
continue
fi
done

加入到crontab每5分钟执行一次;考虑维护人员的上线时间(最好是24H值班msn,那就不存在这个问题)设定执行时间为每周1到5的9点到18点;

*/ 5 9 - 18 * * 1 - 5 / var / www / html / sendMsg / send_report . sh

实际应用大家可以根据自己的情况进行调整,我这里只是告诉大家怎么使用sendmsg,举了一个简单的实例帮助大家理解和应用。

如果懂php语言的可以把这个作为cacti的一个插件使用,那样效果就更棒啦~

系统监控:msn在线机器人实时报警

七月 23rd, 2008 | 20 Comments | Posted in 系统监控 < by Michael Field >

一、实际需求
在应用各种监控软件(比如:cacti、nagios、sitescope等)的时候,我一般都会用到它的email阀值报警功能。如果这时候再加上一个 msn在线监控机器人为你把关,第一时间给你发出msn报警信息,是不是能让你更快的处理问题呢。以下我为大家介绍一个msn command line 的小程序来实现这个功能。
软件下载地址:sendMsg

二、运行环境
一个支持php的系统环境就可以啦,当然要能上网,不然怎么发消息呢。
我的做法是和cacti监控服务器放一起,不需要额外的设备和资源投入。
注册一个msn的帐号用于监控机器人。比如:test@test.com 密码:123456
需要收到消息的msn帐号必须加监控帐号test@test.com为好友,不然收不到消息。

三、sendMsg用法
sendMsg.zip包中所有文件如下:

# ls -l sendMsg/
-
rw - r -- r -- 1 root root 1213 Jul 29   2007 index . php // 测试页面, web 中打开开始测试;很容易做。
-
rw - r -- r -- 1 root root 3894 Jul 29   2007 msnpauth - 1.1.3 . php
-
rw - r -- r -- 1 root root 3372 Jul 29   2007 msnpauth . php
-
rw - r -- r -- 1 root root 4586 Jul 29   2007 sendMsg . php
-
rw - r -- r -- 1 root root   223 Jul 29   2007 simple . php
-
rw - r -- r -- 1 root root 1424 Jul 29   2007 template . tpl

该程序也是通过登录msn服务器、建立IM会话,发送消息;
基本PHP语法如下:

$sendMsg = new sendMsg () ;
$sendMsg -> login ( ' test@test.com ' , ' 123456 ' ) ;
//刚才建立的用于举例的
msn 监控机器人帐号
$sendMsg -> createSession ( ' recipient@hotmail.com ' ) ;
//接受信息人的
msn 帐号
$sendMsg -> sendMessage ( ' message ' , ' Times New Roman ' , ' FF0000 ' ) ;
//第一个是具体信息内容,后面可以设定字体和颜色;
$sendMsg -> sendMessage ( iconv ( " GBK " , " UTF-8 " , 测试 ) , ' Times New Roman ' , ' 008000 ' ) ;
//也利用
iconv 转换 gbk utf8 来发送中文信息;

效果如下:

四、实际应用
这里是我自己写的一个应用发送msn信息的php脚本:仅供参考,如果大家有更好请和我交流。

#!/usr/bin/php
<?
if ( $argc != 3 ) {
die ( " Usage: send_cndmonitor.php <msn-address> <messages> /n " ) ;
}
array_shift ( $argv ) ;
$msnaddr = $argv [ 0 ] ;
$messages = $argv [ 1 ] ;
include ( ' sendMsg.php ' ) ;
$sendMsg = new sendMsg () ;
$sendMsg -> login ( ' test@test.com ' , ' 123456 ' ) ;
$sendMsg -> createSession ( $msnaddr ) ;
$sendMsg -> sendMessage ( $messages , ' Times New Roman ' , ' 008000 ' ) ;
?>

主要是为了能被其他脚本调用,用于发送一个报警信息。缺点是不能判定错误,所以实际运用中存在故障,需要网络流畅的环境下使用。

我们的生产环境已经存在大量的监控系统,所以针对错误信息已经整理到数据库中,因此我只需要从数据库导出目前存在error信息的文本文件,然后根据节点位置发送给相关维护负责人即可。

为了能判定和确保发送正确,我利用sendMsg中的index.php的页面和shell脚本相结合来循环发送,实在抱歉本人PHP程度有限;
脚本如下:(这是我实例中使用的一个工作脚本,仅供大家借鉴)

#!/bin/sh
wget -- user = monitor -- password = 123456 http :// 127.0.0.1 / monitor / msn . txt - O / var / www / html / sendMsg / msn . txt .1 >/ dev / null 2 >& 1
#下载msn要发送的信息,因为页面都是认证的所以用了wget的user和password;
now = ` date +%Y-%m-%d-%H:%M `
[ - f / var / www / html / sendMsg / msn . txt ] && oldmd5 = ` md5sum var/www/html/sendMsg/msn.txt |awk '{print $1 }' |tee /var/log/cdn_status_old.md5 ` || exit 0
[ - f / var / www / html / sendMsg / msn . txt .1 ] && newmd5 = ` md5sum var/www/html/sendMsg/msn.txt.1 |awk '{print $1 }' |tee /var/log/cdn_status_new.md5 ` || exit 0
SA = ( admin1 admin2 admin3 admin4 )
# 相关负责人列表和下载的msn信息的中的名字对应;
msnaddr = ( admin1 @msn . com admin2 @msn . com admin3 @msn . com admin4 @msn . com )
# 相关负责人的msn帐号和SA变量中的的名字顺序一一对应;
sendMsg ()
{
num = 0
while [ $num - lt 1 ] ;
do
wget -- post - data " sender=test@test.com&password=123456&recipient= ${1} &message= ${2} " http :// 127.0.0.1 / sendMsg / index . php - O / var / www / html / sendMsg / index . php .1 >/ dev / null 2 >& 1
# 使用wget post-data发送post参数给index.php页面,用以发送msn信息。
if [ - f / var / www / html / sendMsg / index . php .1 ] ; then
if cat / var / www / html / sendMsg / index . php .1 | grep - i successfully >/ dev / null 2 >& 1 ; then
num = 1 #判断信息发送成功
elif cat / var / www / html / sendMsg / index . php .1 | grep - i " The user appears to be offline " >/ dev / null 2 >& 1 ; then
num = 1 #判断msn接受人为是否在线状态
echo " The user is offline. "
exit 0
elif cat / var / www / html / sendMsg / index . php .1 | grep - i " Something went wrong trying to connect to the server " >/ dev / null 2 >& 1 ; then
num = 1 #判断msn 服务器存在连接问题
echo " MSN server is wrong. "
exit 0
else
num = 0 #除了以上三种情况退出循环外,其他情况重试。
fi
rm - f / var / www / html / sendMsg / index . php .1
else
num = 0
fi
done
}
 
if [[ $oldmd5 == $newmd5 ]] ; then #校验msn的信息是否是已经发送过的,主要是为了不重复发送错误信息。
rm - f / var / www / html / sendMsg / msn . txt .1
exit 0
else
mv / var / www / html / sendMsg / msn . txt / var / www / html / sendMsg / bak / msn $now . txt - f
mv / var / www / html / sendMsg / msn . txt .1 / var / www / html / sendMsg / msn . txt - f
#备份已发送的msn错误信息
 
fi
 
for i in ` seq 0 1 3 ` #根据维护人员的数量进行判断和循环
do
if cat / var / www / html / sendMsg / msn . txt | grep - i $ { SA [ $i ]} ; then
messages = ` cat /var/www/html/sendMsg/msn.txt |grep -i ${SA[ $i ]} `
sendMsg " ${msnaddr[ $i ]} " " $messages "
else
continue
fi
done

加入到crontab每5分钟执行一次;考虑维护人员的上线时间(最好是24H值班msn,那就不存在这个问题)设定执行时间为每周1到5的9点到18点;

*/ 5 9 - 18 * * 1 - 5 / var / www / html / sendMsg / send_report . sh

实际应用大家可以根据自己的情况进行调整,我这里只是告诉大家怎么使用sendmsg,举了一个简单的实例帮助大家理解和应用。

如果懂php语言的可以把这个作为cacti的一个插件使用,那样效果就更棒啦~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值