Monitoraggio di Milvus con Grafana e Loki
Introduzione al monitoraggio di Milvus con Grafana e Loki
Questo post ti guiderà nella configurazione di Grafana e Loki per monitorare efficacemente i tuoi deployment di Milvus.
Milvus è un database vettoriale distribuito che mira ad archiviare, indicizzare e gestire enormi vettori di embedding. La sua capacità di indicizzare e cercare in modo efficiente tra trilioni di vettori rende Milvus una scelta di riferimento per carichi di lavoro di IA e machine learning.
D'altra parte, Grafana è una piattaforma open-source per il monitoraggio e l'osservabilità, ideale per visualizzare metriche, log e tracce. Ti consente di creare dashboard per tenere sotto controllo lo stato e le prestazioni del sistema. Loki si affianca a Grafana come sistema di aggregazione dei log, traendo ispirazione da Prometheus. Gestisce i log in modo efficiente e conveniente. Insieme, Grafana e Loki offrono una solida configurazione di monitoraggio, aumentando l'osservabilità per Milvus e oltre.
Prerequisiti
Docker - Assicurati che Docker sia installato sul tuo sistema.
Kubernetes - Tieni pronto un cluster Kubernetes. Puoi usare
minikube or k3dper lo sviluppo locale o un servizio Kubernetes di un cloud provider per ambienti di produzione.Helm - Installa Helm, un gestore di pacchetti per Kubernetes, per aiutarti a gestire applicazioni Kubernetes, puoi consultare la nostra documentazione per vedere come farlo https://milvus.io/docs/install_cluster-helm.md
Kubectl - Installa
kubectl, uno strumento da riga di comando per interagire con i cluster Kubernetes, per distribuire applicazioni, ispezionare e gestire risorse del cluster e visualizzare i log.
Configurazione di K8s
Dopo aver installato tutto il necessario per eseguire un cluster K8s, e se hai usato minikube, avvia il tuo cluster con:
minikube start
Controlla lo stato del tuo cluster K8s con:
kubectl cluster-info
⚠️Dovrai anche distribuire Milvus su K8s, dai un'occhiata alla nostra guida introduttiva su come puoi farlo.
Distribuzione di Grafana
Grafana è la piattaforma di analisi e visualizzazione interattiva che useremo. Fornisce una ricca varietà di diagrammi, grafici e avvisi. Ti consente di interrogare, visualizzare e creare avvisi sulle tue metriche indipendentemente da dove siano archiviate.
L'installazione verrà eseguita con Helm
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install grafana grafana/grafana --namespace grafana --create-namespace
Puoi verificare che tutto funzioni correttamente eseguendo
❯ kubectl get all -n grafana
NAME READY STATUS RESTARTS AGE
pod/grafana-987d4c5c6-sb8t9 1/1 Running 1 (58m ago) 47h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/grafana ClusterIP 10.43.114.168 <none> 80/TCP 47h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/grafana 1/1 1 1 47h
NAME DESIRED CURRENT READY AGE
replicaset.apps/grafana-987d4c5c6 1 1 1 47h
Distribuzione di Loki e Promtail
Loki è un sistema di aggregazione dei log ispirato a Prometheus. Gestisce i log in modo efficiente e conveniente. Loki utilizza Promtail per aggregare i log. Promtail è un agente di raccolta dei log che raccoglie, etichetta e invia i log a Loki. È esplicitamente realizzato per Loki. Vedrai che un'istanza di Promtail viene eseguita su ciascun nodo Kubernetes.
L'approccio di Loki all'indicizzazione dei log è unico. Non indicizza il testo effettivo dei log. Invece, le voci di log vengono raggruppate intelligentemente in stream e poi indicizzate con etichette. Questo metodo riduce significativamente i costi e il tempo tra l'ingestione dei log e la loro disponibilità nelle query, fornendo un senso di sollievo nella gestione delle risorse.
Loki può essere distribuito in modi diversi:
Modalità monolitica: Questa modalità è semplice, tutti i componenti di Loki vengono eseguiti all'interno di un singolo processo. È adatta per configurazioni più piccole o per prendere familiarità con Loki senza troppa complessità.
Modalità scalabile: In questa modalità, i componenti di Loki sono suddivisi in servizi separati, come distributor, ingester, querier e altri.
Questa configurazione è progettata per alta disponibilità e scalabilità, adattandosi bene a deployment su larga scala. Richiede uno storage di oggetti compatibile con S3 per archiviare i dati di log, che potrebbe essere AWS S3, Google Cloud Storage o una soluzione self-hosted come MinIO.
Per installare Loki:
helm upgrade --install loki grafana/loki-distributed -n grafana-loki --create-namespace
Questo installerà loki all'interno del namespace grafana-loki. Se il namespace non esiste, Helm lo creerà per te.
Assicurati che tutto funzioni di nuovo correttamente eseguendo quanto segue:
❯ kubectl get all -n grafana-loki
NAME READY STATUS RESTARTS AGE
pod/loki-loki-distributed-distributor-6b75796c6b-qvdbc 1/1 Running 1 (68m ago) 28h
pod/loki-loki-distributed-querier-0 1/1 Running 1 (68m ago) 28h
pod/loki-loki-distributed-query-frontend-55574bdd64-5hhvl 1/1 Running 1 (68m ago) 28h
pod/loki-loki-distributed-ingester-0 1/1 Running 1 (68m ago) 28h
pod/loki-loki-distributed-gateway-c6ccc655b-mkg5j 1/1 Running 0 67m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/loki-loki-distributed-memberlist ClusterIP None <none> 7946/TCP 47h
service/loki-loki-distributed-ingester-headless ClusterIP None <none> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-query-frontend-headless ClusterIP None <none> 3100/TCP,9095/TCP,9096/TCP 47h
service/loki-loki-distributed-ingester ClusterIP 10.43.13.160 <none> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-querier-headless ClusterIP None <none> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-distributor ClusterIP 10.43.201.9 <none> 3100/TCP,9095/TCP 47h
service/loki-loki-distributed-query-frontend ClusterIP 10.43.99.40 <none> 3100/TCP,9095/TCP,9096/TCP 47h
service/loki-loki-distributed-gateway ClusterIP 10.43.186.50 <none> 80/TCP 47h
service/loki-loki-distributed-querier ClusterIP 10.43.53.211 <none> 3100/TCP,9095/TCP 47h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/loki-loki-distributed-distributor 1/1 1 1 47h
deployment.apps/loki-loki-distributed-query-frontend 1/1 1 1 47h
deployment.apps/loki-loki-distributed-gateway 1/1 1 1 47h
NAME DESIRED CURRENT READY AGE
replicaset.apps/loki-loki-distributed-distributor-6b75796c6b 1 1 1 47h
replicaset.apps/loki-loki-distributed-query-frontend-55574bdd64 1 1 1 47h
replicaset.apps/loki-loki-distributed-gateway-c6ccc655b 1 1 1 47h
NAME READY AGE
statefulset.apps/loki-loki-distributed-querier 1/1 47h
statefulset.apps/loki-loki-distributed-ingester 1/1 47h
Per installare Promtail:
Prima di installare Promtail, dovrai configurarlo per comunicare con Loki. Questo comporta la modifica di un file di configurazione per specificare l'URL del servizio di Loki:
- Estrai la configurazione predefinita di Promtail:
helm show values grafana/promtail > promtail-overrides.yaml
Questo comando scrive i valori predefiniti di Promtail in un file chiamato promtail-overrides.yaml, che puoi poi modificare.
- Modifica la configurazione predefinita di Promtail:
Modifica promtail-overrides.yaml per impostare il valore clients.url sull'endpoint del servizio di Loki. In Kubernetes, i servizi sono accessibili tramite record DNS, quindi puoi usare il nome DNS del servizio di Loki: loki-loki-distributed-gateway.grafana-loki.svc.cluster.local
N.B.: Se hai distribuito Loki in un namespace diverso o con un nome diverso, modifica l'URL di conseguenza; sentiti libero di consultare la documentazione di Kubernetes.
- Distribuisci Promtail con il tuo file di configurazione modificato:
helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki
Questo comando indica a Helm di distribuire Promtail nel namespace grafana-loki, usando la tua configurazione personalizzata. Garantisce che Promtail sia configurato per inoltrare i log a Loki, completando la configurazione dell'aggregazione dei log.
Come al solito, assicurati che tutto funzioni eseguendo:
❯ kubectl get all -n grafana-loki | grep promtail pod/promtail-qgl4t 1/1 Running 1 (77m ago) 28h
daemonset.apps/promtail 1 1 1 1 1 <none> 2d
Configura le origini dati e la dashboard di Grafana
Con Loki e Promtail ora distribuiti, il passo successivo è integrare Loki come origine dati all'interno di Grafana, consentendoti di visualizzare e interrogare i tuoi log.
- Accesso a Grafana: Per prima cosa, devi accedere alla tua istanza Grafana. Se Grafana è in esecuzione all'interno del tuo cluster Kubernetes, puoi usare il port forwarding per accedere all'interfaccia utente di Grafana dalla tua macchina locale:
kubectl port-forward service/grafana 8080:80 -n grafana
- Accesso a Grafana: Il nome utente predefinito per Grafana è admin. Per la password, Grafana ne genera una casuale quando viene installato tramite Helm. Puoi recuperarla con:
kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
Navigazione alle origini dati: Una volta effettuato l'accesso, vai alla barra laterale di Grafana, trova l'icona per "Connections" e seleziona "Data Sources".
Aggiunta di Loki: Fai clic sul pulsante "Add data source", cerca Loki e selezionalo. Verrai portato alla pagina delle impostazioni dell'origine dati Loki.
- Configurazione di Loki in Grafana: Inserisci l'URL del servizio Loki, che sarà qualcosa come
http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.local, assumendo la configurazione predefinita. Questo URL indirizza Grafana alla tua istanza Loki all'interno del tuo cluster Kubernetes.

Migrating Self-Managed Milvus to Zilliz Cloud for >99% Latency Reduction
Step-by-step guide to migrating 50M vectors from self-managed Milvus to Zilliz Cloud using milvus-backup. Achieve >99% query latency reduction with zero data loss.

Introducing Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud
We're announcing the general availability of Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud.

Context Engineering Strategies for AI Agents: A Developer’s Guide
Learn practical context engineering strategies for AI agents. Explore frameworks, tools, and techniques to improve reliability, efficiency, and cost.



