IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    运筹‘维’幄之中 洞悉千里之外——第三方IDC监控可视化

    admin发表于 2016-11-17 10:07:12
    love 0

    概述

     

    “运筹‘维’幄之中 洞悉千里之外”
    [做运维,要有呈现! 尤其是在这个“万物均互联,一切皆数据”的新时代。不管是对过程、还是结果,呈现是一个永不过时的命题。在庞大复杂的业务环境中,如何把复杂的工作流可视化,可视化能力就是呈现的关键了。可视化不仅是提升运维效率的一个手段,更是运维管理的一个长期战略。]
    人总得有那么个理想才足以支撑着现实,前进的步伐才愈发有动力。曾幻想着以后的工作环境会有这么一幕,凡是有空间的地方都布满了显示器,放眼望去,显示屏里那妖娆多姿的“红黄蓝绿橙”呈现的是众多服务器的监控数据。整个架势看起来特别牛的样子。

    6%e5%9b%be%e4%b8%80

    特别是以下这个光头哥就像在控制着全部的流量,多潇洒!

    (当然不是做运维做到没头发滴。。。哈哈)

    6%e5%9b%be%e4%ba%8c

    这个画风在外行人看来,还是颇有傲娇范的。(反正你不懂,看起来就是高大上)

    灵感源于“看电视”

    随着我们网络和流量越来越复杂,对外的情况越来越多,在网络报障时候,从最原始的ping和mtr情况到smokeping、cacti监控,然后到zabbix监控图,虽然一直在进步,但始终感觉不够专业。

    怎么做的更专业点呢,过年时候看到央视新闻联播的“据”说过年,春节期间的迁徙地图,有点焕然一新的感觉:

    6%e5%9b%be%e4%b8%89

    灵感来了!

    我们虽然没有那么多显示器,但是内容还是可以做好的。我们从软实力来开始装饰我们的监控图,为什么是说“装饰”呢,我们现在大部分依赖的是zabbix监控网络流量和服务器情况,自建机房间监控系统来监控网络间质量,这两个系统的优点是又快又准,我们这次是把成果进行可视化,来“装饰”一下。

     

    一、基于全国map的第三方机房网络质量可视

     

    我们的机房遍布全国,同时面对全国玩家,该怎么把全国的网络质量情况尽收眼底呢?经过多年的技术沉淀,我们不再纠结监控方案用开源的还是商用的,打算自己来开发。

     

    1 Echarts

    这个效果得感谢新闻联播“’据’说中国”给的灵感了,先来一个动态效果图

    map%e7%9b%91%e6%8e%a7%e5%9b%be

    用的是百度echarts的模拟迁徙效果,度娘这次挺赞的,这个插件感觉很不错,参考地址:http://echarts.baidu.com/echarts2/doc/doc.html

    我们是用python做的后端,下面简单记录下开发时候碰到的一些细节问题供大家参考。

    1、在option里面定义tooltip,当鼠标放在监控点上,而且我们提供的数据源是”1”的时候,进行友好提醒ping正常;
    tooltip : {
                trigger: 'item',
                formatter: function (params){
                    var r="";
                    if(params.value == 1){
                        var r="ping正常";
                    }
                return params.name + '<br/>'+r
            }
    
    ​

     

    2、dataRange里面用splitList字段分了3个等级,我们的参考值:

     

    splitList: [
                {start: 90, label: '严重(loss=>18% or ms =>150)'},
                {start: 40, end: 60, label: '警告(10%<loss<18% or 80<ms<150)', color: 'orange'},
                {end: 10,label:'正常(loss<=10% and ms <= 80ms)'}
            ],
            color: ['#ff3333', 'orange', 'yellow','lime','#51D645'],
    
    ​

    3、series里面提供的data是我们后端提供的,原始数据是由各个机房的fping汇总得来的。

    4、series里面的geoCoord是通过百度地图提供的坐标来定义。

    这个效果做出来之后,在对外的时候可以非常形象的体现出网络具体情况。

     

    2. map监控实现的难点

     

    Map监控可以代表当地省份玩家访问我们的游戏(机房)是否有问题,从而不用无头苍蝇一样的去定位问题。

    重点在于如何去采集各个省份可靠和稳定的IP,我们这里结合很多种方法来采集,最大限度避免IP缺少或者不稳定的情况

    6%e5%9b%be%e4%b9%9d

    上图是一个采集的样本,从图中可以看到分为手动和自动,自动代表脚本采集,手动代表人为填充,自动的方法如下:

    1. 选择各大top排名网站进行解析,比如百度,爱奇艺等
    2. 选择第三方接口获取IP:如听云(基调)、博睿、DNSPOD等
    3. 通过IP数据库把获得的IP进行测试、刷选,去重,最终导入到数据库进行ping测试
    4. 配合其他手段保证IP数据的准确性和有效性,比如脚本每两个小时重新获取一次,不稳定的IP手动进行剔除等

     

    二、基于zabbix数据采集实现IDC拓扑可视管理

     

    1. Zabbix

     

    Zabbix比较简单相信大家都有用,自身默认就带有“筛选”界面,在那里添加我们需要的图到一个大页面即可。在组态->筛选界面即可进行管理,这里有个技巧,手工来汇总肯定是特别麻烦,可以先创建个模版,然后汇出所选的,然后在导出的xml文件里面进行shell批量处理即可。

    另外也可以安装Zatree这个插件,会自动进行监控图的汇总。

    Zabbix装饰出来的样子大概就可以分多个页面放显示器了,类似这种:

    6%e5%9b%be%e5%9b%9b

    其实也就类似于文章前面光头哥在看的那个界面了。

     

    2.  Weathermap

    这个插件原先是cacti上的,同样也可以用取zabbix的数据源,期待的效果是在普通的拓扑图上加上动态的流量数据,先来个效果图:

    6%e5%9b%be%e4%ba%94

    下面简单概述一下安装过程。(相关配置下载可自行上weathermap官网)

    下载weathermap的独立程序https://network-weathermap.com/#download,这是个web程序,解压之后搭建个php站点到这个目录。

    下载weathermap-zabbix这个接口模块,地址:

     

    https://github.com/amousset/php-weathermap-zabbix-plugin
    
    ​

     

    解压出来就是一个lib目录里面包含3个php文件,把这个lib目录复制到Weathermap的站点目录即可。

    然后对weathermap进行简单的配置,让他的接口可以从cacti那里独立出来单独的通过页面来画图。修改editor-config.php里面的ignore_cacti参数改为TRUE,然后让这个目录让web用户可读写,访问http://net.example.com/weathermap/editor.php 这个接口即可进行图形界面画拓扑图,注意这个接口原先存在安全漏洞,一定要用最新版。

    我们可以选下面的simple.conf查看默认的拓扑图:

    6%e5%9b%be%e4%b8%83

    比较简洁和难看,我们可以创建个新的文件(configs/test.conf),然后即可进行add node(添加节点)和add link(添加链路),添加之后是实时保存的,但是要实现画图需要我们用crontab定时来运行脚本,在weathermap运行:

    php weathermap --config configs/test.conf  --htmloutput test.html  --output test.png
    
    ​

    这样就生成了个html文件,然后用web访问即可。

    虽然有图形界面来画图,但是想画个工整美观的图还是建议直接编辑配置,用里面的配置进行尝试自动化添加,不难,就几个关键词,坐标和流量接口。

    上面生成的图片是静态的,因为没有调用带宽的数据,所以我们的关键点还是在weathermap里面怎么调用到zabbix里面的数据。

     

    2.1 调用zabbix数据

     

    调用zabbix的数据是通过api_jsonrpc.php这个接口来实现,语法参考自带的介绍:

    General configuration
    SET zabbix_user username SET zabbix_password password SET zabbix_url http://zabbix/zabbix/api_jsonrpc.php
    # Graph configuration
    SET post_zabbix_graphs 1
    SET post_zabbix_graph_link 1
    SET post_zabbix_graph_base_url https://zabbix/zabbix SET post_zabbix_graph_width 420
    SET post_zabbix_graph_height 150
    SET post_zabbix_graph_period 86400
    ​

    然后用语TARGET的zabbix:语法来获取流量数据:

    TARGET zabbix:name:switch-1:GigabitEthernet0/1-IN:GigabitEthernet0/1-OUT
    
    ​

    里面有个关键点,主要是前面的set zabbix相关的数据,我们修改为自己的zabbix地址和用户密码即可。但是这个是怎么调用数据的呢。关键点来了,是link字段里面的TARGET配置:

    TARGET zabbix:name:switch-1:GigabitEthernet0/1-IN:GigabitEthernet0/1-OUT
    
    ​

    以冒号为区分分别代表的意思如下:

    第一个字段zabbix是个关键词

    第二个字段的name可以是name/key_/itemid

    第三个是zabbix里面设置的主机的主机名

    第四个是第二个字段设置的值的in流量

    第五个是第二个字段设置的值的out的流量

    当第二个是name的时候,第四个就是我们zabbix里面设置的某个接口名称,当是key_的时候就是zabbix里面的key值,如下:

    6%e5%9b%be%e5%85%ab

    第一个是用name时候调用的字段名,第二个就是key时候的,分别有各自的用处,但都是指向某个接口的流量。

    这里碰到过问题,我们的核心交换机不能用name来表示,需要设置精准的键值,也就是要用key_来表示,其余的用了交换机的模版的交换机可以直接用接口名称。

    另外怎么用接口获取zabbix的数据是通过zabbix的api_jsonrpc.php这个接口文件,我们也可以用别的工具来实现数据获取,具体流程如下:

    1、先获取认证的auth值:

    curl -i -X POST -H 'Content-Type:application/json' -d'{"jsonrpc": 
    "2.0","method":"user.authenticate","params":{"user":"用户","password":"密码"},"auth": null,"id":0}' 
    http://net.example.com/zabbix/api_jsonrpc.php
    
    ​

    2、可以通过返回的auth值来获取某个主机的字段:

    curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc": 
    "2.0","method":"host.get","params":{"output":["hostid"],"filter": {"host":"目的IP地址"}},"auth": "获
    取的auth值","id": 0}'  http://net.example.com:8080/zabbix/api_jsonrpc.php
    
    ​

    意思就是过滤主机名为目的IP地址的主机,返回它的id值。

    3、对上面返回的id值进行主机的监控项的搜索:

    curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc": 
    "2.0","method":"item.get","params":{"output":"itemids","hostids":"10366","search":{"key_":"Gigabit
    Ethernet1"}},"auth": "auth值","id": 0}' http://net.example.com:8080/zabbix/api_jsonrpc.php
    
    ​

    然后会返回这个主机关于GigabitEthernet1的监控项的id值。

    再来,接口就对这个itemid进行获取数据。

    上面的curl调试是在之前监控项有空格时候出现故障的调试过程,原先是通过抓包来看他的调用过程,之后发现网络上有zabbix接口api_jsonrpc.php的详细介绍。这里是通过php-weathermap-zabbix-plugin里面的3个php文件来获取。

     

    2.2 关键配置

     

    最终的配置就是围绕这NODE节点和LINK链路来做,类似这样:

     NODE DEFAULT     
       LABELFONT 100     
       AICONFILLCOLOR 25 25 112     
       LABELBGCOLOR 225 215 245     
       MAXVALUE 100
     LINK DEFAULT     
       WIDTH 3     
       BWFONT 100     
       COMMENTFONT 100     
       BWBOXCOLOR 212 212 190     
       BWLABEL bits     
       BANDWIDTH 100M
     #下面是节点NODE_1信息
     NODE NODE_1     
       LABEL test     
       ICON images/c.png     
       POSITION 100 600
     #下面是NODE_1和NODE_2之间的流量信息配置
     LINK NODE_1-NODE_2     
       TARGET 
     zabbix:key_:SWITCH_XXX:ifInOctets[GigabitEthernet1/3/1]:ifOutOctets[GigabitEthernet1/3/1]     
       NODES NODE_1 NODE_2     
       BANDWIDTH 300M
    ​

    想要展现出来的图美观一点,我们只需要把POSITION坐标定义整齐,然后用ICON替换掉原先的设备图即可。另外如果脚本处理起来麻烦,可以先用web界面生成,然后手动修改坐标即可对齐。

    开篇那两个高大上的办公环境,只要有硬件,加上我们这3个监控系统的装饰,估计可以更加高大上。一句话,只要我们有原始数据,在web端就比较容易帅气地进行展现了。

    三、总结

     

    1. 做技术也要有产品的思维,懂得把技术运用于真正的需求痛点当中去,所有成功的产品都不是一蹴而就的,这是一个需要不断的去打磨的过程
    2. 没有一个现成的产品可以拿来直接使用,囿于业务环境的差异,故需要师夷长技以制夷的精神
    3. 所有的数据都是可以用来组合的,就看你如何组合呈现出不一样的东西
    4. 时刻牢记如何让这些数据可视化去证明自己的价值


沪ICP备19023445号-2号
友情链接