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 esempo, 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ì:

avg(rate(http_requests_total[5m])) by (job, code)

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:

prometheus.rules.yml
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:

prometheus.yml
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'

Pubblicato il
    Be Smart Be Open

    Business Software Solutions

    I nostri contatti

    Email: besmart@besmartbeopen.it
    Pec: besmartbeopen@pec.it
    Fax: +39 0507911289
    P.IVA e C.F.: 02137570509
    Top