Nagios的监控原理
之前对nagios的监控原理不是很清楚,经过几次搭建之后,又参考了许多书籍和部分优秀的文章,将大家讲的好的部分结合在一起,又添了些自己的内容形成这这篇文章,以便一些新手的理解
一、nagios的简介
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警,第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。
Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。
Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。
可以识别4种状态返回信息,即 0(OK)表示状态正常/绿色、1(WARNING)表示出现警告/黄色、2(CRITICAL)表示出现非常严重的错误/红色、3(UNKNOWN)表示未知错误/深黄色。Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。
二、nagios的监控对象有哪些
1.本机的运行状态
2.本机的服务的运行状态
3.远程主机【可以是linuc/unix主机也可以是windows主机】
4.远程主机上的服务
5.监控网络服务(SMTP、POP3、HTTP、PING等);
6.监控主机资源(处理器负荷、磁盘利用率等);
三、nagios监控一个服务或主机的方式
1.【被动监控】
nagios通过nsca进行被动监控。那么什么是被动监控呢?被动监测:就是指由被监测的服务器主动上传数据到nagios监控系统中。这种监测方式提高了实时性(出现问题的时候,被监测的服务器可以及时上传数据通知nagios,从而使管理员可以尽快作出处理,而不用像主动监测中一样,非要等到下一个监测周期才能获知被监测服务器的状态)。NSCA就是可以实现Nagios被动监测的一个程序。目前所知道的,只能通过nsca插件对linux/unix服务器进行被动监控。对于windows服务器暂时没发现可用的插件。
2.【主动监控】
nagios通过nrpe插件和snmp协议进行主动监控。至于什么是主动监控可以参考上面所述。简单理解决就是nagios按照检测周期主动的获取远程主机的数据。这样一来实时性就要差一些了。nagios通过nrpe插件和snmp协议实现了对linux/unix服务器进行监控,同时通过snmp协议实现了对windows服务器、交换机、打印机等的监控。另外,nagios通过NSClient++客户端也可以对windows进行监控
四、nagios监控一个服务或主机的途径
nagios本身并没有监控的功能,所有的监控是由插件完成的,插件将监控的结果返回给nagios,nagios分析这些结果以web的方式展现给我们,同时提供相应的报警功能(这个报警的功能也是由相应的插件完成的)。
根据上图可以看出有这么几大类,这些都是nagios所要调用的插件类型
1.snmp类
【可以监控本地/远程linux/unix主机和远程windows服务器、交换机、打印机】
2.nrpe类
【主要监控本地主机和远程主机的服务的状态,切记是针对于服务】
3.nsca类
【nsca主要是实现被动监控的】
4.nagios-plugins类
【nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。】
所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec,可以自己查看。
五、详细介绍nagios调用插件来监控主机/服务的过程
1.NPRE的工作原理
NRPE总共由两部分组成:
- check_nrpe 插件,位于在监控主机上
– NRPE daemon,运行在远程的linux主机上(通常就是被监控机)
当nagios需要监控某个远程linux主机的服务或者资源情况,一般过程:
1.nagios会运行check_nrpe这个插件,告诉它要检查什么;
2.check_nrpe插件会连接到远程的NRPE daemon,所用的方式是SSL;
3.NRPE daemon会运行相应的nagios插件来执行检查;
4.NRPE daemon将检查的结果返回给check_nrpe插件,插件将其递交给nagios做处理。
注意:NRPE daemon需要nagios插件安装在远程的linux主机上,否则,daemon不能做任何的监控.
通过NRPE的检测分为两种:
1).直接检测:检测的对象是运行NRPE的那台linux主机的本地资源,原理如下图
被监控机上安装有nrpe,并且还有插件,最终的监控是由这些插件来进行的.当监控主机将监控请求发给nrpe后,nrpe调用插件来完成监控.
2).间接检测:当运行nagios的监控主机无法访问到某台被监控机,但是运行NRPE的机器可以访问到时,NRPE就可以充当一个代理,将监控请求发送到被监控机(必须要说明的是,通常被监控机与监控机在同一网络内,所以这样的情况很少)
2.snmp的工作原理
NMS(网络管理平台)它会给管理员提供一个命令行接口,可以发送SNMP的操作指令到任何一个被监控主机,被监控端怎么才能接受监控端所发来的指令,而且能够理解它的指令呢?在被监控主机上要安装一个服务器进程,这个服务器进程只是用来接收来自于监控端的查询请求,并且能够解析对方的查询请求,并把对方请求的数据返回给对方。这个服务进程叫做Agent,一个远端代理,这个代理只是为了接收我们的查询指令或者其它的管理指令的而存在的,NMS向对方的Agent发送指令以后。Agent通过在本地执行一些操作来获取数据,并且将获取的结果返回给监控端。例如:磁盘空间,当前服务流量等。
但是任何一个人都向我们被监控端发送指令请求获取我们的数据,那么我们的隐密性九没了,所以为了避免这种情况,引入了一种简单的认证机制(comminuty)社区的名字就是双方通信的密码。NMS端向被监控主机发送我就是cominuty:XXX,被监控端如果认可:XXX,就把数据返回过去。
SNMP v1版本中有3种comminuty模式: read-only,read-write,trap
read-only:管理端只能向被管理端发起获取信息的请求,也就是只能从被管理端读信息的
read-write:管理端可以向被管理端发送控制指令,也就是管理端有权限去操作被管理端。例如:让其shutdown
trap:被监控端能主动的去联系监控端的,告诉其这里有问题。
SNMP是基于UDP协议的Agent(被监控端被动打开udp:161端口),NMS(监控端被动打开udp:162端口)
SNMP基于udp协议主要是速度快,tcp协议可靠,但是需要三次握手,如果被监控端报警急需要处理,三次握手之后被监控端已经down机了。
Linux上关于sbmp的软件包有两个
net-snmp 【snmp的Agent被监控端所用】
net-snmp-util 【监控端所要用的命令集合】
注意:对于被监控端而言,只需要这一个包net-snmp。对于监控端而言,正常情况下如果只是为了获取信息,无论是get/set,使用这一个包就行了net-snmp-utils,但是如果说我们要接收被监控端通过trap发过来的通知信息的话,那么我们的监控端就必须要装上net-snmp这个包,并启用/etc/rc.d/init.d/snmptrapd 这个服务
六、举例说明
Nagios 通过 NRPE 来远端管理服务
1.Nagios 执行安装在它里面的 check_nrpe 插件,并告诉 check_nrpe 去检测哪些服务。
2.通过 SSL,check_nrpe 连接远端机子上的 NRPE daemon
3.NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,..etc)
4.最后,NRPE 把检测的结果传给主机端的 check_nrpe,check_nrpe 再把结果送到 Nagios状态队列中。
5.Nagios 依次读取队列中的信息,再把结果显示出来。
下面通过一个监控远端服务器 CPU 负载情况的实例,研究如何实现通过 NRPE 来管理远端服务器。假设有一台远端服务器的 IP 是 10.20.0.110,Nagios 服务主机 IP 是:10.20.10.1。它们都已经安装上了 nagios 系统,主机通过 NRPE 检查运行中的服务器 CPU 的负载量,当负载量超过80%是发出警告(WARNING)报告,超过95%时发出紧急(CRITICAL)报告。在Nagios 的插件中存在 check_load -w $ARG1$ -c $ARG2$插件,通过查看其帮助,当 Nagios 调用它时,就会去检查对象主机的CPU负载,达到$ARG1$指定的数值时就会发出警告(WARNING),达到$ARG2$时发出紧急报告(CRITICAL)。
首先是在远端服务器上的修改:
1.让 Nagios 用户拥有对如下文件的所用权:
chown nagios.nagios /usr/local/nagios chown –R nagios.nagios /usr/local/nagios/libexec 然后如果没有安装 xinetd,则先安装 xinetd。
2.按照 Nagios 文档安装好 nrpe 插件。
3.修改文件/etc/xinetd.d/nrpe:
only_from = 127.0.0.1 10.20.10.1(这个是 Nagios 主机的 IP)
nrpe 允许以上 IP 的机器通过 nrpe 查询服务
4.在/etc/service 文件里添加:
nrpe 5666/tcp #nrpe 然后 service xinetd restart
5.执行:netstat –at | grep nrpe
如果出现:tcp 0 0 *:nrpe *:* LISTEN 说明NRPE监听已经成功启动了
6.执行 /usr/local/nagios/libexec/check_nrpe –H localhost
出现 NRPE v 2.8.1 则安装成功。
7.确认本地防火墙允许远端服务器访问 NRPE daemon:
iptables -IRH-Firewall-1-INPUT -p tcp -m tcp –dport 5666 -j ACCEPT service iptables save 8.打开/usr/local/nagios/etc/commands.cfg,找到 check_load 服务,修改如下:
define command { command_name check_server_load command_line $USER1$/check_load -w 80% -c 95% } 9.打开 /usr/local/nagios/etc/nrpe.cfg 可以看到里面已经默认定义了一些检测服务,如:
/usr/local/nagios/libexec/check_nrpe -H localhost -c check_users /usr/local/nagios /libexec/check_nrpe -H localhost -c check_load /usr /local/nagios/libexec/check_nrpe -H localhost -c check_hda1 注释掉除 check_load 外的其它服务定义。
最后是 Nagios 主机上的修改:
1在 Nagios 主机上安装 nrpe 插件。
2打开/usr/local/nagios/etc/command.cfg添加如下行:
define command{ command_name check_nrpe command_line $USER1$/check_nrpe –H 10.20.0.110 -c $ARG1$ 3再在对象定义的配置文件里(host.cfg 文件),修改 host 为要检测的主机的 IP 地址,然后在服务中添加要检测的命令:
define service { use linux-service service_description remote_CPU_Load check_command check_nrpe!check_load } 4在 nagios.cfg 主配置文件中,cfg_file 值为 host.cfg,运行
/usr/local/nagios/bin/nagios –v /usr/local/nagios/etc/nagios.cfg 如果没有错就启动 nagios:
service nagios start(restart,stop) 5打开浏览器:http://主机 IP/nagios
可以看到所监控的远端机器的这个信息了(check_server_load的返回结果),参看图2.正常状态用绿色表示,一旦远端服务器负载超过 80%,状态信息就会变成红色警告管理员。
(二)、
nagios监控应用分两块,一块为服务器端,一块为客户端。服务端配置文件在/usr/local/nagios/etc/objects,即可以监控linux,又可以监控windows,同时也可以监控打印机,和交换机。同时也可以发邮件。
服务端监控linux服务器的文件为/usr/local/ngios/etc/localhost.cfg,最主要分为三块。
define host{
use linux-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the linux-server host template definition.
host_name
alias
address
}
这个为主机块,需要告诉nagios,计算机名,别名,地址,使用的是 linux
define hostgroup{
hostgroup_name ; The name of the hostgroup
alias ; Long name of the group
members ; Comma separated list of hosts that belong to this group
}
这块为主机组名,别名,成员。
define service{
use local-service ; Name of service template to use
hostgroup_name
service_description checksapce_root
check_command check_local_disk!20%!10%!/root
}
这块就是可以监控的本地的服务名。
define service{
use local-service ; Name of service template to use
hostgroup_name
service_description HTTP
check_command check_http
notifications_enabled 1
}
这块跟上面一样,最主要的是本地服务。
nagios即可以监控进程,也可以监控端口。/usr/local/nagios/libexec,这个目录最主要放nagios监控插件,只要check_*** -h,就可以跟据显示来增加参数。也可以自己写脚本。
/usr/local/nagios/etc/cotacts.cfg,这份文件主要有两块,一块是要发送的邮件,一块是用户名。
/usr/local/nagios/etc/commands.cfg,最主要添加命令参数。
/usr/local/nagios/etc/printer.cfg,是监控打印机参数。
/usr/local/nagios/etc/switch.cfg,是监控网络设备,要开起snmp协议。
/usr/local/ngios/etc/templates.cfg,是监控服务器的一些网络信息,比如能否通,是否宕机。
/usr/local/nagios/etc/timeperods.cfg,是时间上的监控,你可以哪段时间进行监控,哪段时间不监控。
/usr/local/nagios/etc/windows.cfg,是监控windows服务器的
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 这句话是可以检查你的配置文件那条有错。
在/usr/local/nagios/etc/resource.cfg文件里面你可以增加用户,比如oracle
在客户端里面最主要改的是/usr/local/nagios/etc/nrpe.cfg 这份文件,根据服务端的设置来增加参数
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda2]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
#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 150 -c 200
command[check_swap]=/usr/local/nagios/libexec/check_swap -a -w 50 -c 30
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda2
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda5
command[check_tcp]=/usr/local/nagios/libexec/check_tcp -H host145 -p 1521 -c 2 -w 1
command[check_oracle]=/usr/local/nagios/libexec/check_oracle --db olbak
command[check_oracle1]=/usr/local/nagios/libexec/check_oracle --db ORAUP02
command[check_oracle2]=/usr/local/nagios/libexec/check_oracle --db smssite
command[check_oracle3]=/usr/local/nagios/libexec/check_oracle --db jt2
command[check_oracle4]=/usr/local/nagios/libexec/check_oracle --db jt3
command[check_mem]=/usr/local/nagios/libexec/mem.sh -w 10 -c 5
最后需要做的是启动客户端,/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
这样就能和服务端很好的配合进行监控。nagios的监控端口是5666,tcp的,记得一定要开。