cacti进阶应用三: IDC 质量监控-评估节点的网络品质
一、实际需求 公司租用多个idc机房,为了实时的和历史的查看idc网络状态,记录该节点的网络流量和做分析统计使用,...
扫描右侧二维码阅读全文
08
2008/08

cacti进阶应用三: IDC 质量监控-评估节点的网络品质

一、实际需求
公司租用多个idc机房,为了实时的和历史的查看idc网络状态,记录该节点的网络流量和做分析统计使用,都具有许多现实意义;
比如:该机房的总出口带宽,当前总在线人数,平均每个客户端的下载速度(各地速度不同这里指的是平均速率),带宽使用率等等,依此来评估该机房是否能达到当初的预测效果。
实际效果如下图所示:数据仅为举例使用;

各个IDC数据如下图:

其中:
- tcp est connections是所有机房连接数总计;
- download speed是每个连接的下载速度;
- Total outbound是所有服务器对外提供服务器的带宽总计;
- boundwidth used是总租用带宽除以当前流量的带宽使用率;
- this node boundwidth是该节点租用的带宽数;
目的:
可以实时的掌握idc机房总体信息;
可以历史的查询过去时间段内的局部信息;
可以对机房的网络质量做出及时判断;
可以针对每个机房的网络情况作出及时的调整;
以下我来谈一下具体实现(方法各有不同,达到效果即可,欢迎提供技术交流):

二、数据采集
1、tcp est connections汇总方法:
我提供的方法是在每台机器上部署snmp自定义脚本指定独立的oid传送给监控服务器:
详细参考我之前写的:Cacti进阶引用二:使用cacti获取snmp发送的自定义信息后作图
脚本原理:使用snmpwalk oid得到每个idc机房所有服务器的establish 连接数,进行汇总累加;
2、total outbound汇总计算:
方法一:使用rrdtool fetch(推荐使用)
指令如下:

#rrdtool fetch xxhost_traffic.rrd -s -10m AVERAGE |sed -n 3p |awk '{printf "traffic_out: %.f KB tarffic_in: %.f KB\n", $2/1024,$3/1024}' traffic_out: 13569 KB tarffic_in: 354 KB

说明:我这里取得数值是10分钟前的流量,这是为了避免和cacti每5分钟取值产生冲突,也能保证取值准确;
fetch取值都是科学计数,这里用printf进行来还原为可读的数值。(要和谐一下!)
方法二:使用snmpwalk取流量值(不推荐使用,大家了解一下)
指令如下:

#snmpwalk -v2c -c public 127.0.0.1 .1.3.6.1.2.1.31.1.1.1.10 说明:oid指的是ifHCOutOctets = Counter64的数值(snmp v2c 64bit解决溢出问题),需要在5分钟之后再取一次,然后将后一次的数据减去5分钟前的数据,得出的就是这5分钟内的流量;

方法三:本地ifconfig取流量,方法与snmpwalk有相似之处:

#ifconfig eth0 |grep "TX bytes" |awk '{print $6}' |cut -c 7- 说明:其中RX为接受bytes数,TX为发送bytes数,如果取traffic out数据(即提供服务的数据),就上面的指令;同时也需要每5分钟取值一次然后相减,得出每5分钟的流量;可以在本地写脚本,用snmp传送到监控服务器;

3、带宽使用率和下载速度(即每个连接的平均速度)计算
带宽使用率=当前使用带宽 / 租用总带宽
下载速度=当前使用带宽 / 总连接数

4、汇总数据到文本:
文本的内容和格式如下:

xiantao,links: 3087,speed: 349.6262,bw: 1054,bound: 2048,bw_percent: 51% datong,links: 2332,speed: 968.2333,bw: 2205,bound: 4096,bw_percent: 53% nantong,links: 4279,speed: 598.0313,bw: 2499,bound: 4096,bw_percent: 61% Total,links: 153610.0,speed: 607.8250,bw: 87278.0,bound: 112640.0,bw_percent: 76% 说明:以上数据为举例,total行中的数据应该为全部idc的总和(当前流量和总租用带宽)或者平均(下载速度、带宽使用率),%符号和单位都可以不用添加我们可以在cacti中设定;

5、cacti取值脚本
内容如下:

#!/bin/sh workfile=result.txt #汇总数据的文本 node=$1 if [ -f $workfile ] && [ ! -z $node ];then echo -n `cat $workfile |grep -i $node |awk -F, '{print $2" "$3" "$4" "$6" "$5}' |sed s/": "/:/g |sed s/"%"//g` else echo -n "links:0 speed:0 bw:0 bw_percent:0 bound: 0" fi

输出格式:

links:6369 speed:460.3096 bw:2863 bw_percent:69.8 bound:4096

三、创建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 如图:可参看rrdgraph_graph官方说明

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呈现给我们~

Last modification:November 26th, 2018 at 04:16 pm
If you think my article is useful to you, please feel free to appreciate

2 comments

  1. Michael Field

    感谢coolzsb的建议,考虑到衡量指标本身过多,画在一张图上会显得很杂乱,不太直观,这部分的内容还是输出一个表格页面更全面;画cacti上的主要是利用了它的强大的历史查询功能;

  2. coolzsb

    反正只要你有办法把你关心的数据输出给cacti,都可以按照你的想法把图画出来

    签名
    ---
    其实你可以考虑把把不同机房的同一指标画在同一张图上

    好像这样子比对起来更直观些

    签名
    ---
    或者用php weathermap画在同一张图上?

Leave a Comment