ping binary, so ICMP needs
raw-socket privilege on the agent (see below). The agent never falls
back to a TCP probe when ICMP can’t run: a TCP connect tests a
different layer and would hide the real failure.
When to use ICMP vs a TCP probe
- ICMP tests pure network reachability to a host (router, switch, bastion, internal host). It doesn’t care whether any service is listening.
- TCP tests that a specific port accepts connections, and runs unprivileged. If you only care that a service is up, prefer the TCP probe (no special privilege needed).
- Many networks block ICMP entirely (cloud security groups, corporate firewalls). If pings are filtered, use TCP.
Privilege requirement
Sending ICMP needs a raw socket, which is privileged on every platform:- Linux:
CAP_NET_RAWcapability (or root). - macOS: the system
pingis setuid and works without extra setup. - Windows: ICMP probes are not supported on the Windows binary; use a TCP probe.
ping is available, grant the capability rather than
running the whole agent as root.
systemd
Docker (custom image with ping)
Kubernetes (custom image with ping)
ping, install it: on
Debian/Ubuntu iputils-ping, on Alpine apk add iputils. Without
the binary the probe reports icmp_unavailable.
When the agent lacks the privilege, the probe reports
icmp_privilege_denied with a pointer to this page. It does not
silently degrade to a different check.
Configuration shape
Field reference
Interpretations
Pick
reachability for “is this host up at all”, latency for network
quality, packet_loss for flaky links.
Reason codes
icmp_privilege_denied: the agent can’t open a raw socket. GrantCAP_NET_RAWand restart.icmp_unavailable: no usablepingbinary on the agent host. This is always the result in the published container image. Installiputils-ping/iputils, or run the release binary on the host.icmp_dns_failed: the hostname didn’t resolve. Distinct from “host unreachable”. Check the name and the agent’s DNS.icmp_all_timeout: every ping timed out (latency interpretation only). The host is down or ICMP is filtered. Withpacket_lossthis reads as 100; withreachabilityit reads as 0.icmp_error: an uncategorisedpingfailure. Check the agent log.
Troubleshooting
icmp_privilege_deniedeven after addingCAP_NET_RAW. The capability must reach the agent process, not just the container. For systemd useAmbientCapabilities(not onlyCapabilityBoundingSet). For Kubernetes confirm the pod’ssecurityContextaddsNET_RAWand no policy strips it.icmp_all_timeoutbut the host is up. The network likely blocks ICMP. Confirm with a TCP probe against a known-open port; if TCP succeeds, switch this metric to TCP.icmp_dns_failedfor an IP literal. Check the value isn’t mistyped; IP literals never go through DNS.

