通过prometheus,fping-exporter监控网络质量,并用grafana出图

  • 发布于: 18 April 2022
  • 编辑: 628财经

一、安装部署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。

WechatIMG63.jpeg

【提示】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地址,并验证通过后方可继续:

WechatIMG64.jpeg

再添加dashboard:

WechatIMG62.jpeg

如果监控多个节点并显示多个节点,需要针对主机名做变量,添加变量信息,点击右上角设置按钮:

image.png

如下图注意标记的位置,填写正确的信息,此处General中,Name填写 hostname,这就是我们的变量名,后面用的到,Query Options中 Query 填写 label_values(instance)

填写好以后会看到已经抓取到的主机名

image.png

最后添加查询,本文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,如果看到图就大功告成,注意下图标记的位置填写变量,双坐标的配置请自行谷歌:

image.png

【提示】如果想在一页显示多个节点的数据,需开启重复显示功能,根据hostname来显示,即可得到本文开头时的demo效果。