Nagios 工作原理
nagios通过nrpe插件和snmp协议进行主动监控。至于什么是主动监控可以参考上面所述。简单理解决就是nagios按照检测周期主动的获取远程主机的数据。这样一来实时性就要差一些了。nagios通过nrpe插件和snmp协议实现了对linux/unix服务器进行监控,同时通过snmp协议实现了对windows服务器、交换机、打印机等的监控。另外,nagios通过NSClient++客户端也可以对windows进行监控。
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 这个服务。