运维监控平台NRPE插件功能详解
2017-03-22 00:00
661 查看
摘要: 技术分享
本文内容有参考部分网络资料
– check_nrpe 插件,位于在监控主机上
– NRPE daemon,运行在远程的linux主机上(通常就是被监控机)
按照上图,整个的监控过程如下:
当nagios需要监控某个远程linux主机的服务或者资源情况时
1.nagios会运行check_nrpe这个插件,告诉它要检查什么.
2.check_nrpe插件会连接到远程的NRPE daemon,所用的方式是SSL
3.NRPE daemon会运行相应的nagios插件来执行检查
4.NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理.
注意:NRPE daemon需要nagios插件安装在远程的linux主机上,否则,daemon不能做任何的监控.
2) 系统负载情况监控
3) 磁盘根分区使用情况监控
4) 系统总进程数监控
5) 系统僵尸进程数监控
6) Hswx服务进程监控
7) 系统内存使用情况监控
8) 网卡流量情况监控
9) http请求civil响应状态监控
vi /usr/local/nagios/etc/commands.cfg
# 'check_nrpe ' command definition
define command{
command_name check_nrpe
command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 60
}
配置描述:
command_name check_nrpe
定义命令名称为check_nrpe,在services.cfg或host.cfg定义服务内容时要使用这个名称.
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
这是定义实际运行的插件程序.这个命令行的书写要完全按照check_nrpe这个命令的用法.不知道用法的就用check_nrpe –h查看
-c后面带的$ARG1$参数是传给nrpe daemon执行的检测命令,之前说过了它必须是被监控机nrpe.cfg中所定义的那5条命令中的其中一条.在command.cfg中使用check_nrpe的时候要用!带上这个参数
-t 作用是运行脚本超时时间设定,默认是10s,但有些监控命令执行时间超过10s会返回CHECK_NRPE: Socket timeout after 10 seconds错误,解决方法,手工指定超时时间,暂时设置为一分钟。该参数是针对自定义插件脚本所设,后面内容会提到。
监控主机报警相关配置
编辑command.cfg
1. 通过邮件方式
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nProject Name :$HOSTGROUPALIAS$\nNotification Type: $NOTIFICATIONTYPE$\nHostgroup: $HOSTGROUPALIAS$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ > /home/nagios/host.out
}
# 'notify-service-by-email' command definition
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nProject Name :$HOSTGROUPALIAS$\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHostgroup: $HOSTGROUPALIAS$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ > /home/nagios/service.out
}
2. 通过短信方式
# 'notify-host-by-smsgw' command definition
define command{
command_name notify-host-by-sms
command_line /usr/bin/python /usr/local/nagios/libexec/sendmail_hhy.py $CONTACTPAGER$ "尊敬的用户,运维监控平台告警通知, 类别:$NOTIFICATIONTYPE$ 组:$HOSTGROUPALIAS$ 主机:$HOSTNAME$ 当前状态:$HOSTSTATE$ IP地址:$HOSTADDRESS$【>中国移动和慧眼】"
# command_line /usr/bin/python /usr/local/nagios/libexec/sendmail.py $CONTACTPAGER$ "{"template":"HostMonit","通报类型":$NOTIFICATIONTYPE$,"项目名称":$HOSTGROUPALIAS$,"主机名":$HOSTNAME$,"当前状态":$HOSTSTATE$,“IP地址":$HOSTADDRESS$}"
}
# 'notify-service-by-smsgw' command definition
define command{
command_name notify-service-by-sms
command_line /usr/bin/python /usr/local/nagios/libexec/sendmail_hhy.py $CONTACTPAGER$ "尊敬的用户,运维监控平台告警通知, 类别:$NOTIFICATIONTYPE$ 组:$HOSTGROUPALIAS$ 主机:$HOSTALIAS$ IP地址:$HOSTADDRESS$ 当前状态:$SERVICESTATE$ 监控项:$SERVICEDESC$ 描述: $SERVICEOUTPUT$ 【中国移动和慧眼】"
# command_line /usr/bin/python /usr/local/nagios/libexec/sendmail.py $CONTACTPAGER$ "{"template":"ServiceMonit","通报类型":$NOTIFICATIONTYPE$,"项目名称":$HOSTGROUPALIAS$,"主机名":$HOSTNAME$,"IP地址":$HOSTADDRESS$,"监控项":$SERVICEDESC$,"描述":$SERVICEOUTPUT$}"
}
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_main_partition]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
配置描述:
command[此处的功能名称需要与监控主机中host.cfg的一致]
登录用户: check_users -w 5 -c 10 (w为警告,c为危急)
系统负载: check_load -w 15,10,5 -c 30,25,20 (1分钟,5分钟,15分钟大于对应的等待进程数则警告或危急)
磁盘占用率: check_disk -w 20% -c 10% -p / (根分区剩余空间为总大小的20%警告, 10%危急,-p后是根分区)
检测僵尸进程: check_zombie _procs -w 5 -c 10 -s Z (有5个僵尸进程报警告,10个报危急)
检测总进程数: check_total_procs -w 150 -c 200 (总进程到150个警告,200个报危急)
标红5项为默认监控。
除此之外列举几个额外插件使用方法:
主机存活: check_ping -w 3000.0,80% -c 5000.0,100% -p 5 (3000毫秒响应时间内, 丢包率超过80%报警告,5000毫秒响应时间内,丢包率超过 100%报危急,一共发送5个包)
脚本检测磁盘I/O: check_iostat -w 5 –c 10 (磁盘I/O的iowait超过5%报警告,超过10%报危急)
脚本检测内存剩余: check_mem -w 90% -c 95% (内存空闲率90%以上报警告,95%以上报危急)
检测交换分区使用率: check_swap -w 20% -c 10% (交换分区剩余空间为总大小的20%警告,10%危急)
应 用 服 务 监 控 监控服务端口: check_tcp -H localhost -p 80 (主机与对应的端口号)
监控页面响应时间: check_http -H localhost -u http:\/\/localhost/test.jsp –w 5 –c 10 (检查页面,超过5s报警告,超过10s报危急)
脚本检测IP连接数: check_ips -w 200 –c 250 (IP连接数超过200报警告,超过250报危急)
流量 监控 监控server流量: Check_traffic -V 2c -C public -H localhost -I 2 -w 12,30 -c 15,35 -M –b (snmp版本,用户,主机,对应网卡,警告阀值,危急阀值)
补充mysql监控插件:
command[check_mysql_status]=/usr/local/nagios/libexec/check_mysql –H 127.0.0.1 -u dh -p 123456 -d hswx
备注:等待59秒检测进程是否存在,不超过NRPE设定的超时时间
代码如下:
#!/bin/bash
#########################
# Author: zhousy
# Date: 2015.07.22
#########################
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN
. /root/.bash_profile
#返回0表示正常,返回1表示报警,返回2表示严重,返回3表示未定义
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
#STATE_UNKNOWN=3
usage(){
echo "正确用法: 脚本名 -m 模块名"
echo "支持模块:front,back,nginx,dms,mts,ads,sgs,grs,hsdgw,mes,mrs,jsgs"
}
#检查是否带有参数
if [ $# -lt 2 ]
then
usage;
exit 0
fi
# read input
while [ $# -gt 0 ]
do
case $1 in
-m)
shift
module=$1
;;
*)
echo "输入参数不正确"
usage;
exit 0
esac
shift
done
#模块分类
Categray(){
if [ "$module" == "mrs" ];then
PID=$(/bin/ps aux |grep $module".jar" |grep -v grep |awk '{print $2}')
elif [ "$module" == "jsgs" ];then
PID=$(/bin/ps aux |grep ${module:1:3}".jar" |grep -v grep |awk '{print $2}')
elif [ "$module" == "front" -o "$module" == "back" ];then
PID=$(/bin/ps aux |grep $module"-tomcat" |grep -v grep |awk '{print $2}')
elif [ "$module" == "nginx" ];then
PID=$(/bin/ps aux |grep 'nginx:\ master' |grep -v grep |awk '{print $2}')
else
PID=$(/sbin/pidof $module)
fi
}
#定时器
Set_Timer(){
while true
do
sleep $1
break
done
}
#检测进程状态
Check_Status(){
Categray;
if [ -z "$PID" ]
then
Set_Timer 59
Categray
if [ -z "$PID" ]
then
echo "CRITICAL - The $module process is dead!"
exit $STATE_CRITICAL
else
echo "WARNING - The $module process is restart"
exit $STATE_WARNING
fi
else
echo "OK - The $module process is running"
exit $STATE_OK
fi
}
#入参指定模块名
case $module in
front)
Check_Status;
;;
back)
Check_Status;
;;
nginx)
Check_Status;
;;
dms)
Check_Status;
;;
hsmts)
Check_Status;
;;
ads)
Check_Status;
;;
sgs)
Check_Status;
;;
grs)
Check_Status;
;;
hsdgw)
Check_Status;
;;
mes)
Check_Status;
;;
mrs)
Check_Status;
;;
jsgs)
Check_Status;
;;
*)
echo "请输入模块列表中指定的选项,列表外的产品暂不支持"
exit 0
;;
esac
监控主机增加配置内容:
command.cfg中声明插件的使用方法
# 'check pid' command definition
define command{
command_name check_pid
command_line $USER1$/check_pid.sh -m $ARG1$
}
说明: $ARG1$,即第一个入参,需要指明服务模块的名称。
host.cfg中声明check_nrpe调用方法
#******************************************************************
#Monitor pid of the service
#******************************************************************
define service{
use generic-service
host_name ZJHZ-HHY-RS1
service_description Rs Service Pid
check_command check_nrpe!check_rs_pid
}
注意:标红字体要与被监控机中nrpe.cfg中定义的监控名称保持一致。
模块列表:
{ rs, front , back , dms, mts, ads, sgs, grs, hsdgw, mrs, jsgs, mes, hls}
被监控机增加配置项
nrpe.cfg中声明插件具体执行参数
command[check_rs_pid]=/usr/local/nagios/libexec/check_pid.sh -m nginx
command[check_front_pid]=/usr/local/nagios/libexec/check_pid.sh -m front
command[check_back_pid]=/usr/local/nagios/libexec/check_pid.sh -m back
command[check_dms_pid]=/usr/local/nagios/libexec/check_pid.sh -m dms
command[check_hsmts_pid]=/usr/local/nagios/libexec/check_pid.sh -m hsmts
command[check_ads_pid]=/usr/local/nagios/libexec/check_pid.sh -m ads
command[check_sgs_pid]=/usr/local/nagios/libexec/check_pid.sh -m sgs
command[check_grs_pid]=/usr/local/nagios/libexec/check_pid.sh -m grs
command[check_hsdgw_pid]=/usr/local/nagios/libexec/check_pid.sh -m hsdgw
command[check_mrs_pid]=/usr/local/nagios/libexec/check_pid.sh -m mrs
command[check_jsgs_pid]=/usr/local/nagios/libexec/check_pid.sh -m jsgs
command[check_mes_pid]=/usr/local/nagios/libexec/check_pid.sh -m mes
command[check_hls_pid]=/usr/local/nagios/libexec/check_pid.sh -m nginx
command[check_fts_pid]=/usr/local/nagios/libexec/check_pid.sh -m fts
command[check_mq_pid]=/usr/local/nagios/libexec/check_pid.sh -m mq
command[check_rtsp_pid]=/usr/local/nagios/libexec/check_pid.sh -m rtsp
2) civil响应状态插件
配置修改:
Nrpe:
command[check_civil_status]=/usr/bin/python /usr/local/nagios/libexec/check_civil.py civil
Nagios-Server:
host.cfg中声明check_nrpe调用方法
#************************************************************************************
#Monitor the service of civil status
#************************************************************************************
define service{
use generic-service
host_name ZJHZ-HHY-WEB1
service_description Civil响应状态
check_command check_nrpe!check_civil_status
}
command.cfg中声明插件的使用方法
# 'check_civil_status' command definition
define command{
command_name check_civil_status
command_line /usr/bin/python $USER1$/check_civil.py civil
}
chmod +x check_mem.sh
chown nagios.nagios check_mem.sh
监控网卡流量:check_net_traffic.sh
chmod +x check_net_traffic.sh
chown nagios.nagios check_net_traffic.sh
网卡阀值计算:
千兆网卡:1000Mb/s = 125MB/s
双网卡绑定:能力值2倍 2000Mb/s = 250MB/s
command.cfg中声明插件的使用方法
# 'check_mem' command definition
define command{
command_name check_mem
command_line $USER1$/check_mem.sh -w $ARG1$ -c $ARG2$
}
# 'check_net_traffic' command definition
define command{
command_name check_net_traffic
command_line $USER1$/check_net_traffic.sh -d $ARG1$ -w $ARG2$ -c $ARG3$
}
监控主机host.cfg配置新增
#************************************************************************************
#Monitor the memory
#************************************************************************************
define service{
use generic-service
host_name ZJDH-JSCNVIEW-WEB-01
service_description 内存占用率
check_command check_nrpe!check_mem
}
#************************************************************************************
#Monitor the net traffic
#************************************************************************************
define service{
use generic-service
host_name ZJDH-JSCNVIEW-WEB-01
service_description 网卡流量
check_command check_nrpe!check_net_traffic
}
被监控机nrpe.conf配置新增
command[check_mem]=/usr/local/nagios/libexec/check_mem.sh -w 10 -c 5
command[check_net_traffic]=/usr/local/nagios/libexec/check_net_traffic.sh -d bond0 -w 80M -c 100M
# 2016-06-06新增
监控磁盘IO: check_diskio.sh
chmod +x check_diskio.sh
chown nagios.nagios check_diskio.sh
监控MYSQL死锁: check_deadlock.py
chmod +x check_deadlock.py
chown nagios.nagios check_deadlock.py
command.cfg中声明插件的使用方法
# 'check_diskio' command definition
define command{
command_name check_diskio
command_line $USER1$/check_diskio.sh –d $ARG1$ -w $ARG2$ -c $ARG3$
}
# 'check_mysql_errlog' command definition
define command{
command_name check_log_except
command_line $USER1$/check_deadlock.py -f $ARG1$
}
监控主机host.cfg配置新增
#************************************************************************************
#Monitor the diskio
#************************************************************************************
define service{
use generic-service
host_name ZJHZ-HHY-MYSQL-01
service_description 磁盘IO
check_command check_nrpe!check_diskio
}
#************************************************************************************
#Monitor the mysql except
#************************************************************************************
define service{
use generic-service
host_name ZJHZ-HHY-MYSQL-01
service_description MYSQL死锁
check_command check_nrpe!check_log_except
}
被监控机nrpe.conf配置新增
command[check_diskio]=/usr/local/nagios/libexec/check_diskio.sh -d sda2 -w 80 -c 90
command[check_log_except]=sudo python /usr/local/nagios/libexec/check_deadlock.py -f /home/nagios/mycheck.log
FAQ:
如果提示:NRPE: Unable to read output
原因:监控插件执行权限问题
解决:为脚本赋予执行权限,如果需要sudo执行的,要检查一下nagios用户是否加入sudo的免密切换参数配置。
echo "nagios ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
本文内容有参考部分网络资料
一 介绍nrpe架构
NRPE总共由两部分组成:– check_nrpe 插件,位于在监控主机上
– NRPE daemon,运行在远程的linux主机上(通常就是被监控机)
按照上图,整个的监控过程如下:
当nagios需要监控某个远程linux主机的服务或者资源情况时
1.nagios会运行check_nrpe这个插件,告诉它要检查什么.
2.check_nrpe插件会连接到远程的NRPE daemon,所用的方式是SSL
3.NRPE daemon会运行相应的nagios插件来执行检查
4.NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理.
注意:NRPE daemon需要nagios插件安装在远程的linux主机上,否则,daemon不能做任何的监控.
二 Nagios监控平台监控内容划分
1) 登录用户数量监控2) 系统负载情况监控
3) 磁盘根分区使用情况监控
4) 系统总进程数监控
5) 系统僵尸进程数监控
6) Hswx服务进程监控
7) 系统内存使用情况监控
8) 网卡流量情况监控
9) http请求civil响应状态监控
三 监控主机对check_nrpe定义的内容说明
在commands.cfg中需声明监控插件的使用方法,举例:check_nrpevi /usr/local/nagios/etc/commands.cfg
# 'check_nrpe ' command definition
define command{
command_name check_nrpe
command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 60
}
配置描述:
command_name check_nrpe
定义命令名称为check_nrpe,在services.cfg或host.cfg定义服务内容时要使用这个名称.
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
这是定义实际运行的插件程序.这个命令行的书写要完全按照check_nrpe这个命令的用法.不知道用法的就用check_nrpe –h查看
-c后面带的$ARG1$参数是传给nrpe daemon执行的检测命令,之前说过了它必须是被监控机nrpe.cfg中所定义的那5条命令中的其中一条.在command.cfg中使用check_nrpe的时候要用!带上这个参数
-t 作用是运行脚本超时时间设定,默认是10s,但有些监控命令执行时间超过10s会返回CHECK_NRPE: Socket timeout after 10 seconds错误,解决方法,手工指定超时时间,暂时设置为一分钟。该参数是针对自定义插件脚本所设,后面内容会提到。
监控主机报警相关配置
编辑command.cfg
1. 通过邮件方式
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nProject Name :$HOSTGROUPALIAS$\nNotification Type: $NOTIFICATIONTYPE$\nHostgroup: $HOSTGROUPALIAS$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ > /home/nagios/host.out
}
# 'notify-service-by-email' command definition
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nProject Name :$HOSTGROUPALIAS$\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHostgroup: $HOSTGROUPALIAS$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ > /home/nagios/service.out
}
2. 通过短信方式
# 'notify-host-by-smsgw' command definition
define command{
command_name notify-host-by-sms
command_line /usr/bin/python /usr/local/nagios/libexec/sendmail_hhy.py $CONTACTPAGER$ "尊敬的用户,运维监控平台告警通知, 类别:$NOTIFICATIONTYPE$ 组:$HOSTGROUPALIAS$ 主机:$HOSTNAME$ 当前状态:$HOSTSTATE$ IP地址:$HOSTADDRESS$【>中国移动和慧眼】"
# command_line /usr/bin/python /usr/local/nagios/libexec/sendmail.py $CONTACTPAGER$ "{"template":"HostMonit","通报类型":$NOTIFICATIONTYPE$,"项目名称":$HOSTGROUPALIAS$,"主机名":$HOSTNAME$,"当前状态":$HOSTSTATE$,“IP地址":$HOSTADDRESS$}"
}
# 'notify-service-by-smsgw' command definition
define command{
command_name notify-service-by-sms
command_line /usr/bin/python /usr/local/nagios/libexec/sendmail_hhy.py $CONTACTPAGER$ "尊敬的用户,运维监控平台告警通知, 类别:$NOTIFICATIONTYPE$ 组:$HOSTGROUPALIAS$ 主机:$HOSTALIAS$ IP地址:$HOSTADDRESS$ 当前状态:$SERVICESTATE$ 监控项:$SERVICEDESC$ 描述: $SERVICEOUTPUT$ 【中国移动和慧眼】"
# command_line /usr/bin/python /usr/local/nagios/libexec/sendmail.py $CONTACTPAGER$ "{"template":"ServiceMonit","通报类型":$NOTIFICATIONTYPE$,"项目名称":$HOSTGROUPALIAS$,"主机名":$HOSTNAME$,"IP地址":$HOSTADDRESS$,"监控项":$SERVICEDESC$,"描述":$SERVICEOUTPUT$}"
}
四、被监控机配置监控插件内容
vi /usr/local/nagios/etc/nrpe.cfgcommand[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_main_partition]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
配置描述:
command[此处的功能名称需要与监控主机中host.cfg的一致]
五、Nrpe插件详解
先用表格列举一下我的监控对象和阀值:登录用户: check_users -w 5 -c 10 (w为警告,c为危急)
系统负载: check_load -w 15,10,5 -c 30,25,20 (1分钟,5分钟,15分钟大于对应的等待进程数则警告或危急)
磁盘占用率: check_disk -w 20% -c 10% -p / (根分区剩余空间为总大小的20%警告, 10%危急,-p后是根分区)
检测僵尸进程: check_zombie _procs -w 5 -c 10 -s Z (有5个僵尸进程报警告,10个报危急)
检测总进程数: check_total_procs -w 150 -c 200 (总进程到150个警告,200个报危急)
标红5项为默认监控。
除此之外列举几个额外插件使用方法:
主机存活: check_ping -w 3000.0,80% -c 5000.0,100% -p 5 (3000毫秒响应时间内, 丢包率超过80%报警告,5000毫秒响应时间内,丢包率超过 100%报危急,一共发送5个包)
脚本检测磁盘I/O: check_iostat -w 5 –c 10 (磁盘I/O的iowait超过5%报警告,超过10%报危急)
脚本检测内存剩余: check_mem -w 90% -c 95% (内存空闲率90%以上报警告,95%以上报危急)
检测交换分区使用率: check_swap -w 20% -c 10% (交换分区剩余空间为总大小的20%警告,10%危急)
应 用 服 务 监 控 监控服务端口: check_tcp -H localhost -p 80 (主机与对应的端口号)
监控页面响应时间: check_http -H localhost -u http:\/\/localhost/test.jsp –w 5 –c 10 (检查页面,超过5s报警告,超过10s报危急)
脚本检测IP连接数: check_ips -w 200 –c 250 (IP连接数超过200报警告,超过250报危急)
流量 监控 监控server流量: Check_traffic -V 2c -C public -H localhost -I 2 -w 12,30 -c 15,35 -M –b (snmp版本,用户,主机,对应网卡,警告阀值,危急阀值)
补充mysql监控插件:
command[check_mysql_status]=/usr/local/nagios/libexec/check_mysql –H 127.0.0.1 -u dh -p 123456 -d hswx
附件1:自定义插件
1) 鉴于nagios自带的监控插件大都针对操作系统或通用服务运行情况,故编写一个针对本公司hswx产品服务进程检查的自定义插件脚本check_pid.sh。备注:等待59秒检测进程是否存在,不超过NRPE设定的超时时间
代码如下:
#!/bin/bash
#########################
# Author: zhousy
# Date: 2015.07.22
#########################
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN
. /root/.bash_profile
#返回0表示正常,返回1表示报警,返回2表示严重,返回3表示未定义
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
#STATE_UNKNOWN=3
usage(){
echo "正确用法: 脚本名 -m 模块名"
echo "支持模块:front,back,nginx,dms,mts,ads,sgs,grs,hsdgw,mes,mrs,jsgs"
}
#检查是否带有参数
if [ $# -lt 2 ]
then
usage;
exit 0
fi
# read input
while [ $# -gt 0 ]
do
case $1 in
-m)
shift
module=$1
;;
*)
echo "输入参数不正确"
usage;
exit 0
esac
shift
done
#模块分类
Categray(){
if [ "$module" == "mrs" ];then
PID=$(/bin/ps aux |grep $module".jar" |grep -v grep |awk '{print $2}')
elif [ "$module" == "jsgs" ];then
PID=$(/bin/ps aux |grep ${module:1:3}".jar" |grep -v grep |awk '{print $2}')
elif [ "$module" == "front" -o "$module" == "back" ];then
PID=$(/bin/ps aux |grep $module"-tomcat" |grep -v grep |awk '{print $2}')
elif [ "$module" == "nginx" ];then
PID=$(/bin/ps aux |grep 'nginx:\ master' |grep -v grep |awk '{print $2}')
else
PID=$(/sbin/pidof $module)
fi
}
#定时器
Set_Timer(){
while true
do
sleep $1
break
done
}
#检测进程状态
Check_Status(){
Categray;
if [ -z "$PID" ]
then
Set_Timer 59
Categray
if [ -z "$PID" ]
then
echo "CRITICAL - The $module process is dead!"
exit $STATE_CRITICAL
else
echo "WARNING - The $module process is restart"
exit $STATE_WARNING
fi
else
echo "OK - The $module process is running"
exit $STATE_OK
fi
}
#入参指定模块名
case $module in
front)
Check_Status;
;;
back)
Check_Status;
;;
nginx)
Check_Status;
;;
dms)
Check_Status;
;;
hsmts)
Check_Status;
;;
ads)
Check_Status;
;;
sgs)
Check_Status;
;;
grs)
Check_Status;
;;
hsdgw)
Check_Status;
;;
mes)
Check_Status;
;;
mrs)
Check_Status;
;;
jsgs)
Check_Status;
;;
*)
echo "请输入模块列表中指定的选项,列表外的产品暂不支持"
exit 0
;;
esac
监控主机增加配置内容:
command.cfg中声明插件的使用方法
# 'check pid' command definition
define command{
command_name check_pid
command_line $USER1$/check_pid.sh -m $ARG1$
}
说明: $ARG1$,即第一个入参,需要指明服务模块的名称。
host.cfg中声明check_nrpe调用方法
#******************************************************************
#Monitor pid of the service
#******************************************************************
define service{
use generic-service
host_name ZJHZ-HHY-RS1
service_description Rs Service Pid
check_command check_nrpe!check_rs_pid
}
注意:标红字体要与被监控机中nrpe.cfg中定义的监控名称保持一致。
模块列表:
{ rs, front , back , dms, mts, ads, sgs, grs, hsdgw, mrs, jsgs, mes, hls}
被监控机增加配置项
nrpe.cfg中声明插件具体执行参数
command[check_rs_pid]=/usr/local/nagios/libexec/check_pid.sh -m nginx
command[check_front_pid]=/usr/local/nagios/libexec/check_pid.sh -m front
command[check_back_pid]=/usr/local/nagios/libexec/check_pid.sh -m back
command[check_dms_pid]=/usr/local/nagios/libexec/check_pid.sh -m dms
command[check_hsmts_pid]=/usr/local/nagios/libexec/check_pid.sh -m hsmts
command[check_ads_pid]=/usr/local/nagios/libexec/check_pid.sh -m ads
command[check_sgs_pid]=/usr/local/nagios/libexec/check_pid.sh -m sgs
command[check_grs_pid]=/usr/local/nagios/libexec/check_pid.sh -m grs
command[check_hsdgw_pid]=/usr/local/nagios/libexec/check_pid.sh -m hsdgw
command[check_mrs_pid]=/usr/local/nagios/libexec/check_pid.sh -m mrs
command[check_jsgs_pid]=/usr/local/nagios/libexec/check_pid.sh -m jsgs
command[check_mes_pid]=/usr/local/nagios/libexec/check_pid.sh -m mes
command[check_hls_pid]=/usr/local/nagios/libexec/check_pid.sh -m nginx
command[check_fts_pid]=/usr/local/nagios/libexec/check_pid.sh -m fts
command[check_mq_pid]=/usr/local/nagios/libexec/check_pid.sh -m mq
command[check_rtsp_pid]=/usr/local/nagios/libexec/check_pid.sh -m rtsp
2) civil响应状态插件
配置修改:
Nrpe:
command[check_civil_status]=/usr/bin/python /usr/local/nagios/libexec/check_civil.py civil
Nagios-Server:
host.cfg中声明check_nrpe调用方法
#************************************************************************************
#Monitor the service of civil status
#************************************************************************************
define service{
use generic-service
host_name ZJHZ-HHY-WEB1
service_description Civil响应状态
check_command check_nrpe!check_civil_status
}
command.cfg中声明插件的使用方法
# 'check_civil_status' command definition
define command{
command_name check_civil_status
command_line /usr/bin/python $USER1$/check_civil.py civil
}
附件2:第三方插件脚本
监控内存:check_mem.shchmod +x check_mem.sh
chown nagios.nagios check_mem.sh
监控网卡流量:check_net_traffic.sh
chmod +x check_net_traffic.sh
chown nagios.nagios check_net_traffic.sh
网卡阀值计算:
千兆网卡:1000Mb/s = 125MB/s
双网卡绑定:能力值2倍 2000Mb/s = 250MB/s
command.cfg中声明插件的使用方法
# 'check_mem' command definition
define command{
command_name check_mem
command_line $USER1$/check_mem.sh -w $ARG1$ -c $ARG2$
}
# 'check_net_traffic' command definition
define command{
command_name check_net_traffic
command_line $USER1$/check_net_traffic.sh -d $ARG1$ -w $ARG2$ -c $ARG3$
}
监控主机host.cfg配置新增
#************************************************************************************
#Monitor the memory
#************************************************************************************
define service{
use generic-service
host_name ZJDH-JSCNVIEW-WEB-01
service_description 内存占用率
check_command check_nrpe!check_mem
}
#************************************************************************************
#Monitor the net traffic
#************************************************************************************
define service{
use generic-service
host_name ZJDH-JSCNVIEW-WEB-01
service_description 网卡流量
check_command check_nrpe!check_net_traffic
}
被监控机nrpe.conf配置新增
command[check_mem]=/usr/local/nagios/libexec/check_mem.sh -w 10 -c 5
command[check_net_traffic]=/usr/local/nagios/libexec/check_net_traffic.sh -d bond0 -w 80M -c 100M
# 2016-06-06新增
监控磁盘IO: check_diskio.sh
chmod +x check_diskio.sh
chown nagios.nagios check_diskio.sh
监控MYSQL死锁: check_deadlock.py
chmod +x check_deadlock.py
chown nagios.nagios check_deadlock.py
command.cfg中声明插件的使用方法
# 'check_diskio' command definition
define command{
command_name check_diskio
command_line $USER1$/check_diskio.sh –d $ARG1$ -w $ARG2$ -c $ARG3$
}
# 'check_mysql_errlog' command definition
define command{
command_name check_log_except
command_line $USER1$/check_deadlock.py -f $ARG1$
}
监控主机host.cfg配置新增
#************************************************************************************
#Monitor the diskio
#************************************************************************************
define service{
use generic-service
host_name ZJHZ-HHY-MYSQL-01
service_description 磁盘IO
check_command check_nrpe!check_diskio
}
#************************************************************************************
#Monitor the mysql except
#************************************************************************************
define service{
use generic-service
host_name ZJHZ-HHY-MYSQL-01
service_description MYSQL死锁
check_command check_nrpe!check_log_except
}
被监控机nrpe.conf配置新增
command[check_diskio]=/usr/local/nagios/libexec/check_diskio.sh -d sda2 -w 80 -c 90
command[check_log_except]=sudo python /usr/local/nagios/libexec/check_deadlock.py -f /home/nagios/mycheck.log
FAQ:
如果提示:NRPE: Unable to read output
原因:监控插件执行权限问题
解决:为脚本赋予执行权限,如果需要sudo执行的,要检查一下nagios用户是否加入sudo的免密切换参数配置。
echo "nagios ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
相关文章推荐
- 详解运维监控利器Nagios 系列(五)-利用插件扩展Nagios的监控功能
- 运维监控平台之zabbix详解1 推荐
- 运维监控平台之zabbix详解2 推荐
- LINUX开源监控平台Nagios(插件的安装和使用)
- LINUX开源监控平台Nagios(NRPE的安装配置)
- 今天装nagios监控的,用NRPE是提示缺少插件
- 详解运维监控利器Nagios 系列(三)-配置Nagios监控系统 (3)
- 详解运维监控利器Nagios 系列(三)-配置Nagios监控系统 (2)
- Eclipse 插件功能详解大全
- 运维监控利器Nagios:概念、结构和功能
- Nagios监控平台之二:nrpe监控远程Linux主机
- 监控平台(J2EE)声音告警程序功能设计与实现
- LINUX开源监控平台Nagios(NRPE的安装配置)
- 运维监控利器Nagios之:nagios配置详解
- 运维监控利器Nagios:概念、结构和功能
- 编译hadoop1.04 eclipse plugin插件 详解 在windows linux平台均可
- LINUX开源监控平台Nagios(警告功能配置)
- Linux系统运维之Nagios监控详解(原作者赵舜东)
- nagios监控http(nrpe插件)
- 详解运维监控利器Nagios 系列(二)-安装Nagios监控系统