CactiWeathermap显示效果的改进与实现
2020-10-09陆海锋梁卓明
陆海锋 梁卓明
摘 要: 应用Cacti来监控我校的网络设备已经将近10年,随着网络规模的扩大,Weathermap插件的拓扑图(按照习惯,以下称“气象图”)也画得越来越复杂,出现了不少流量标签重叠的情况和节点标签过长不能分行的情况。由于Weathermap的编辑器是非交互式的,放置节点标签需要手工进行不断的调整,或者先行计算好坐标,通过手工输入坐标以达到相应的效果。本文以我校的实际应用情况为例,研究如何调整气象图的标签以及自动计算标签的坐标,美化拓扑图展现效果的同时,减轻网络管理员的工作量。
关键词: Cacti Weathermap 拓扑图
中图分类号: TP3 文献标识码: A DOI:10.3969/j.issn.1003-6970.2020.08.022
本文著录格式:陆海锋,梁卓明. Cacti Weathermap显示效果的改进与实现[J]. 软件,2020,41(08):73-77
【Abstract】: It has been nearly 10 years to monitor network equipment of our school wih Cacti. With expansion of network scale, Weathermap plug-in topology (according to custom, hereinafter referred to as “Weathermap”) has been drawn more complicated, with many cases of overlapping traffic labels and long node labels without line separation. Editor of Weathermap is non interactive, placement of node labels needs manual adjustment, or be calculating coordinates first, achieving corresponding effect with manually coordinates input. With practical application in our school as an example, the paper studies label adjustment of Weathermap and automatical label coordinate calculation, to beautify display effect of topology map and reduce workload of network administrator.
【Key words】: Cacti Weathermap topology
0 引言
Cacti是一款免費开源的流量监控软件,可以基于SNMP、脚本等方式去探测设备的使用情况,扩展及支持都想当的多,因此,受到众多高校、公司、运营商等机构的信赖和使用。我校使用Cacti Weathermap将近10年,逐渐发现该软件有种种的不足,尤其是气象图的界面不美观和操作不便,在大规模的情况下的展示效果不理想。例如:节点标签不能分行,流量标签位置已被固定,节点标签位置需要手工调整等。因此,迫切需要寻找一种有效的解决方案以美化气象图的展示效果,减轻管理员的工作量[1-4]。经研究气象图的源代码及气象图的配置文件,发现可以通过修改源代码及自动生成配置文件的方案,可以完美解决以上的问题。
1 Cacti介绍
Cacti是目前业内应用得最广泛的开源监控软件,已经推出了10多年,集技术成熟,架构灵活,功能丰富,插件众多等各种优点于一身,而且安装使用简单,用户可以自行扩展及编写模板,内置LDAP认证接口,方便与Windows AD或者OpenLDAP进行对接。
Cacti使用了PHP语言编写前端页面,后端使用MySQL作为数据库,记录了图形、设备等信息,图形的数据则存放于RRD文件当中。该软件获取数据的方式多种多样,可以通过SNMP方式进行获取,也可以通过PHP脚本、BASH脚本等方式进行获取,获取后可以展示于控制台的图形当中或者Weathermap插件中。
2 Weathermap介绍
Weathermap是一个开源的网络可视化工具,可以把采集到RRD文件中的数据通过气象图的方式展现出来。
对Weathermap提供数据的方式可以多种多样,可以通过RRDTool、MRTG、文本文件(Tab分隔)、SNMP、fping、外部脚本或者Cacti指定的数据。使用RRDTool的软件有:Cacti、Criket、Zenoss、MRTG、Routers2、Munin等[5-7]。
该软件包含了详细的说明文档,也有一个非交互式的编辑器用于制作气象图。
Weathermap与Cacti结合得非常紧密,以至于Cacti的插件架构专门为了Weathermap提供了一个用户管理界面,并且直接在数据库里管理气象图的权限。为了提高效率,作为数据源的插件可以直接从Cacti的采集器里提取数据,这些插件有THold和DSStats。
Weathermap目前广泛用于全球的运营商、网络交换中心、通信公司、高校校园网、汽车大厂、医疗/制药行业、政府部门、学校、甚至教堂。
3 应用现状
目前我们将全校所有的交换机、路由器均添加到Cacti中,并通过SNMP协议获取端口、CPU利用率等信息。对于作为接入功能的交换机,由于端口太多(约40000个),如果全部监控起来,对Cacti服务器的压力太大,而且价值不高,因此仅监控了交换机的存活状态;对于作为汇聚功能的交换机(约60台),则监控起所有端口,并加上CPU监控;对于核心的设备,除了监控所有端口和CPU外,同时收集了这些设备的Syslog日志。
当正确添加了需要监控的设备后,便可以动手制作Weathermap的气象图了。
绘制气象图的方法很简单,在页面上放置两个节点,再添加一个连接,把这两个节点连接起来就可以了。但是在绘制过程中,界面是非互动的,也就是说,页面上只有鼠标在绘制界面上的实时坐标,至于标签位置和放置的效果,需要等待鼠标确定之后才能看到,所以就会出现类似下图的流量标签重叠的情况和部分节点标签超出绘图范围外的情况[8-9]。如果需要调整节点的位置,则需要点击节点标签,选择“移动”,然后再根据操作者自己的感觉移动鼠标,选择一个新的位置再确定,这个过程只有鼠标的实时坐标可以进行参考,操作过程非常不直观。
这是Weathermap存在的最大的问题,如果需要制作美观的气象图,需要花费大量的时间去重复这类位置调整的操作,另外,节点标签的分行和流量标签位置的调整也对美观性有很大影响如图1所示。
4 存在问题及解决办法
在多年的Weathermap使用过程中,发现了不少问题,通过研究和实践,总结出一些解决的办法。
(1)氣象图的节点标签在默认状态下只有一行。
经过分析源程序, 发现绘制节点标签的源代码位于Weathermap.class.php的myimagestring方法内。官方的源程序片段如下:
imagestring($image, $fontnumber, $x, $y - imagefontheight($fontnumber), $string, $colour);
此处的$string就是需要显示在标签内的字符串。由于官方版本没有做分行处理,因此节点标签的行数也只是一行,不论在标签内加上“\n”或者“
”,通过绘制出来之后也不会做任何分行的转换。因此,可以考虑在此处对源程序进行修改, 在标签里需要换行的位置输入一个分隔符,然后程序在此处判断是否有分隔符,如有,则在新的位置输出下一行,修改好的程序片段如下:
$linecount = 1; // 行数初始值
$lines = split("\n",$string); // 以“\n”为分隔符拆分各行
$linecount = sizeof($lines); // 统计总行数
$intLoop = 1; // 向循环变量赋初始值
foreach($lines as $line) // 开始循环每一行
{
imagestring($image, $fontnumber, $x, $y - imagefontheight($fontnumber) * ($linecount - $intLoop + 1), $line, $colour); // 根据当前的行号、字号及标签的Y轴坐标,计算出当前行的Y轴坐标
$intLoop++; // 循环变量自动加1
}
分行后的效果如图2所示。
(2)流量标签默认是在线段两头的50%位置。
在图1的气象图中,靠近“Campus-TeacherHome- Ag”节点的下行流量标签非常密集,极容易出现互相重叠的情况,这样就无法直观地得知该线路的流量值,这种情况,通常有两种解决方案:
a. 将气象图的尺寸扩大,各节点拉开适当的距离,以调整流量标签的位置,使得不会互相重叠。这种方案会令到工作量大增,调整各节点的位置耗费的人力和时间太多。
b. 两节点之间使用曲线互连,使得标签能够相互错开。这种方案不一定可行,有些情况下用曲线不够美观。
此时,可以考虑调整流量标签在流量线段上的位置,将下行流量的标签往上行流量标签方向移动。因为操作界面上并没有提供调整流量标签位置的方法,通过研究源程序,发现定义流量标签位置的源代码位于WeatherMapLink.class.php中,源码如下:
'splitpos'=>50, // 上下行分段的位置在整条流量线段的50%位置
'labeloffset_out' => 25, // 下行方向的标签在整条流量线段的25%位置
'labeloffset_in' => 75, // 上行方向的标签在整条流量线段的75%位置
为了使这下行方向的标签向上行流量标签方向移动,同时为了整条流量向线段的美观,可以同时调整这三个参数:
'splitpos'=>70, // 上下行分段的位置在整条流量线段的70%位置
'labeloffset_out' => 60, // 下行方向的标签在整条流量线段的60%位置
'labeloffset_in' => 80, // 上行方向的标签在整条流量线段的80%位置
效果如图3。
从上图可以看出,在不修改气象图的尺寸和移动节点标签的情况下,通过调整流量标签的位置,使得流量标签不再重叠,为了美观起见,可以同时调整流量线段的上下行分段位置。
(3)需要手动调整标签的位置。
调整节点标签位置一直是使用气象图的最繁琐的步骤,不但费时费力,如有其它节点需要插入,这个工作量相当于重做一次整个气象图。我们可以考虑从气象图的配置文件入手,通过分析气象图的配置文件,了解配置文件的结构,再由脚本重新生成配置文件,达到省时省力又美观的目的[10]。
打开位于/var/www/html/plugins/weathermap/configs/下的相应气象图文件,找到节点定义部分和连接定义部分,如下:
# 节点定义部分
# regular NODEs:
NODE node05466// 节点名称定义,可自定义
LABEL Campus-TeacherHome-Ag// 节点显示的标签定义,可自定义
POSITION 700 450// 节点坐标,可自定义
NODE node05484a
LABEL Campus-WestHome-1
POSITION 89 81
# 连接定义部分
# regular LINKs:
LINK node05466-node05484a // 连接名称定义,可自定义
INFOURL/graph.php?rra_id=all&local_graph_ id= 15329 // 点击该连接时需要跳转的URL地址
OVERLIBGRAPH /graph_image.php?local_ graph_id=15329&rra_id=0&graph_nolegend=true&graph_height=100&graph_width=300// 鼠標指向该连接显示的图片
TARGET /var/www/html/rra/1290/17428.rrd // 该连接调用的数据源
NODES node05466 node05484a// 该连接的两个节点
从上面的定义可以看出,生成这个配置文件需要有如下数据:
a. 定义节点名称。可以使用自定义名称,使得配置文件可读性更高,例如:cNODE Cam-pus-TeacherHome- Ag
b. 定义节点坐标。可以根据节点数量、拓扑结构,选择圆形、椭圆形等图形,通过预定义公式计算出来的坐标,填入POSITION一行内。
c. 定义连接名称。可以使用自定义名称,是的文件可读性更高,例如:LINK Campus-TeacherHome-Ag- Campus-WestHome-1
d. 找到graph_id是创建INFOURL和OVERLIBGRAPH的关键。
在管理界面的控制台主机记录下相应的host_id点击相应的主机图形列表,此时便可看到属于该主机的所有graph_id及对应的接口如图4、5所示。
e. 找出相应图形的rra id。
回到主机选择界面数据源列表,此时可以看到属于该主机的所有rra id及对应的接口,如图6所示。
生成配置文件:TARGET /var/www/html/rra/ [host_id]/[rra_id].rrd
应用该方法,配合Excel计算出各点坐标,合并为气象图配置文件内容,便可以生成各种美观的气象图。在后期需要对气象图的节点进行修改的时候,只需要重新再Excel里生成一次,把新生成的配置文件覆盖到当前的配置文件即可如图7、8所示。
5 结论
虽然Cacti是一款面世10多年的软件,这期间也有不少同类软件的界面比它漂亮、功能强大,但是它的良好的稳定性和灵活的扩展性依然令Cacti在这个时代仍然占有一席之地,更由于它是一款开源软件,在此基础上用户可以根据自己的实际情况对Cacti进行修改和扩展,满足用户的需求。
我校从2006年开始使用Cacti至今,一直均在稳定运行。这个软件大大减轻了我们的网络管理工作难度,对判断网络故障点位置可以提供比较精准的支撑,提供了美观便捷的可视化运维界面。
参考文献
[1] 王宁邦. Cacti 在可视化校园网络管理中的应用, 云南民族大学学报: 自然科学版2018, 27(2): 129-135
[2] 储久良, 吴许俊, 张晓群, 等. 基于Cacti的校园网络气象图技术的研究与实现[J]. 计算机技术与发展, 2010, 20(04): 199-202.
[3] 黄玉, 陈军, 肖宗水. 网络气象图的研究与应用改进[J]. 电脑知识与技术(学术交流), 2007(04): 1123-1124+1139.
[4] 储久良. 基于PHP Weathermap的网络流量及拓扑结构可视化实现[J]. 科技管理研究, 2010, 30(19): 192-194.
[5] 周立. 深入探析WeatherMap中指令的扩展特性[J]. 有线电视技术, 2017(11): 95-97.
[6] 孙晓霞, 刘星燕, 孙跃飞, 等. 气象报文转换程序设计[J]. 软件, 2012, 33(06): 72-74.
[7] 孙静, 李亚龙, 万杰. 基于WeatherMap技术的网络气象图研究与实现[J]. 电脑编程技巧与维护, 2016(22): 85-86.
[8] 赵瑜, 李俊. 基于SNMP的网络气象图设计与实现[J]. 微电子学与计算机, 2004(09): 54-58+63.
[9] 高杰欣. Cacti向网管系统提供网络气象图[J]. 中国教育网络, 2012(11): 77.
[10] 黄玉, 陈军, 肖宗水. 网络气象图的研究与应用改进[J]. 电脑知识与技术(学术交流), 2007(04): 1123-1124+1139.