续:Nagios网络监控(一)

========================================================================================

查看NRPE的监控命令

#cd /usr/local/nagios/etc

#cat nrpe.cfg |grep -v "^#"|grep -v "^$"

085151511.jpg

红色部分是命令名,也就是check_nrpe 的-c 参数可以接的内容,等号 “=” 后面是实际执行的插件程序(这与commands.cfg 中定义命令的形式十分相似,只不过是写在了一行)。也就是说check_users 就是等号后面/usr/local/nagios/libexec/check_users-w 5 -c 10 的简称。


上面这5行定义的命令分别是检测登陆用户数,cpu负载,sda1的容量,僵尸进程,总进程数。各条命令具体的含义见插件用法(执行“插件程序名 –h”)。

3在监控主机(Nagios-Server)上

之前已经将Nagios运行起来了,现在要做的事情是:

·安装check_nrpe插件;

·在commands.cfg中创建check_nrpe 的命令定义,因为只有在commands.cfg中定义过的命令才能在services.cfg 中使用;

·创建对被监控主机的监控项目;

安装check_nrpe 插件

#tar zxvf nrpe-2.13.tar.gz -C/usr/local/src

#cd /usr/local/host/nrpe-2.13

#./configure

#make all

#make install-plugin

只运行这一步就行了,因为只需要check_nrpe插件。

在Nagios-Linux 上我们已经装好了nrpe,现在我们测试一下监控机使用check_nrpe 与被监控机运行的nrpe daemon之间的通信。

085300752.jpg

在commands.cfg中增加对check_nrpe的定义

#vi/usr/local/nagios/etc/objects/commands.cfg

在最后面增加如下内容:

085338263.jpg

意义如下:

# 'check_nrpe'command definition

define command{

command_name check_nrpe # 定义命令名称为check_nrpe,在services.cfg中要使用这个名称.

command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c$ARG1$ #这是定义实际运行的插件程序.
# 这个命令行的书写要完全按照check_nrpe这个命令的用法,不知道用法的就用check_nrpe –h查看.

}

-c 后面带的$ARG1$ 参数是传给nrpe daemon 执行的检测命令,之前说过了它必须是nrpe.cfg 中所定义的那5条命令中的其中一条。在services.cfg 中使用check_nrpe 的时候要用 “!” 带上这个参数。

③ 定义对Nagios-Linux 主机的监控

下面就可以在services.cfg 中定义对Nagios-Linux 主机的监控了。

define service{

use local-service

host_name Nagios-Linux

service_description Current Load

check_command check_nrpe!check_load

}


define service{

use local-service

host_name Nagios-Linux

service_description Check Disk sda1

check_command check_nrpe!check_sda1

}


define service{

use local-service

host_name Nagios-Linux

service_description Total Processes

check_command check_nrpe!check_total_procs

}


define service{

use local-service

host_name Nagios-Linux

service_description Current Users

check_command check_nrpe!check_users

}


define service{

use local-service

host_name Nagios-Linux

service_description Check Zombie Procs

check_command check_nrpe!check_zombie_procs

}

085412369.jpg

085414203.jpg

085414698.jpg

要监控Nagios-Linux 的swap 使用情况。但是在被监控的主机中的nrpe.cfg 中默认没有定义这个监控功能的命令。需要手动在nrpe.cfg 中添加,也就是自定义NRPE命令。

现在我们要监控swap 分区,如果空闲空间小于20%则为警告状态 -> warning;如果小于10%则为严重状态 -> critical。我们可以查得需要使用check_swap插件,完整的命令行应该是下面这样。

#/usr/local/nagios/libexec/check_swap -w 20% -c 10%

在被监控机(Nagios-Linux)上增加check_swap 命令的定义

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

增加下面这一行

command[check_swap]=/usr/local/nagios/libexec/check_swap-w 20% -c 10%

check_swap现在就可以作为check_nrpe的-c 的参数使用了

修改了配置文件,当然要重启。

如果你是以独立的daemon运行的nrpe,那么需要手动重启;如果你是在xinetd 下面运行的,则不需要。

=====================================================================

在监控机(Nagios-Server)上增加这个check_swap 监控项目

defineservice{

use local-service

host_name Nagios-Linux

service_description Check Swap

check_command check_nrpe!check_swap

}

同理,Nagios-Linux 上我还开启了http 服务,需要监控一下,按照上面的做法,在被监控机(Nagios-Linux)上增加check_http 命令的定义

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

增加下面这一行

command[check_http]=/usr/local/nagios/libexec/check_http-I 127.0.0.1

=====================================================================

在监控机(Nagios-Server)上增加check_http 监控项目

defineservice{

use local-service

host_name Nagios-Linux

service_description HTTP

check_command check_nrpe!check_http

}

所有的配置文件已经修改好了,现在重启Nagios。

#service nagios restart

085448798.jpg

查看配置情况

登录Nagios Web监控页http://192.168.30.100/nagios/查看相关信息。

085516454.jpg

可以看到,对于Nagios-Server 和Nagios-Linux 上的相关服务的监控已经成功了,还有Nagios-Windows 上的服务还没有定义。

十、利用NSClient++监控远程Windows上的本地信息

在Nagios的libexec下有check_nt这个插件,它就是用来检查windows机器的服务的。其功能类似于check_nrpe。不过还需要搭配另外一个软件NSClient++,它则类似于NRPE。

NSClient++的原理如下图

085537625.jpg

可以看到NSClient与nrpe最大的区别就是:

·被监控机上安装有nrpe,并且还有插件,最终的监控是由这些插件来进行的。当监控主机将监控请求发给nrpe后,nrpe调用插件来完成监控。

·NSClient++则不同,被监控机上只安装NSClient,没有任何的插件。当监控主机将监控请求发给NSClient++后,NSClient直接完成监控,所有的监控是由NSClient完成的。

这也说明了NSClient++的一个很大的问题:不灵活、没有可扩展性。它只能完成自己本身包含的监控操作,不能由一些插件来扩展。好在NSClient++已经做的不错了,基本上可以完全满足我们的监控需求。

1、安装NSClient++

从http://www.nsclient.org/nscp/downloads 下载NSClient++-0.2.7.zip

解压到C盘根目录。

打开cmd切换到c:\NSClient++-0.2.7

执行nsclient++ /install进行安装

085602411.jpg

执行nsclient++ SysTray (注意大小写),这一步是安装系统托盘,时间稍微有点长。

085631831.jpg

在运行里面输入services.msc打开“服务”

085658341.jpg

看到下图就说明NSClient服务已经安装上了

085745890.jpg

双击打开,点登录标签,在允许服务与桌面交互前打勾。

103408265.jpg

编辑c:\NSClient++-0.2.7下的NSC.ini文件。

将 [modules]部分的所有模块前面的注释“;”都去掉,除了CheckWMI.dll 和 RemoteConfiguration.dll 这两个。

103435809.jpg

在[Settings]部分设置'password'选项来设置密码,作用是在nagios连接过来时要求提供密码。这一步是可选的,我这里设置为'123'。

将[Settings]部分'allowed_hosts'选项的注释去掉,并且加上运行nagios的监控主机的IP。各IP之间以逗号相隔。这个地方是支持子网的,如果写成192.168.30.0/24则表示该子网内的所有机器都可以访问。如果这个地方是空白则表示所有的主机都可以连接上来。

注意是[Settings]部分的,因为[NSClient]部分也有这个选项。

103459779.jpg

必须保证[NSClient]的'port'选项并没有被注释,并且它的值是'12489',这是NSClient的默认监听端口。

103531864.jpg

在cmd 中执行nsclient++ /start启动服务,注意所在目录是c:\NSClient++-0.2.7

这时在桌面右下角的系统托盘处会出现一个×××的M字样的图标

103601398.jpg

查看服务

103625750.jpg

已经正常启动了。

注意服务默认设的是“自动”,也就是说是开机自动启动的。

在cmd 里面执行netstat –an 可以看到已经开始监听tcp的12489端口了。

103651213.jpg

防火墙也要打开tcp的12489端口,否则nagios检查此服务的时候会报错。

这样被监控机的配置就搞定了,它就等待nagios 发出某个监控请求,然后它执行请求将监控的结果发回到nagios监控主机上。

之前已经在监控主机(Nagios-Server)上对Windows 主机的监控做了配置,但是commands.cfg 中默认没有设置密码项,所以要修改一下,增加"-s123",如下:

103708627.jpg现在打开Nagios Web监控页便可查看到相关信息了。

103742544.jpg

可以看到有错误:NSClient - ERROR: PDH Collection thread not running.

Google 一下,是由于操作系统语言的问题,好像NSClient默认支持的语言并不多,具体可以百度一下。

查看NSClient的日志C:\NSClient++-0.2.7\nsclient.log,信息如下:

2013-09-26 14:10:26:error:.\PDHCollector.cpp:69: Getting counter info...

2013-09-26 14:10:26:error:.\PDHCollector.cpp:97: Detected language: 0x0804 but it could not befound in: counters.defs

2013-09-26 14:10:26: error:.\PDHCollector.cpp:98: You need to manuallyconfigure performance counters!

103802345.jpg

需要手动配置performance counters。

打开C:\NSClient++-0.2.7\counters.defs文件,复制文件里面"English US"那部分内容,粘贴到counters.defs文件的最后,修改Description = "Chinese"。

103822925.jpg

修改完之后,在mmc中重启NSClient 服务。

然后查看日志,内容如下:

103904569.jpg

在正常执行了。

打开Nagios Web监控页查看。

103933769.jpg

执行成功,但是W3SVC服务为Unknown 状态。查资料,需要开户Windows 的IIS服务。

打开“控制面板—》添加或删除Windows组件”进行安装。

103959194.jpg

安装完毕后,再到Nagios Web监控页查看,全部监控正常。

104033290.jpg

Nagios配置完成

十一、Nagios安装过程中的常见错误解决方法

1通过httpd来管理Nagios

Nagios,localhost总是会报警告:“WARNING: HTTP/1.1 403 Forbidden ”

解决方法:

[root@localhosthtml]# pwd

/var/www/html

[root@localhosthtml]# touch index.html

[root@localhosthtml]# echo “hello”> index.html

//在httpd的站点目录下新建一个Indexes.html的网页文件

=====================================================================

2Nagios配置nrpe出现如下错误:

CHECK_NRPE: Error - Could not complete SSL handshake.

解决方法:

① 确保两边的防火墙都可以让5666端口通过!

② 在被监控的Linux主机中修改文件

#vi/etc/xinetd.d/nrpe

only_from //增加主控IP

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

allowed_hosts //增加主控IP

#service xinetd restart

==================================================

3、看不到nrpe进程.

解压方法:
原因很大是因为服务器上开启了xinetd. 关闭xinetd进程即可
② 因为一般都使用的是-d模式启动的nrpe进程,那么它是独立起的demon进程,所以如果xinetd进程也在的话,nrpe就起不来.
③ 如果使用-i模式启动,那么就必须要启动xinetd守护进程.

/etc/init.d/xinetdstop

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

为了方便的控制nrpe服务,这里提供一个小的脚本。

104126484.jpg

104127826.jpg

4、认证错误一:
It appears as though you do nothave permission to view information for any of the hosts you requested
解决方法:


修改/usr/local/nagios/etc/cgi.cfg中的use_authentication=1改为0
sed -i 's/use_authentication=1/use_authentication=0/g'/usr/local/nagios/etc/cgi.cfg
(
取消了认证可以浏览主机状态但是无法在 nagiosweb执行外部命令 )
登陆 nagios web接口的用户,需要和 /usr/local/nagios/etc/cgi.cfg 里面配置的用户匹配,没有可以手动添加,用逗号隔开。
5
、认证错误二:
Sorry Dave, I can't let you do that... It seemsthat you have chosen to not use the authentication functionality of the CGIs. Idon't want to be personally responsible for what may happen as a result ofallowing unauthorized users to issue commands to Nagios,so you'll have todisable this safeguard if you are really stubborn and want to invite trouble.Read the section on CGI authentication in the HTML documentation to learn howyou can enable authentication and why you should want to.
原因 : 未开启认证

解决方法:开启认证可解决问题,编辑文件 /usr/local/nagios/etc/cgi.cfg,将 use_authentication 值设成1 (0/1 关闭/开启)use_authentication=1,并重启 nagios service nagios restart
6
、认证错误三:
It appears as though you do not have permissionto view information for any of the hosts you requested... If you believe thisis an error, check the HTTP server authentication requirements for accessingthis CGI and check the authorization options in your CGI configuration file.
原因 : 认证用户不正确
解决方法:
开启认证:认证的用户必须是 cgi.cfg 配置文件里有的默认是 nagiosadmin,如果你新建的其他用户,需要添加进去,多用户用逗号分开
authorized_for_system_information=nagiosadminauthorized_for_configuration_information=nagiosadminauthorized_for_system_commands=nagiosadminauthorized_for_all_services=nagiosadmin authorized_for_all_hosts=nagiosadminauthorized_for_all_service_commands=nagiosadminauthorized_for_all_host_commands=nagiosadmin
如果不是 nagiosadmin 需要到后面添加,例子authorized_for_system_information=nagiosadmin,admin

7
、权限问题:

调用外部命令错误,可能权限不够
解决方法:
临时解决: 重启nagios后,权限会还原,还是没权限执行。
chown -R nagios.nagcmd /usr/local/nagios/var/rw
chmod -R 777 /usr/local/nagios/var/rw
解决:
在安装 nagios 时,就要把用户选对,然后再安装。
./configure \


--with-group=nagios \


--with-user=nagios \


--with-command-group=nagcmd \


--with-gd-lib=/usr/lib \


--with-gd-inc=/usr/include \


make all


make install


make install-init


make install-config


make install-commandmode
rw agios.cmd
权限是nagios.nagios,还需要把 web用户加入到nagios组里这样才有权限执行 nagios.cmd
8
、页面显示错误一:
3D
浏览错误,提示下载 statuswrl.cgi
解决方法:需安装3D浏览插件
原因是未安装支持vrml 3D浏览的插件,vrml 面向对象的三维造型语言,需要安装 vrml 支持插件才能浏览,Cortona VRML Client 是一个优秀的VRML浏览插件
http://download.pcpop.com/Down/48664.html
http://down2.pcpop.com/softdown/exp/cortvrml.zip

说明:以上所有的源码软件包和工具来自--》http://yunpan.cn/QGp82sbcjg8NN