avg(rate(http_requests_total[5m])) by (job, code)
Prometheus Tutorial: 5 - Recording rules e Federazione
Tutorial sull’utilizzo del Prometheus - parte 5. Utilizzo delle Recording rules e federazione del Prometheus.
Recording rules
Anche se non è un problema per il nostro esempio, le query che aggregano migliaia di time series possono essere lente quando calcolate ad-hoc. Per rendere queste query più efficienti Prometheus permette di pre-registrare le espressioni all’interno di nuove time series configurate tramite le recording rule.
Diciamo che siamo interessati a registrare la frequenza per secondo delle richieste HTTP dell’esempio precedente (http_requests_total) mediate per tutte le instanze (ma preservando la dimensione job e code) e misurato in una finestra di 5 minuti.
La query PromQL corrispondente potrebbe essere scritta così:
Provate a graficare questa query con l’Expression Browser.
Per registrare la time series risultante da questa espressione in una nuova metrica chiamata job_code:http_requests_total:avg_rate5m, create un file prometheus.rules.yml che conterrà l’espressione di cui sopra con l’aggiunta di alcune indicazioni, così come trovate di seguito:
groups:
- name: example
rules:
- record: job_code:http_requests_total:avg_rate5m
expr: avg(rate(http_requests_total[5m])) by (job, code)
Per far si che il Prometheus prelevi questa nuova regola è necessario aggiungere lo statement rule_files al vostro prometheus.yml.
La configurazione dovrebbe essere tipo questa:
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # Evaluate rules every 15 seconds.
# Attach these extra labels to all timeseries collected by this Prometheus instance.
external_labels:
monitor: 'codelab-monitor'
rule_files:
- 'prometheus.rules.yml'
scrape_configs:
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'prometheus-example-app'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['172.17.0.1:8080', '172.17.0.1:8081']
labels:
group: 'production'
- targets: ['172.17.0.1:8082']
labels:
group: 'canary'
Riavviate il Prometheus con la nuova configurazione e verificate che la nuova time series con la metrica con nome job_code:http_requests_total:avg_rate5m sia disponibile effettuando un’interrogazione tramite l’expression browser.
Federazione prometheus
La federazione permette di prelevare le metriche da altri prometheus, si possono prelevare selettivamente solo alcune metriche es. solo quelle dei nodi, solo quelle della memoria, etc.
Si può utilizzare la federazione per tenere fuori dai nodi produttori di metriche l’archiviazione primaria (e relativo consolidamento). Inoltre con la federazione è possibile avere dei nodi prometheus specializzati per le query di consultazione (per esempio per Grafana).
Una possibile configurazione di esempio per attivare la federazione è la seguente:
- job_name: 'federate'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="prometheus"}'
- '{__name__=~"job:.*"}'
static_configs:
- targets:
- 'source-prometheus-1:9090'
- 'source-prometheus-2:9090'
- 'source-prometheus-3:9090'
Per maggiori approfondimenti:
[Prometheus] https://prometheus.io/
[SoundCloud] https://soundcloud.com/
[CCNF] https://www.cncf.io/
[Kubernetes] https://kubernetes.io/
[Docker] https://www.docker.com
[Docker_Compose] https://docs.docker.com/compose/
[Grafana] https://grafana.com