监控部署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(命令配置文件)
-
#定义通知的方式,主机发生故障通知和服务发送故障通知
-
define command{
-
command_name notify-host-by-email
-
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $H
-
OSTOUTPUT$\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 /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nS
-
tate: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SE
-
RVICESTATE$ **" $CONTACTEMAIL$
-
}
-
#定义检测主机是否存活的命令,command_name是最后在服务中的引用名,而它是调用的check_ping命令来实现的
-
define command{
-
command_name check-host-alive
-
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
-
}
-
#定义检测主机cpu负载的命令
-
define command{
-
command_name check_local_load
-
command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
-
}
-
#定义检测主机进程的命令
-
define command{
-
command_name check_local_procs
-
command_line $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
-
}
-
#定义检测主机tcp端口的命令
-
define command{
-
command_name check_tcp
-
command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
-
}
总结:
命令配置文件:
格式:
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(样本配置文件)
-
此定义的为类,也就是日后定义主机或者服务时指定的name引用
-
define service{
-
name generic-service #通过name来指定服务类名,这里的generice-service是一个类名
-
active_checks_enabled 1 #设定启用活动监测服务
-
passive_checks_enabled 1 #设定启用被动监测服务
-
parallelize_check 1 #设定启用并发活动监测服务
-
obsess_over_service 1 #设定启用服务防停滞
-
check_freshness 0 #设定关闭更新监测
-
notifications_enabled 1 #设定启用事件通知
-
event_handler_enabled 1 #设定启用事件处理程序
-
flap_detection_enabled 1 #设定启用状态抖动监测
-
failure_prediction_enabled 1 #设定启用故障预测
-
process_perf_data 1 #设定启用进程性能数据记录
-
retain_status_information 1 #设定启用状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的状态数据。
-
retain_nonstatus_information 1 #设定启用非状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的非状态数据
-
is_volatile 0 #设定服务非易失
-
check_period 24x7 #设定监控的时间段
-
max_check_attempts 3 #设定监测失败后最多尝试次数
-
normal_check_interval 10 #设定正常监测服务的间隔,单位分
-
retry_check_interval 2 #设定监测失败后尝试的间隔,单位分
-
contact_groups admins #定义通知联系人租
-
notification_options w,u,c,r ,d #设定监测指定服务产生的事件通知的条件选项。这里后面跟上一些级别类型参数:
-
w代表warning告警;
-
u代表unknown未知;
-
c代表critical严重;
-
r代表recover恢复;
-
d代表down奔溃。
-
notification_interval 60 #设定服务通知的间隔
-
notification_period 24x7 #设定服务通知运行时间
-
register 0 #设定register表明本段定义的是一个服务类,而不是具体的服务
-
}
4.etc/objects/localhost.cfg(本机监控文件)
-
define host{ #此定义的为监控主机的配置文件
-
use linux-server #引用类,在templates.cfg中预定义
-
host_name localhost #指定主机名,并不是实际机器的主机名,自己定义,方便以后在定义服务时调用
-
alias localhost #别名
-
address 127.0.0.1 #指定监控主机的地址
-
}
-
define service{ #此定义为监控主机服务的配置文件
-
use local-service #引用类,在templates.cfg中预定义
-
host_name localhost #指定主机名,在host段中预定义
-
service_description PING #监控服务的名称,也就是在web页面上显示的监控项目
-
check_command check_ping!100.0,20%!500.0,60% #具体监控的命令以及阀值
-
}
备注: 以上定义的主机和服务,没有指定通知联系人,那是因为在其中引用了类,而templates.cfg中定义的类是有指定联系人的。
5.etc/objects/contacts.cfg(联系人配置文件)
-
define contact{
-
contact_name nagiosadmin #定义联系人的名称,方便以后在监控项目中调用
-
use generic-contact #引用类,在templates.cfg中预定义
-
alias Nagios Admin #别名
-
email test@abc.com #邮件地址
-
}
-
define contactgroup{
-
contactgroup_name admins #定义联系人组的名称,方便一次性发送多人
-
alias Nagios Administrators #别名
-
members nagiosadmin #定义组成员,这里nagiosadmin,也就是上面contact_name的值
-
}
6.etc/objects/timeperiods.cfg(时间段配置文件)
-
define timeperiod{ #定义时间段的配置文件
-
timeperiod_name 24x7 #指定时间段的名称,方便以后在服务里调用
-
alias 24 Hours A Day, 7 Days A Week #别名
-
sunday 00:00-24:00 #具体的时间段定义
-
monday 00:00-24:00 #一周24小时
-
tuesday 00:00-24:00
-
wednesday 00:00-24:00
-
thursday 00:00-24:00
-
friday 00:00-24:00
-
saturday 00:00-24:00
-
}
-
define timeperiod{ #定义时间段的配置文件
-
timeperiod_name workhours #指定时间段的名称,方便以后在服务里调用
-
alias Normal Work Hours #别名
-
monday 09:00-17:00 #具体的时间段定义
-
tuesday 09:00-17:00 #周一到周五的上班时间
-
wednesday 09:00-17:00
-
thursday 09:00-17:00
-
friday 09:00-17:00
-
}
当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 配置
定义被监控主机
在被监控或远程主机上增加 check_nrpe 的相关配置,由于 hosts.cfg 已定义了相应的主机,所以这里编辑文件 Nagios 服务器上的 services.cfg 文件即可
#vim /usr/local/nagios/etc/monitor/services.cfg
图 21. 在被监控主机,增加 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
定义服务端口
在 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中定义的名称一致
}