Supervisión de Milvus con Grafana y Loki

Apr 12, 20246 min read

Introducción a la monitorización de Milvus con Grafana y Loki

Esta publicación te guiará en la configuración de Grafana y Loki para monitorizar tus despliegues de Milvus de forma eficaz.

Milvus es una base de datos vectorial distribuida que tiene como objetivo almacenar, indexar y gestionar vectores de embedding masivos. Su capacidad para indexar y buscar eficientemente entre billones de vectores convierte a Milvus en una opción de referencia para cargas de trabajo de IA y aprendizaje automático.

Por otro lado, Grafana es una plataforma de código abierto para monitorización y observabilidad, ideal para visualizar métricas, registros y trazas. Te permite crear paneles para controlar el estado y el rendimiento del sistema. Loki se combina con Grafana como un sistema de agregación de registros, inspirado en Prometheus. Gestiona los registros de forma eficiente y rentable. Juntos, Grafana y Loki ofrecen una sólida configuración de monitorización, impulsando la observabilidad para Milvus y más allá.

Requisitos previos

  • Docker - Asegúrate de que Docker esté instalado en tu sistema.

  • Kubernetes - Ten preparado un clúster de Kubernetes. Puedes usar minikube or k3d para el desarrollo local o el servicio de Kubernetes de un proveedor en la nube para entornos de producción.

  • Helm - Instala Helm, un gestor de paquetes para Kubernetes, para ayudarte a gestionar aplicaciones de Kubernetes; puedes consultar nuestra documentación para ver cómo hacerlo https://milvus.io/docs/install_cluster-helm.md

  • Kubectl - Instala kubectl, una herramienta de línea de comandos para interactuar con clústeres de Kubernetes, para desplegar aplicaciones, inspeccionar y gestionar recursos del clúster, y ver registros.

Configuración de K8s

Después de instalar todo lo necesario para ejecutar un clúster de K8s, y si usaste minikube, inicia tu clúster con:

minikube start

Comprueba el estado de tu clúster de K8s con:

kubectl cluster-info

⚠️También necesitarás desplegar Milvus en K8s; consulta nuestra guía de inicio sobre cómo puedes hacerlo.

Despliegue de Grafana

Grafana es la plataforma de analítica y visualización interactiva que usaremos. Proporciona una gran variedad de gráficos, diagramas y alertas. Te permite consultar, visualizar y crear alertas sobre tus métricas independientemente de dónde estén almacenadas.

La instalación se realizará con Helm

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

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

Puedes comprobar que todo se está ejecutando correctamente ejecutando

 ❯ 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

Despliegue de Loki y Promtail

Loki es un sistema de agregación de registros inspirado en Prometheus. Gestiona los registros de forma eficiente y rentable. Loki usa Promtail para agregar registros. Promtail es un agente recolector de registros que recopila, etiqueta y envía registros a Loki. Está hecho explícitamente para Loki. Verás que una instancia de Promtail se ejecuta en cada nodo de Kubernetes.

El enfoque de Loki para la indexación de registros es único. No indexa el texto real de los registros. En su lugar, las entradas de registro se agrupan inteligentemente en flujos y luego se indexan con etiquetas. Este método reduce significativamente los costos y el tiempo entre la ingesta de registros y su disponibilidad en consultas, proporcionando una sensación de alivio en la gestión de recursos.

Loki puede desplegarse de diferentes maneras:

  1. Modo monolítico: Este modo es sencillo, todos los componentes de Loki se ejecutan dentro de un único proceso. Es adecuado para configuraciones más pequeñas o para familiarizarse con Loki sin mucha complejidad.

  2. Modo escalable: En este modo, los componentes de Loki se dividen en servicios separados, como distribuidores, ingesters, queriers y otros.
    Esta configuración está diseñada para alta disponibilidad y escalabilidad, y encaja bien con despliegues a gran escala. Requiere un almacenamiento de objetos compatible con S3 para almacenar los datos de logs, que podría ser AWS S3, Google Cloud Storage o una solución autohospedada como MinIO.

Para instalar Loki:

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

Esto instalará loki dentro del namespace grafana-loki. Si el namespace no existe, Helm lo creará por ti.

Asegúrate de que todo vuelva a funcionar correctamente ejecutando lo siguiente:

❯ 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

Para instalar Promtail:

Antes de instalar Promtail, tendrás que configurarlo para comunicarse con Loki. Esto implica editar un archivo de configuración para especificar la URL del servicio de Loki:

  1. Extrae la configuración predeterminada de Promtail:
helm show values grafana/promtail > promtail-overrides.yaml

Este comando escribe los valores predeterminados de Promtail en un archivo llamado promtail-overrides.yaml, que luego puedes modificar.

  1. Edita la configuración predeterminada de Promtail:

Edita promtail-overrides.yaml para establecer el valor de clients.url en el endpoint del servicio de Loki. En Kubernetes, los servicios son accesibles mediante registros DNS, por lo que puedes usar el nombre DNS del servicio de Loki: loki-loki-distributed-gateway.grafana-loki.svc.cluster.local

Nota: Si desplegaste Loki en un namespace diferente o con un nombre diferente, ajusta la URL en consecuencia; no dudes en consultar la documentación de Kubernetes.

  1. Despliega Promtail con tu archivo de configuración modificado:
helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki

Este comando indica a Helm que despliegue Promtail en el namespace grafana-loki, usando tu configuración personalizada. Garantiza que Promtail esté configurado para reenviar logs a Loki, completando tu configuración de agregación de logs.

Como de costumbre, asegúrate de que todo funcione ejecutando:

❯ 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 las fuentes de datos y el dashboard de Grafana

Con Loki y Promtail ya desplegados, el siguiente paso es integrar Loki como fuente de datos dentro de Grafana, lo que te permite visualizar y consultar tus logs.

  1. Acceso a Grafana: Primero, necesitas acceder a tu instancia de Grafana. Si Grafana se está ejecutando dentro de tu clúster de Kubernetes, puedes usar port forwarding para acceder a la interfaz de Grafana desde tu máquina local:
kubectl port-forward service/grafana 8080:80 -n grafana 
  1. Inicio de sesión en Grafana: El nombre de usuario predeterminado de Grafana es admin. Para la contraseña, Grafana genera una aleatoria cuando se instala mediante Helm. Puedes recuperarla con:
kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo 

  1. Navegación a Data Sources: Una vez que hayas iniciado sesión, ve a la barra lateral de Grafana, busca el icono de "Connections" y selecciona "Data Sources".

  2. Adición de Loki: Haz clic en el botón "Add data source", busca Loki y selecciónalo. Serás llevado a la página de configuración de la fuente de datos de Loki.

  1. Configuración de Loki en Grafana: Introduce la URL del servicio de Loki, que será algo como http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.local, suponiendo la configuración predeterminada. Esta URL apunta Grafana a tu instancia de Loki dentro de tu clúster de Kubernetes.

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

  1. Guardar y probar: Después de introducir la URL del servicio de Loki, haz clic en "Save & Test". Grafana confirmará si puede conectarse correctamente a la fuente de datos de Loki.

Explora tus logs

Ahora puedes explorar tus logs y asegurarte de que todo funciona correctamente y de que puedes ver los logs de Milvus. Filtra por nombre de app y usa milvus.

Si ves algunos logs como en la captura de pantalla anterior, felicidades, ¡ahora puedes monitorear y ofrecer información sobre las operaciones de tu clúster de Milvus gracias a Grafana y Loki! 🚀

No dudes en consultar Milvus, la documentación sobre Visualización de métricas de Milvus en Grafana, y compartir tus experiencias con la comunidad uniéndote a nuestro Discord.

Actualizado el Jul 09, 2026