Instrument Your Applications
Learn to add custom metrics to your applications using Prometheus client libraries. Monitor business logic, performance, and user behavior with comprehensive instrumentation.
Prometheus Client Libraries
Node.js (prom-client)
Official Prometheus client for Node.js applications
Add custom metrics to your Node.js applications using the prom-client library.
Features:
Example:
const client = require('prom-client'); const counter = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests' });
Python (prometheus_client)
Official Prometheus client for Python applications
Instrument Python applications with custom metrics using the prometheus_client library.
Features:
Example:
from prometheus_client import Counter, Gauge REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP requests') REQUEST_DURATION = Histogram('http_request_duration_seconds', 'HTTP request duration')
Go (prometheus/client_golang)
Official Prometheus client for Go applications
Add Prometheus metrics to Go applications using the official client library.
Features:
Example:
import "github.com/prometheus/client_golang/prometheus" var ( httpRequestsTotal = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests", }, []string{"method", "endpoint"}, ) )
Java (micrometer)
Popular metrics library for Java applications
Use Micrometer to expose metrics from Java applications in Prometheus format.
Features:
Example:
import io.micrometer.prometheus.PrometheusMeterRegistry; @RestController public class MetricsController { private final Counter requestCounter; public MetricsController(PrometheusMeterRegistry registry) { this.requestCounter = Counter.builder("http_requests_total") .description("Total HTTP requests") .register(registry); } }
Prometheus Metric Types
Counter
Monotonically increasing counter
Use Cases:
Request counts, errors, events
Example:
http_requests_total{method="GET", status="200"} 1234
Characteristics:
Gauge
Single numerical value that can go up and down
Use Cases:
Current values, temperatures, queue sizes
Example:
memory_usage_bytes 1073741824
Characteristics:
Histogram
Distribution of values in buckets
Use Cases:
Request duration, response sizes
Example:
http_request_duration_seconds_bucket{le="0.1"} 95
Characteristics:
Summary
Similar to histogram with configurable quantiles
Use Cases:
Latency percentiles, quantiles
Example:
http_request_duration_seconds_summary{quantile="0.5"} 0.1
Characteristics:
Instrumentation Process
Add Client Library
Install the appropriate Prometheus client library for your language
Choose the official Prometheus client library for your programming language and add it to your project.
$ npm install prom-client$ pip install prometheus_client$ go get github.com/prometheus/client_golang
Define Metrics
Create metrics that represent your application's behavior
Define counters, gauges, histograms, and summaries that capture important application metrics.
const counter = new Counter({name: 'requests_total'});const gauge = new Gauge({name: 'queue_size'});
Expose Metrics Endpoint
Create an HTTP endpoint that serves metrics in Prometheus format
Set up an endpoint (typically /metrics) that returns metrics in the Prometheus exposition format.
app.get('/metrics', (req, res) => {res.set('Content-Type', register.contentType);res.end(register.metrics());});
Configure Scraping
Configure Prometheus to scrape your application metrics
Add your application to Prometheus configuration or create a ServiceMonitor resource.
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: my-app-monitor
Sample Instrumented Applications
Node.js Express API
Complete Node.js application with Prometheus instrumentation
Metrics:
Dashboard:
Custom API Dashboard
Alerts:
Python Flask Web App
Python Flask application with comprehensive metrics
Metrics:
Dashboard:
Flask App Dashboard
Alerts:
Go Microservice
Go microservice with business metrics
Metrics:
Dashboard:
Microservice Dashboard
Alerts:
Best Practices
Instrumentation Guidelines
Follow these best practices for effective application instrumentation.
- Use meaningful metric names that clearly describe what they measure
- Include relevant labels but avoid high cardinality
- Choose appropriate metric types for your use case
- Document your metrics with help text
- Use consistent naming conventions across your applications
- Monitor your metrics endpoint health
- Test your metrics in staging before production deployment
Quick Start Example
Node.js Express App
Complete example of instrumenting a Node.js Express application with Prometheus metrics.
const express = require('express'); const client = require('prom-client'); const app = express(); const register = new client.Registry(); // Add default metrics client.collectDefaultMetrics({ register }); // Create custom metrics const httpRequestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route', 'status_code'], registers: [register] }); const httpRequestTotal = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status_code'], registers: [register] }); // Middleware to collect metrics app.use((req, res, next) => { const start = Date.now(); res.on('finish', () => { const duration = (Date.now() - start) / 1000; const route = req.route ? req.route.path : req.path; httpRequestDuration .labels(req.method, route, res.statusCode) .observe(duration); httpRequestTotal .labels(req.method, route, res.statusCode) .inc(); }); next(); }); // Metrics endpoint app.get('/metrics', async (req, res) => { res.set('Content-Type', register.contentType); res.end(await register.metrics()); }); // Your application routes app.get('/', (req, res) => { res.json({ message: 'Hello World!' }); }); app.listen(3000, () => { console.log('App listening on port 3000'); });
Congratulations!
You've learned how to instrument applications with Prometheus. You now have a complete monitoring stack from installation to custom application metrics.