In this lesson, you will learn how to configure your application services to serve Prometheus-formatted metrics at a dedicated path so that your monitoring system can reliably scrape them.
Why a Dedicated Endpoint?
In the Prometheus "pull" model, your application acts as an HTTP server that exposes a plaintext interface. This interface provides a snapshot of your application's internal state—such as request counts, latency histograms, or active worker threads—formatted in a way that Prometheus can parse. By convention, we typically serve these metrics on an endpoint named /metrics on a separate management port.
Implementing the Exposure
When instrumenting your application using a Prometheus client library (like prometheus-client for Python or prom-client for Node.js), you start an HTTP server instance. This server doesn't handle your business logic; it exists solely to respond to HTTP GET requests from your Prometheus instance.
Here is a conceptual example of setting up this listener:
from prometheus_client import start_http_server, Counter
import time
# Define a custom metric
REQUEST_COUNT = Counter('app_requests_total', 'Total HTTP Requests')
if __name__ == '__main__':
# Start up the server to expose the metrics at port 8000
# The default path is /metrics
start_http_server(8000)
while True:
REQUEST_COUNT.inc() # Increment the counter
time.sleep(1)
Security Considerations for Scraping
Since you are opening a network port to expose internal application data, it is crucial to follow the "Zero Trust" principles we covered earlier.
- Network Isolation: Ensure your
/metricsendpoint is only accessible to the Prometheus server (or yourServiceMonitorcollector) viaNetworkPolicies. - Path Hardening: Do not expose sensitive business data or system internals. Only include metrics that are sanitized and necessary for observability.
- Dedicated Port: Use a secondary port for metrics (e.g.,
8000or9090) to separate your public-facing application traffic from your monitoring traffic. This allows you to apply different security context constraints and firewall rules to each port easily.
By isolating your metrics endpoint, you maintain a secure observability pipeline without compromising the integrity of your production services.
Key Takeaway: Exposing metrics via a dedicated, restricted HTTP endpoint allows your observability stack to perform secure, periodic data collection without exposing business logic or creating unnecessary attack surfaces.