Metriche Prometheus: monitora le prestazioni della tua app

Metriche Prometheus: monitora le prestazioni della tua app
Che cos'è Prometheus?
Prometheus è uno strumento open-source che monitora le prestazioni e lo stato di salute dei sistemi software. Raccoglie punti dati, noti come metriche, che offrono informazioni su quanto bene funzioni un sistema. Queste metriche aiutano a rilevare i problemi in anticipo e ad analizzare il comportamento del sistema. Con Prometheus, i team possono individuare i problemi prima che abbiano un impatto sugli utenti, così da mantenere servizi affidabili ed efficienti.
Cosa sono le metriche in Prometheus?
In Prometheus, le metriche sono valori numerici che monitorano aspetti specifici del comportamento e delle prestazioni di un sistema nel tempo. Queste metriche aiutano a capire quanto bene funzioni un sistema in varie condizioni e forniscono anche avvisi in condizioni che potrebbero indicare problemi, come un improvviso picco di traffico o un calo delle prestazioni del sistema. Possono monitorare un'ampia gamma di dati, dal numero di utenti attivi su un sito web alla quantità di memoria utilizzata da un'applicazione.
Formato delle metriche in Prometheus
Le metriche in Prometheus sono archiviate in un formato time-series, con ogni metrica identificata dal suo nome e da coppie chiave-valore opzionali chiamate label, che forniscono contesto aggiuntivo come nomi di servizi o tipi di errore. Il formato principale per i dati delle metriche in Prometheus è il Prometheus Exposition Format. Questo formato di testo semplice è facile da generare e analizzare, ed è composto da righe di dati che includono il nome della metrica, label opzionali, il valore della metrica e un timestamp.
I quattro tipi di metriche in Prometheus
Prometheus categorizza le metriche in quattro tipi principali: contatori, gauge, istogrammi e riepiloghi. Ogni tipo svolge una funzione specifica nel monitoraggio e fornisce informazioni diverse sul comportamento dei tuoi sistemi.
Metriche Counter
Le metriche counter in Prometheus registrano il numero di volte in cui si verifica un determinato evento. Aumentano soltanto nel tempo o si azzerano quando il processo viene riavviato. Pertanto, vengono utilizzate per monitorare quantità cumulative come il numero di richieste gestite, attività completate o errori registrati.
Per implementare un counter che monitora il numero di richieste ricevute da un server, puoi usare il seguente frammento di codice. Questo esempio configura un counter per monitorare il numero totale di richieste HTTP ricevute. Ogni volta che la funzione handle_request viene chiamata, il counter viene incrementato.
from prometheus_client import Counter
# Create a counter metric for tracking received requests
request_counter = Counter('http_requests_received_total', 'Total HTTP requests received')
def handle_request(request):
# Process the request
# ...
# Increment the counter by 1 each time this function is called
request_counter.inc()
Best practice per l'uso dei counter
Consapevolezza dei reset: Tieni presente che i counter si azzerano quando il processo viene riavviato. Progetta il tuo monitoraggio in modo da tenere conto di questi reset.
Usa le label: Usa le label con i counter per fornire informazioni più dettagliate, ad esempio distinguendo tra diversi tipi di errori o richieste.
Incremento coerente: Assicurati che il counter venga incrementato nel punto corretto del tuo codice per riflettere accuratamente gli eventi che stai monitorando.
Monitoraggio dei reset: Usa la funzione rate nelle query per calcolare il tasso medio al secondo di aumento di un counter, il che può aiutarti a comprendere le tendenze e rilevare problemi, anche in presenza di reset.
Metriche Gauge
Le metriche gauge in Prometheus misurano valori che possono aumentare e diminuire, come le temperature della CPU, il numero corrente di processi in esecuzione o la quantità di memoria libera. A differenza dei counter, che possono solo aumentare, i gauge riflettono lo stato corrente del sistema in uno specifico momento nel tempo, rendendoli essenziali per monitorare metriche fluttuanti.
Per implementare un gauge che monitora la quantità di memoria libera in un sistema, puoi utilizzare il seguente frammento di codice. Questo esempio configura un gauge per monitorare la memoria libera, aggiornando il valore del gauge chiamando la funzione update_free_memory(), che dovrebbe essere attivata per riflettere i cambiamenti del sistema.
from prometheus_client import Gauge
# Create a gauge metric to track free memory
free_memory_gauge = Gauge('system_free_memory_bytes', 'Amount of free memory in bytes')
def update_free_memory():
# Assume get_free_memory() is a function that fetches the current free memory
free_memory = get_free_memory()
free_memory_gauge.set(free_memory)
# Update gauge regularly or upon specific system events
update_free_memory()
Suggerimenti per l'utilizzo dei gauge
Aggiornamenti regolari: Verifica che i gauge vengano aggiornati regolarmente per riflettere accuratamente lo stato corrente del sistema.
Uso contestuale: Usa i gauge per metriche che richiedono il tracciamento di aumenti e diminuzioni nel tempo, come medie di carico o risorse di sistema disponibili.
Evitare l'uso improprio: Fai attenzione a non usare i gauge per metriche che dovrebbero solo incrementare o decrementare, per le quali un contatore o un istogramma potrebbe essere più appropriato.
Metriche istogramma
Gli istogrammi in Prometheus riassumono la distribuzione di dati numerici su un insieme di bucket predefiniti. Ogni bucket rappresenta un intervallo di valori, e l'istogramma conta quanti valori rientrano in ciascun bucket. Questo tipo di metrica è utile per tracciare misurazioni come latenze delle richieste o dimensioni delle risposte, dove comprendere la distribuzione può fornire più informazioni rispetto al semplice conoscere la media.
Per implementare un istogramma che traccia la latenza delle richieste HTTP, puoi utilizzare il seguente frammento di codice. Questo esempio configura un istogramma con diversi bucket per misurare quanto tempo impiega ciascuna richiesta HTTP a essere elaborata. Il blocco with misura automaticamente la durata della gestione della richiesta e la registra nel bucket appropriato.
from prometheus_client import Histogram
# Define a histogram with buckets for request latency
request_latency_histogram = Histogram('http_request_latency_seconds', 'HTTP request latencies', buckets=[0.1, 0.2, 0.5, 1, 2, 5])
def handle_request(request):
with request_latency_histogram.time():
# Process the request
# This automatically measures the time taken by this block and records it in the histogram
pass
Bucket degli istogrammi e la loro importanza
Progettazione dei bucket: Scegliere i bucket giusti è fondamentale per ottenere istogrammi utili. I bucket dovrebbero essere allineati con gli obiettivi e le soglie di prestazioni della tua applicazione. Ad esempio, se ti interessa distinguere tra richieste che impiegano 0,1 secondi e 1 secondo, i tuoi bucket dovrebbero riflettere questi intervalli.
Granularità: Un numero maggiore di bucket aumenta la granularità dell'istogramma ma aumenta anche l'uso della memoria. Bilancia il livello di dettaglio con l'efficienza delle risorse.
Conteggio cumulativo: Gli istogrammi di Prometheus sono cumulativi. Ciò significa che ogni bucket conta il numero totale di osservazioni che rientrano nel suo intervallo e in tutti gli intervalli precedenti. Questo calcola i percentili, che sono più informativi sulla distribuzione dei dati rispetto alle medie.
Uso nelle query: Quando si interrogano gli istogrammi, funzioni come histogram
_quantile()possono calcolare i quantili dai bucket cumulativi, fornendo informazioni potenti sulle caratteristiche di prestazione del tuo sistema.
Metriche summary
Le metriche summary in Prometheus offrono un modo per calcolare i quantili delle osservazioni, come il 90° percentile delle latenze delle richieste, direttamente all'interno del client. A differenza degli istogrammi, che raccolgono e categorizzano i dati in bucket, i summary calcolano quantili in streaming senza bucket predefiniti. Questo rende i summary ideali per situazioni in cui sono necessari calcoli precisi dei quantili, in particolare quando le soglie esatte sono importanti, come nella reportistica sugli accordi sul livello di servizio (SLA).
Per implementare un summary che misura la latenza delle query del database, puoi utilizzare il seguente frammento di codice. Questo esempio imposta un summary per monitorare il tempo impiegato dalle query del database. Il blocco with misura la durata della query e aggiorna il summary con questa nuova osservazione, facilitando il calcolo dei quantili.
from prometheus_client import Summary
# Create a summary to measure database query latencies
db_query_latency = Summary('db_query_latency_seconds', 'Database query latencies')
def query_database(query):
with db_query_latency.time():
# Execute the database query
# The time taken by this block is automatically recorded and calculated in the summary
pass
Differenza tra istogrammi e summary
Calcolo dei quantili: Gli istogrammi stimano i quantili in base ai bucket definiti, il che può introdurre imprecisioni a seconda della configurazione dei bucket. I summary calcolano i quantili direttamente dai dati osservati, offrendo potenzialmente maggiore precisione.
Carico lato client: I summary calcolano i quantili lato client, il che può aumentare il carico computazionale, soprattutto con un numero elevato di osservazioni. Gli istogrammi, con i loro bucket predefiniti, possono ridurre il calcolo lato client.
Configurazione: Gli istogrammi richiedono una conoscenza preliminare della distribuzione per impostare bucket appropriati. I summary non richiedono la configurazione dei bucket, il che li rende più facili da distribuire inizialmente ma potenzialmente più intensivi in termini di risorse.
Casi d'uso: I summary sono preferiti quando sono necessari quantili accurati e in tempo reale per metriche critiche, mentre gli istogrammi sono spesso più adatti a catturare la distribuzione più ampia di una metrica dove le soglie esatte sono meno critiche.
Best practice per l'etichettatura e il raggruppamento delle metriche
Uso appropriato delle etichette
Le etichette in Prometheus sono coppie chiave-valore che associano metadati alle metriche per query più dettagliate e mirate. Sono importanti per organizzare e identificare le metriche lungo dimensioni come nomi dei servizi, nomi host o tipi di errore. Ecco alcune best practice per usare le etichette:
Descrittive e coerenti: Scegli nomi di etichette che descrivano chiaramente il loro scopo e mantieni la coerenza tra le tue metriche. Ad esempio, usa service per tutte le metriche che identificano il servizio a cui appartengono.
Granularità necessaria: Sebbene le etichette possano aggiungere dettagli significativi alle tue metriche, troppe etichette possono aumentare i costi di archiviazione e diminuire le prestazioni delle query. Usa le etichette con giudizio per bilanciare granularità e prestazioni.
Evita l'alta cardinalità: Le etichette ad alta cardinalità, come quelle che potrebbero etichettare ogni singolo utente o indirizzo email, possono aumentare la dimensione dei dati e degradare le prestazioni. Attieniti a etichette che hanno un numero ragionevole di valori distinti.
Questo esempio mostra un counter che usa etichette per distinguere tra diversi metodi e stati HTTP per un'analisi e un monitoraggio dettagliati.
from prometheus_client import Counter
# Create a counter with labels for HTTP methods and response statuses
http_requests_total = Counter('http_requests_total', 'Total HTTP requests',
['method', 'status'])
def handle_request(request):
# Increment the counter with the appropriate labels
http_requests_total.labels(method=request.method, status=request.response.status_code).inc()
Strategie per il raggruppamento delle metriche
Raggruppare le metriche in modo logico può aumentare la chiarezza e migliorare le prestazioni dei sistemi di monitoraggio. Ecco alcune strategie:
Categorizza per tipo: Raggruppa le metriche per tipo, come errori, traffico, latenza, ecc., per rendere più facile trovare e analizzare metriche correlate.
Raggruppamento basato sul servizio: Organizza le metriche in base al servizio che misurano. Questo aiuta a isolare rapidamente i problemi all'interno di un servizio specifico.
Usa una nomenclatura gerarchica: Quando assegni nomi alle metriche, considera una struttura gerarchica che rifletta il loro raggruppamento, come
service_database_queries_totalorservice_http_requests_total.
Vantaggi di un raggruppamento efficace
Prestazioni delle query migliorate: Il raggruppamento logico può portare a query più efficienti riducendo il numero di metriche che devono essere scansionate per ogni query.
Gestione degli avvisi più semplice: Raggruppare metriche simili semplifica la creazione di regole di avviso e rende più facile gestire gli avvisi nelle diverse parti del sistema.
Visualizzazione migliore: Le metriche raggruppate sono più facili da visualizzare nelle dashboard, poiché le metriche correlate possono essere mostrate insieme, fornendo una vista coerente delle prestazioni del sistema.
Esecuzione di query sulle metriche con PromQL
Fondamenti di PromQL e della sua sintassi
PromQL, o Prometheus Query Language, è il potente linguaggio di query utilizzato da Prometheus per esplorare i dati e generare avvisi. PromQL consente query semplici e complesse per calcolare i dati esatti necessari dalle tue metriche. La sintassi di PromQL supporta la selezione e l'aggregazione di dati di serie temporali in base a nomi delle metriche, etichette e intervalli di tempo.
Funzionalità chiave di PromQL:
Query istantanee e a intervallo: Le query istantanee forniscono il valore corrente della serie temporale per un punto specifico nel tempo, mentre le query a intervallo restituiscono i valori della serie temporale per un intervallo di tempo.
Funzioni e operatori: PromQL include varie funzioni e operatori integrati per calcolare tassi, medie e operazioni aritmetiche tra metriche.
Frammenti di codice: query comuni per ciascun tipo di metrica
Metriche contatore
Questa query calcola il tasso medio al secondo delle richieste HTTP negli ultimi 5 minuti, utile per monitorare il carico di traffico sui tuoi server.
rate(http_requests_total[5m])
Metriche gauge
Questa query istantanea recupera la quantità attuale di memoria libera, fornendo un'istantanea delle risorse di sistema.
node_memory_MemFree_bytes
Metriche istogramma
La query seguente calcola il 95° percentile delle latenze delle richieste negli ultimi 10 minuti, il che aiuta a identificare gli outlier nelle prestazioni del server web.
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[10m]))
Metriche summary
La query seguente calcola la latenza mediana degli eventi elaborati, che è cruciale per valutare le prestazioni dei sistemi di gestione degli eventi.
quantile(0.5, rate(processed_events_latency_seconds_sum[5m]) / rate(processed_events_latency_seconds_count[5m]))
Suggerimenti per query efficaci con PromQL:
Usa intervalli di tempo appropriati: Seleziona intervalli di tempo che forniscano informazioni significative senza sovraccaricare il sistema con query su lunghi dati storici.
Sfrutta il filtro delle etichette: Usa le etichette per filtrare e perfezionare i risultati, concentrandoti su sottoinsiemi specifici di dati.
Ottimizza per le prestazioni: Quando scrivi query, specialmente per dashboard o avvisi, considera il loro impatto sulle prestazioni e ottimizzale affinché vengano eseguite in modo efficiente.
Monitoraggio delle prestazioni del database vettoriale Milvus con Prometheus
Milvus è un database vettoriale open-source, ad alte prestazioni e altamente scalabile che può archiviare, indicizzare e cercare dati non strutturati su scala di miliardi tramite embedding vettoriali ad alta dimensionalità. È perfetto per creare applicazioni di IA moderne come la retrieval augmented generation (RAG), la ricerca semantica, la ricerca multimodale e i sistemi di raccomandazione. Milvus funziona in modo efficiente in vari ambienti, dai laptop e dispositivi edge ai sistemi distribuiti su larga scala.
Prometheus offre capacità complete per supervisionare le prestazioni del database vettoriale Milvus. Milvus si integra perfettamente con Prometheus tramite:
Endpoint Prometheus: Raccoglie dati da vari exporter.
Prometheus Operator: Semplifica la gestione delle configurazioni di monitoraggio Prometheus.
Kube-Prometheus: Semplifica il monitoraggio completo dei cluster Kubernetes per un funzionamento robusto.
L'utilizzo di Prometheus consente di monitorare metriche critiche delle prestazioni di Milvus, come i tempi di risposta delle query e l'utilizzo delle risorse (CPU, GPU e memoria), permettendo la risoluzione proattiva dei problemi e l'ottimizzazione del sistema. Inoltre, l'integrazione di Prometheus con Grafana migliora ulteriormente il tuo framework di monitoraggio, fornendo dashboard dettagliate per un'analisi approfondita e una manutenzione efficiente delle distribuzioni Milvus adattate alle applicazioni GenAI e di ricerca per similarità.
Per una guida completa sulla configurazione di Prometheus per Milvus e sulla visualizzazione delle metriche con Grafana, esplora le risorse seguenti:
Conclusione
In conclusione, Prometheus è uno strumento prezioso per monitorare varie metriche che riflettono lo stato di salute e le prestazioni dei sistemi. Utilizzando le capacità di Prometheus per tracciare, analizzare e visualizzare dati operativi critici, i team possono migliorare le proprie pratiche di monitoraggio e assicurarsi che i loro sistemi siano non solo stabili, ma anche ottimizzati per l'efficienza. Che si tratti di configurare avvisi per rilevare tempestivamente potenziali problemi o di utilizzare dashboard dettagliate per una visione chiara delle metriche di sistema, Prometheus consente a sviluppatori e amministratori di mantenere servizi affidabili e ad alte prestazioni.
FAQ
- Quali sono i quattro tipi di metriche in Prometheus?
Prometheus categorizza le metriche in quattro tipi: counter, gauge, histogram e summary. Ogni tipo serve a uno specifico scopo di monitoraggio, dal conteggio delle occorrenze di eventi alla cattura della distribuzione delle misurazioni nel tempo.
- Come scelgo tra l'utilizzo di un histogram e di un summary?
Scegli gli histogram quando devi catturare distribuzioni e sei in grado di definire in anticipo bucket significativi. Usa i summary quando hai bisogno di calcoli accurati dei quantili e non richiedi bucket predefiniti. La scelta dipende dal tuo caso d'uso specifico e da considerazioni sulle prestazioni.
- Che cos'è PromQL e come viene usato in Prometheus?
PromQL, o Prometheus Query Language, è il potente linguaggio utilizzato per interrogare le metriche in Prometheus. Consente agli utenti di selezionare e aggregare dati di serie temporali, eseguire calcoli e ricavare insight dalle metriche in base a condizioni e intervalli temporali specifici.
- Posso usare Prometheus per monitorare applicazioni non costruite con un'architettura a microservizi?
Sì, Prometheus è abbastanza versatile da monitorare un'ampia gamma di applicazioni, sia che siano costruite utilizzando un'architettura a microservizi sia un approccio monolitico più tradizionale. Può essere configurato per raccogliere metriche da quasi qualsiasi sorgente che esponga dati nel Prometheus Exposition Format.
- Quali sono alcune best practice per etichettare e raggruppare le metriche in Prometheus?
Quando etichetti e raggruppi le metriche, assicurati che le etichette siano descrittive e coerenti tra le metriche. Evita etichette ad alta cardinalità che possono degradare le prestazioni. Raggruppa le metriche in modo logico per tipo o servizio per aumentare la chiarezza e migliorare l'efficienza delle query. Questo aiuta a mantenere un sistema di monitoraggio organizzato, più facile da interrogare e gestire.
Risorse aggiuntive
- Che cos'è Prometheus?
- Cosa sono le metriche in Prometheus?
- Formato delle metriche in Prometheus
- I quattro tipi di metriche in Prometheus
- Best practice per l'etichettatura e il raggruppamento delle metriche
- Esecuzione di query sulle metriche con PromQL
- Monitoraggio delle prestazioni del database vettoriale Milvus con Prometheus
- Conclusione
- FAQ
- Risorse aggiuntive
Contenuto
Inizia gratis, scala facilmente
Prova il database vettoriale completamente gestito progettato per le tue applicazioni GenAI.
Prova Zilliz Cloud gratuitamente

