1 Controllo Prometheus

Panoramica

Zabbix può interrogare le metriche esposte nel formato lineare di Prometheus.

Per iniziare a raccogliere i dati di Prometheus sono necessari due passaggi:

  • un HTTP master item che punti all'endpoint dati appropriato, ad esempio https://<prometheus host>/metrics
  • item dipendenti che utilizzano un'opzione di preprocessing di Prometheus per interrogare i dati richiesti dalle metriche raccolte dal master item

Esistono due opzioni di preprocessing dei dati di Prometheus:

  • Prometheus pattern - usato negli item normali per interrogare i dati di Prometheus
  • Prometheus to JSON - usato negli item normali e per la discovery di basso livello. In questo caso, i dati di Prometheus interrogati vengono restituiti in formato JSON.
Elaborazione in blocco

L'elaborazione in blocco è supportata per gli item dipendenti. Per abilitare la memorizzazione nella cache e l'indicizzazione, la pre-elaborazione Prometheus pattern deve essere il primo passaggio di pre-elaborazione. Quando Prometheus pattern è il primo passaggio di pre-elaborazione, i dati Prometheus analizzati vengono memorizzati nella cache e indicizzati dalla prima condizione <label>==<value> nel passaggio di pre-elaborazione Prometheus pattern. Questa cache viene riutilizzata durante l'elaborazione di altri item dipendenti in questo batch. Per prestazioni ottimali, la prima label dovrebbe essere quella con il maggior numero di valori diversi.

Se è necessario eseguire altra pre-elaborazione prima del primo passaggio, questa dovrebbe essere spostata nell'item master oppure in un nuovo item dipendente che verrà usato come item master per gli item dipendenti.

Configurazione

Supponendo che tu abbia configurato l'item master HTTP, devi creare un dependent item che utilizzi un passaggio di preprocessing Prometheus:

  • Inserisci i parametri generali del dependent item nel modulo di configurazione
  • Vai alla scheda Preprocessing
  • Seleziona un'opzione di preprocessing Prometheus (Prometheus pattern oppure Prometheus to JSON)

I seguenti parametri sono specifici dell'opzione di preprocessing Prometheus pattern:

Parameter Description Examples
Pattern Per definire il pattern dei dati richiesto puoi usare un linguaggio di query simile al linguaggio di query di Prometheus (vedi tabella di confronto), ad esempio:
<metric name> - selezione per nome metrica
{__name__="<metric name>"} - selezione per nome metrica
{__name__=\~"<regex>"} - selezione per nome metrica corrispondente a un'espressione regolare
{<label name>="<label value>",...} - selezione per nome etichetta
{<label name>=\~"<regex>",...} - selezione per nome etichetta corrispondente a un'espressione regolare
{__name__=\~".*"}==<value> - selezione per valore della metrica
Oppure una combinazione di quanto sopra:
<metric name>{<label1 name>="<label1 value>",<label2 name>=\~"<regex>",...}==<value>

Il valore dell'etichetta può essere qualsiasi sequenza di caratteri UTF-8, ma i caratteri backslash, doppia virgoletta e line feed devono essere escapati rispettivamente come \\, \" e \n; gli altri caratteri non devono essere escapati.
wmi_os_physical_memory_free_bytes
cpu_usage_system{cpu="cpu-total"}
cpu_usage_system{cpu=\~".*"}
cpu_usage_system{cpu="cpu-total",host=\~".*"}
wmi_service_state{name="dhcp"}==1
wmi_os_timezone{timezone=\~".*"}==1
Result processing Specifica se restituire il valore, l'etichetta oppure applicare la funzione appropriata (se il pattern corrisponde a più righe e il risultato deve essere aggregato):
value - restituisce il valore della metrica (errore se corrispondono più righe)
label - restituisce il valore dell'etichetta specificata nel campo Label (errore se corrispondono più metriche)
sum - restituisce la somma dei valori
min - restituisce il valore minimo
max - restituisce il valore massimo
avg - restituisce il valore medio
count - restituisce il conteggio dei valori
Questo campo è disponibile solo per l'opzione Prometheus pattern.
Vedi anche gli esempi di utilizzo dei parametri qui sotto.
Output Definisci il nome dell'etichetta (opzionale). In questo caso viene restituito il valore corrispondente al nome dell'etichetta.
Questo campo è disponibile solo per l'opzione Prometheus pattern, se nel campo Result processing è selezionato 'Label'.

Esempi di utilizzo dei parametri

  1. Il caso d'uso più comune è restituire il value. Per restituire il valore di /var/db da:

node_disk_usage_bytes{path="/var/cache"} 2.1766144e+09
node_disk_usage_bytes{path="/var/db"} 20480
node_disk_usage_bytes{path="/var/dpkg"} 8192
node_disk_usage_bytes{path="/var/empty"} 4096

usa i seguenti parametri:

  • Pattern - node_disk_usage_bytes{path="/var/db"}
  • Result processing - seleziona 'value'
  1. Potresti anche essere interessato al valore medio di tutti i parametri node_disk_usage_bytes:
  • Pattern - node_disk_usage_bytes
  • Result processing - seleziona 'avg'
  1. Sebbene Prometheus supporti solo dati numerici, è comune usare un workaround che consente di restituire anche la descrizione testuale pertinente. Questo può essere ottenuto con un filtro e specificando l'etichetta. Quindi, per restituire il valore dell'etichetta 'color' da

elasticsearch_cluster_health_status{cluster="elasticsearch",color="green"} 1
elasticsearch_cluster_health_status{cluster="elasticsearch",color="red"} 0
elasticsearch_cluster_health_status{cluster="elasticsearch",color="yellow"} 0

usa i seguenti parametri:

  • Pattern - elasticsearch_cluster_health_status {cluster="elasticsearch"} == 1
  • Result processing - seleziona 'label'
  • Label - specifica 'color'

Il filtro (basato sul valore numerico '1') corrisponderà alla riga appropriata, mentre l'etichetta restituirà la descrizione dello stato di salute (attualmente 'green'; ma potenzialmente anche 'red' o 'yellow').

Prometheus in JSON

I dati di Prometheus possono essere utilizzati per la discovery a basso livello. In questo caso sono necessari dati in formato JSON e l'opzione di preprocessing Prometheus to JSON restituirà esattamente questo.

Per ulteriori dettagli, vedere Discovery using Prometheus data.

Confronto del linguaggio di query

La seguente tabella elenca le differenze e le somiglianze tra PromQL e il linguaggio di query di preprocessing Prometheus di Zabbix.

Selettore di vettore istantaneo PromQL Preprocessing Prometheus di Zabbix
Differenze
Target della query server Prometheus Testo in formato di esposizione Prometheus
Restituisce Vettore istantaneo Valore della metrica o dell'etichetta (pattern Prometheus)
Array di metriche per un singolo valore in JSON (Prometheus to JSON)
Operatori di corrispondenza delle etichette =, !=, =\~, !\~ =, !=, =\~, !\~
Espressione regolare usata nella corrispondenza del nome dell'etichetta o della metrica RE2 PCRE
Operatori di confronto Vedi elenco È supportato solo == (uguale) per il filtraggio dei valori
Somiglianze
Selezione per nome della metrica uguale a una stringa <nome metrica> o {__name__="<nome metrica>"} <nome metrica> o {__name__="<nome metrica>"}
Selezione per nome della metrica che corrisponde a un'espressione regolare {__name__=\~"<regex>"} {__name__=\~"<regex>"}
Selezione per valore di <nome etichetta> uguale a una stringa {<nome etichetta>="<valore etichetta>",...} {<nome etichetta>="<valore etichetta>",...}
Selezione per valore di <nome etichetta> che corrisponde a un'espressione regolare {<nome etichetta>=\~"<regex>",...} {<nome etichetta>=\~"<regex>",...}
Selezione per valore uguale a una stringa {__name__=\~".*"} == <valore> {__name__=\~".*"} == <valore>