Milvus mit Grafana und Loki überwachen

Apr 12, 20246 min read

Einführung in die Überwachung von Milvus mit Grafana & Loki

Dieser Beitrag führt dich durch die Einrichtung von Grafana und Loki, um deine Milvus-Deployments effektiv zu überwachen.

Milvus ist eine verteilte Vektordatenbank, die darauf abzielt, massive Embedding-Vektoren zu speichern, zu indizieren und zu verwalten. Seine Fähigkeit, Billionen von Vektoren effizient zu indizieren und zu durchsuchen, macht Milvus zu einer bevorzugten Wahl für KI- und Machine-Learning-Workloads.

Grafana hingegen ist eine Open-Source-Plattform für Monitoring und Observability, ideal zur Visualisierung von Metriken, Logs und Traces. Sie ermöglicht es dir, Dashboards zu erstellen, um Systemzustand und Performance im Blick zu behalten. Loki ergänzt Grafana als Log-Aggregationssystem und ist von Prometheus inspiriert. Es verwaltet Logs effizient und kostengünstig. Zusammen bieten Grafana und Loki ein solides Monitoring-Setup, das die Observability für Milvus und darüber hinaus verbessert.

Voraussetzungen

  • Docker - Stelle sicher, dass Docker auf deinem System installiert ist.

  • Kubernetes - Halte einen Kubernetes-Cluster bereit. Du kannst minikube or k3d für die lokale Entwicklung oder den Kubernetes-Dienst eines Cloud-Anbieters für Produktionsumgebungen verwenden.

  • Helm - Installiere Helm, einen Paketmanager für Kubernetes, der dir bei der Verwaltung von Kubernetes-Anwendungen hilft. In unserer Dokumentation erfährst du, wie das geht: https://milvus.io/docs/install_cluster-helm.md

  • Kubectl - Installiere kubectl, ein Kommandozeilentool zur Interaktion mit Kubernetes-Clustern, um Anwendungen bereitzustellen, Cluster-Ressourcen zu prüfen und zu verwalten sowie Logs anzuzeigen.

K8s einrichten

Nachdem du alles installiert hast, was zum Ausführen eines K8s-Clusters erforderlich ist, und falls du minikube verwendet hast, starte deinen Cluster mit:

minikube start

Überprüfe den Status deines K8s-Clusters mit:

kubectl cluster-info

⚠️Du musst außerdem Milvus auf K8s bereitstellen. Sieh dir dazu unseren Getting Started guide an, um zu erfahren, wie du das tun kannst.

Grafana bereitstellen

Grafana ist die Analyse- und interaktive Visualisierungsplattform, die wir verwenden werden. Sie bietet eine große Vielfalt an Diagrammen, Graphen und Alerts. Sie ermöglicht es dir, deine Metriken abzufragen, zu visualisieren und Alerts dafür zu erstellen, unabhängig davon, wo sie gespeichert sind.

Die Installation erfolgt mit Helm

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

helm install grafana grafana/grafana --namespace grafana --create-namespace

Du kannst überprüfen, ob alles korrekt läuft, indem du Folgendes ausführst

 ❯ 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

Loki & Promtail bereitstellen

Loki ist ein von Prometheus inspiriertes Log-Aggregationssystem. Es verwaltet Logs effizient und kostengünstig. Loki verwendet Promtail, um Logs zu aggregieren. Promtail ist ein Log-Collector-Agent, der Logs sammelt, mit Labels versieht und an Loki sendet. Er wurde ausdrücklich für Loki entwickelt. Du wirst sehen, dass auf jedem Kubernetes-Node eine Instanz von Promtail läuft.

Lokis Ansatz zur Log-Indizierung ist einzigartig. Es indiziert nicht den eigentlichen Text der Logs. Stattdessen werden Log-Einträge intelligent in Streams gruppiert und anschließend mit Labels indiziert. Diese Methode reduziert die Kosten und die Zeit zwischen der Aufnahme von Logs und ihrer Verfügbarkeit in Abfragen erheblich und sorgt so für Entlastung im Ressourcenmanagement.

Loki kann auf verschiedene Arten bereitgestellt werden:

  1. Monolithischer Modus: Dieser Modus ist unkompliziert, alle Komponenten von Loki laufen innerhalb eines einzigen Prozesses. Er eignet sich für kleinere Setups oder um sich ohne viel Komplexität mit Loki vertraut zu machen.

  2. Skalierbarer Modus: In diesem Modus werden Lokis Komponenten in separate Dienste aufgeteilt, wie Distributors, Ingester, Querier und andere.
    Dieses Setup ist für hohe Verfügbarkeit und Skalierbarkeit ausgelegt und passt gut zu groß angelegten Bereitstellungen. Es erfordert einen S3-kompatiblen Objektspeicher, um die Protokolldaten zu speichern, beispielsweise AWS S3, Google Cloud Storage oder eine selbst gehostete Lösung wie MinIO.

So installierst du Loki:

helm upgrade --install loki grafana/loki-distributed -n grafana-loki --create-namespace

Dadurch wird loki im Namespace grafana-loki installiert. Wenn der Namespace nicht existiert, erstellt Helm ihn für dich.

Stelle sicher, dass alles wieder korrekt funktioniert, indem du Folgendes ausführst:

❯ 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

So installierst du Promtail:

Bevor du Promtail installierst, musst du es so konfigurieren, dass es mit Loki kommuniziert. Dazu musst du eine Konfigurationsdatei bearbeiten, um die Service-URL von Loki anzugeben:

  1. Extrahieren Sie die Standard-Promtail-Konfiguration:
helm show values grafana/promtail > promtail-overrides.yaml

Dieser Befehl schreibt die Standard-Promtail-Werte in eine Datei namens promtail-overrides.yaml, die Sie anschließend anpassen können.

  1. Bearbeiten Sie die Standard-Promtail-Konfiguration:

Bearbeiten Sie promtail-overrides.yaml, um den Wert clients.url auf den Service-Endpunkt von Loki zu setzen. In Kubernetes sind Services über DNS-Einträge erreichbar, daher können Sie den DNS-Namen des Loki-Service verwenden: loki-loki-distributed-gateway.grafana-loki.svc.cluster.local

Hinweis: Wenn Sie Loki in einem anderen Namespace oder unter einem anderen Namen bereitgestellt haben, passen Sie die URL entsprechend an; schauen Sie sich gerne die Kubernetes-Dokumentation an.

  1. Stellen Sie Promtail mit Ihrer geänderten Konfigurationsdatei bereit:
helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki

Dieser Befehl weist Helm an, Promtail im Namespace grafana-loki mit Ihrer benutzerdefinierten Konfiguration bereitzustellen. Er stellt sicher, dass Promtail so eingerichtet ist, dass Logs an Loki weitergeleitet werden, und vervollständigt damit Ihr Log-Aggregations-Setup.

Stellen Sie wie üblich sicher, dass alles funktioniert, indem Sie Folgendes ausführen:

❯ 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

Grafana-Datenquellen & Dashboard konfigurieren

Nachdem Loki und Promtail nun bereitgestellt sind, besteht der nächste Schritt darin, Loki als Datenquelle in Grafana zu integrieren, damit Sie Ihre Logs visualisieren und abfragen können.

  1. Zugriff auf Grafana: Zuerst müssen Sie auf Ihre Grafana-Instanz zugreifen. Wenn Grafana innerhalb Ihres Kubernetes-Clusters läuft, können Sie Port Forwarding verwenden, um von Ihrem lokalen Rechner aus auf die Grafana-UI zuzugreifen:
kubectl port-forward service/grafana 8080:80 -n grafana 
  1. Anmeldung bei Grafana: Der Standardbenutzername für Grafana ist admin. Für das Passwort generiert Grafana bei der Installation über Helm ein zufälliges Passwort. Sie können es mit folgendem Befehl abrufen:
kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo 

  1. Zu Data Sources navigieren: Sobald Sie angemeldet sind, gehen Sie zur Grafana-Seitenleiste, suchen Sie das Symbol für "Connections" und wählen Sie "Data Sources" aus.

  2. Loki hinzufügen: Klicken Sie auf die Schaltfläche "Add data source", suchen Sie nach Loki und wählen Sie es aus. Sie werden zur Einstellungsseite der Loki-Datenquelle weitergeleitet.

  1. Loki in Grafana konfigurieren: Geben Sie die URL für den Loki-Service ein, die ungefähr http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.local lautet, sofern Sie die Standardkonfiguration verwenden. Diese URL verweist Grafana auf Ihre Loki-Instanz innerhalb Ihres Kubernetes-Clusters.

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

  1. Speichern und testen: Nachdem Sie die Loki-Service-URL eingegeben haben, klicken Sie auf "Save & Test". Grafana bestätigt, ob die Verbindung zur Loki-Datenquelle erfolgreich hergestellt werden kann.

Erkunden Sie Ihre Logs

Sie können nun Ihre Logs erkunden und sicherstellen, dass alles ordnungsgemäß funktioniert und Sie die Logs von Milvus sehen können. Filtern Sie nach dem app-Namen und verwenden Sie milvus.

Wenn Sie einige Logs wie im obigen Screenshot sehen, herzlichen Glückwunsch, Sie können nun dank Grafana und Loki die Vorgänge in Ihrem Milvus-Cluster überwachen und Einblicke gewinnen! 🚀

Schauen Sie sich gerne Milvus an, die Dokumentation zu Visualizing Milvus Metrics in Grafana, und teilen Sie Ihre Erfahrungen mit der Community, indem Sie unserem Discord beitreten.

Aktualisiert am Jul 09, 2026