Prometheus collects metrics by scraping HTTP endpoints that expose data in a specific text format. An exporter is a process that translates metrics from a third-party system — a database, a message queue, an operating system — into this format so Prometheus can scrape them. The prometheus_client library provides the same functionality for your own services: it manages metric registration, handles concurrent updates safely, and serves a /metrics endpoint in the correct format. Understanding both exporters (for infrastructure metrics) and prometheus_client (for application metrics) gives you complete visibility from kernel-level CPU steal to business-level match prediction accuracy.
Analogy🏏Cricket
🏏 Think of it like cricket: During India's 2023 World Cup final against Australia, the team management tracked three distinct data streams simultaneously to understand match performance. The scoreboard showed run rate, current score, and required run rate — aggregated numbers updated every over, equivalent to metrics. The commentary and match notes recorded each delivery's outcome — Rohit Sharma edged a yorker from Hazlewood at the 12th over, first ball — equivalent to logs. The ball-tracking DRS system traced the exact path of each delivery from Bumrah's hand through the air to the stumps, showing the full journey of that dismissal — equivalent to traces. Just as the scoreboard alone cannot explain why the run rate collapsed (you need the logs to see specific wicket events and traces to follow the pressure chain from bowler to batter to fielder), metrics alone cannot explain why your API latency spiked — you need logs for individual request events and traces to follow the request across services. The insight is that each pillar answers a different question: metrics give magnitude, logs give events, and traces give causality — and you need all three to diagnose a complex failure.