分类:
2010-04-23 15:39:08
一、实际需求
公司租用多个idc机房,为了实时的和历史的查看idc网络状态,记录该节点的网络流量和做分析统计使用,都具有许多现实意义;
比如:该机房的总出口带宽,当前总在线人数,平均每个客户端的下载速度(各地速度不同这里指的是平均速率),带宽使用率等等,依此来评估该机房是否能达到当初的预测效果。
实际效果如下图所示:数据仅为举例使用;
各个IDC数据如下图:
其中:
– tcp est connections是所有机房连接数总计;
– download speed是每个连接的下载速度;
– Total outbound是所有服务器对外提供服务器的带宽总计;
– boundwidth used是总租用带宽除以当前流量的带宽使用率;
– this node boundwidth是该节点租用的带宽数;
目的:
可以实时的掌握idc机房总体信息;
可以历史的查询过去时间段内的局部信息;
可以对机房的网络质量做出及时判断;
可以针对每个机房的网络情况作出及时的调整;
以下我来谈一下具体实现(方法各有不同,达到效果即可,欢迎提供技术交流):
二、数据采集
1、tcp est connections汇总方法:
我提供的方法是在每台机器上部署snmp自定义脚本指定独立的oid传送给监控服务器:
详细参考我之前写的:
脚本原理:使用snmpwalk oid得到每个idc机房所有服务器的establish 连接数,进行汇总累加;
2、total outbound汇总计算:
方法一:使用rrdtool fetch(推荐使用)
指令如下:
说明:我这里取得数值是10分钟前的流量,这是为了避免和cacti每5分钟取值产生冲突,也能保证取值准确;
fetch取值都是科学计数,这里用printf进行来还原为可读的数值。(要和谐一下!)
方法二:使用snmpwalk取流量值(不推荐使用,大家了解一下)
指令如下:
方法三:本地ifconfig取流量,方法与snmpwalk有相似之处:
3、带宽使用率和下载速度(即每个连接的平均速度)计算
带宽使用率=当前使用带宽 / 租用总带宽
下载速度=当前使用带宽 / 总连接数
4、汇总数据到文本:
文本的内容和格式如下:
5、cacti取值脚本
内容如下:
输出格式:
三、创建cacti作图模板
完成以上步骤,就可以在cacti中创建相应的模板啦,为我们辛苦取到的数据画图:
1、登录cacti点击左侧菜单的data input motheds -> add
如图:
说明:设定如图所示,input string这里要在我们上面写的取值脚本后面跟,因为脚本后面要跟一个行参;Allow Empty Input的checkbox勾选;
2、设定这个的input fields属性
如图:
说明:这里Special Type Code我们取主机名即 hostname,这样cacti就会知道是取devices name值;因为我们后面要创建host templates,然后再创建graph的时候把这个值赋给脚本;
3、设定output fields属性
就是我们脚本输出的5个数据;以bound举例,其他相同,如图:
说明:依次创建5个数据的output fields,第一列的name必须与脚本输出的名字相同,最后点击save保存;
4、创建data templates模板
如图:
说明:
Data Source Item依次创建刚才输出的5个output fields这里的下拉菜单就是我们data input methods设定选择和你创建的Internal Data Source Name一一对应不能出错;
Maximum Value这里设定尽量高些,免得出现溢出无法出图;
Custom Data无需设定,其他全部默认;这里有个问题就是你每完成一个就要先点击save,否则会丢失之前修改的内容;
5、创建graph templates模板,点击graph templates->add
如图:
说明:Vertical Label 这里是纵坐标名字可以填一个node status什么的随你喜欢,其他可以全部默认;
Graph Template Items -> add 以TCP EST Connections为例:
如图:
说明:
Data Source 下拉菜单选择之前我们在data templates里面创建的links一栏
color自行选择(一定要选)
Opacity/Alpha Channel cacti0.8.7新增默认就好;
Graph Item Type 选择AREA(就是图的类型,AREA指的是区块表示,STACK是在原来区块上堆叠区块)
Text Format 说明文字,自己写吧
Insert Hard Return 勾选的话就会输入一个回车符
CDEF Function不用选,因为我们输入的数据已经是正确数据,
GPRINT Type:只有在Graph Item Type 选择GPRINT才用到,我们后面的%就是通过这个实现的;
图中item 2、3、4添加方法如下图:
说明:
这里全部使用的Graph Item Type为GPRINT类型,GPRINT Type选择Exact Numbers(不打印小数点类型)
Consolidation Function 选择LAST 即当前数值;其他的max min average不用说了吧;对应你自己的选择在text format中打印标签名;
顺便说一下加%的GPRINT Type的方法:
点击Graph Management->GPRINT Presets->add 如图:可参看
Graph Item Inputs部分会根据Graph Template Items自动创建默认即可;
点击save保存,完成设定;
6、创建host templates并画图:
点击add;然后如下图:
save保存,然后选择左侧菜单的devices->add开始作图,设定如下图:
说明:这里重要的一点就是Hostname一栏一定要对应我们脚本中的行参值,就是你数据文本里面的第一列;其他snmp等全部为空;
点击save->Create Graphs for this Host->勾选Graph Template Name中的
Create: node_boundstatus graph->create 作图成功,大功告成;
7、一次添加所有的idc host devices并加入到graph trees。
四、心得总结
我在做这个监控前,也没有想到过cacti这些附加功能,所以在做任何一个技术的时候,我们都应该多想想是否还有其他我们可以利用的价值。这里起到一个抛砖引玉的效果,希望网友们有更好的idea呈现给我们~
转载