Avvisi PromQL
IBM Cloud Monitoring ti consente di utilizzare PromQL per monitorare e avvisare le modifiche nella tua infrastruttura.
Definizione di un allarme Prometheus
Quando si definisce un avviso Prometheus, è necessario specificare quanto segue:
- Condizione
-
Immettere un'espressione PromQL valida. A differenza degli avvisi di metrica, le query PromQL restituiscono solo serie temporali che soddisfano la condizione specificata. Ad esempio, se si immette
sysdig_host_cpu_used_percent > 80, solo gli host con utilizzo di CPU superiore all ' 80% verranno inclusi nei risultati della query. Se tutti gli host sono al di sotto di questa soglia, la query restituirà uno stato Risolto, che è uguale allo stato Nessun dato.Gli utenti potrebbero essere confusi nel determinare se un avviso è stato realmente risolto o se la metrica è scomparsa e non è riuscita in modo non presidiato. Ciò si verifica perché lo stato Nessun dato in Prometheus non può essere distinto da uno stato risolto. Esistono strategie per gestire l'assenza di dati in Prometheus.
- Durata
-
La durata è la durata per cui una condizione di avviso deve rimanere true prima di attivare un avviso. Gli avvisi di Prometheus hanno tre stati:
Resolved,Pending, eFiring. Se è impostata una durata di 10m, significa che la condizione di avviso deve essere costantemente soddisfatta per un periodo continuo di 10 minuti prima di passare allo statoFiring. Gli avvisi la cui espressione è soddisfatta ma che non hanno soddisfatto la durata richiesta si trovano in uno statoPending. - Ritardo risoluzione avviso
-
Il ritardo risoluzione avviso è uguale a
keep_firing_forin Prometheus. Questa impostazione abilita l'attivazione continua di una ricorrenza di avviso per una durata definita dall'utente anche dopo che la condizione di avviso non è più valida. Gli avvisi che tendono ad avere intervalli dino-datanella metrica sottostante possono essere configurati con Alert Resolution Delay per evitare rumore non necessario e false risoluzioni. Se la condizione di avviso viene nuovamente soddisfatta prima che sia trascorso il ritardo della risoluzione dell'avviso, l'avviso continuerà ad essere attivato senza dover soddisfare nuovamente la durata.
Intervallo e durata
La durata di un avviso è il periodo di tempo per cui una specifica condizione deve persistere prima di attivare l'avviso. Non deve essere confuso con l'intervallo di un avviso, che definisce il periodo di tempo in cui vengono valutati i relativi dati di metrica.
Considerare i seguenti esempi:
rules:
- alert: highNetworkTraffic1
expr: avg(rate(network_bytes_total[1h])) > 10000000
for: 5m
- alert: highNetworkTraffic2
expr: avg(rate(network_bytes_total[5m])) > 10000000
for: 1h
L'avviso highNetworkTraffic1 esamina la trasmissione di rete media nell'ora precedente. Se questa media supera 10MB per una durata continua di 5 minuti, l'avviso viene attivato.
D'altra parte, highNetworkTraffic2 si concentra sulla trasmissione di rete media negli ultimi 5 minuti. Se questa media supera 10MB per l'ultima ora, viene attivato l'avviso.
Mentre l'utilizzo di una durata più lunga può aiutare a ridurre gli avvisi rumorosi, significa anche che alcuni avvisi possono raggiungere la soglia momentaneamente senza attivazione. Esiste un compromesso tra la soppressione degli avvisi rumorosi e il potenziale ritardo delle notifiche per determinate condizioni.
Le differenze tra gli avvisi Prometheus e Threshold
Gli avvisi di Prometheus interrogano le stesse metriche degli avvisi di soglia. La differenza tra i due tipi di avviso è nell'algoritmo di valutazione.
| Avvisi soglia | Avvisi di Prometheus |
|---|---|
Supporto No Data nativo |
Lo stato No Data è uguale allo stato Resolved |
| Supporto multisoglia | È necessario creare due avvisi per più soglie |
| Nessuna durata | La durata crea un altro stato di avviso Pending |
| Le query restituiscono tutte le serie temporali per impostazione predefinita | Le query restituiscono solo le serie temporali che soddisfano la query di avviso |
Gestione di nessun dato e soglie multiple
Per vedere i vantaggi dell'identificazione degli scenari No Data e della configurazione di più soglie, è possibile passare da un avviso Prometheus a un avviso di soglia.
Per creare una gestione degli avvisi della metrica No Data e più soglie:
- Creare un nuovo avviso metrico.
- Passare la modalità di creazione degli avvisi da Modulo a PromQL.
- Continuare a configurare un avviso di soglia utilizzando PromQL.
- Facoltativamente, aggiungere una soglia di avvertenza e inviare una notifica a
No Data.
Importazione delle regole di avviso di Prometheus
Puoi importare le regole Prometheus. Fai clic sull'opzione Upload Prometheus Rules e immetti le regole in formato YAML nell'editor YAML Upload Prometheus Rules. L'importazione delle regole di avviso di Prometheus le convertirà in avvisi di Prometheus.
Ciascuna regola di avviso deve includere i seguenti campi obbligatori:
alertexprfor
Esempio: avviso di loop Prometheus
Questo avviso rileva potenziali loop di riavvio sui lavori prometheus, pushgateway o alertmanager.
groups:
- name: crashlooping
rules:
- alert: PrometheusTooManyRestarts
expr: changes(process_start_time_seconds{job=~"prometheus|pushgateway|alertmanager"}[10m]) > 2
for: 0m
labels:
severity: warning
annotations:
summary: Prometheus too many restarts (instance {{ $labels.instance }})
description: Prometheus has restarted more than twice in the last 15 minutes. It might be crashlooping.\n VALUE = {{ $value }}\n
Esempio: Avviso sul tasso di errore HTTP
In questo esempio NginxHighHttp5xxErrorRate rileva un tasso di errore HTTP pari o superiore al 5%.
NginxLatencyHigh monitora la latenza p99 per 3 secondi o superiore per tutti gli host e i nodi.
Per avvisare le richieste HTTP con stato 5xx (> 5%) o con latenza elevata:
groups:
- name: default
rules:
- alert: NginxHighHttp5xxErrorRate
expr: sum(rate(nginx_http_requests_total{status=~"^5.."}[1m])) / sum(rate(nginx_http_requests_total[1m])) * 100 > 5
for: 1m
labels:
severity: critical
annotations:
summary: Nginx high HTTP 5xx error rate (instance {{ $labels.instance }})
description: Too many HTTP requests with status 5xx
- alert: NginxLatencyHigh
expr: histogram_quantile(0.99, sum(rate(nginx_http_request_duration_seconds_bucket[2m])) by (host, node)) > 3
for: 2m
labels:
severity: warning
annotations:
summary: Nginx latency high (instance {{ $labels.instance }})
description: Nginx p99 latency is higher than 3 seconds