Ping Exporter -- Prometheus
在使用 Prometheus 的过程中,我们经常有需要监控 Ping 结果的需求,这个时候我们可以使用 Ping Exporter
来实现,官方网址 https://github.com/czerwonk/ping_exporter
,Ping Exporter
的发行遵循 MIT License。
下载二进制部署包
wget https://github.com/czerwonk/ping_exporter/releases/download/0.4.7/ping_exporter_0.4.7_linux_amd64.tar.gz
解压后执行 Ping Exporter
的二进制文件我们可以得到帮助信息
usage: ping_exporter [<flags>] [<targets>...]
Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
--version Print version information
--web.listen-address=":9427" Address on which to expose metrics and web interface
--web.telemetry-path="/metrics"
Path under which to expose metrics
--config.path="" Path to config file
--ping.interval=5s Interval for ICMP echo requests
--ping.timeout=4s Timeout for ICMP echo request
--ping.size=56 Payload size for ICMP echo requests
--ping.history-size=10 Number of results to remember per target
--dns.refresh=1m Interval for refreshing DNS records and updating targets accordingly (0 if
disabled)
--dns.nameserver="" DNS server used to resolve hostname of targets
--log.level="info" Only log messages with the given severity or above. Valid levels: [debug, info,
warn, error, fatal]
--metrics.deprecated="enable" Enable or disable deprecated metrics
(`ping_rtt_ms{type=best|worst|mean|std_dev}`). Valid choices: [enable, disable]
--metrics.rttunit="ms" Export ping results as either millis (default), or seconds (best practice), or
both (for migrations). Valid choices: [ms, s, both]
Args:
[<targets>] A list of targets to ping
从帮助信息来看,我们需要一个配置文件来指定要 Ping 的列表。另外常规的监听端口、 Metric 数据导出路径、日志输出级别都可以自定义。与 Ping 相关的时间间隔、超时时间、Ping 包大小、DNS 刷新时间等也可以自行设置,这些参数既可以在启动的时候 通过参数来设置,也可以在配置文件中进行设置。
我们来先准备一个配置文件:ping.yml 。其中 targets
下是我们要 Ping 的 IP 地址,V4 或者 V6 协议,也可以是域名。
targets:
- 8.8.8.8
- 8.8.4.4
- 2001:4860:4860::8888
- 2001:4860:4860::8844
- baidu.com
dns:
refresh: 2m15s
nameserver: 1.1.1.1
ping:
interval: 2s
timeout: 3s
history-size: 42
payload-size: 120
官方提供了一个 ping-exporter.service
文件来控制 Ping Exporter
的启停。
[Unit]
Description=Ping Exporter
After=network.target
[Service]
User=ping_exporter
ExecStart=/usr/local/bin/ping_exporter --config.path=/etc/ping_exporter/config.yml --web.listen-address=":9427"
NoNewPrivileges=yes
CapabilityBoundingSet=CAP_NET_RAW
AmbientCapabilities=CAP_NET_RAW
PrivateDevices=true
PrivateTmp=yes
ProtectControlGroups=true
ProtectKernelModules=yes
ProtectKernelTunables=true
ProtectSystem=strict
ProtectClock=true
ProtectHostname=true
ProtectHome=true
DevicePolicy=closed
RestrictNamespaces=yes
RestrictRealtime=yes
RestrictSUIDSGID=yes
MemoryDenyWriteExecute=yes
LockPersonality=yes
[Install]
WantedBy=default.target
如果我们使用 Docker 镜像来启动 Ping Exporter
的话,启动命令如下:
docker run -p 9427:9427 -v /path/to/config/directory:/config:ro --name ping_exporter czerwonk/ping_exporter
运行后输出的结果如下:
# HELP ping_loss_percent Packet loss in percent
# TYPE ping_loss_percent gauge
ping_loss_percent{ip="2001:4860:4860::8844",ip_version="6",target="2001:4860:4860::8844"} 1
ping_loss_percent{ip="2001:4860:4860::8888",ip_version="6",target="2001:4860:4860::8888"} 1
ping_loss_percent{ip="220.181.38.148",ip_version="4",target="baidu.com"} 0
ping_loss_percent{ip="39.156.69.79",ip_version="4",target="baidu.com"} 0
ping_loss_percent{ip="8.8.4.4",ip_version="4",target="8.8.4.4"} 0
ping_loss_percent{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 0.1
# HELP ping_rtt_best_seconds_ms Best round trip time in millis (deprecated)
# TYPE ping_rtt_best_seconds_ms gauge
ping_rtt_best_seconds_ms{ip="220.181.38.148",ip_version="4",target="baidu.com"} 1.9935760498046875
ping_rtt_best_seconds_ms{ip="39.156.69.79",ip_version="4",target="baidu.com"} 4.307188034057617
ping_rtt_best_seconds_ms{ip="8.8.4.4",ip_version="4",target="8.8.4.4"} 40.30187225341797
ping_rtt_best_seconds_ms{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 44.01082229614258
# HELP ping_rtt_mean_seconds_ms Mean round trip time in millis (deprecated)
# TYPE ping_rtt_mean_seconds_ms gauge
ping_rtt_mean_seconds_ms{ip="220.181.38.148",ip_version="4",target="baidu.com"} 2.045837640762329
ping_rtt_mean_seconds_ms{ip="39.156.69.79",ip_version="4",target="baidu.com"} 4.4511942863464355
ping_rtt_mean_seconds_ms{ip="8.8.4.4",ip_version="4",target="8.8.4.4"} 40.4238166809082
ping_rtt_mean_seconds_ms{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 44.22184753417969
# HELP ping_rtt_seconds_ms Round trip time in millis (deprecated)
# TYPE ping_rtt_seconds_ms gauge
ping_rtt_seconds_ms{ip="220.181.38.148",ip_version="4",target="baidu.com",type="best"} 1.9935760498046875
ping_rtt_seconds_ms{ip="220.181.38.148",ip_version="4",target="baidu.com",type="mean"} 2.045837640762329
ping_rtt_seconds_ms{ip="220.181.38.148",ip_version="4",target="baidu.com",type="std_dev"} 0.04358862712979317
ping_rtt_seconds_ms{ip="220.181.38.148",ip_version="4",target="baidu.com",type="worst"} 2.149885892868042
ping_rtt_seconds_ms{ip="39.156.69.79",ip_version="4",target="baidu.com",type="best"} 4.307188034057617
ping_rtt_seconds_ms{ip="39.156.69.79",ip_version="4",target="baidu.com",type="mean"} 4.4511942863464355
ping_rtt_seconds_ms{ip="39.156.69.79",ip_version="4",target="baidu.com",type="std_dev"} 0.24366436898708344
ping_rtt_seconds_ms{ip="39.156.69.79",ip_version="4",target="baidu.com",type="worst"} 5.212696075439453
ping_rtt_seconds_ms{ip="8.8.4.4",ip_version="4",target="8.8.4.4",type="best"} 40.30187225341797
ping_rtt_seconds_ms{ip="8.8.4.4",ip_version="4",target="8.8.4.4",type="mean"} 40.4238166809082
ping_rtt_seconds_ms{ip="8.8.4.4",ip_version="4",target="8.8.4.4",type="std_dev"} 0.12417548894882202
ping_rtt_seconds_ms{ip="8.8.4.4",ip_version="4",target="8.8.4.4",type="worst"} 40.71577835083008
ping_rtt_seconds_ms{ip="8.8.8.8",ip_version="4",target="8.8.8.8",type="best"} 44.01082229614258
ping_rtt_seconds_ms{ip="8.8.8.8",ip_version="4",target="8.8.8.8",type="mean"} 44.22184753417969
ping_rtt_seconds_ms{ip="8.8.8.8",ip_version="4",target="8.8.8.8",type="std_dev"} 0.14494535326957703
ping_rtt_seconds_ms{ip="8.8.8.8",ip_version="4",target="8.8.8.8",type="worst"} 44.4484977722168
# HELP ping_rtt_std_deviation_seconds_ms Standard deviation in millis (deprecated)
# TYPE ping_rtt_std_deviation_seconds_ms gauge
ping_rtt_std_deviation_seconds_ms{ip="220.181.38.148",ip_version="4",target="baidu.com"} 0.04358862712979317
ping_rtt_std_deviation_seconds_ms{ip="39.156.69.79",ip_version="4",target="baidu.com"} 0.24366436898708344
ping_rtt_std_deviation_seconds_ms{ip="8.8.4.4",ip_version="4",target="8.8.4.4"} 0.12417548894882202
ping_rtt_std_deviation_seconds_ms{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 0.14494535326957703
# HELP ping_rtt_worst_seconds_ms Worst round trip time in millis (deprecated)
# TYPE ping_rtt_worst_seconds_ms gauge
ping_rtt_worst_seconds_ms{ip="220.181.38.148",ip_version="4",target="baidu.com"} 2.149885892868042
ping_rtt_worst_seconds_ms{ip="39.156.69.79",ip_version="4",target="baidu.com"} 5.212696075439453
ping_rtt_worst_seconds_ms{ip="8.8.4.4",ip_version="4",target="8.8.4.4"} 40.71577835083008
ping_rtt_worst_seconds_ms{ip="8.8.8.8",ip_version="4",target="8.8.8.8"} 44.4484977722168
# HELP ping_up ping_exporter version
# TYPE ping_up gauge
ping_up{version="0.4.7"} 1
来对结果进行一下解读ping_up
这个指标提供了 2 个信息,一个是当前 Ping Exporter 的版本信息,一个是当前的状态,值为 1 的时候是启动状态,值为 0 的时候是停止状态。
ping_loss_percent
这个提供了丢包率,
ping_rtt_best_seconds_ms
最好的响应时间(millis)ping_rtt_mean_seconds_ms
平均响应时间(毫秒)(已弃用)ping_rtt_seconds_ms
响应时间(毫秒)(已弃用)ping_rtt_std_deviation_seconds_ms
以毫秒为单位的标准偏差(已弃用)ping_rtt_worst_seconds_ms
最差的响应时间(已弃用)
在 ping_rtt_seconds_ms
这个 Metric 里 已经用 label 对最好响应时间、最差响应时间、标准差进行了区分。
作者对好多指标标注了 deprecated
已弃用,但是也都还在,个人感觉 ping_rtt_seconds_ms
和其他的几个指标有重复的情况,在使用的时候可以酌情选取。
版权声明: 本文为 InfoQ 作者【耳东】的原创文章。
原文链接:【http://xie.infoq.cn/article/a2e127a0198315422cf79c583】。未经作者许可,禁止转载。
耳东
还未添加个人签名 2020.05.24 加入
主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site
评论