blackbox_exporter使用ICMP模块检测网络状况时,出现ICMP检测Failure处理
blackbox_exporter使用ICMP模块检测网络状况时,出现ICMP检测Failure处理
在检测ICMP时,出现ICMP检测Failure 如下图
查看相关日志:
这看起来是权限问题导致的。
找到官方如下解释:
The ICMP probe requires elevated privileges to function:
- Windows: Administrator privileges are required.
- Linux: either a user with a group withinnet.ipv4.ping_group_range, theCAP_NET_RAWcapability or the root user is required.
- Your distribution may configurenet.ipv4.ping_group_rangeby default in/etc/sysctl.confor similar. If not you can setnet.ipv4.ping_group_range = 0 2147483647to allow any user the ability to use ping.
- Alternatively the capability can be set by executingsetcap cap_net_raw+ep blackbox_exporter
- BSD: root user is required.
- OS X: No additional privileges are needed.
Linux ping 命令需要 "cap_net_raw"(或 "CAP_NET_RAW")的 Capabilities 权限,因为该命令需要对数据包进行原始套接字访问。如果不具备此权限,则无法构建和发送 ICMP 包,或者无法接 ICMP 包的响应。请注意,ping 命令需要在网络层上执行操作,因此它需要特殊的权限。使用 Capabilities 机制覆盖了普通 Linux 用户的权限限制。设置 "cap_net_raw" 权限时,用户将能够执行"ping"命令,而无需以 root 用户的身份登录到系统。如果使用 root 用户运行 ping 命令,则无需为 ping 命令设置 "cap_net_raw" 的 Capabilities 权限即可成功运行。这是因为 root 用户具有所有系统资源和 Capabilities 权限。使用 root 用户时,系统将允许 ping 命令访问原始套接字,而无需 Capabilities 权限。
三种解决方案:
- 要使用 ICMP 控制消息(ping)功能,用户必须属于 net.ipv4.ping_group_range 内的一个用户组。这是通过 Linux 内核参数来控制的。
- 用户也可以拥有 CAP_NET_RAW 能力(capability)。在 Linux 中,能力(capability)是一种细粒度的权限,允许用户或进程执行特定的系统操作。CAP_NET_RAW 允许进程使用原始套接字(raw sockets),这对于执行 ICMP 操作是必要的。
- 用户必须是 root 用户,因为 root 用户在系统上具有最高的权限。
一些 Linux 发行版(distribution)可能默认在 /etc/sysctl.conf 或类似的地方配置了 net.ipv4.ping_group_range 参数。这个参数规定了允许哪些用户组使用 ping 功能。
如果没有配置上述参数,用户可以手动设置 net.ipv4.ping_group_range 的值,以允许任何用户组使用 ping 功能。这里的值设置为 0 2147483647 表示允许任何用户组。
或者,用户也可以通过执行 setcap 命令,为 blackbox_exporter 进程设置 CAP_NET_RAW 能力。这样,blackbox_exporter 将能够使用原始套接字进行 ICMP 操作。
这里使用第一种方案:
临时:
sysctl -w net.ipv4.ping_group_range="0 2147483647"
永久:
echo net.ipv4.ping_group_range = 0 2147483647 >> /etc/sysctl.conf
sysctl -p
至此,解决: