nagios 整合 ganglia 设置邮件、短信报警
要学的东西还有很多呢,慢慢来~!
环境:
操作系统:ubuntu 10.10
软件:ganglia-monitor 3.1.7-1,gmetad 3.7.1-1,nagios 3.2.1-2
步骤:
1.下载安装nagios:
sudo apt-get install nagios3 nagios-plugins
输入要发送报告的邮箱
输入密码(用户名默认为:nagiosadmin)
2.把nagios的http文件链接到apache所在目录,并重启apache
sudo ln -s /usr/share/nagios3/htdocs /var/www/nagios
sudo service apache2 restart
现在,就可以通过http://localhost/nagios来访问nagios了,查看service的时候会要求输入用户名和密码,就是之前设置的
3.下载插件脚本
1)check_ganglia.py 试验发现只适合单播、单个数据源的
去http://ganglia.sourceforge.net/downloads.php?component=ganglia-webfrontend&version=3.1.7下载ganglia的源文件
解压后在contrib目录中找到check_ganglia.py并复制到/usr/lib/nagios/plugins/目录(该目录在/etc/nagios3/resource.cfg脚本中被定义为USER1)
这个python脚本是通过ganglia收集到的数据发出不同等级的警报,nagios显示这些警报信息或者根据设置通过邮件、短信发送警报信息给指定用户
2)check_ganglia_metric.php 这个好像是最原生态的,都适合
下载地址:http://vuksan.com/linux/ganglia/check_ganglia_metric.phps
这是check_ganglia的php脚本,直接调用gmetad取得的信息,因此可以获得other clusters and Grids的信息。把它复制到$USER1$目录下。
调用方法:check_ganglia_metric.php hostName metric_name less|more value
4.在/etc/nagios3/conf.d添加一个名为ganglia-services.cfg的配置文件,添加如下设置:
#定义servicegroup方便host使用多个service
define servicegroup {
servicegroup_name ganglia-metrics
alias Ganglia Metrics
}
#定义host,address似乎可以不用,因为check_ganglia.py脚本只通过host_name就可获取数据
#host_name可以从ganglia中看到
define host{
use generic-host ; Name of host template to use
host_name Just_Test
alias test-host
}
#定义hostgroup,members中可以指定属于该组的成员,定义service的时候可以指定只有某组才能使用该service
define hostgroup {
hostgroup_name my-host-servers
alias test-group
members * ;可以指定多个host属于当前组,用逗号分隔
}
#定义check_ganglia.py的command,执行检测脚本
#define command {
# command_name check_ganglia
# command_line $USER1$/check_ganglia.py -h $HOSTNAME$ -m $ARG1$ -w $ARG2$ -c $ARG3$
#}
#定义command,执行check_ganglia_metric.php检测脚本
define command{
command_name check_ganglia
command_line $USER1$/check_ganglia_metric.php $HOSTNAME$ $ARG1$ $ARG2$ $ARG3$
}
#定义一个service集合,共享配置(似乎是这个意思)
define service {
use generic-service
name ganglia-service
hostgroup_name my-host-servers ;定义那个组需要当前服务
service_groups ganglia-metrics
notifications_enabled 1 ;是否发送通知,1为发送,0为不发送
}
#定义具体service,check_command中的值:首先是command名,然后是用!分隔的参数,分别对应$ARG1$,$ARG2$。。。
#check_ganglia.py的检测命令
define service {
use ganglia-service
service_description load_one ;服务名称
check_command check_ganglia!load_one!4!5 ;调用之前定义的command
}
#check_ganglia_metric.php的检测命令
define service {
use ganglia-service
service_description 内存空闲
check_command check_ganglia!mem_free!less!10240
}
#发送邮件的command
define command {
command_name notify-by-email
command_line /usr/bin/printf "%b" "***** Nagios 3.2.1*****\nNotification Type: $NOTIFICATIONTYPE$\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nDate/Time: $LONGDATETIME$\nAdditionalInfo: $SERVICEOUTPUT$" | /usr/local/bin/sendEmail -f sender@qq.com -t $CONTACTEMAIL$ -s smtp.qq.com -u "**$NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -xu sender@qq.com -xp password
}
5.修改contacts_nagios2.cfg
修改被通知的Email以及xx_notification_commands:
service_notification_commands notify-by-email
host_notification_commands notify-by-email
email 138xxxxxxxx@139.com
使用139的邮箱,让接收短信的人去139邮箱那开通下短信通知(同时设置长短信打开),这样就可以免费接到报警短信了。之前配飞信的时候遇到太多问题,而且听说用飞信还要验证码,只好转139邮箱了,似乎163也有邮件到达通知。
6.安装sendEmail,发邮件通知(可以直接复制已经安装的程序/usr/local/bin/sendEmail):
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.55.tar.gz
tar -zxvf sendEmail-v1.55.tar.gz
cd sendEmail-v1.55
cp sendEmail /usr/local/bin
chmod 0755 /usr/local/bin/sendEmail
测试sendEmail(我试的时候,只有qqmail能发送成功,163、sina什么的都不行,不知道为什么):
sendEmail -f sender@qq.com -t receiver@qq.com -s smtp.qq.com -u "test" -xu sender@qq.com -xp your-password -m "hello world!"
-f表示发送者的邮箱
-t表示接收者的邮箱
-s表示SMTP服务器的域名或者ip
-u表示邮件的主题
-xu表示SMTP验证的用户名
-xp表示SMTP验证的密码
-m表示邮件的内容
*结束语
至此,已经能通过nagios收到报警信息了,间歇性地花了一周事件才搞定。。慢慢来吧