3.1 检索流程
Cacti系统的首要任务是对网络内的监控设备进行数据检索,即监控数据的获取过程。Cacti使用轮询器,也就是Poller程序来完成这个工作。还记得么?就是“同福客栈的大跑堂白展堂”。Poller程序通过操作系统自身的计划任务功能被定期触发执行。Windows平台的计划任务功能就是自身的维护计划程序,Linux平台的计划任务功能就是Cron程序,通过编写Crontab脚本来实现。
在IT数据中心的环境中有各种各样的设备,如服务器、网络设备,甚至家用电器等。不用担心,大部分设备都支持简单网络管理协议(Simple Network Management Protocol,SNMP)的标准,为了后续能够更好地调试和运维,先介绍SNMP的基本原理和架构。
SNMP由一组网络管理的标准组成,包含一个应用层协议(Application Layer Protocol,ALP)、数据库模型(database schema)和一组资料物件。该协议支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(Internet Engineering Task Force,IETF)定义的Internet协议簇的一部分。
Cacti进行数据检索的主要流程如图3-2所示。
还记得我们在主机上安装了SNMP的相关组件么?整个监控网络中SNMP的设备主要包含SNMP Server和SNMP Agent两个角色。
可以将SNMP Agent程序理解为一种客户端程序,它的主要作用就是将被监控设备上的数据采集回来,按照MIB库的规则存放。通常情况下,Linux的常用代理程序是Net-SNMP,Windows的程序通过添加/删除程序可以安装,而类似于Cisco路由器、EMC存储之类的设备是自带SNMP的。Agent程序把从设备读到的各种数据(如CPU的负载数据)以SMI(Structure of Management Information)规定的格式写到MIB库中。
这里解释一下MIB。MIB(Management Information Library)可以简单地理解为一张地图或者一组抽屉,它是一个结构化的描述树,如图3-3所示。
Agent程序从设备中抽取出来的数据如果没有MIB的匹配,就是一组毫无意义的数据,MIB会按照事先制定好的规则,把这些数据按照它们各自的去处分别“入库保存”。
举个例子:我们希望查看服务器收到了多少个ICMP的请求,通过上面的树状图一步一步向下寻找,那么变量1.3.6.1.2.5.1中就保存了ICMP请求的数量。
下面该轮到SNMP Server工作了,用户给Cacti系统发出请求,需要查看某一设备的工作状态,Cacti将请求解析,然后控制SNMP Server程序,让它去找指定的SNMP Agent的程序。
下面是服务器与客户端之间的一组对话。
“HP DL380服务器上的Agent你好!我是Cacti Server上运行的SNMP管理控制程序,我现在是通过poller程序在跟你讲话,我需要你这台机器上的CPU负载数据,你传递给我一下!”
“Hi!SNMP管理端你好!数据都在MIB库中,你可以直接获取到。还记得我们约定好的MIB变量规则吧?”
“Hi!当然不会忘记啦,这不是国际通用的标准么,自然记得,哦!对了,用户还希望MIB中的数据可以每5分钟更新一下,辛苦啦!”
“愿意效劳,我会每5分钟到CPU中取数据,Poller程序可以每5分钟触发你一下过来到MIB中读取。”
“Deal!”
通过这么一个流程,SNMP Server取到的数据通过Cacti的加工组织和RRDTool的精美包装,就可以呈现在用户面前了。