九、Nagios监控搭建
今天主要总结一下Nagios监控体系的搭建,上节只是把Nagios最基本的框架搭建起来,但是这在生成环境中是远远不足的。比如我想监控非本机服务器的磁盘空闲率,CPU利用率,当前登录人数等等,这些都是不能直接获取的,好在Nagios早已经有了相关的辅助工具来用于远程主机的监控,其监控原理图如下(图片是我从大神作品上摘取的):
这样就清晰多了,其实Nagios监控远程主机主要是依靠这个附加组件——NRPE。
NRPE主要由两部分组成:check_nrpe、NRPE ,前者位于监控主机上,后者位于被监控主机上。远程监控的原理大概就是这样:当Nagios需要监控某个远程主机的服务或者资源时,Nagios会先运行check_nrpe这个插件,告诉它我需要检测什么。check_nrpe取得指令后就马上连接到远程的NRPE上,使用的方式是SSL,远程NRPE在收到check_nrpe的调取指令后,就会利用nagios插件对服务进行监控(这就是为什么被监控主机上也要安装nagios插件的原因),插件将取得的状态值返回给NRPE,NRPE返回给check_nrpe,之后check_nrpe就将这一状态信息讲给nagios去处理,继而完成了Nagios对远程主机的监控。这样一来我们可以做个比较形象的比喻,Nagios相当于皇上,check_nrpe则是宰相,负责为皇上处理收集日常事务,那么NRPE则就相当于远赴其他国家的节度使,去完成丞相交代下来的命令,其实是皇上发出的,只不过是通过丞相转述出去的。
熟悉了大概原理之后,就需要进行实践了。假设我需要监控内网51服务器上面的服务,需要在192.168.1.51上面执行以下操作:
1.增加nagios用户
# useradd nagios
# passwd nagios
2.安装nagios插件
# tar xvf nagios-plugins-2.0.3.tar.gz
# cd nagios-plugins-2.0.3
# ./configure
# make
# make install
这步完成之后就会在/usr/local/nagios下生成两个目录libexec和share
3.修改目录权限
# chown -R nagios:nagios /usr/local/nagios
4.安装nrpe
# tar xvf nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure
编译完成后可以看到NRPE的一些信息
General Options:
-------------------------
NRPE port: 5666
NRPE user: nagios
NRPE group: nagios
Nagios user: nagios
Nagios group: nagios
Review theoptions above for accuracy. If they lookokay,
type 'make all'to compile the NRPE daemon and client.
可以看到NRPE的端口是5666,下一步是make all# make all
# make install-plugin (这步其实可以不需要,但是为了本地测试方便,我们还是建议安装)
#make install-daemon
#make install-daemon-config
现在查看一下nagios目录下面,会发现已经有四个目录文件了:bin,etc,share,libexec
5.根据官方文档,NRPE deamon是作为xinetd下的一个服务运行的,这就需要实现安装好xinetd,一般系统已经默认安装好了。没有安装的话使用yum安装即可。yum install xinetd -y,确保安装好以后,来安装xinetd脚本
# make install-xinetd然后编辑这个脚本,脚本位置可以从输出信息查看,一般会是/etc/xinetd.d/nrpe,编辑这个脚本
# vi /etc/xinetd.d/nrpe需要修改only_from行,后面可以接IP地址,也可以接IP地址段,使用空格间隔,表示从哪台主机上来的check_nrpe请求本机会作出相应。我们在51上做的修改,当然是允许现在这台nagios监控主机了。即修改为:
only_from= 127.0.0.1 192.168.1.214
6.编辑/etc/services文件,增加NRPE服务
# vi /etc/services 增加一行代码
#Local services
nrpe 5666/tcp#nrpe
7.重启xinetd服务
#service xinetd restart
8.查看NRPE服务是否启动,还记得nrpe的端口号吗?5666
#netstat -nltp | grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN
已结启动成功了。
9.测试NRPE能否正常工作,现在本机上测试一下:有个非常简单的命令
# /usr/local/nagios/libexec/check_nrpe -H localhost
即check_nrpe能够解析出-H指定的主机上的nrpe版本信息,则证明本地之间是可以取得信息的,后面用同样的办法,测试能否取得远程主机的版本信息。
[nagios@Exp51 libexec]$ ./check_nrpe -H localhost
NRPE v2.12
--------是可以的。另外需要注意的是,本地防火墙需要将5666端口打开,是的外部监控主机可以访问。
10.现在说一下,如何实用check_nrpe来读取监控信息。相比较而言,check_nrpe能够接受的参数不多,如下:
Usage: check_nrpe -H <host> [-n] [-u] [-p <port>] [-t <timeout>] [-c <command>] [-a <arglist...>]
下面是对各个选项的解释,我们主要使用到的其实就是-H和-c参数:
Options:
-n = Do no use SSL
-u = Make socket timeouts return an UNKNOWN state instead of CRITICAL
<host> = The address of the host running the NRPE daemon
[port] = The port on which the daemon is running (default=5666)
[timeout] = Number of seconds before connection times out (default=10)
[command] = The name of the command that the remote daemon should run
[arglist] = Optional arguments that should be passed to the command. Multiple
arguments should be separated by a space. If provided, this must be
the last option supplied on the command line.
注意:-c只能解释命令名称,这个命令一定是在nrpe.cfg中定义过的。这个相当于监控主机上的commands.cfg文件,只有它里面定义过的命令才是合法的,当然这里面的命令基本上都是基于插件去定义的,nrpe.cfg也不例外。(nrpe.cfg文件位于/usr/local/nagios/etc目录下)现在来查看一下nrpe.cfg默认定义了哪些命令(有些是我自己定义的):
command[check_users]=/usr/local/nagios/libexec/check_users -w 4 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 200 -c 250
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /
command[check_swap]=/usr/local/nagios/libexec/check_disk -w 40 -c 20
command[check_Internet]=/usr/local/nagios/libexec/check_ping -H www.baidu.com -w 3000.0,80% -c 5000.0,100% -p 5
其中红色字体就是我们定义的命令,也是check_nrpe -c后唯一能接的参数,我们现在就可以先使用check_nrpe -H localhost -c [command]来检测一下,正常以后就可以在监控主机上进行测试了。
11.现在在nagios监控主机上安装check_nrpe插件
# tar xvf nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure
# make all
# make install-plugin (监控主机上只要安装这个就行了)
现在就可以测试和51主机是否能够正常通信了
# /usr/local/nagios/libexec//check_nrpe -H 192.168.1.51
NRPE v2.12
测试通过。现在就可以在监控主机上对check_nrpe命令进行定义了
12.增加commands.cfg上对于check_nrpe的命令定义
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
注意:$HOSTADDRESS$会默认为你定义的服务或者主机的IP地址,在service或者host中定义时,-H IP 就看省略掉了
现在就可以在监控主机上定义要监控的远程主机的某些服务资源了。如下:我们定义了监控51主机上登录人数监控:
define service{
use services-pnp
host_name 51_server
service_description check-users
check_command check_nrpe!check_users
max_check_attempts 5
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups superman
}
注意:check_nrpe后面接的check_users就是在远程主机nrpe.cfg上定义过的。我们依次在将nrpe.cfg中定义的其他的命令加进来,完成后重启一下nagios,就会看到如下图所示的状态。
等待一会启动好了就可以了,五分钟之内应该都是可以正常获取监控信息的,我的已经启动好了,如下:
但是我们现在只能看到实时的监控状态,如何让nagios将一段时间的状态收集起来形成一个统计图表呢?看下下面这台主机上(192.168.1.215,我的另一台虚拟机服务器)的监控图,如下:
其实安装好以后是没有小太阳标识的,这是我安装了一个绘图抓图插件,可以看到一段时间主机或者服务的监控状态绘图。我们点开小太阳标识,出现如下图表:
下节来总结一下nagios的图形化监控,也很简单。