#Prometheus

Time-series database for metrics.


#Architecture

diagram
┌─────────────┐     ┌─────────────┐
│ Prometheus  │────▶│   Targets   │
│   Server    │     │ /metrics    │
└─────────────┘     └─────────────┘
       │
       ▼
┌─────────────┐
│   Grafana   │
└─────────────┘

#Configuration

yaml
1# prometheus.yml
2global:
3  scrape_interval: 15s
4
5scrape_configs:
6  - job_name: 'prometheus'
7    static_configs:
8      - targets: ['localhost:9090']
9
10  - job_name: 'node'
11    static_configs:
12      - targets: ['node-exporter:9100']

#PromQL Examples

promql
1# CPU usage
2100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
3
4# Memory usage
5(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
6
7# HTTP request rate
8rate(http_requests_total[5m])
9
10# Error rate
11rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m])

[!TIP] Pro Tip: Use recording rules for expensive queries!