Milvus mit Grafana und Loki überwachen
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 k3dfü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:
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.
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:
- 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.
- 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.
- 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.
- 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
- 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
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.
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.
- 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.locallautet, sofern Sie die Standardkonfiguration verwenden. Diese URL verweist Grafana auf Ihre Loki-Instanz innerhalb Ihres Kubernetes-Clusters.

Milvus 2.6.x Now Generally Available on Zilliz Cloud, Making Vector Search Faster, Smarter, and More Cost-Efficient for Production AI
Milvus 2.6.x is now GA on Zilliz Cloud, delivering faster vector search, smarter hybrid queries, and lower costs for production RAG and AI applications.

VidTok: Rethinking Video Processing with Compact Tokenization
VidTok tokenizes videos to reduce redundancy while preserving spatial and temporal details for efficient processing.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.



