Nagios 企业综合高效监控平台
1. 安装nagios之前先把必要的环境准备好,这里面我们为了节省时间有些都用YUM装的。
yum -y install httpd gettext mysql mysql-server mysql-devel php php-mysql php-pear
yum install php-mysql mysql perl mysql-server perl-DBI perl-DBD-MySQL httpd gcc glibc glibc-common gd gd-devel php
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz (现在最新版本的插件)
wget http://sourceforge.net/projects/nagios-cn/files/sourcecode/zh_CN%203.2.3/nagios-cn-3.2.3.tar.bz2/download(最新版为3.4装上去觉得界面变得不好看,顺便就找了个中文版的)
创建用户和组
看来是启用了suexec.
运行suexec –V
看来cgi程序只能在/var/www目录下执行.打开/var/log/httpd/suexec.log
command not in docroot (/usr/local/nagios/sbin/status.cgi)
因为我的nagios默认安装在/usr/local/nagios
所以这个cgi不允许被执行.
解决办法.把nagios安装到/var/www/nagios就可以了
之前我尝试过编译nagios的时候指定--with-cgidir=/var/www/cgi-bin但是发现编译好的nnagios的sbin依然在/usr/local/nagios目录下.
编译的时候指定--prefix=/var/www/nagios,其他编译安装的选项不变.
目录不能有写权限,修改如下:
chmod -R 755 /var/www/nagios/sbin
添加SuexecUserGroup nagios nagios
[PNP是一个基于php和perl,用rrdtool将nagios采集的数据绘制图表的工具,所以安装pnp之前必须先安装php perl and rrdtool这里用yum直接来安装rrdtool,单独下载安装有很多依存关系,挺麻烦.
先把pnp4nagios执行数据收集的文件拷贝到nagios的libexec下,方便统一命令的执行路径.
cp /var/www/pnp4nagios/libexec/process_perfdata.pl /var/www/nagios/libexec/
然后添加小太阳模版,镶嵌在nagios页面上
[这里有两种查看图的方法,第一种方法是你当太阳的图标的时候会在新窗口中打开图形查看,第二种方法是你只需要把鼠标移动到太阳图标上面就会自动弹出图形出来,以下两种方法你可以根据自己喜好选其中一种即可]
第一种方法在templates.cfg里面加入如下
然后在vim /var/www/nagios/etc/objects/templates.cfg 最后加入
define host {
name host-pnp
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=_HOST_
register 0
}
define service {
name srv-pnp
action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/index.php/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
register 0
}
建目录和改权限
mkdir -p /etc/nagiosql/{hosts,services,backup/{,hosts,services},import}
chown -R apache:nagios /etc/nagiosql/
chmod -R 755 /etc/nagiosql
chmod -R 777 /var/www/nagios/nagiosql/config
Nagios相关文件权限的设定
chown nagios:apache /var/www/nagios/etc
chown nagios:apache /var/www/nagios/etc/{nagios.cfg,cgi.cfg}
chown nagios:apache /var/www/nagios/etc/*
chmod 664 /var/www/nagios/etc/{nagios.cfg,cgi.cfg}
chmod –R 775 /var/www/nagios/etc
设定nagios二进制文件的权限,以便其能够通过Web程序执行
chown nagios:apache /var/www/nagios/bin/nagios
chmod 750 /var/www/nagios/bin/nagios
chown -R apache.nagios /var/www/nagios/var/spool/
chown nagios:apache /var/www/nagios/var/rw/nagios.cmd
chmod 660 /var/www/nagios/var/rw/nagios.cmd
Alias /nagiosQL "/var/www/nagios/nagiosql"
<Directory "/var/www/nagios/nagiosql">
# SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
建立nagiosql安装文件
touch /usr/local/nagios/nagiosql/install/ENABLE_INSTALLER
按如图所示更改相应的路径即可
工具-导入数据 右边会列出一些配置文件,选择导入即可。
导入只是把配置文件内容导入到Mysql数据库,而使用其配置文件时,是一个个cfg文件,所以下面要进行写入过程
加入新的配置文件路径
cfg_dir=/etc/nagiosql/hosts/
cfg_dir=/etc/nagiosql/services/
cfg_file=/etc/nagiosql/commands.cfg
cfg_file=/etc/nagiosql/contactgroups.cfg
cfg_file=/etc/nagiosql/contacts.cfg
cfg_file=/etc/nagiosql/contacttemplates.cfg
cfg_file=/etc/nagiosql/hostdependencies.cfg
cfg_file=/etc/nagiosql/hostescalations.cfg
cfg_file=/etc/nagiosql/hostextinfo.cfg
cfg_file=/etc/nagiosql/hostgroups.cfg
cfg_file=/etc/nagiosql/hosttemplates.cfg
cfg_file=/etc/nagiosql/servicedependencies.cfg
cfg_file=/etc/nagiosql/serviceescalations.cfg
cfg_file=/etc/nagiosql/serviceextinfo.cfg
cfg_file=/etc/nagiosql/servicegroups.cfg
cfg_file=/etc/nagiosql/servicetemplates.cfg
cfg_file=/etc/nagiosql/timeperiods.cfg
[通过阅读官方文档,得知在host定义中有四个变量可选,用于指定每一个host的图标文件名,默认的存储位置是/var/www/nagios/share/p_w_picpaths/logos
icon_p_w_picpath: 可以使用GIF, PNG,或者是JPG文件,推荐图像尺寸为40x40
icon_p_w_picpath_alt: 即为HTML语法中关于p_w_picpath元素的ALT属性值
vrml_p_w_picpath: Nagios提供使用VRML语言绘制三维图像功能,这里不要使用透明图片(PNG, GIF),最好使用JPG
statusmap_p_w_picpath: 提供给statusmap CGI脚本使用的图片,服务器要支持GD,这个文件的类型为gd2]
监控Linux主机
nagios监控linux服务器, 因为监控都是依靠插件去完成的,而监控linux主要使用NRPE插件,
NRPE总共由两部分组成:
check_nrpe插件:运行在监控主机上
NRPE daemon:运行在远程的linux主机上(通常就是被监控机)
整个的监控过程:
当Nagios需要监控某个远程linux主机的服务或者资源情况时:
1:nagios运行check_nrpe插件,我们要在nagios配置文件中告诉它要检查什么.
2:check_nrpe插件会通过SSL连接到远程的NRPE daemon.
3:NRPE daemon会运行相应的nagios插件来执行检查本地资源或服务.
4:NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理.
注意:NRPE daemon需要nagios插件和Nrpe一起安装在远程被监控linux主机上,否则,daemon不能做任何的监控. 别外因为它们间的通信是加密的SSL,所以需要安装SSL
被监控端安装NRPE和 nagios-plugins
下载nrpe
command[check_swap]=/usr/local/nagios/libexec/check_swap –w 20% –c 10%,如果这里没有定义好,那你在服务器端会报错误:NRPE command ‘check_swap’ not defined
命令:check_nrpe
命令行:$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
[cpu使用率服务:$ARG1$:check_load
在线用户服务:$ARG1$:check_users
进程数量服务:$ARG1$:check_total_procs
第一个分区使用情况服务:$ARG1$: check_sda1
注意:这些服务必须在被监控的linux客户端的nrpe.cfg文件中得到定义]
“-H 192.168.1.220”定义目标主机的地址,-w说明后面的一对值对应的是“WARNING”状态,“80%”是其临界值。“-c 500.0,100%” 其中“-c”说明后面的一对值对应的是" CRITICAL",“100%”是其临界值。“-p 1”说明每次探测发送一个包
check_ping -H 192.168.1.220 -w 300.0,80% -c 500.0,100% -p 1
用法: check_nt -H <hostname> -p <port> -v INSTANCES -l <counter object>
<counter object> 是一个windows性能对象计数 (eg. Process),
如果它是两个词,它应该引号括起来,返回的结果将是一个逗号分隔的对象
check_nt用法举例:
check_nt -H 192.168.1.2 -p 12489 -v CPULOAD -l 60,90,95 //显示最后60分钟waring为90%,critical为95%时的平均cpuload
check_nt -H 192.168.1.2 -p 12489 -v UPTIME //显示192.168.1.2从开机到现在运行时间
check_nt -H 192.168.11.132 -p 12489 -v USEDDISKSPACE -l c //显示192.168.11.132 C盘使用情况
check_nt -H 192.168.11.132 -p 12489 -v USEDDISKSPACE -l d -w 60 -c 95 //显示192.168.11.132 D盘设waring为90%,critical为95%时的空间使用信息
check_nt -H 192.168.11.132 -p 12489 -v MEMUSE //显示192.168.1.2内存使用情况
check_nt -H 192.168.11.132 -p 12489 -v SERVICESSTATE -d SHOWALL //显示192.168.11.132所有正在运行的服务
check_nt -H 192.168.11.132 -p 12489 -v SERVICESSTATE -d SHOWALL -l W3SVC //显示192.168.11.132上IIS网站服务运行情况
check_nt -H 192.168.11.132 -p 12489 –s 7758521 –v CLIENTVERSION //查看192.168.11.132上nsclient++版本
check_nt -H 192.168.11.132 -p 12489 –s 7758521 -v INSTANCES -l Process //列举192.168.11.132上运行的进程
ciscoasa(config)#snmp-server host inside 192.16.11.145 community public
ciscoasa(config)#snmp-server enable traps
安装check_snmp plugin
在编译 nagios-plugins 时,如果系统支持net-snmp, 会自动编译 check_snmp 插件。(刚开始可能我们没有安装net-snmp,所以没有出现check_snmp这个插件)
1、安装net-snmp
yum -y install net-snmp-libs net-snmp-devel net-snmp net-snmp-utils
2、重新再编译安装插件 nagios-plugins-1.4.13
./configure
make && make install
如果版本过低,可能不支持 snmp v2c
相应的OID可以通过厂商的MIB查询;也可以在一些专业网站查询 Online MIB Database;也可以通过snmpwalk 得到。
snmpwalk -v version -c community hostname
4、相应的命令可以通过snmpget 测试。
snmpget -c community -v 2c hostname iso.3.6.1.4.1.3224.16.3.2.0
在日常监控中,经常会用到snmp服务,而snmpwalk命令则是测试系统各种信息最有效的方法,现总结一些常用的方法如下:
snmpwalk -v 1 -c public 192.168.11.145 .1.3.6.1.2.1.25.2.2 取得系统总内存
snmpwalk -v 1 -c public 192.168.11.145 hrSystemNumUsers 取得系统用户数
snmpwalk -v 1 -c public 192.168.11.145 .1.3.6.1.2.1.4.20 取得IP信息
snmpwalk -v 1 -c public 192.168.11.145 system 查看系统信息
snmpwalk -v 1 -c public 192.168.11.145 ifDescr 获取网卡信息
以上只是一些常用的信息,snmpwalk功能很多,可以获取系统各种信息,只要更改后面的信息类型即可.如果不知道什么类型,也可以不指定,这样所有系统信息都获取到:
snmpwalk -v 1 -c public 192.168.11.145
比如我现在想检查路由器启动了多长时间,其实我们要执行的命令是:check_snmp -H '$HOSTADDRESS -C '$ARG1 -o sysUpTime.0
下面开始解决邮件发送的次数太多的问题,如果服务器出现故障而未能及时的解决,Nagios就会不断的发送告警信息,实在令人头疼,Nagios于是用hostescalations和serviceescalations来控制报警间隔时间来完善它的报警功能.
通过查看nagios.cfg配置文件可以发现上次我们添加的时候,此配置文件已经写入在里面了
define serviceescalation{
host_name Win2K3 ;被监控主机名称 ,要与hosts.cfg中的名称一致
service_description PING,Memory Usage,Explorer,CPU Load,C:\ Drive Space ;被监控服务名称多个用逗号隔开
first_notification 3 ;第3条信息起,改变频率间隔
last_notification 5 ;第5条信息起,恢复频率间隔
notification_interval 120 ;通知间隔(单位:分)
contact_groups YW-group ;要通知的群组
define hostescalation{
host_name win-pc ;被监控主机名称,要与hosts.cfg中名称一致
first_notification 3 ;第3条信息起,改变频率间隔
last_notification 5 ;第5条信息起,恢复频率间隔
notification_interval 120 ;通知间隔(单位:分)
contact_groups YW-group ;要通知的群组
}