46.5kЗаказать демоВойтиНачать бесплатно

Мониторинг Milvus с помощью Grafana и Loki

Apr 12, 20246 min read

Введение в мониторинг Milvus с помощью Grafana и Loki

Этот пост поможет вам настроить Grafana и Loki для эффективного мониторинга ваших развертываний Milvus.

Milvus — это распределенная векторная база данных, предназначенная для хранения, индексирования и управления массивными embedding-векторами. Способность эффективно индексировать и выполнять поиск по триллионам векторов делает Milvus предпочтительным выбором для рабочих нагрузок ИИ и машинного обучения.

С другой стороны, Grafana — это open-source платформа для мониторинга и observability, идеально подходящая для визуализации метрик, логов и трассировок. Она позволяет создавать дашборды, чтобы следить за состоянием системы и производительностью. Loki работает вместе с Grafana как система агрегации логов, вдохновленная Prometheus. Она управляет логами эффективно и экономично. Вместе Grafana и Loki предлагают надежную настройку мониторинга, повышая observability для Milvus и не только.

Предварительные требования

  • Docker - Убедитесь, что Docker установлен в вашей системе.

  • Kubernetes - Подготовьте кластер Kubernetes. Вы можете использовать minikube or k3d для локальной разработки или Kubernetes-сервис облачного провайдера для production-сред.

  • Helm - Установите Helm, менеджер пакетов для Kubernetes, чтобы помочь вам управлять Kubernetes-приложениями; вы можете ознакомиться с нашей документацией, чтобы узнать, как это сделать https://milvus.io/docs/install_cluster-helm.md

  • Kubectl - Установите kubectl, инструмент командной строки для взаимодействия с кластерами Kubernetes, чтобы развертывать приложения, проверять и управлять ресурсами кластера, а также просматривать логи.

Настройка K8s

После установки всего необходимого для запуска кластера K8s, и если вы использовали minikube, запустите свой кластер с помощью:

minikube start

Проверьте статус вашего кластера K8s с помощью:

kubectl cluster-info

⚠️Вам также потребуется развернуть Milvus в K8s, ознакомьтесь с нашим руководством по началу работы о том, как это сделать.

Развертывание Grafana

Grafana — это аналитическая и интерактивная платформа визуализации, которую мы будем использовать. Она предоставляет большое разнообразие диаграмм, графиков и оповещений. Она позволяет вам запрашивать, визуализировать и создавать оповещения по вашим метрикам независимо от того, где они хранятся.

Установка будет выполнена с помощью Helm

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

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

Вы можете проверить, что все работает корректно, выполнив

 ❯ 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

Loki — это система агрегации логов, вдохновленная Prometheus. Она управляет логами эффективно и экономично. Loki использует Promtail для агрегации логов. Promtail — это агент-сборщик логов, который собирает, маркирует и отправляет логи в Loki. Он специально создан для Loki. Вы увидите, что экземпляр Promtail работает на каждом узле Kubernetes.

Подход Loki к индексированию логов уникален. Он не индексирует фактический текст логов. Вместо этого записи логов интеллектуально группируются в потоки, а затем индексируются с помощью меток. Этот метод значительно снижает затраты и время между поступлением логов и их доступностью в запросах, обеспечивая облегчение в управлении ресурсами.

Loki можно развернуть разными способами:

  1. Монолитный режим: Этот режим прост: все компоненты Loki работают в рамках одного процесса. Он подходит для небольших установок или для знакомства с Loki без особой сложности.

  2. Масштабируемый режим: В этом режиме компоненты Loki разделены на отдельные сервисы, такие как distributors, ingesters, queriers и другие.
    Такая настройка предназначена для высокой доступности и масштабируемости и хорошо подходит для крупномасштабных развертываний. Для хранения данных журналов требуется S3-совместимое объектное хранилище, которым может быть AWS S3, Google Cloud Storage или самостоятельно размещенное решение вроде MinIO.

Чтобы установить Loki:

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

Это установит loki в пространстве имен grafana-loki. Если пространство имен не существует, Helm создаст его для вас.

Убедитесь, что всё снова работает корректно, выполнив следующее:

❯ 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

Чтобы установить Promtail:

Перед установкой Promtail вам нужно настроить его для взаимодействия с Loki. Это включает редактирование конфигурационного файла, чтобы указать URL сервиса Loki:

  1. Извлеките конфигурацию Promtail по умолчанию:
helm show values grafana/promtail > promtail-overrides.yaml

Эта команда записывает значения Promtail по умолчанию в файл с именем promtail-overrides.yaml, который затем можно изменить.

  1. Отредактируйте конфигурацию Promtail по умолчанию:

Отредактируйте promtail-overrides.yaml, чтобы установить значение clients.url на endpoint сервиса Loki. В Kubernetes сервисы доступны через DNS-записи, поэтому вы можете использовать DNS-имя сервиса Loki: loki-loki-distributed-gateway.grafana-loki.svc.cluster.local

Примечание: Если вы развернули Loki в другом namespace или под другим именем, скорректируйте URL соответствующим образом; при необходимости ознакомьтесь с документацией Kubernetes.

  1. Разверните Promtail с вашим измененным конфигурационным файлом:
helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki

Эта команда указывает Helm развернуть Promtail в namespace grafana-loki, используя вашу пользовательскую конфигурацию. Она гарантирует, что Promtail настроен на пересылку логов в Loki, завершая настройку агрегации логов.

Как обычно, убедитесь, что всё работает, выполнив:

❯ 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 и Dashboard

Теперь, когда Loki и Promtail развернуты, следующий шаг — интегрировать Loki как источник данных в Grafana, чтобы вы могли визуализировать и запрашивать свои логи.

  1. Доступ к Grafana: Сначала вам нужно получить доступ к вашему экземпляру Grafana. Если Grafana работает внутри вашего кластера Kubernetes, вы можете использовать проброс портов, чтобы получить доступ к UI Grafana с вашей локальной машины:
kubectl port-forward service/grafana 8080:80 -n grafana 
  1. Вход в Grafana: Имя пользователя по умолчанию для Grafana — admin. Для пароля Grafana генерирует случайный пароль при установке через Helm. Вы можете получить его с помощью:
kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo 

  1. Переход к источникам данных: После входа перейдите в боковую панель Grafana, найдите значок "Connections" и выберите "Data Sources".

  2. Добавление Loki: Нажмите кнопку "Add data source", найдите Loki и выберите его. Вы попадете на страницу настроек источника данных Loki.

  1. Настройка Loki в Grafana: Введите URL сервиса Loki, который будет выглядеть примерно так: http://loki-loki-distributed-gateway.grafana-loki.svc.cluster.local, если используется настройка по умолчанию. Этот URL указывает Grafana на ваш экземпляр Loki внутри вашего кластера Kubernetes.

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

  1. Сохранение и проверка: После ввода URL сервиса Loki нажмите "Save & Test". Grafana подтвердит, может ли она успешно подключиться к источнику данных Loki.

Изучите свои логи

Теперь вы можете изучать свои логи и убедиться, что всё работает корректно и вы видите логи Milvus. Отфильтруйте по имени app и используйте milvus.

Если вы видите логи, как на скриншоте выше, поздравляем: теперь вы можете мониторить и получать аналитическую информацию об операциях вашего кластера Milvus благодаря Grafana и Loki! 🚀

Ознакомьтесь с Milvus, документацией по визуализации метрик Milvus в Grafana, и поделитесь своим опытом с сообществом, присоединившись к нашему Discord.

Обновлено Jul 09, 2026