Nagios Setup

URL:https://support.nagios.com/kb/article/nagios-core-installing-nagios-core-from-source-96.html#RHEL

1.下载nagios-4.4.2.tar.gz
2.yum install gcc glibc glibc-common wget unzip httpd php gd gd-devel perl postfix
No package gd-devel available.
下载gd-devel
https://centos.pkgs.org/6/centos-x86_64/gd-devel-2.0.35-11.el6.x86_64.rpm.html

[root@ChrisTest downloads]# rpm -ivh gd-devel-2.0.35-11.el6.x86_64.rpm
error: Failed dependencies:
fontconfig-devel is needed by gd-devel-2.0.35-11.el6.x86_64

[root@ChrisTest downloads]# yum install fontconfig-devel freetype-devel libX11-devel libXpm-devel libgd.so.2 libjpeg-devel libpng-devel pkgconfig zlib-devel

依赖包都安装完毕后,再次安装gd-devel
[root@ChrisTest downloads]# rpm -ivh gd-devel-2.0.35-11.el6.x86_64.rpm
package gd-devel-2.0.35-11.el6.x86_64 is already installed

此时可以继续安装nagios-core了。

3.解压,安装
[root@ChrisTest downloads]# tar zxvf nagios-4.4.2.tar.gz
[root@ChrisTest downloads]# cd nagios-4.4.2

[root@ChrisTest nagios-4.4.2]# ./configure
[root@ChrisTest nagios-4.4.2]# make all

4.Create User And Group
[root@ChrisTest nagios-4.4.2]# make install-groups-users
groupadd -r nagios
useradd -g nagios nagios

5.Install Binaries
[root@ChrisTest nagios-4.4.2]# make install

6.Install Service / Daemon
[root@ChrisTest nagios-4.4.2]# make install-daemoninit
httpd自启动由于已经设置完毕,这里就不重复设定了。

7.Install Command Mode
[root@ChrisTest nagios-4.4.2]# make install-commandmode

8.Install Configuration Files
[root@ChrisTest nagios-4.4.2]# make install-config

9.Install Apache Config Files
[root@ChrisTest nagios-4.4.2]# make install-webconf

10.Configure Firewall
防火墙80端口已经放行。所以这里就不配置了。
否则配置以下命令(RHEL6)
iptables -I INPUT -p tcp --destination-port 80 -j ACCEPT
service iptables save
ip6tables -I INPUT -p tcp --destination-port 80 -j ACCEPT
service ip6tables save

11.Create nagiosadmin User Account
[root@ChrisTest nagios-4.4.2]# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

12.启动服务
[root@ChrisTest nagios-4.4.2]# /etc/init.d/nagios start
Starting nagios: Running configuration check... done.

13.此时遇到一个问题,由于我设定了两个VirtualHost,貌似现在无法使用http://IP/nagios或是http://IP:8080/nagios进行访问。
首先确认/etc/httpd/conf/httpd.conf里,
LoadModule cgi_module modules/mod_cgi.so被开启。

然后发现是没有重启Httpd服务导致的。重启后就能正常访问nagios页面了。
需要注意的是,弹出的需要输入用户名和密码的框,是输入刚才设定的nagiosadmin和他的密码。
不要输入成自己设定的http基础认证了。
而且经过测试,不论是80端口还是8080端口,只要开放了的端口都可以被用作nagios的访问端口

URL:https://blog.51cto.com/jianye/1364716

14.接下来安装Nagios Plugin
下载 nagios-plugins-2.2.1.tar.gz(错误!)这里注意要下载的是nagios-plugins-release-2.2.1。否则后面的./tools/setup不存在。
[root@ChrisTest downloads]# tar zxvf nagios-plugins-release-2.2.1.tar.gz

[root@ChrisTest nagios-plugins-2.2.1]# yum install gcc glibc glibc-common make gettext automake wget openssl-devel net-snmp net-snmp-utils epel-release
全都已经安装。

无网络环境下,千万不要按照官方文档安装epel-release-latest-6.noarch.rpm。否则自建的光盘repo会爆炸。

[root@ChrisTest nagios-plugins-2.2.1]# yum install -y perl-Net-SNMP
No package perl-Net-SNMP available.

URL:https://centos.pkgs.org/6/repoforge-i386/perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch.rpm.html

perl(Net::SNMP) = perl-Net-SNMP

这安装perl-Net-SNMP遇到了问题。在没有网络的情况下,好像没法简单的用perl来安装Net-SNMP。
下载perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch.rpm
[root@ChrisTest downloads]# rpm -ivh perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch.rpm
error: Failed dependencies:
perl(Crypt::DES) is needed by perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch
perl(Digest::HMAC) is needed by perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch
perl(Digest::SHA1) is needed by perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch
perl(Socket6) >= 0.19 is needed by perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch

下载并安装依赖包
[root@ChrisTest downloads]# rpm -ivh perl-Crypt-DES-2.05-3.2.el6.rf.x86_64.rpm
[root@ChrisTest downloads]# rpm -ivh perl-Digest-SHA1-2.12-2.el6.x86_64.rpm
[root@ChrisTest downloads]# rpm -ivh perl-Digest-HMAC-1.01-22.el6.noarch.rpm
[root@ChrisTest downloads]# rpm -ivh perl-Socket6-0.23-4.el6.x86_64.rpm

再安装perl-Net-SNMP
[root@ChrisTest downloads]# rpm -ivh perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch.rpm
warning: perl-Net-SNMP-5.2.0-1.2.el6.rf.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing... ########################################### [100%]
1:perl-Net-SNMP ########################################### [100%]

成功了。

15.继续安装Nagios-Plugin
[root@ChrisTest downloads]# cd nagios-plugins-release-2.2.1

[root@ChrisTest nagios-plugins-release-2.2.1]# ./tools/setup
[root@ChrisTest nagios-plugins-release-2.2.1]# ./configure
[root@ChrisTest nagios-plugins-release-2.2.1]# make
[root@ChrisTest nagios-plugins-release-2.2.1]# make install

经验证,现在nagios里的localhost已经up了。

16.添加开机自启动
[root@ChrisTest nagios-plugins-release-2.2.1]# chkconfig --add nagios
[root@ChrisTest nagios-plugins-release-2.2.1]# chkconfig --level 2345 nagios on
检测监控配置是否有错误。
[root@ChrisTest nagios-plugins-release-2.2.1]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

17.命令行测试nagios插件的可用性
[root@ChrisTest ~]# /usr/local/nagios/libexec/check_ping -H 10.116.6.193 -w 3000.0,80% -c 5000.0,100% -p 5
PING OK - Packet loss = 0%, RTA = 31.18 ms|rta=31.181999ms;3000.000000;5000.000000;0.000000 pl=0%;80;100;0

18.修改contact信息
[root@ChrisTest etc]# vi objects/contacts.cfg
email [email protected] ;

19.复制一个windows模板出来
[root@ChrisTest objects]# cp windows.cfg windows.cfg.bak

[root@ChrisTest objects]# vi windows.cfg
修改定义Host。

define host {

use                     windows-server          ; Inherit default values from a template
host_name               CyberArk               ; The name we're giving to this host
alias                   My Windows Server       ; A longer name associated with the host
address                 10.116.6.193             ; IP address of the host(这里修改IP)

}

另外记得把下面默认定义的所有针对Windows的Service模板里的host_name全部注释掉,并且都增加一行"hostgroup_name windows-servers ;"
否则配置文件会出错。

并添加如下Ping的服务,这个在windows里没有,但其实也可以不定义。因为默认在网页的Host里就是对PING的验证了。
##################Added by Chris###################

Define a service to "ping" the local machine

define service {

use                     generic-service           ; Name of service template to use

host_name winserver

hostgroup_name          windows-servers         ; The name of the hostgroup
service_description     PING
check_command           check_ping!100.0,20%!500.0,60%

}
##################Added by Chris###################
但是重启nagios后还是没有,这是因为除了localhost外,默认其他模板不生效.
需要到nagios.cfg里去取掉#注释。
[root@ChrisTest objects]# vi ../nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/windows.cfg

注意在重启服务前,记得用这个命令先验证一下配置文件。
[root@ChrisTest objects]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

[root@ChrisTest objects]# /etc/init.d/nagios restart

20.发现包括C盘空间监控的一系列服务拒绝连接。
connect to address 10.116.6.193 and port 12489: 拒绝连接
原因是,这些命令是采用NRPE,NSClient等第三方agent区实现监控的。
我想用SNMP实现,所以需要在Nagios服务器上新增监控用的插件。

URL:http://nagios.manubulon.com/snmp_windows.html
点开download链接,是一段perl脚本。
直接到本地Libexec文件夹,设定755属性保存。发现执行./check_snmp_windows.pl -h没反应。

URL:https://blog.csdn.net/winsonyuan/article/details/54863667

[root@ChrisTest libexec]# yum install perl*

再次执行pl脚本还是不执行,我发现一个问题,脚本内容由于直接从网上复制下来的,好像格式之间没有换行。也许是这个原因?
于是我右键保存目标target,下载下来是一个htm文件,用word打开,发现里面的格式是正确的,修改后缀名为pl后,最后用rz复制到linux系统上。
我下载的是这个:
URL: http://nagios.manubulon.com/snmp_windows.html
[root@ChrisTest libexec]# chmod 755 check_snmp_win.pl

果然就可以执行了!
[root@ChrisTest libexec]# ./check_snmp_win.pl -H 10.116.6.193 -C public -n HTTP -N 2
1 services active (matching "HTTP") : CRITICAL
[root@ChrisTest libexec]# ./check_snmp_win.pl -H 10.116.6.193 -C public -n dns
1 services active (matching "dns") : OK

Linux系统不行,因为这个pl本身就是针对windows的。
并且需要注意,在页面上已经说明了,这个pl只能用于snmpv1,v3,不支持v2。所以在操作前,先验证v1的可用性。
[root@ChrisTest libexec]# snmpwalk -v2c -c public 10.116.6.193

这个页面可以参考配置define command,service,
URL:http://nagios.manubulon.com/index_commands.html#windows

[root@ChrisTest libexec]# vi ../etc/objects/commands.cfg
加入以下这段。
define command {
command_name check_win
command_line $USER1$/check_snmp_win.pl -H $HOSTADDRESS$ -C $USER7$ -n $ARG1$

comment community service(s) name

}

[root@ChrisTest objects]# vi windows.cfg
加入以下这段。
define service {
use generic-service
hostgroup_name windows-servers ; The name of the hostgroup
service_description HTTP service
check_command check_win!http
}
注意,按照URL中的文档添加会出错,我们还是要参考当前环境进行设置。
[root@ChrisTest objects]# /etc/init.d/nagios restart

然而此时Status Information显示Put snmp login info!
检查commands.cfg 发现里面有个$USER7$,不仅在前面漏了-C, 这个是用来定义Community的。目前还没在resource.cfg里定义。
command_line $USER1$/check_snmp_win.pl -H $HOSTADDRESS$ $USER7$ -n $ARG1$
[root@ChrisTest etc]# vi resource.cfg

Sets $USER7$ to be the SNMP community name

$USER7$=public
}

然后重启服务,一切恢复正常。

21.接下来配置check_snmp_storage.pl,用来监控windows的磁盘空间
同样的方法,复制到libexec目录,赋予755权限.
然后,网页文档里没有描述如何监控windows磁盘.但是在script -h里有。
Browse storage list : <script> -C <community> -H <host> -m <anything> -w 1 -c 2 -v
the -m option allows regexp in perl format :
Test drive C,F,G,H,I on Windows : -m ^[CFGHI]:
看到这段文字。
[root@ChrisTest libexec]# ./check_snmp_storage.pl -C public -H 10.116.6.193 -m ^[CD]: -w 1 -c 2 -v
这条命令可以成功执行。
根据这条语句,可以想象出定义的command为:

[root@ChrisTest objects]# vi commands.cfg
define command {
command_name check_snmp_stor
command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ -C $ARG1$ -m $ARG2$ -w $ARG3$ -c $ARG4$
}

[root@ChrisTest objects]# vi windows.cfg
define service {
use generic-service
hostgroup_name windows-servers ; The name of the hostgroup
service_description C:\ Disk Space
check_command check_snmp_stor!public!C:!70!90
}

22.接着监控进程
下载check_snmp_process.pl。修改权限755复制到libexec目录下。
check_snmp_process.pl
[root@ChrisTest libexec]# ./check_snmp_process.pl -C SMBC -H 10.116.6.193 -n CAPSM.exe -v
1 process matching CAPSM.exe (> 0)

[root@ChrisTest objects]# vi commands.cfg
define command{
command_name check_snmp_process_v1
command_line $USER1$/check_snmp_process.pl -C $ARG1$ -H $HOSTADDRESS$ -n $ARG2$ -w $ARG3$ -c $ARG4$
}

ARG1 : community
ARG2 : regexp of process name
ARG3 : warning level(s)
ARG4 : critical level(s)

[root@ChrisTest objects]# vi windows.cfg
define service {
use generic-service
hostgroup_name windows-servers ; The name of the hostgroup
service_description AppProvider.exe
check_command check_snmp_process_v1!public!"AppProvider.exe"!0!0
}
重启服务后查看效果。
经过验证,如果warning和critical都设置为0,则会报critical而不是warning.
check_command check_snmp_process_v1!public!"PsExec.exe"!0!0

23.邮件发送设置
[root@ChrisTest objects]# yum install sendmail
[root@ChrisTest objects]# /etc/init.d/sendmail start

[root@ChrisTest objects]# echo "test" | mail [email protected]
停了防火墙和selinux后还是收不到。
查看日志,发现原来是因为那是个外部邮箱。而我的server是局域网的。
这当然收不到了。

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

猜你喜欢

转载自blog.51cto.com/7350550/2391052