Nobody Is Listening on Port 8125
2 days ago
- Replacing the statsd_exporter with a yeet script that uses an eBPF program to capture StatsD datagrams at the kernel level, eliminating the need for a listening socket.
- The eBPF program watches port 8125 on all interfaces, copies the payload to a ring buffer, and returns TCX_NEXT to avoid dropping or rewriting packets.
- The collector runs as a SharedWorker with a JavaScript decoder that parses lines into Prometheus families, while metrics are served via a separate scrape endpoint with no network access.
- Prometheus scrapes a script that connects to the worker and outputs text format, all without the script ever binding a port or requiring multiple exporters.
- This approach counts metrics at the source, handles tags and mappings without YAML config, and integrates with other protocols like Redis, memcached, and Graphite using a single eBPF probe.