17 Controlli Prometheus
Panoramica
Zabbix può interrogare le metriche esposte nel formato di riga Prometheus.
Per iniziare a raccogliere dati 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 Prometheus per interrogare i dati richiesti dalle metriche raccolte dal master item
Esistono due opzioni di preprocessing dei dati Prometheus:
- Prometheus pattern - utilizzato negli item normali per interrogare i dati Prometheus
- Prometheus to JSON - utilizzato negli item normali e per il low-level discovery. In questo caso i dati Prometheus interrogati vengono restituiti in formato JSON.
Elaborazione in blocco
L'elaborazione in blocco è supportata per gli item dipendenti. Per abilitare la cache e l'indicizzazione,
il preprocessing Prometheus pattern deve essere il primo passaggio di preprocessing.
Quando Prometheus pattern è il primo passaggio di preprocessing, i dati Prometheus analizzati
vengono memorizzati nella cache e indicizzati in base alla prima condizione <label>==<value> nel
passaggio di preprocessing Prometheus pattern. Questa cache viene riutilizzata durante l'elaborazione
degli 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 altro preprocessing prima del primo passaggio, questo dovrebbe essere spostato nell'item master oppure in un nuovo item dipendente che verrebbe utilizzato come item master per gli item dipendenti.
Configurazione
A condizione che l'HTTP master item sia configurato, è necessario creare un item dipendente che utilizzi un passaggio di preprocessing Prometheus:
- Inserire i parametri generali dell'item dipendente nel modulo di configurazione
- Andare alla scheda Preprocessing
- Selezionare 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 di dati richiesto è possibile utilizzare un linguaggio di query simile al linguaggio di query di Prometheus (vedere la tabella di confronto), ad esempio: <metric name> - seleziona per nome della metrica {__name__="<metric name>"} - seleziona per nome della metrica {__name__=\~"<regex>"} - seleziona per nome della metrica corrispondente a un'espressione regolare {<label name>="<label value>",...} - seleziona per nome dell'etichetta {<label name>=\~"<regex>",...} - seleziona per nome dell'etichetta corrispondente a un'espressione regolare {__name__=\~".*"}==<value> - seleziona 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 avanzamento riga devono essere preceduti da escape rispettivamente come \\, \" e \n; gli altri caratteri non devono essere preceduti da escape. |
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 | Specificare 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. |
Vedere anche gli esempi di utilizzo dei parametri riportati di seguito. |
| Output | Definire il nome dell'etichetta (facoltativo). 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
- Il caso d'uso più comune è restituire il value. Per restituire
il valore di
/var/dbda:
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
utilizzare i seguenti parametri:
- Pattern -
node_disk_usage_bytes{path="/var/db"} - Result processing - selezionare 'value'
- Potrebbe anche interessare il valore medio di tutti i
parametri
node_disk_usage_bytes:
- Pattern -
node_disk_usage_bytes - Result processing - selezionare 'avg'
- Sebbene Prometheus supporti solo dati numerici, è comune utilizzare una soluzione alternativa 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
utilizzare i seguenti parametri:
- Pattern -
elasticsearch_cluster_health_status {cluster="elasticsearch"} == 1 - Result processing - selezionare 'label'
- Label - specificare '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').
Da Prometheus a JSON
I dati di Prometheus possono essere utilizzati per il low-level discovery. In questo caso sono necessari dati in formato JSON e l'opzione di preprocessing Prometheus to JSON restituirà esattamente questo.
Per maggiori dettagli, vedere Discovery using Prometheus data.
Confronto del linguaggio di query
La tabella seguente elenca differenze e somiglianze tra PromQL e il linguaggio di query del preprocessing Prometheus di Zabbix.
| Selettore di vettore istantaneo PromQL | Preprocessing Prometheus di Zabbix | |
|---|---|---|
| Differenze | ||
| Destinazione della query | server Prometheus | Testo semplice nel formato di esposizione Prometheus |
| Restituisce | Vettore istantaneo | Valore della metrica o dell'etichetta (pattern Prometheus) Array di metriche per valore singolo in JSON (Prometheus in 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 | Per il filtraggio dei valori è supportato solo == (uguale) |
| Somiglianze | ||
| Selezione per nome della metrica uguale a una stringa | <metric name> o {__name__="<metric name>"} | <metric name> o {__name__="<metric name>"} |
| Selezione per nome della metrica corrispondente a un'espressione regolare | {__name__=\~"<regex>"} | {__name__=\~"<regex>"} |
| Selezione per valore di <label name> uguale a una stringa | {<label name>="<label value>",...} | {<label name>="<label value>",...} |
| Selezione per valore di <label name> corrispondente a un'espressione regolare | {<label name>=\~"<regex>",...} | {<label name>=\~"<regex>",...} |
| Selezione per valore uguale a una stringa | {__name__=\~".*"} == <value> | {__name__=\~".*"} == <value> |