Monitoraggio di Milvus con Grafana e Loki

Apr 12, 20246 min read

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 k3d per 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:

  1. 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à.

  2. 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:

  1. 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.

  1. 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.

  1. 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.

  1. 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 
  1. 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 

  1. Navigazione alle origini dati: Una volta effettuato l'accesso, vai alla barra laterale di Grafana, trova l'icona per "Connections" e seleziona "Data Sources".

  2. Aggiunta di Loki: Fai clic sul pulsante "Add data source", cerca Loki e selezionalo. Verrai portato alla pagina delle impostazioni dell'origine dati Loki.

  1. 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.

![](https://assets.zilliz.com/loki_ec0afc24d6.png

  1. Salva e testa: Dopo aver inserito l'URL del servizio Loki, fai clic su "Save & Test". Grafana confermerà se riesce a connettersi correttamente all'origine dati Loki.

Esplora i tuoi log

Ora puoi esplorare i tuoi log e assicurarti che tutto funzioni correttamente e che tu possa vedere i log di Milvus. Filtra per nome app e usa milvus.

Se vedi alcuni log come nello screenshot sopra, congratulazioni, ora puoi monitorare e offrire insight sulle operazioni del tuo cluster Milvus grazie a Grafana e Loki! 🚀

Sentiti libero di dare un'occhiata a Milvus, alla documentazione su Visualizzare le metriche di Milvus in Grafana e di condividere le tue esperienze con la community unendoti al nostro Discord.

Aggiornato il Jul 09, 2026