网络属于基础资源,每当收到告警时总难免要先看一下网络有没有问题,即使没有收到网络方面的通告,业务开发也难免怀疑是网络抖动导致,每次找网络部门查大多数查不出什么问题,查多了也伤感情(有时网络部门会觉得业务部门在甩锅),在这么个大背景下,就想到业务方也需要有一个简单的网络监控,能随时查到机房间网络的ping延时、丢包。
做这个事儿也有很多方案,不过为了简单、高效快速实现,还是选择了自己写采集脚本,在每个机房选择一台机器埋点,做出来的效果如下:
分享一下技术实现,编写脚本使用ping命令采集数据落到磁盘,使用filebeat采集,logstash进行数据的清洗分段,然后推到elastic里建立索引,数据源接入grafana里进行展现,采集的逻辑是15s一次,ping超时时间是2s,采集的脚本如下:
#!/bin/bash
dst="lg-im-ims01.bj c3-im-ims31.bj c4-im-ims01.bj"
host_name=`hostname`
while true
do
for i in `echo $dst`
do
s=`ping -c 1 -W 2 $i | awk -F',' '/packets/{print $(NF-1),$NF}' |tr -d "(%|ms)"`
loss=`echo $s |awk '{print $1}'`
delay=`echo $s |awk '{print $NF}'`
timestamp=`date +"%Y-%m-%d %T"`
if [ `date +%H%M` == "0301" ]; then
echo -e "${timestamp}|${host_name} --> ${i}|${loss}|${delay}" > /home/work/log/pping.log
else
echo -e "${timestamp}|${host_name} --> ${i}|${loss}|${delay}" >> /home/work/log/pping.log
fi
done
sleep 15
done
打出来的日志如下
2019-09-24 03:03:18|tj1-sre-test-glx.kscn --> c4-im-ims01.bj|0|6
2019-09-24 03:03:33|tj1-sre-test-glx.kscn --> lg-im-ims01.bj|0|6
2019-09-24 03:03:33|tj1-sre-test-glx.kscn --> c3-im-ims31.bj|0|8
如果要增加监控的粒度,增加埋点即可。