网络属于基础资源,每当收到告警时总难免要先看一下网络有没有问题,即使没有收到网络方面的通告,业务开发也难免怀疑是网络抖动导致,每次找网络部门查大多数查不出什么问题,查多了也伤感情(有时网络部门会觉得业务部门在甩锅),在这么个大背景下,就想到业务方也需要有一个简单的网络监控,能随时查到机房间网络的ping延时、丢包。

    做这个事儿也有很多方案,不过为了简单、高效快速实现,还是选择了自己写采集脚本,在每个机房选择一台机器埋点,做出来的效果如下:
    自定义网络质量监控 - 图1
    分享一下技术实现,编写脚本使用ping命令采集数据落到磁盘,使用filebeat采集,logstash进行数据的清洗分段,然后推到elastic里建立索引,数据源接入grafana里进行展现,采集的逻辑是15s一次,ping超时时间是2s,采集的脚本如下:

    1. #!/bin/bash
    2. dst="lg-im-ims01.bj c3-im-ims31.bj c4-im-ims01.bj"
    3. host_name=`hostname`
    4. while true
    5. do
    6. for i in `echo $dst`
    7. do
    8. s=`ping -c 1 -W 2 $i | awk -F',' '/packets/{print $(NF-1),$NF}' |tr -d "(%|ms)"`
    9. loss=`echo $s |awk '{print $1}'`
    10. delay=`echo $s |awk '{print $NF}'`
    11. timestamp=`date +"%Y-%m-%d %T"`
    12. if [ `date +%H%M` == "0301" ]; then
    13. echo -e "${timestamp}|${host_name} --> ${i}|${loss}|${delay}" > /home/work/log/pping.log
    14. else
    15. echo -e "${timestamp}|${host_name} --> ${i}|${loss}|${delay}" >> /home/work/log/pping.log
    16. fi
    17. done
    18. sleep 15
    19. done

    打出来的日志如下

    1. 2019-09-24 03:03:18|tj1-sre-test-glx.kscn --> c4-im-ims01.bj|0|6
    2. 2019-09-24 03:03:33|tj1-sre-test-glx.kscn --> lg-im-ims01.bj|0|6
    3. 2019-09-24 03:03:33|tj1-sre-test-glx.kscn --> c3-im-ims31.bj|0|8

    如果要增加监控的粒度,增加埋点即可。