Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Создание кластера Kubernetes без доступа в интернет
    • Запуск рабочих нагрузок с GPU
    • Использование групп узлов c GPU без предустановленных драйверов
    • Установка Time-Slicing GPUs
    • Миграция ресурсов в другую зону доступности
    • Шифрование секретов в Managed Service for Kubernetes
    • Создание кластера Kubernetes с помощью провайдера Yandex Cloud для Kubernetes Cluster API
    • Доступ к API Yandex Cloud из кластера Managed Service for Kubernetes с помощью федерации сервисных аккаунтов
      • Мониторинг кластера с помощью Prometheus и Grafana
      • Мониторинг кластера Managed Service for Kubernetes с помощью Filebeat OSS
      • Передача логов кластера Managed Service for Kubernetes в Cloud Logging
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Необходимые платные ресурсы
  • Перед началом работы
  • Установите Prometheus
  • Установите кеширующий прокси trickster
  • Установите Grafana
  • Настройте и проверьте работу Grafana
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Мониторинг
  3. Мониторинг кластера с помощью Prometheus и Grafana

Мониторинг кластера с помощью Prometheus и Grafana

Статья создана
Yandex Cloud
Улучшена
mrDuglas42
Обновлена 28 июля 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
  • Установите Prometheus
  • Установите кеширующий прокси trickster
  • Установите Grafana
  • Настройте и проверьте работу Grafana
  • Удалите созданные ресурсы

Managed Service for Kubernetes позволяет выгружать метрики объектов кластера в системы мониторинга.

Из этой статьи вы узнаете, как настроить систему сбора метрик Prometheus и систему визуализации Grafana в кластере Managed Service for Kubernetes. Для ускорения передачи метрик будет установлен кеширующий прокси trickster.

Чтобы настроить систему мониторинга кластера Managed Service for Kubernetes:

  • Установите Prometheus.
  • Установите кеширующий прокси trickster.
  • Установите Grafana.
  • Настройте и проверьте работу Grafana.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за публичный IP-адрес для узлов кластера (см. тарифы Virtual Private Cloud).

Перед началом работыПеред началом работы

  1. Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.

    Важно

    От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.

  2. Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации с доступом в интернет и с группами безопасности, подготовленными ранее.

  3. Установите kubectl и настройте его на работу с созданным кластером.

  4. Установите менеджер пакетов Helm версии не ниже 3.8.0.

Установите PrometheusУстановите Prometheus

Система мониторинга Prometheus сканирует объекты кластера Managed Service for Kubernetes и собирает их метрики в собственную базу данных. Собранные метрики доступны внутри кластера Managed Service for Kubernetes по протоколу HTTP.

  1. Добавьте репозиторий, содержащий дистрибутив Prometheus:

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts && \
    helm repo update
    
  2. Установите Prometheus:

    helm install my-prom prometheus-community/prometheus
    
  3. Убедитесь, что все поды перешли в состояние Running:

    kubectl get pods -l "app.kubernetes.io/instance=my-prom"
    

    Результат:

    NAME                                              READY  STATUS   RESTARTS  AGE
    my-prom-prometheus-alertmanager-7b********-xt6ws  2/2    Running  0         81s
    my-prom-prometheus-node-exporter-*****            1/1    Running  0         81s
    my-prom-prometheus-pushgateway-69********-swrfb   1/1    Running  0         81s
    my-prom-prometheus-server-7b********-m4v78        2/2    Running  0         81s
    

Установите кеширующий прокси tricksterУстановите кеширующий прокси trickster

Кеширующий прокси trickster ускоряет чтение из БД Prometheus, что позволяет отображать метрики Grafana практически в реальном времени, а также снизить нагрузку на Prometheus.

  1. Создайте конфигурационный файл trickster.yaml, содержащий настройки trickster:

    trickster.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: trickster-pvc
     spec:
       accessModes:
         - ReadWriteOnce
       storageClassName: yc-network-hdd
       resources:
         requests:
           storage: 15Gi
     
     ---
     apiVersion: v1
     kind: ConfigMap
     metadata:
       name: trickster-conf
       labels:
         name: trickster-conf
     
     data:
       trickster.conf: |-
         [frontend]
         listen_port = 8480
         tls_listener = false
         connections_limit = 0
         [logging]
         log_level = "info"
     
         [caching]
         cache_type = "filesystem"
         filesystem_path = "/tmp/trickster"
     
         [proxy]
         origin = "default"
     
         [origins.default]
         origin_type = "prometheus"
         origin_url = "http://my-prom-prometheus-server:80"
         is_default = true
     
         [metrics]
         listen_port = 8481
         listen_address = ""
     
         [health]
         listen_port = 8481
         listen_address = ""
     
         [telemetry]
         prometheus_metrics = false
     
         [logging.profiler]
         enabled = false
         port = 6060
     
     ---
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: trickster
       labels:
         app: trickster
     spec:
       replicas: 1
       selector:
         matchLabels:
           app: trickster
       template:
         metadata:
           labels:
             app: trickster
         spec:
           containers:
             - name: trickster
               image: tricksterproxy/trickster:1.1
               imagePullPolicy: IfNotPresent
               args:
                 - -config
                 - /etc/trickster/trickster.conf
               ports:
                 - name: http
                   containerPort: 8480
                   protocol: TCP
                 - name: metrics
                   containerPort: 8481
                   protocol: TCP
               volumeMounts:
                 - name: config-volume
                   mountPath: /etc/trickster
                   readOnly: true
                 - name: cache-volume
                   mountPath: /tmp/trickster
               env:
                 - name: NAMESPACE
                   valueFrom:
                     fieldRef:
                       fieldPath: metadata.namespace
           volumes:
             - name: config-volume
               configMap:
                 name: trickster-conf
                 items:
                   - key: trickster.conf
                     path: trickster.conf
             - name: cache-volume
               persistentVolumeClaim:
                 claimName: trickster-pvc
     
     ---
     apiVersion: v1
     kind: Service
     metadata:
       annotations:
         prometheus.io/scrape: "true"
         prometheus.io/port: "8481"
         prometheus.io/path: "/metrics"
       name: trickster
     spec:
       ports:
         - name: http
           port: 8480
           targetPort: http
         - name: metrics
           port: 8481
           targetPort: metrics
       selector:
         app: trickster
    

    Вы можете изменить размер хранилища, отведенного для работы кеширующего прокси. Укажите нужное значение размера хранилища в параметре PersistentVolumeClaim.spec.resources.requests.storage.

  2. Установите trickster:

    kubectl apply -f trickster.yaml
    
  3. Убедитесь, что под trickster перешел в состояние Running:

    kubectl get pods -l "app=trickster"
    

Кеширующий прокси доступен внутри кластера Managed Service for Kubernetes по адресу http://trickster:8480. Grafana будет обращаться по этому URL для получения метрик.

Установите GrafanaУстановите Grafana

При развертывании приложения будут созданы:

  • Deployment приложения Grafana.
  • PersistentVolumeClaim для резервирования внутреннего хранилища.
  • Service типа LoadBalancer для организации сетевого доступа к консоли управления Grafana.

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

  1. Создайте конфигурационный файл grafana.yaml.

    grafana.yaml
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: grafana-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: grafana
      name: grafana
    spec:
      selector:
        matchLabels:
          app: grafana
      template:
        metadata:
          labels:
            app: grafana
        spec:
          securityContext:
            fsGroup: 472
            supplementalGroups:
              - 0
          containers:
            - name: grafana
              image: grafana/grafana:latest
              imagePullPolicy: IfNotPresent
              ports:
                - containerPort: 3000
                  name: http-grafana
                  protocol: TCP
              readinessProbe:
                failureThreshold: 3
                httpGet:
                  path: /robots.txt
                  port: 3000
                  scheme: HTTP
                initialDelaySeconds: 10
                periodSeconds: 30
                successThreshold: 1
                timeoutSeconds: 2
              livenessProbe:
                failureThreshold: 3
                initialDelaySeconds: 30
                periodSeconds: 10
                successThreshold: 1
                tcpSocket:
                  port: 3000
                timeoutSeconds: 1
              resources:
                requests:
                  cpu: 250m
                  memory: 750Mi
              volumeMounts:
                - mountPath: /var/lib/grafana
                  name: grafana-pv
          volumes:
            - name: grafana-pv
              persistentVolumeClaim:
                claimName: grafana-pvc
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: grafana
    spec:
      ports:
        - port: 3000
          protocol: TCP
          targetPort: http-grafana
      selector:
        app: grafana
      sessionAffinity: None
      type: LoadBalancer
    

    При необходимости измените:

    • Размер хранилища, отведенного для работы Grafana, в параметре spec.resources.requests.storage для kind: PersistentVolumeClaim.
    • Вычислительные ресурсы, выделяемые поду Grafana, в параметрах spec.containers.resources для kind: Deployment.
  2. Установите Grafana:

    kubectl apply -f grafana.yaml
    
  3. Убедитесь, что под Grafana перешел в состояние Running:

    kubectl get pods -l "app=grafana"
    

Настройте и проверьте работу GrafanaНастройте и проверьте работу Grafana

  1. Узнайте адрес, на котором доступен сервис Grafana, и перейдите по этому адресу:

    export GRAFANA_IP=$(kubectl get service/grafana -o jsonpath='{.status.loadBalancer.ingress[0].ip}') && \
    export GRAFANA_PORT=$(kubectl get service/grafana -o jsonpath='{.spec.ports[0].port}') && \
    echo http://$GRAFANA_IP:$GRAFANA_PORT
    

    Примечание

    Если ресурс недоступен по указанному URL, то убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.

  2. В открывшемся окне браузера введите логин и пароль admin/admin, после чего установите новый пароль для пользователя admin.

  3. Добавьте источник данных с типом Prometheus и следующими настройками:

    • Name — Prometheus.
    • URL — http://trickster:8480.
  4. Нажмите кнопку Save & test и убедитесь, что источник данных успешно подключен (Data source is working).

  5. Импортируйте дашборд Kubernetes Deployment Statefulset Daemonset metrics, содержащий основные метрики Kubernetes. Укажите идентификатор дашборда (8588) при импорте.

    Совет

    Для проверки сценария вы можете использовать любой подходящий дашборд из каталога Grafana.

  6. Откройте дашборд и убедитесь, что Grafana получает метрики от кластера Managed Service for Kubernetes.

Удалите созданные ресурсыУдалите созданные ресурсы

Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:

  1. Удалите кластер Managed Service for Kubernetes.
  2. Если вы зарезервировали для кластера Managed Service for Kubernetes публичный статический IP-адрес, удалите его.
  3. Удалите диск, который был создан для хранилища trickster. Определить его можно по метке в описании диска, метку можно узнать с помощью команды kubectl describe pvc trickster-pvc — она будет соответствовать значению в поле Volume.

Была ли статья полезна?

Предыдущая
Работа со снапшотами
Следующая
Мониторинг кластера Managed Service for Kubernetes с помощью Filebeat OSS
Проект Яндекса
© 2025 ООО «Яндекс.Облако»