侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

运维监控平台NRPE插件功能详解

2023-11-21 星期二 / 0 评论 / 0 点赞 / 62 阅读 / 28196 字

本文内容有参考部分网络资料 一 介绍nrpe架构 NRPE总共由两部分组成: –check_nrpe插件,位于在监控主机上 –NRPE daemon,运行在远程的linux主机上(通常就是被监控机

本文内容有参考部分网络资料

 

一 介绍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_nrpe

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$}"

        }

 

四、被监控机配置监控插件内容

vi /usr/local/nagios/etc/nrpe.cfg

 

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的一致]

 

五、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.sh

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

 

 

 

广告 广告

评论区