通过prometheus,fping-exporter监控网络质量,并用grafana出图
一、安装部署fping-exporter,并验证
fping是一款非常轻量但又很强大的ping工具,通过docker部署fping-exporter作为监控节点,并通过prometheus获取fping-exporter提供的metrics,再由grafana出图,可快速搭建一套网络质量监控平台,如下图:
本文只介绍docker部署fping-exporter监测点的方法,因为众所周知的原因,推荐docker的形式,如果没有docker的安装条件,也可以下载程序运行,具体参考 https://github.com/joaorua/fping-exporter
代码是go预言编写,可以将源码下来以后根据自己的运行环境打包,懒人可以直接从下面地址下载对应的操作系统执行文件:https://github.com/schweikert/fping-exporter/releases
在设备上直接运行的命令如下:
fping-exporter -f /usr/sbin/fping #默认开启9605端口,60秒间隔,发20个包,具体参数请看github项目介绍
fping-exporter程序默认fping的安装路径是 /usr/bin/fping 如果fping没有在这个位置就需要指定位置 用 --fping=/xxx/fping。
docker部署fping-exporter相对简单,只需要执行如下命令:
docker run -d --name fping-exporter -p 9605:9605 joaorua/fping-exporter fping-exporter -c 100
以上命令通过 -c 100 参数指定发送100个包,方便探测统计。
该项目同时支持x86以及armv7和arm64位,可直接部署到类似N1盒子的路由器设备上,如果家里路由器支持公网(或通过内网穿透方式),可直接作为监测点来探测指定的目标节点。
【验证】开启后,我们来测试一下fping-exporter是否可以像node-exporter一样返回数据,以http请求的形式给监测点发探任务,可直接在浏览器执行,
http://172.17.0.6:9605/probe?target=114.114.114.114 #probe是请求服务的路径,源码程序写死的,target是你要探测的目标地址,这里是要探测到114.114.114.114的网络质量
【注意】发起探测后,因为默认是60秒发一次探测,所以发起后不会立刻返回结果,需要等待最多1分钟的时间,如果页面没有报错,只是空白,请反复刷新直到出现结果为止,如果超过1分钟仍没有结果或直接报非200错误,请检查部署。
如果出现类似下图的返回结果,就证明已经生效了:
【注意】fping只能探测IP,如果探测域名,必须保证域名有解析IP,否则会报错导致数据完全无法采集,也就是说IP可以不通,但不能没有IP。
【提示】fping-exporter的监控指标说明:
fping-exporter produces the following metrics: fping_sent_count: Number of sent probes # 发包数 fping_lost_count: Number of lost probes # 丢包数 fping_rtt_count: Number of measured latencies (successful probes) #发成功的包数量 fping_rtt_sum: Sum of measured latencies # 发包总耗时(除以发成功的包数量 等于平均延迟) fping_rtt: Summary of measured latencies # 每个包的延迟
二、配置prometheus
prometheus的教程大家可以去自行谷歌,下面列出配置文件以及说明,prometheus作为中央调度,就是向fping-exporter发起任务,想探测哪些节点,就直接写到targets中。
prometheus.yml 配置如下(这是一个完整的配置):
global: scrape_interval: 60s scrape_configs: - job_name: fping metrics_path: /probe static_configs: - targets: #你想要监控的目的IP,这里我用两个公共dns地址举例 - "114.114.114.114" - "223.5.5.5" relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 172.17.0.6:9605 #fping-exporter 服务的地址,因为是http的,所以也支持域名加端口的形式
要注意的是,访问本机的docker容器必须是通过容器地址(通常是172开头),docker容器无法与宿主机127.0.0.1互通,所以大家在grafana上配置prometheus的数据源时,如果prometheus也是docker部署的,就要填写prometheus的容器地址。
重启prometheus后即可开始抓取fping-exporter检测点的数据,可以查看fping-exporter容器的日志信息,确认是否开始跑任务。
三、grafana配置
从0开始,首先配置prometheus数据源(Data Sources / Prometheus)填写正确的prometheus地址,并验证通过后方可继续:
再添加dashboard:
如果监控多个节点并显示多个节点,需要针对主机名做变量,添加变量信息,点击右上角设置按钮:
如下图注意标记的位置,填写正确的信息,此处General中,Name填写 hostname,这就是我们的变量名,后面用的到,Query Options中 Query 填写 label_values(instance)
填写好以后会看到已经抓取到的主机名
最后添加查询,本文demo中要计算丢包率以及平均延迟,两个查询分别是,
fping_lost_count{job="fping",instance=~"$hostname"}/fping_sent_count{job="fping",instance=~"$hostname"} #丢包率=成功发包数/总发包数 fping_rtt_sum{job="fping",instance=~"$hostname"}/fping_rtt_count。#平均延迟=总耗时/成功发包数
OK,如果看到图就大功告成,注意下图标记的位置填写变量,双坐标的配置请自行谷歌:
【提示】如果想在一页显示多个节点的数据,需开启重复显示功能,根据hostname来显示,即可得到本文开头时的demo效果。