Monitorando o Milvus com Grafana e Loki

Apr 12, 20246 min read

Introdução ao monitoramento do Milvus com Grafana & Loki

Este post irá guiá-lo na configuração do Grafana e do Loki para monitorar suas implantações do Milvus de forma eficaz.

Milvus é um banco de dados vetorial distribuído que visa armazenar, indexar e gerenciar vetores de embedding massivos. Sua capacidade de indexar e pesquisar eficientemente trilhões de vetores torna o Milvus uma escolha preferencial para cargas de trabalho de IA e machine learning.

Por outro lado, o Grafana é uma plataforma de código aberto para monitoramento e observabilidade, ideal para visualizar métricas, logs e traces. Ele permite criar dashboards para acompanhar a saúde e o desempenho do sistema. O Loki se integra ao Grafana como um sistema de agregação de logs, inspirado no Prometheus. Ele gerencia logs de forma eficiente e econômica. Juntos, Grafana e Loki oferecem uma configuração sólida de monitoramento, aumentando a observabilidade para o Milvus e além.

Pré-requisitos

  • Docker - Certifique-se de que o Docker esteja instalado no seu sistema.

  • Kubernetes - Tenha um cluster Kubernetes pronto. Você pode usar minikube or k3d para desenvolvimento local ou o serviço Kubernetes de um provedor de nuvem para ambientes de produção.

  • Helm - Instale o Helm, um gerenciador de pacotes para Kubernetes, para ajudar você a gerenciar aplicações Kubernetes, você pode consultar nossa documentação para ver como fazer isso https://milvus.io/docs/install_cluster-helm.md

  • Kubectl - Instale kubectl, uma ferramenta de linha de comando para interagir com clusters Kubernetes, para implantar aplicações, inspecionar e gerenciar recursos do cluster e visualizar logs.

Configurando K8s

Depois de instalar tudo o que é necessário para executar um cluster K8s, e se você usou minikube, inicie seu cluster com:

minikube start

Verifique o status do seu cluster K8s com:

kubectl cluster-info

⚠️Você também precisará implantar o Milvus no K8s, confira nosso guia de Introdução sobre como você pode fazer isso.

Implantando o Grafana

Grafana é a plataforma de análise e visualização interativa que usaremos. Ela fornece uma rica variedade de charts, graphs e alertas. Ela permite consultar, visualizar e criar alertas sobre suas métricas independentemente de onde estejam armazenadas.

A instalação será feita com Helm

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

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

Você pode verificar se tudo está sendo executado corretamente executando

 ❯ 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

Implantando Loki & Promtail

Loki é um sistema de agregação de logs inspirado no Prometheus. Ele gerencia logs de forma eficiente e econômica. O Loki usa o Promtail para agregar logs. Promtail é um agente coletor de logs que coleta, rotula e envia logs para o Loki. Ele é feito explicitamente para o Loki. Você verá que uma instância do Promtail é executada em cada nó Kubernetes.

A abordagem do Loki para indexação de logs é única. Ele não indexa o texto real dos logs. Em vez disso, as entradas de log são agrupadas inteligentemente em streams e então indexadas com labels. Esse método reduz significativamente os custos e o tempo entre a ingestão de logs e sua disponibilidade em consultas, proporcionando uma sensação de alívio no gerenciamento de recursos.

O Loki pode ser implantado de diferentes maneiras:

  1. Modo monolítico: Este modo é simples, todos os componentes do Loki são executados dentro de um único processo. É adequado para configurações menores ou para se familiarizar com o Loki sem muita complexidade.

  2. Modo escalável: Neste modo, os componentes do Loki são divididos em serviços separados, como distributors, ingesters, queriers e outros.
    Esta configuração foi projetada para alta disponibilidade e escalabilidade, encaixando-se bem em implantações em larga escala. Ela requer um armazenamento de objetos compatível com S3 para armazenar os dados de log, que pode ser AWS S3, Google Cloud Storage ou uma solução auto-hospedada como MinIO.

Para instalar o Loki:

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

Isso instalará o loki dentro do namespace grafana-loki. Se o namespace não existir, o Helm o criará para você.

Certifique-se de que tudo funcione corretamente novamente executando o seguinte:

❯ 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 o Promtail:

Antes de instalar o Promtail, você precisará configurá-lo para se comunicar com o Loki. Isso envolve editar um arquivo de configuração para especificar a URL de serviço do Loki:

  1. Extraia a configuração padrão do Promtail:
helm show values grafana/promtail > promtail-overrides.yaml

Este comando grava os valores padrão do Promtail em um arquivo chamado promtail-overrides.yaml, que você pode então modificar.

  1. Edite a configuração padrão do Promtail:

Edite promtail-overrides.yaml para definir o valor de clients.url para o endpoint de serviço do Loki. No Kubernetes, os serviços são acessíveis por meio de registros DNS, então você pode usar o nome DNS do serviço do Loki: loki-loki-distributed-gateway.grafana-loki.svc.cluster.local

N.B.: Se você implantou o Loki em um namespace diferente ou com um nome diferente, ajuste a URL de acordo; fique à vontade para consultar a documentação do Kubernetes.

  1. Implante o Promtail com seu arquivo de configuração modificado:
helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki

Este comando instrui o Helm a implantar o Promtail no namespace grafana-loki, usando sua configuração personalizada. Ele garante que o Promtail esteja configurado para encaminhar logs para o Loki, concluindo sua configuração de agregação de logs.

Como de costume, certifique-se de que tudo funciona executando:

❯ 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

Configure as fontes de dados e o dashboard do Grafana

Com o Loki e o Promtail agora implantados, o próximo passo é integrar o Loki como uma fonte de dados dentro do Grafana, permitindo que você visualize e consulte seus logs.

  1. Acessando o Grafana: Primeiro, você precisa acessar sua instância do Grafana. Se o Grafana estiver em execução dentro do seu cluster Kubernetes, você pode usar o encaminhamento de porta para acessar a interface do Grafana a partir da sua máquina local:
kubectl port-forward service/grafana 8080:80 -n grafana 
  1. Fazendo login no Grafana: O nome de usuário padrão do Grafana é admin. Para a senha, o Grafana gera uma aleatória quando instalado via Helm. Você pode recuperá-la com:
kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo 

  1. Navegando para Fontes de Dados: Depois de fazer login, vá para a barra lateral do Grafana, encontre o ícone de "Connections" e selecione "Data Sources".

  2. Adicionando o Loki: Clique no botão "Add data source", procure por Loki e selecione-o. Você será levado para a página de configurações da fonte de dados do Loki.

  1. Configurando o Loki no Grafana: Insira a URL do serviço Loki, que será algo como http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.local, assumindo a configuração padrão. Esta URL direciona o Grafana para sua instância do Loki dentro do seu cluster Kubernetes.

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

  1. Salvar e Testar: Depois de inserir a URL do serviço Loki, clique em "Save & Test". O Grafana confirmará se consegue se conectar com sucesso à fonte de dados Loki.

Explore seus logs

Agora você pode explorar seus logs e garantir que tudo esteja funcionando corretamente e que consiga ver os logs do Milvus. Filtre pelo nome app e use milvus.

Se você vir alguns logs como na captura de tela acima, parabéns, agora você pode monitorar e oferecer insights sobre as operações do seu cluster Milvus graças ao Grafana e ao Loki! 🚀

Fique à vontade para conferir o Milvus, a documentação sobre Visualização das Métricas do Milvus no Grafana, e compartilhar suas experiências com a comunidade entrando no nosso Discord.

Atualizado em Jul 09, 2026