Skip to content

Blackbox exporter (LAN)

Purpose

kubernetes/apps/observability/blackbox-exporter/lan probes devices and services that have no Prometheus exporter of their own: BMC/firewall reachability over ICMP, the wireless access points, an NFS port check, and TLS certificate expiry on both non-cluster Traefik instances and BMC management endpoints.

Why the access points get their own probe and DNS names

The access point probe (ap_probe) exists as a second, independent signal alongside the access switch's per-port PoE reading (snmp-exporter): PoE says an access point is drawing power, this probe says it is actually answering on the network. A hung access point still draws its normal power, so neither check can stand in for the other.

The targets are DNS names rather than addresses, served by Unbound from reserved DHCP leases (network-ops ansible/vars/{dhcp,dns}.yml). Before those names existed, the access points had no probe at all, because a dynamic address is nothing to point one at. The wireless controller role floats between the access points after a reboot, so no single one of them is durably "the controller"; the UPS management card's own probe target resolves the same way, through an Unbound host override shadowing a stale public DNS record.

Why the BMC certificate probe is separate from the Traefik one

lan-tls-cert-device exists because a Certwarden certificate deploy Job can "succeed" while the device keeps serving its old certificate until reboot. One BMC served an expired certificate for 3.5 months with nothing anywhere to say so; probing what the socket actually serves catches that, weeks before expiry.

It has to be a separate Probe object, and use tls_connect_noverify rather than the Traefik targets' tls_connect, because these BMCs serve a certificate chain with no intermediate. That is a firmware constraint, not a choice of deploy tool: verified live on one board's firmware, the vendor's own certificate-upload API rejects any multi-cert PEM, and the standard replace-certificate call only pairs with its own CSR-generation flow. A verifying probe would therefore score every one of these targets as failed regardless of certificate validity.

Both probes share one jobName (tls_cert) so dashboards and the expiry alerts treat the Traefik and BMC certificates as one fleet.

The scrape-timeout clamp that halved a 30s budget

tls_connect_noverify's module timeout: 30s is not what actually bounds the probe. Blackbox clamps its own module timeout to the scrape timeout Prometheus sends in the X-Prometheus-Scrape-Timeout-Seconds header, minus a 0.5 second offset. Against the chart's 10s default scrape timeout that clamp is 9.5s, so the 30s module setting never applied, and the storage BMC failed about 83% of its scrapes for a week while serving its certificate perfectly. Measured handshakes on that BMC ranged 1-3s warm, but 6.6s, 15s and 20s on the first connection after an idle gap, which is every scrape at a 5-minute interval.

The fix is the lan-tls-cert-device Probe's own scrapeTimeout: 35s, which raises the value blackbox actually clamps against. Raise the module timeout and this scrapeTimeout together, or neither: raising only the module timeout repeats the exact failure this one fixed.