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
A condizione di avere configurato l'item master HTTP, è necessario creare un item dipendente che utilizzi un passaggio di pre-elaborazione Prometheus:
- Inserire i parametri generali dell'item dipendente nel modulo di configurazione
- Accedere alla scheda Preprocessing
- Selezionare un'opzione di pre-elaborazione Prometheus (Prometheus pattern o Prometheus to JSON)

I seguenti parametri sono specifici dell'opzione di pre-elaborazione Prometheus pattern:
| Parametro | Descrizione | Esempi |
|---|---|---|
| Pattern | Per definire il pattern di dati richiesto è possibile utilizzare un linguaggio di query simile al linguaggio di query Prometheus (vedere la tabella di confronto), ad esempio: <metric name> - seleziona in base al nome della metrica {__name__="<metric name>"} - seleziona in base al nome della metrica {__name__=~"<regex>"} - seleziona in base al nome della metrica che corrisponde a un'espressione regolare {<label name>="<label value>",...} - seleziona in base al nome dell'etichetta {<label name>=~"<regex>",...} - seleziona in base al nome dell'etichetta che corrisponde a un'espressione regolare {__name__=~".*"}==<value> - seleziona in base al valore della metrica Oppure una combinazione degli elementi precedenti: <metric name>{<label1 name>="<label1 value>",<label2 name>=~"<regex>",...}==<value> Il valore dell'etichetta può essere costituito da qualsiasi sequenza di caratteri UTF-8, ma i caratteri barra rovesciata, virgolette doppie e avanzamento riga devono essere sottoposti rispettivamente a escape come \\, \" e \n; gli altri caratteri non devono essere sottoposti a 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 o 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 numero di 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 consiste nel 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 essere utile anche 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, viene comunemente utilizzata una soluzione alternativa per restituire anche la descrizione testuale pertinente. È possibile farlo con un filtro e specificando l'etichetta. Pertanto, 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').
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 tabella seguente 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 normale nel 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 filtro 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> |