监控部署nagios+snmp

参看是否有安装:rpm -q gcc glibc glibc-common gd gd-devel xinetd openssl-devel
未安装基础支持套件的先安装: yum install -y gcc glibc glibc-common gd gd-devel xinetd openssl-devel  
yum -y install perl
创建nagios用户和用户组
# useradd -s /sbin/nologin nagios useradd -u 501 nagios
# mkdir /usr/local/nagios
# chown -R nagios.nagios /usr/local/nagios
查看nagios 目录的权限
# ll -d /usr/local/nagios/
编译安装Nagios  这边安装的最新版本4.0.8
# tar zxvf nagios-4.0.8.tar.gz
# cd nagios
# ./configure --prefix=/usr/local/nagios
# make all
 
make install
make install-init
make install-commandmode
make install-config
# chkconfig --add nagios
# chkconfig --level 35 nagios on
# chkconfig --list nagios
验证程序是否被正确安装
切换目录到安装路径(这里是/usr/local/nagios),看是否存在etc、bin、sbin、share、var 这五个目录,如果存在则可以表明程序被正确的安装到系统了。
 
 
安装Nagios 插件 这里的版本是 nagios-plugins-2.0.3
# tar zxvf nagios-plugins-1.4.16.tar.gz
# cd nagios-plugins-1.4.16
# ./configure --prefix=/usr/local/nagios
 
# make && make install
 
检查插件:
[root@namenode /]# /usr/local/nagios/libexec/check_ping -H www.baidu.com -w 100.0,10% -c 100.0,30% -p 10 -t 2
PING OK - Packet loss = 0%, RTA = 31.42 ms|rta=31.417000ms;100.000000;100.000000;0.000000 pl=0%;10;30;0
 
安装与配置Apache和Php
yum install httpd
yum install php php -m 查看php支持的模版
yum install php-gd 因为后面需要GD支持
配置apache
rpm -al httpd 查看 Apache的配置安装路径
找到apache 的配置文件/etc/httpd/conf/httpd.conf
找到: User Apache
Group Apache
修改i为: User nagios
Group nagios
然后找到 :DirectoryIndex index.html
修改为: DirectoryIndex index.html index.php
接着增加如下内容:AddType application/x-httpd-php .php
为了安全起见,一般情况下要让nagios 的web 监控页面必须经过授权才能访问,这需要增加验证配置,即在httpd.conf 文件最后添加如下信息:
#setting for nagios
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
AuthType Basic
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd //用于此目录访问身份验证的文件 Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory "/usr/local/nagios/share">
AuthType Basic
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd
Require valid-user
</Directory>
 
在上面的配置中,指定了目录验证文件htpasswd,下面要创建这个文件:
 
htpasswd 在/usr/bin/htpasswd中
htpasswd -c /usr/local/nagios/etc/htpasswd nagiosadmin 红色用户名
查看认证文件的内容
# cat /usr/local/nagios/etc/htpasswd
 
在浏览器器里输入http://ip/nagios/ 服务器IP
如果在除了配置机里其他电脑网页打不开 请添加防火墙
-I INPUT -p tcp --dport 80 -j ACCEPT
 
打开后提示如图下图,这是因为 getenforce 状态没有关闭 #setenforce 0 可以更改为 只记录不阻止 但重启后会失效
vi /etc/sysconfig/selinux
将SELINUX=enforcing修改为SELINUX=disabled, 重启系统后将会停止SElinux.
 
 
接下里就是创建要监控的主机,还有监控的服务了
 
改cgi.cfg文件里的一个参数 use_authentication=1 将1改为0,重启nagios即可
 
这里我使用check_snmp_ 脚本去监控服务所以要先安装check_snmp_各种脚本
wget http://nagios.manubulon.com/nagios-snmp-plugins.1.1.1.tgz
之前已经把安装好了check_snmp_ libexec的目录打包了,现在只要上传替换 /usr/local/nagios/路径下的 libexec 目录就可以
/usr/local/nagios/libexec
替换好后在commands.cfg中加入check_snmp_ 脚本的各项参数 以2个为列
在templates.cfg中添加hosts-pnp属性 这边定义了PNP监控中图标就出现了
define host {
name hosts-pnp
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_
register 0
}
 
define service {
name services-pnp
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
register 0
}
创建需要监控的主机配置 这边用的是hello.cfg 还有 监控的服务配置 这里用的是fuwu.cfg 2个配置的名字可以随便取自己分的清楚就可以
hello.cfg 内容如下
#############RA-10.9##############################
define host{
use linux-server,hosts-pnp linux-server,linux-server引自templates 在其中定义了2项主机的属性
host_name RA-110.9 主机名这个自定义
alias bs-9 别名自定义
address 461.164.1130.98 监控主机的IP地址
check_command check-host-alive
}
 
############hz-186.227############################
define host{
use linux-server,hosts-pnp
host_name HZ_186.227
alias bs-227
address 12.224.1846.227
check_command check-host-alive
}
 
#############LN-217.12############################
define host{
use linux-server,hosts-pnp
host_name LN_217.12
alias bs-12
address 61.176.217.12
check_command check-host-alive
###################################################
 
fuwu.cfg 内容如下 以RA-110.9 一台机器为列:
###################RA-10.9###########################
define service{
use local-service,services-pnp linux-server,linux-server引自templates.cfg 在其中定义了2项主机的属性
host_name RA-110.9
service_description Disk 监控服务的名称 自定义知道此项监控的什么服务就行
check_command check_snmp_storage.pl!snmp87755600!/!98%!99% 蓝色是在command.cfg中定义的服务 红色以!区分定义的参数
}
define service{
use local-service,services-pnp
host_name RA-110.9
service_description CPU
check_command check_snmp_load!snmp87755600!75%!90% 红色参数是指到达多少值 警告 危险 当机 未知
}
define service{
use local-service,services-pnp
host_name RA-110.9
service_description network
check_command check_snmp_network1!61.164.110.9!snmp87755600!"eth1"!125000!125000!125000!125000
}
#################################################
在nagios.cfg 中加入 hell.cfg fuwu.cfg
 
这时重启nagios 去浏览器中查看你会发现是
有错误,因为当初的check_snmp_是直接拷入的 所以不能直接使用
运行下check_snmp_脚本看下确实什么,下图中可以发现缺少 Net/SNMP.pm
 
相应的perl模块没有安装,这边有个简单的安装方法
先yum 安装 yum install net-snmp yum -y install perl-CPAN
 
# perl -MCPAN -e shell
cpan> install Net::SNMP                         install +缺少的模块名称安 ,回车后会自动安装
安装好后 重启 nagios 过几分钟在去检查
 
接下来做图像监控
需要pnp 安装钱需要安装 rrdtool   使用yum 安装  yum install rrdtool 
 
pnp安装使用现在的最新版  pnp4nagios-head.tar
 
tar zxvf pnp4nagios-head.tar.gz
./configure 
缺少 perl 模块Time::HiRes 用上面的方法安装
make all
make fullinstall
修改 nagios.cfg
process_performance_data=0 修改为 1
加入:
#
# service performance data
#
service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file
 
#
# host performance data starting with Nagios 3.0
#
host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file
 
 
修改 commadnds.cfg
找到 process-service-perfdata-file process-host-perfdata-file
define command{
command_name process-service-perfdata-file
command_line /bin/mv /usr/local/pnp4nagios/var/service-perfdata /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$
}
 
define command{
command_name process-host-perfdata-file
command_line /bin/mv /usr/local/pnp4nagios/var/host-perfdata /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$
}
 
输入命令:
/usr/local/pnp4nagios/bin/npcd -d -f /usr/local/pnp4nagios/etc/npcd.cfg #这条命令很重要,不执行不出图
上面pnp4nagios的设置参考官网:https://docs.pnp4nagios.org/pnp-0.6/config#bulk_mode_with_npcd 模式是:Bulk Mode with NPCD
在httpd.conf中加入pnp的权限
vim /etc/httpd/conf/httpd.conf
Alias /pnp4nagios "/usr/local/pnp4nagios/share"
 
<Directory "/usr/local/pnp4nagios/share">
AllowOverride None
Order allow,deny
Allow from all
#
# Use the same value as defined in nagios.conf
#
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd
Require valid-user
<IfModule mod_rewrite.c>
# Turn on URL rewriting
RewriteEngine On
Options symLinksIfOwnerMatch
# Installation directory
RewriteBase /pnp4nagios/
# Protect application and system files from being viewed
RewriteRule "^(?:application|modules|system)/" - [F]
# Allow any files or directories that exist to be displayed directly
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteCond "%{REQUEST_FILENAME}" !-d
# Rewrite all other URLs to index.php/URL
RewriteRule "^.*$" "index.php/$0" [PT]
</IfModule>
</Directory>
 
重启nagios httpd service nagios restart service httpd restart
去浏览器点监控图 提示需要删除/usr/local/pnp4nagios/share/install.php 此文件
rm /usr/local/pnp4nagios/share/install.php
 
在去点击监控图 提示/var/lib/php/session 目录没有权限
 
加权限 chown nagios /var/lib/php/session
在打开测试 成功了 
 
设置nagios邮件报警
先开sendmail邮件系统            service sendmail start
如果没有安装,可以用yum 安装下   yum install sendmail*
重启sendmail                   service sendmail restart
发封测试邮件                    echo "test" | mail xxxx@xxx.com   这里的邮箱最好别用QQ邮箱 因为QQ邮箱可能会拒绝接收此类邮件
 
配置nagios中报警邮箱
vim /usr/local/nagios/etc/objects/contacts.cfg 
define contact{
        contact_name                    nagiosadmin             ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined above)
        alias                           Nagios Admin            ; Full name of user
        email                           在这里输入邮箱           ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
        }
多人的话用,隔开
 
设置报警模式
vi /usr/local/nagios/etc/objects/templates.cfg
notify-service-by-email 和  notify-host-by-email    是在command.cfg那里定义的
vi /usr/local/nagios/etc/objects/command.cfg
这里已经默认配置好,我们不用修改直接调用就是了
接着重启nagios服务
service nagios restart
 
这样就配置完成了
 
##########################################################
生产环境下监控服务器添加

 

0.检查是否有SNMP服务,若没有,请先安装

service snmpd status #检查是否有SNMP服务

yum install -y net-snmp #若没有则安装 

1.先编辑Snmp的配置文件,设置安全的验证方式

vi /etc/snmp/snmpd.conf

在这边自己公司直接是在snmpd.conf中添加 rocommunity snmp878888889

 

vim /etc/init.d/snmpd

去掉日志
 
 

2、验证方式有两种,v2c和v3,推荐后者。

(1)v2c验证方式添加比较简单,在snmpd.conf中添加以下内容

rocommunity kwxgd 60.195.249.83

rocommunity kwxgd 60.195.252.107

rocommunity kwxgd 60.195.252.110

 
以上代码解释:
rocommunity 表示一个只读的访问权限
kwxgd表示v2c的帐号
后面的IP表示授权访问IP(以上三组为监控宝监控点的IP,意味着只有监控宝才能访问您CentOS的SNMP)
以上配置中只有“kwxgd”是需要进行修改的,在监控宝上添加被监控的服务器时需要提供这个字符串。(2)添加v3验证方式LinuxVPS学习者建议您使用v3这种最新的验证方式。早期的Linux发行版中默认的SNMP可能不支持v3,需要自己手工编译其它支持v3的SNMP(如Net-SNMP 5以上版本,CentOS 5.5测试通过。)
同样,在snmpd.conf中添加以下内容
rouser kwxgd auth
createUser kwxgd MD5 mypassword
第一行“rouser”用于设定只读帐号的类型,“kwxgd”设定用户名,“auth”指明连接时需要验证。
第二行的意思是创建一个名为“kwxgd”的用户,密码为“mypassword”,并用MD5进行加密传输。
注意,创建用户的密码要8个字节以上,否则设置会失败。而且一旦snmpd启动后,出于安全考虑,以上两行配置会被snmpd自动删除,但它会将这些配置以密文的形式记录在其它文件中,重启snmpd不需要再次重复添加以上内容,除非你希望创建新的用户(或覆盖帐户,如修改帐户密码密码)。
 

(1)开启SNMP

在SSH输入以下指令即可运行:
service snmpd start
(2)关闭SNMP
在SSH输入以下指令即可关闭:
service snmpd stop

(3)重启SNMP

在SSH输入以下指令即可重启:
service snmpd restart

5、设置SNMP开机自动启动

 
成功配置完毕,建议将SNMP设置为开机自动启动(或取消)。
(1)设置开机自动启动,在SSH中输入以下命令
chkconfig snmpd on

(2)关闭开机自动启动,在SSH中输入以下命令

chkconfig snmpd off

 
6、增强的SNMP安全性
(2011年11月8日更新)
 
网络上无聊的人很多,为了确保安全,建议在Iptables加上以下规则
在SSH中执行以下命令,关于Iptables的基本操作,请参阅《iptablesf防火墙的基本应用
iptables -A INPUT -p udp -s 60.195.249.83 --dport 161 -j ACCEPT
iptables -A INPUT -p udp -s 60.195.252.107 --dport 161 -j ACCEPT
iptables -A INPUT -p udp -s 60.195.252.110 --dport 161 -j ACCEPT
 
以上命令执行完毕后,执行以下命令将规则写入到iptables配置文件中,下次开机时依然生效。
service iptables save
以上做的目的,就是只让指定的监控服务器(IP)才能与您的SNMP服务建立连接。
#vi /etc/init.d/snmpd 
本公司直接删除日志不记录
下面是修改日志级别
注释掉下面这一行,从新写入红色部分 2. #OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a" OPTIONS="-LS 4 d -p /var/run/snmpd.pid -a" 
4. 重启snmp服务 #/etc/init.d/snmpd restart
5. Stopping snmpd: [ OK ] 
6. Starting snmpd: [ OK ]
centos 7 SNMP日志修改
 
用snmp获取磁盘信息的时候,当硬盘大小超过16T,导致HOST-RESOURCES-MIB::hrStorageAllocationUnits* HOST-RESOURCES-MIB::hrStorageSize的值不正确,原因是根据RFC 2790中的定义hrStorageSize是32bit整形,超过了他的表示范围
解决办法就是修改/etc/snmp/snmpd.conf
增加一行
realStorageUnits 0
realStorageUnits默认为1
 
贴一下解释,直接拷贝的 man snmpd.conf
realStorageUnits
              controlls how the agent reports hrStorageAllocationUnits, hrStorageSize and hrStorageUsed in  hrStorageTable.   With
              this  option  set to ’0’, the agent re-calculates these values for big storage drives with small allocation units so
              hrStorageAllocationUnits x hrStorageSize gives real size of the storage.
 
              Example:
                     Linux xfs 16TB filesystem with 4096 bytes large blocks will be reported as  hrStorageAllocationUnits  =  8192
                     and hrStorageSize = 2147483647, so 8192 x 2147483647 gives real size of the filesystem (=16 TB).
 
              Setting  this  directive to ’1’ (=default) turns off this calculation and the agent reports real hrStorageAllocatio-
              nUnits, but it might report wrong hrStorageSize for big drives because the value won’t fit into Integer32.  In  this
              case, hrStorageAllocationUnits x hrStorageSize won’t give real size of the storage.
 
说明
该变量用于指定一个目录,目录里包含有将用于Nagios监控对象的对象配置文件。所有的在这个目录下的且以.cfg为扩展名的文件将被作为配置文件来处理。另外,Nagios将会递归该目录下的子目录并处理其子目录下的全部配置文件。你可以把配置放入不同的目录并且用cfg_dir=语句来指向每个待处理的目录。
 
2.etc/objects/commands.cfg(命令配置文件)
 
  1. #定义通知的方式,主机发生故障通知和服务发送故障通知 
  2. define command{ 
  3.         command_name    notify-host-by-email 
  4.         command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $H 
  5. OSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ 
  6.         } 
  7. #定义通知的方式,服务发生故障通知和服务发送故障通知 
  8. # 'notify-service-by-email' command definition 
  9. define command{ 
  10.         command_name    notify-service-by-email 
  11.         command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nS 
  12. tate: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SE 
  13. RVICESTATE$ **" $CONTACTEMAIL$ 
  14.         } 
  15. #定义检测主机是否存活的命令,command_name是最后在服务中的引用名,而它是调用的check_ping命令来实现的 
  16. define command{ 
  17.         command_name    check-host-alive 
  18.         command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5 
  19.         } 
  20. #定义检测主机cpu负载的命令 
  21. define command{ 
  22.         command_name    check_local_load 
  23.         command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$ 
  24.         } 
  25. #定义检测主机进程的命令 
  26. define command{ 
  27.         command_name    check_local_procs 
  28.         command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$ 
  29.         } 
  30. #定义检测主机tcp端口的命令 
  31. define command{ 
  32.         command_name    check_tcp 
  33.         command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$ 
  34.         } 
总结:
命令配置文件:
格式:    
define command{
    command_name    命令名
    command_line       命令调用的实际插件路径以及阀值
    }
样例:
cfg_file=/usr/local/nagios/etc/hosts.cfg
cfg_file=/usr/local/nagios/etc/servers.cfg
cfg_file=/usr/local/nagios/etc/commands.cfg
 
说明:
该变量用于指定一个包含有将用于Nagios监控命令的配置文件。对象配置文件中包括有命令名以及实际插件路径以及阀值的定义。
 
3./etc/objects/templates.cfg(样本配置文件)
 
  1. 此定义的为类,也就是日后定义主机或者服务时指定的name引用 
  2. define service{ 
  3.         name                            generic-service   #通过name来指定服务类名,这里的generice-service是一个类名  
  4.         active_checks_enabled               1             #设定启用活动监测服务 
  5.         passive_checks_enabled              1             #设定启用被动监测服务 
  6.         parallelize_check                   1             #设定启用并发活动监测服务 
  7.         obsess_over_service                 1             #设定启用服务防停滞 
  8.         check_freshness                     0             #设定关闭更新监测 
  9.         notifications_enabled               1             #设定启用事件通知   
  10.         event_handler_enabled               1             #设定启用事件处理程序 
  11.         flap_detection_enabled              1             #设定启用状态抖动监测 
  12.         failure_prediction_enabled          1             #设定启用故障预测 
  13.         process_perf_data                   1             #设定启用进程性能数据记录 
  14.         retain_status_information           1             #设定启用状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的状态数据。 
  15.         retain_nonstatus_information        1             #设定启用非状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的非状态数据 
  16.         is_volatile                         0             #设定服务非易失 
  17.         check_period                      24x7            #设定监控的时间段 
  18.         max_check_attempts                  3             #设定监测失败后最多尝试次数 
  19.         normal_check_interval              10             #设定正常监测服务的间隔,单位分 
  20.         retry_check_interval                2             #设定监测失败后尝试的间隔,单位分 
  21.         contact_groups                  admins            #定义通知联系人租 
  22.         notification_options            w,u,c,r ,d        #设定监测指定服务产生的事件通知的条件选项。这里后面跟上一些级别类型参数: 
  23.                                                                w代表warning告警; 
  24.                                                                u代表unknown未知; 
  25.                                                                c代表critical严重; 
  26.                                                                r代表recover恢复; 
  27.                                                                d代表down奔溃。 
  28.         notification_interval              60               #设定服务通知的间隔 
  29.         notification_period               24x7              #设定服务通知运行时间 
  30.          register                           0               #设定register表明本段定义的是一个服务类,而不是具体的服务   
  31.         } 
        
4.etc/objects/localhost.cfg(本机监控文件)
 
  1. define host{                         #此定义的为监控主机的配置文件 
  2.         use              linux-server       #引用类,在templates.cfg中预定义 
  3.         host_name        localhost          #指定主机名,并不是实际机器的主机名,自己定义,方便以后在定义服务时调用 
  4.         alias            localhost          #别名 
  5.         address          127.0.0.1          #指定监控主机的地址 
  6.         } 
  7. define service{                       #此定义为监控主机服务的配置文件 
  8.         use              local-service       #引用类,在templates.cfg中预定义 
  9.         host_name        localhost           #指定主机名,在host段中预定义 
  10.         service_description  PING            #监控服务的名称,也就是在web页面上显示的监控项目 
  11.         check_command    check_ping!100.0,20%!500.0,60%    #具体监控的命令以及阀值 
  12.         }  
备注: 以上定义的主机和服务,没有指定通知联系人,那是因为在其中引用了类,而templates.cfg中定义的类是有指定联系人的。
      
5.etc/objects/contacts.cfg(联系人配置文件)
 
  1. define contact{ 
  2.         contact_name        nagiosadmin     #定义联系人的名称,方便以后在监控项目中调用    
  3.         use                 generic-contact #引用类,在templates.cfg中预定义 
  4.         alias               Nagios Admin    #别名    
  5.         email               test@abc.com    #邮件地址 
  6.         } 
  7. define contactgroup{ 
  8.         contactgroup_name    admins         #定义联系人组的名称,方便一次性发送多人 
  9.         alias                Nagios Administrators   #别名 
  10.         members              nagiosadmin    #定义组成员,这里nagiosadmin,也就是上面contact_name的值 
  11.         } 
        
6.etc/objects/timeperiods.cfg(时间段配置文件)
 
  1. define timeperiod{                        #定义时间段的配置文件 
  2.         timeperiod_name 24x7              #指定时间段的名称,方便以后在服务里调用 
  3.         alias           24 Hours A Day, 7 Days A Week   #别名 
  4.         sunday          00:00-24:00       #具体的时间段定义 
  5.         monday          00:00-24:00       #一周24小时 
  6.         tuesday         00:00-24:00 
  7.         wednesday       00:00-24:00 
  8.         thursday        00:00-24:00 
  9.         friday          00:00-24:00 
  10.         saturday        00:00-24:00 
  11.         } 
  12. define timeperiod{                        #定义时间段的配置文件 
  13.         timeperiod_name workhours         #指定时间段的名称,方便以后在服务里调用 
  14.         alias           Normal Work Hours #别名 
  15.         monday          09:00-17:00       #具体的时间段定义 
  16.         tuesday         09:00-17:00       #周一到周五的上班时间 
  17.         wednesday       09:00-17:00 
  18.         thursday        09:00-17:00 
  19.         friday          09:00-17:00 
  20.         } 
 
当nagios安装完毕后只能使用ip来访问,但是现在机房大部分有设置有白名单制度,不允许使用ip访问,所以我们就要
想办法来使用域名访问
实现过程如下
 
ln -s /usr/local/nagios/share/ /var/www/html/nagios
vi /etc/httpd/conf/httpd.conf
#-------------------------nagios.linuxpub.net-----------------------------
<VirtualHost *:80>
DocumentRoot /var/www/html/nagios
ServerName nagios.linuxpub.net
<Directory /var/www/html/nagios>
options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
然后重启httpd服务即可用域名来访问
#########################################################################################################
[root@localhost etc]# more objects/commands.cfg
 
################################################################################
#
# SAMPLE NOTIFICATION COMMANDS
#
# These are some example notification commands.  They may or may not work on
# your system without modification.  As an example, some systems will require
# you to use "/usr/bin/mailx" instead of "/usr/bin/mail" in the commands below.
#
################################################################################
 
# 'notify-host-by-email' command definition
#define command{
#        command_name    notify-host-by-email
#        command_line    echo "Notification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTO
UTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **"  $CONTACTEMAIL$
#           }
 
# 'notify-service-by-email' command definition
#define command{
#        command_name    notify-service-by-email
#        command_line    echo "Notification Type: $NOTIFICATIONTYPE$\nService: $SERVICEDESC$\nState: $SERVICESTATE$\nAddress: $HOSTADDRESS$\nInf
o: $SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTNAME$/$SERVICEDESC$ is $SERVICESTAT
E$ **"  $CONTACTEMAIL$
#          }
 
 
define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "Nagios\nType: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nIn
fo: $HOSTOUTPUT$\nDate/Time: $LONGDATETIME$\n" | /usr/local/nagios/libexec/sendEmail -u "$NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE
$ " -f nagios_boosj@163.com -t $CONTACTEMAIL$ -s smtp.163.com -xu nagios_boosj -xp boosj87755600     
          }
 
define command{
       command_name    notify-service-by-email
       command_line    /usr/bin/printf "%b" "Nagios\nType: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRES
S$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\nAdditional Info:\n$SERVICEOUTPUT$\n" | /usr/local/nagios/libexec/sendEmail -u " $NOTIFIC
ATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" -f nagios_boosj@163.com -t $CONTACTEMAIL$ -s smtp.163.com -xu nagios_boos
j -xp boosj87755600
     }
 
 
 
################################################################################
#
# SAMPLE HOST CHECK COMMANDS
#
################################################################################
 
 
# This command checks to see if a host is "alive" by pinging it
# The check must result in a 100% packet loss or 5 second (5000ms) round trip
# average time to produce a critical error.
# Note: Five ICMP echo packets are sent (determined by the '-p 5' argument)
 
# 'check-host-alive' command definition
define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 250.0,40% -c 300.0,60% -p 5
        }
 
 
###############################################################################
#snmp
#   define command {
#        command_name check_snmp_network
#        command_line $USER1$/check_snmp_netint_21.pl -2 -f -e -H $HOSTADDRESS$ -C $ARG1$ -n $ARG2$ -w $ARG3$ -c $ARG4$ -d 200 -q -k -y -M -B  -
m -P "$SERVICEPERFDATA$" -T "$LASTSERVICECHECK$"
#  }
 
################################################################################
#
# SAMPLE SERVICE CHECK COMMANDS
#
# These are some example service check commands.  They may or may not work on
# your system, as they must be modified for your plugins.  See the HTML
# documentation on the plugins for examples of how to configure command definitions.
#
# NOTE:  The following 'check_local_...' functions are designed to monitor
#        various metrics on the host that Nagios is running on (i.e. this one).
################################################################################
 
# 'check_snmp_postfixqueue' command definition
define command{
        command_name    check_snmp_postfixqueue
        command_line    $USER1$/check_snmp_postfixqueue $ARG1$ $ARG2$ $ARG3$
        }
 
 
# 'check_smtp' command definition
define command{
        command_name    check_smtp
        command_line    $USER1$/check_smtp -S -H $ARG1$ -U $ARG2$ -P $ARG3$ -C $ARG4$ -R $ARG5$ -C $ARG6$ -R $ARG7$ -w 2 -c 5 -t 10
        }
 
 
# 'check_switches' command definition
define command{
        command_name    check_switches
        command_line    $USER1$/check_switches $ARG1$ $ARG2$
        }
 
 
# 'check_local_disk' command definition
define command{
        command_name    check_local_disk
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
        }
 
 
# 'check_local_load' command definition
define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        }
 
 
# 'check_local_procs' command definition
define command{
        command_name    check_local_procs
        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
        }
 
 
# 'check_local_users' command definition
define command{
        command_name    check_local_users
        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
        }
 
 
# 'check_local_swap' command definition
define command{
     command_name     check_local_swap
     command_line     $USER1$/check_swap -w $ARG1$ -c $ARG2$
     }
 
# 'check_mem' command definition
define command{
        command_name    check_mem
        command_line    $USER1$/check_mem.sh -w $ARG1$ -c $ARG2$
        }
 
define command{
       command_name check_iostat
       command_line $USER1$/check_iostat -w $ARG1$ -c $ARG2$
       }
 
define command{
       command_name check_ntp
       command_line $USER1$/check_ntp -H 192.168.3.206 -w $ARG1$ -c $ARG2$
       }
 
 
# 'check_local_sensors' command definition
define command{
        command_name    check_temp_sp
        command_line    $USER1$/check_check_sensors -w $ARG1$ -c $ARG2$
        }
 
 
# 'check_local_mrtgtraf' command definition
define command{
     command_name     check_local_mrtgtraf
     command_line     $USER1$/check_mrtgtraf -F $ARG1$ -a $ARG2$ -w $ARG3$ -c $ARG4$ -e $ARG5$
     }
 
 
# 'check_traffic' command definitiondefine command
define command{
  command_name check_traffic 
    command_line  $USER1$/check_traffic.sh -V 1 -C nagios79admin4671 -H $HOSTADDRESS$ -I $ARG1$ -w $ARG2$ -c $ARG3$ -K -b
}
 
define command{
  command_name check_traffic_sw
  command_line  $USER1$/check_traffic.sh -V 1 -C $ARG1$ -H $ARG2$ -I $ARG3$ -w $ARG4$ -c $ARG5$ -M -b
}
 
################################################################################
# NOTE:  The following 'check_...' commands are used to monitor services on
#        both local and remote hosts.
################################################################################
 
# 'check_ftp' command definition
define command{
        command_name    check_ftp
        command_line    $USER1$/check_ftp -H $HOSTADDRESS$ -p $ARG1$ -w $ARG2$ -c $ARG3$
        }
 
 
# 'check_hpjd' command definition
define command{
        command_name    check_hpjd
        command_line    $USER1$/check_hpjd -H $HOSTADDRESS$ $ARG1$
        }
 
 
# 'check_snmp' command definition
define command{
        command_name    check_snmp
        command_line    $USER1$/check_snmp -H $HOSTADDRESS$ $ARG1$
        }
 
 
# 'check_http' command definition
define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }
# 'check_web' command definition
define command{
        command_name    check_web
        command_line    $USER1$/check_http -I $HOSTADDRESS$ -H $ARG1$ -u $ARG2$
        }
 
# 'check_web' command definition
define command{
        command_name    check_web_ip
        command_line    $USER1$/check_http -I $ARG1$ -H $ARG2$ -u $ARG3$ -p $ARG4$
        }
 
# 'check_ssh2' command definition
#define command{
#     command_name     check_ssh2
#     command_line     $USER1$/check_ssh -p $ARG1$ $HOSTADDRESS$
#     }
 
 
# 'check_dhcp' command definition
define command{
     command_name     check_dhcp
     command_line     $USER1$/check_dhcp $ARG1$
     }
 
 
# 'check_ping' command definition
define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }
 
define command{
        command_name    check_ping_ip
        command_line    $USER1$/check_ping -H $ARG1$ -w $ARG2$ -c $ARG3$ -p 5
        }
 
# 'check_pop' command definition
define command{
        command_name    check_pop
        command_line    $USER1$/check_pop -H $HOSTADDRESS$ $ARG1$
        }
 
 
# 'check_imap' command definition
define command{
        command_name    check_imap
        command_line    $USER1$/check_imap -H $HOSTADDRESS$ $ARG1$
        }
 
 
# 'check_smtp' command definition
#define command{
#        command_name    check_smtp
#        command_line    $USER1$/check_smtp -H $HOSTADDRESS$ $ARG1$
#        }
 
# 'check_tcp' command definition
define command{
        command_name    check_lan_tcp
        command_line    $USER1$/check_tcp -H $ARG1$ -p $ARG2$ -w $ARG3$ -c $ARG4$ -t $ARG5$
        }
 
# 'check_tcp' command definition
define command{
     command_name     check_tcp
     command_line     $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -t $ARG2$
     }
 
 
define command{
        command_name    check_tcp1
        command_line    $USER1$/check_tcp -H $ARG1$ -p $ARG2$ -t $ARG3$
        }
 
 
 
define command{
        command_name    check_tcp80
        command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -t $ARG2$ -w $ARG3$ -c $ARG4$
        }
 
 
# 'check_udp' command definition
define command{
     command_name     check_udp
     command_line     $USER1$/check_udp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
     }
 
define command{
     command_name     check_nrpe
     command_line     $USER1$/check_nrpe -t 15 -H $HOSTADDRESS$ -c $ARG1$
     }
 
define command{
        command_name    check_ssh
        command_line    $USER1$/check_tcp  -H $HOSTADDRESS$ -p $ARG1$ -w $ARG2$ -c $ARG3$ -t $ARG4$
        }
 
# 'check_nt' command definition
define command{
        command_name    check_nt
        command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s nagios79admin4671 -v $ARG1$ $ARG2$
        }
 
 
# 'check_nginx' command definition
define command{
        command_name check_nginx_status
        command_line $USER1$/check_nginx_status.sh -u $ARG1$ -p $ARG2$ -w $ARG3$ -c $ARG4$
}
 
 
define command{
     command_name check_nginx
     command_line $USER1$/check_nginx_stauts.pl $HOSTADDRESS$:$ARG1$ $ARG2$ $ARG3$ $ARG4$
}
 
# 'check_openmanage' command definition
define command{
        command_name    check_openmanage
        command_line    $USER1$/check_openmanage -H $HOSTADDRESS$ -C $ARG1$ --only $ARG2$
        }
 
 
# 'check_snmp_stor" command definition
define command{
        command_name    check_snmp_stor
        command_line    $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ -C $ARG1$ -m $ARG2$ -w $ARG3$ -c $ARG4$ -f
        }
 
define command{
        command_name    check_snmp_stor1
        command_line    $USER1$/check_snmp_storage.pl -H $ARG1$ -C $ARG2$ -m $ARG3$ -w $ARG4$ -c $ARG5$ -f
        }
         
         
define command{
        command_name    check_snmp_mem1
        command_line    $USER1$/check_snmp_storage.pl -H $ARG1$ -C $ARG2$ -2 -m $ARG3$ -w $ARG4$ -c $ARG5$ -f
        }
         
# 'check_snmp_load" command definition
define command{
        command_name    check_snmp_load
        command_line    $USER1$/check_snmp_load.pl -H $HOSTADDRESS$ -C $ARG1$  -w $ARG2$ -c $ARG3$ -f 
        }
define command{
        command_name    check_snmp_load1
        command_line    $USER1$/check_snmp_load.pl -H $ARG1$ -C $ARG2$  -w $ARG3$ -c $ARG4$  -f
        }
 
define command{
       command_name check_snmp_cpu1
       command_line $USER1$/check_snmp_load.pl -H $ARG1$ -C $ARG2$ -2 -w $ARG3$ -c $ARG4$ -f
       }         
 
# 'check_snmp_proc" command definition
#define command{
#        command_name    check_snmp_proc
#        command_line    $USER1$/check_snmp_process.pl $HOSTADDRESS$  $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$
#        }
 
# 'check_snmp_proc" command definition
define command{
        command_name    check_snmp_proc
        command_line    $USER1$/check_snmp_proc.sh $HOSTADDRESS$  $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$
        }
 
 
# 'check_snmp_conn" command definition
define command{
        command_name    check_snmp_conn
        command_line    $USER1$/check_snmp_conn.sh  $HOSTADDRESS$  $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$
        }
 
 
# 'check_snmp_network" command definition
define command{
        command_name    check_snmp_network
        command_line    $USER1$/check_snmp_int.pl -H $HOSTADDRESS$ -C $ARG1$ -n $ARG2$ -kB  -Y -w $ARG3$,$ARG4$ -c $ARG5$,$ARG6$ -f
        }
define command{
        command_name    check_snmp_network1
        command_line    $USER1$/check_snmp_int.pl -H $ARG1$ -C $ARG2$ -n $ARG3$ -kB  -Y -w $ARG4$,$ARG5$ -c $ARG6$,$ARG7$ -f
        }
 
define command{
        command_name    check_snmp_network2
        command_line    $USER1$/check_snmp_int.pl -H $ARG1$ -C $ARG2$ -2 -n $ARG3$ -kB  -Y -w $ARG4$,$ARG5$ -c $ARG6$,$ARG7$ -f
        }
                   
define command{
        command_name check_snmp_cpu
        command_line $USER1$/check_snmp_cpu.sh  -H $HOSTADDRESS$  -C $ARG1$
        }
 
define command{
        command_name                    check_remote_battery
        command_line                    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
 
define command{
        command_name                    check_remote_cpu
        command_line                    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
 
define command{
        command_name                    check_remote_fans
        command_line                    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$
}
 
define command{
        command_name                    check_remote_hardware
        command_line                    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
 
define command{
        command_name                    check_remote_temp
        command_line                    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$
}
 
define command{
        command_name                    check_remote_voltage
        command_line                    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
 
define command{
        command_name                    check_pe_omreport
        command_line                    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
 
# check_raid
define command{
        command_name                    check_raid
        command_line                    $USER1$/check_raid $ARG1$
}
 
 
# check_raid_status
define command{
        command_name                    check_raid_status
        command_line                    $USER1$/check_nrpe -H $HOSTADDRESS$  -c $ARG1$
}
 
 
define command{
         command_name    check_nginxstatus
         command_line    $USER1$/check_nginx.sh -H $ARG1$ -P $ARG2$ -p $ARG3$ -n $ARG4$  -w $ARG5$ -c $ARG6$
         }
 
#'check_mysql_health'
define command{
        command_name    check_mysql_health
        command_line    $USER1$/check_mysql_health --hostname $ARG1$ --port $ARG2$ --username $ARG3$ --password $ARG4$ --mode $ARG5$ --warning $
ARG6$ --critical $ARG7$
        }
 
#check_nginx_error
 
define command{
       command_name check_nginx_error
       command_line $USER1$/check_nginx_error.sh --url $ARG1$  --host $ARG2$
}
 
 
 
################################################################################
#
# SAMPLE PERFORMANCE DATA COMMANDS
#
# These are sample performance data commands that can be used to send performance
# data output to two text files (one for hosts, another for services).  If you
# plan on simply writing performance data out to a file, consider using the
# host_perfdata_file and service_perfdata_file options in the main config file.
#
################################################################################
 
# 'process-host-perfdata' command definition
define command{
        command_name    process-host-perfdata
        command_line    /usr/bin/perl  /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
        }
# 'process-service-perfdata' command definition
define command{
        command_name    process-service-perfdata
        command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl
        }
 
define command{
       command_name    process-service-perfdata-file
       command_line    /bin/mv  /usr/local/pnp4nagios/var/service-perfdata  /usr/local/pnp4nagios/var/spool/service-perfdata.$TIMET$
}
 
define command{
       command_name    process-host-perfdata-file
       command_line    /bin/mv  /usr/local/pnp4nagios/var/host-perfdata  /usr/local/pnp4nagios/var/spool/host-perfdata.$TIMET$
}
###############################################################################################
 

利用 NRPE 扩展 Nagios 功能

NRPE 是 Nagios 的一个功能扩展,它可在远程 Linux 和 UNIX 主机上执行插件程序。通过在远程服务器上安装 NRPE 构件及 Nagios 插件程序来向 Nagios 监控平台提供该服务器的一些本地情况,如 CPU 负载、内存使用、硬盘使用,服务等。这里将 Nagios 监控平台称为 Nagios 服务器 端,而将远程被监控的服务器称为 Nagios 客户端。
下图为 NRPE 构件监控远程主机本地信息的运行原理:
图 17. 监控远程主机原理图
监控远程主机原理图

NRPE 组成部分与检测类型

NRPE 总共由两部分组成:
check_nrpe 插件,位于监控主机上
NRPE daemon,运行在远程被监控的 Linux 主机上
当监控远程 Linux/UNIX 主机服务或资源时,工作流程如下:
nagios 会运行 check_nrpe 这个插件,并且会告诉它需要检查什么;
check_nrpe 插件会连接到远程的 NRPE daemon,所用的方式是 SSL;
NRPE daemon 会运行相应的 Nagios 插件来执行检查动作;
NPRE daemon 将检查的结果返回给 check_nrpe 插件,插件将其递交给 Nagios 做处理。
NRPE daemon 需要 Nagios 插件安装在远程的 Linux 主机上,否则 daemon 不能做任何的监控。
NRPE 的检测类型分为两种:
直接检测:检测的对象是运行 NRPE 的那台 Linux 主机的本地资源,原理如下:
直接使用 NRPE 插件监控远程 Linux/UNIX 主机的本地或者私有资源;如 CPU 负载、内存使用、SWAP 空间使用、硬盘等运行状况。
图 18. 直接检测结构图
直接检测结构图
间接检测:当运行 Nagios 的监控主机无法访问到某台被监控主机,但是运行 NRPE 的机器可以访问得到的时候,运行 NRPE 的主机就充当一个中间代理,将监控请求发送到被监控对象上。
图 19. 间接检测结构图
间接检测结构图

在服务器端安装 NRPE 安装

清单 15. 服务器安装 NRPE
 
# cd /usr/local/src/
# tar zxvf nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure && make all
# make install-plugin
# make install-daemon
# make install-daemon-config

修改命令定义文件

由于在 Nagios 命令定义文件 commands.cfg 没有 check_nrpe 命令, 因此需要对此文件进行修改与定义,配置细节如下图:
图 20. 在 commands.cfg 文件中增加 NRPE 配置
在 commands.cfg 文件中增加 NRPE 配置

定义被监控主机

在被监控或远程主机上增加 check_nrpe 的相关配置,由于 hosts.cfg 已定义了相应的主机,所以这里编辑文件 Nagios 服务器上的 services.cfg 文件即可
 
#vim /usr/local/nagios/etc/monitor/services.cfg
图 21. 在被监控主机,增加 NRPE 指令
在被监控主机,增加 NRPE 指令
查看配置文件是否正确
清单 16. 服务器安装 NRPE
 
# nagioscheck
重新加载配置文件
清单 17. Ngaios 配置加载
 
# /etc/init.d/nagios reload

在 Linux 客户端安装 NRPE 安装

安装 Nagios 插件 nagios-plugin

添加 nagios 用户名,且不允许 nagios 用户登录, 此用户用于与 Nagios 服务器通信所用。
清单 18. 客户端安装 nagios-plugin
 
# useradd -s /sbin/nulgin nagios
# tar -zxvf nagios-plugins-1.4.14.tar.gz
# cd nagios-plugins-1.4.14
#./configure
# make && make install

安装 NRPE

在 Linux 客户端安装 nrpe 程序包,根据编译提示向导完成安装操作。在安装的过程中会看到 NRPE 的端口为 5666,且可通过 Xinetd 服务来控制 nrpe 进程,具体实现步骤如下:
清单 19. 客户端安装 NRPE
 
#tar zxvf tar zxvf nrpe-2.12.tar.gz
# cd nrpe-2.12
#./configure
#make all
#make install-plugin
#make install-daemon
#make install-daemon-config
#make install-xinetd
#chown -R nagios:nagios /usr/local/nagios/

配置 NRPE

定义被监控的 Linux 主机的对象,监控此主机的 CPU 负载、登录用户数、磁盘分区、进程、swap 使用情况等,编辑/usr/local/nagios/etc/nrpe.cfg 文件, 内容如下示例:
清单 20. NRPE 配置与设定
 
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 30,25,20 -c 60,55,40
command[check_sda3]=/usr/local/nagios/libexec/check_disk -w 15% -c 8% -p /dev/sda3
command[check_vg01]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/vg01
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_swap_1]=/usr/local/nagios/libexec/check_swap -w 20 -c 10

定义 Xinetd 服务支持 nrpe

这里只需要修改 only_from 项,增加 Ngaios 服务的地址即可,这样一来服务器与客户端就可进行 nrpe 会话,监控到 Linux 客户端相关信息,被监控端也更加容易维护管理,见下图:
 
#vim /etc/xinetd.d/nrpe
图 22. 定义 Xinetd 服务支持 nrpe
定义 Xinetd 服务支持 nrpe定义 Xinetd 服务支持 nrpe

定义服务端口

在 Linux 客户端"/etc/services" 文件增加一行
 
nrpe 5666/tcp #Naigos_Client

测试 NRPE

由于 NRPE 相应的插件已经安装成功, 这里使用 check_nrpe 命令来验证是否 nrpe 是否正常运行,如果执行以下命令能够显示 NRPE 的具体版本信息,则表示 nrpe 运行正常,加载重启 xinetd 服务即可。
清单 21. NRPE 功能测试
 
#/usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v2.12
#/etc/init.d/xinetd restart
 
####################################################
snmp监控硬盘超过2T的会显示不准,按下面的操作,并重启snmpd
[root@localhost ~]# more /etc/snmp/snmpd.conf
rocommunity snmp87755600
realStorageUnits 0
####################################################
nagios nginx的监控可以用TCP监控80口
commands.cfg中定义
 
define command{
        command_name    check_alive
        command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p 80 -w 2 -c 3
        }
 
在server中的定义
define  service{
        service_description     nginx
        use                     boosj-service,srv-pnp
        host_name               HZ_186.234
        check_command           check-host-alivetcp! -H 122.224.186.234
        }
####################################################
ATS  
define  service{
        host_name               WF_CNC_95.166
        use                     boosj-service,srv-pnp
        normal_check_interval   1
        service_description     ATS_status    
        check_command           check_ats_status!123.134.95.166!7000!50!30 #这个check_ats_status 名称要和commands.cfg中定义的名称一致
}
 
 
posted @ 2018-10-18 16:44  饭票  阅读(638)  评论(0编辑  收藏  举报