nagios的监控原理:实际上很简单。我们在服务器端已经安装了nrpe服务,那么所有的客户端数据都是通过这个nrpe来收集,并且传到nagios服务器,在由nagios去调用生成。
工作过程:
(1)客户端在nrpe.cfg文件下已经定义了,调用模块的方式或者nagios识别的命令:
比如:command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000 (自己编写的脚本)
(2)服务器端通过check_nrpe -H 192.168.1.1 -c chekc_ips 。这个命令句可以手机到客户端这个脚本的数据。
(3)然互我们在服务端定义一个server.cfg就可以收集到关机这台主机的这个服务了。
服务器端:nagios的解析过程:
(1)nagios服务启动时,就回去加载nagios.cfg这个文件里面的数据。里面是我们定义的监控的类型:(cfg_file=/usr/local/nagios/etc/objects/192.168.10.1.cfg #这一句我地宫一的这台主机文件存放的位置)
(2)到上面的目录下创建192.168.10.1.cfg这个文件。里面定义了监控的类型。
(3)还有contacts.cfg 你可以自己创建一个联系人,发邮邮件到你的邮箱.
#当然还有一些文件:如监控本机时候用到的command.cfg。假如启动报错。说没有这个命令。那么你就可以去command.cfg下面添加就可以了。
举例一个自己编写脚本监控服务报警的例子:
在客户端操作:
1、在/usr/local/nagios/libexec/目录下新建check_nginx文件:内容如下
#!/bin/bash
nginx=`/usr/bin/pgrep nginx`
if [ "$nginx" != "" ]
then
echo "nginx is run"
exit 0
fi
if [ "$nginx" = "" ]
then
exit 1
fi
#exit0表示正常。#exit1表示报警
2、编辑nrpe.cfg文件添加命令#给可执行权限和用户:
command[check_nginx]=/usr/local/nagios/libexec/check_nginx
3、服务器端,查看是否连接成功nrpe客户端,不成功的话看防火墙,和nrpe.cfg的allow添加服务器IP地址:
[root@monitor objects]# /usr/local/nagios/libexec/check_nrpe -H 192.168.10.9
NRPE v2.12
4、测试模块是否收集到数据(下面是已经收到的):
[root@monitor objects]# /usr/local/nagios/libexec/check_nrpe -H 192.168.10.9 -c check_nginx
nginx is run
5、编辑192.168.10.9.cfg文件添加这个服务:
define service{
use generic-service
host_name 192.168.10.9
service_description check_nginx
check_command check_nrpe!check_nginx
notifications_enabled 1
check_period 24x7
max_check_attempts 3
normal_check_interval 10
retry_check_interval 1
contact_groups admins
notification_options w,u,c,r
notification_interval 120
notification_period 24x7
}
6、然后重启就可以监控到了。
下面举例几个监控脚本:监控并发量:
#!/bin/sh
#xiaoluo
#2014.11.4
ip_conns=`netstat -an | grep tcp | grep EST | wc -l`
if [ $ip_conns -lt $1 ]
then
echo "OK -connect is $ip_conns"
exit 0
fi
if [ $ip_conns -gt $1 -a $ip_conns -lt $2 ]
then
echo "Warning -connect is $ip_conns"
exit 1
fi
if [ $ip_conns -gt $2 ]
then
echo "Critical -connect is $ip_conns"
exit2
fi
2、nrpe添加命令:command[check_ips]=/usr/local/nagios/libexec/check_ips 4000 8000 (4000报警。8000严重)
#编写脚本注意事项:
都用if判断,然后看返回值:
然后exit 0 表示正常
exit1 表示报警
exit2 表示严重 #这3个人跟我们写的脚本没有直接关系只是给nrpe的一个信号
到这,觉得改手工了,遇到问题的朋友可以交流一下。像监控mysql主从的,可以写一个监控两个状态是否都为yes然后在if判断。给exit的那几个值。