AI-Ops Documentation

Русский English
  • Главная
  • Карта документации
0. С чего начать
  • Что это за продукт
  • Для кого он
  • Как устроена документация
  • Быстрые ссылки
  • Как начать разработку
  • Как найти нужный сервис
  • К кому идти по вопросам
1. Продукт
Обзор продукта
  • Миссия продукта
  • Ценность для бизнеса
  • Основные сценарии
  • Границы системы
Пользователи и персоны
  • Сегменты пользователей
  • Роли пользователей
  • Основные потребности
Пользовательские сценарии
  • Регистрация / логин
  • Основной пользовательский сценарий
  • Оплата / заказ / действие
  • Поддержка и сценарий восстановления
Функции продукта
Фича: Аутентификация
  • Цель
  • Пользовательская история
  • Бизнес-правила
  • Ограничения
  • Метрики успеха
  • Связанные сервисы
  • Связанные события / данные
  • Фича: Профиль
  • Фича: Организации
  • Фича: Топология
  • Фича: Вычислительные ресурсы
  • Фича: Кластеры
  • Фича: Каталог сервисов
Требования
  • Функциональные требования
  • Нефункциональные требования
  • Требования к производительности
  • Требования к безопасности
  • Конфиденциальность и соответствие
  • Доступность
Метрики
  • Ключевая метрика (North Star)
  • Продуктовые KPI
  • Метрики воронки
  • Метрики качества
  • Метрики экспериментов
2. Домены
Домен: Identity
  • Назначение
  • Основные концепции
  • Сущности
  • Бизнес-правила
  • Сервисы домена
  • Данные домена
  • Связанные фичи
  • Домен: Профиль пользователя
  • Домен: Поиск
  • Домен: Заказы / транзакции
  • Домен: Уведомления
  • Домен: Аналитика
  • Домен: Рекомендации
3. Архитектура
Обзор системы
  • Что входит в систему
  • Что не входит
  • Высокоуровневая диаграмма
C4 Model
  • Контекстная диаграмма
  • Диаграмма контейнеров
  • Диаграмма компонентов
  • Диаграмма развёртывания
Интеграционная архитектура
  • Внешние системы
  • Интеграции API
  • Webhooks
  • Сторонние провайдеры
Потоки данных
  • Онлайн-поток данных
  • Пакетный поток данных
  • Поток событий
  • Владение данными
Архитектура безопасности
  • Аутентификация
  • Авторизация
  • Управление секретами
  • Шифрование
  • Аудит и логирование
Надежность и масштабируемость
  • SLA / SLO
  • Планирование мощностей
  • Отказоустойчивость
  • Обратное давление и повторы
  • Восстановление после сбоев
Архитектурные принципы
  • Границы доменов
  • Принципы проектирования API
  • Принципы проектирования событий
  • Принципы контрактов данных
  • Диаграмма: auth микросервисы
Control plane
  • Архитектура компонентов (control plane)
  • Доменная модель v0
  • Протокол v0 (control plane)
  • Примеры (control plane)
Сервисы (control plane)
Сервис control plane
  • API
  • Модель данных
  • События
  • Модули
  • Операции
Сервис execution plane
  • API
  • Модель данных
  • События
  • Модули
  • Операции
Сервис resource catalog
  • API
  • Модель данных
  • События
  • Модули
  • Операции
4. Инженерия
Сервисы
Каталог сервисов
  • Все сервисы списком
  • Владельцы
  • Критичность
  • Уровень / домен / статус
  • Сервис аутентификации
  • Сервис аккаунтов
  • Облачный сервис
  • Сервис учётных данных
  • Herald
  • Сервис идентификации
  • API Gateway
  • Сервис токенов
Фронтенд
  • Обзор фронтенда
  • Структура приложения
  • Routing (фронтенд)
  • State management (фронтенд)
  • Design system (фронтенд)
  • UI components (фронтенд)
  • API контракты фронтенда
  • Обработка ошибок (фронтенд)
  • Performance (фронтенд)
  • Feature flags (фронтенд)
  • Тестирование фронтенда
Бэкенд
  • Обзор бэкенда
  • Паттерны сервисов
  • Рекомендации по API
  • Событийные паттерны
  • Паттерны доступа к БД
  • Кэширование
  • Асинхронные задачи и воркеры
  • Идемпотентность
  • Обработка ошибок
  • Тестирование бэкенда
Данные
  • Обзор данных
  • Системы-источники
  • Контракты данных
  • Каталог схем событий
  • Хранилище данных
  • Витрины данных
  • ETL / ELT-пайплайны
  • Качество данных
  • Происхождение данных
  • Политики хранения
  • Политики доступа
ML / DS
  • Обзор ML/DS
  • Сценарии (ML)
  • Каталог моделей
  • Feature store
  • Training pipelines
  • Inference pipelines
  • Offline evaluation
  • Online evaluation / A-B
  • Мониторинг (ML)
  • ML runbooks
QA / Качество
  • Стратегия качества
  • Пирамида тестов
  • Тестовые окружения
  • Тестовые данные
  • Ручное тестирование
  • Автоматизированное тестирование
  • Нагрузочное тестирование
  • Тестирование безопасности
  • Критерии приёмки релиза
  • Процесс разбора багов
5. Платформа
Инфраструктура
  • Ansible
  • WireGuard
  • Kubernetes
  • Longhorn
  • Ingress
  • PostgreSQL Cluster
  • Redis
  • Kafka
  • Vault
  • MinIO
  • Authentik
  • Monitoring
  • Logging
  • Tracing
  • Nexus
  • SonarQube
  • GlitchTip
  • GitLab Runner
  • Kubernetes Dashboard
  • OLM
  • Deploy
  • Internal DNS
  • Обзор (инфраструктура)
  • Config generator
  • Пример (инфраструктура)
  • Скрипты (инфраструктура)
Окружения
  • Локальное
  • Stage
  • Pre
  • Продакшен (prod)
  • Tech
  • Облако
  • Объектное хранилище
  • CI/CD
  • Секреты и сертификаты
Наблюдаемость
  • Логирование
  • Метрики
  • Трейсинг
  • Алертинг
  • Резервное копирование и восстановление
6. Разработка
  • Быстрый старт
  • Локальная настройка
  • Карта репозиториев
  • Стандарты кода
  • Git-процесс
  • Стратегия ветвления
  • Руководство по код-ревью
  • Критерии готовности
  • Процесс релиза
  • Флаги фич
  • FAQ разработчика
  • Миграция secure auth
7. Эксплуатация
  • Дежурство
  • Управление инцидентами
  • Уровни критичности
  • Политика эскалации
  • Постмортемы
  • Ранбуки
  • Управление изменениями
  • Непрерывность бизнеса
8. Аналитика
  • План трекинга событий
  • Определения KPI
  • Каталог дашбордов
  • Словарь метрик
  • Эксперименты
  • Стандарты отчётности
9. Управление
  • Решения (ADR)
  • Политика статуса контента
  • Changelog обновлений документации
Безопасность и соответствие
  • Модель угроз
  • Безопасная разработка
  • Управление доступом
  • Конфиденциальность
  • Реагирование на инциденты
Ответственность и владельцы
  • Команды
  • Зоны ответственности команд
  • Владельцы сервисов
  • Владельцы доменов
  • Контакты
Глоссарий
  • Бизнес-термины
  • Продуктовые термины
  • Технические термины
  • Сокращения

Index

Полноценная система мониторинга метрик Kubernetes-кластера с архитектурой: Prometheus Operator (scrape/rules) → remote_write → VictoriaMetrics (TSDB) → Grafana + Alertmanager с Telegram интеграцией.

Оглавление

  • Описание
  • Структура проекта
  • Архитектура
  • Быстрый старт
  • Команды
  • Конфигурация
  • Использование
  • Алерты
  • Dashboards
  • Troubleshooting
  • Best Practices

Описание

VictoriaMetrics - высокопроизводительная TSDB для долгосрочного хранения метрик.

Prometheus - система мониторинга и сбора метрик с поддержкой scraping и alerting.

Grafana - платформа визуализации и аналитики метрик.

Alertmanager - система управления алертами с поддержкой роутинга и группировки.

Возможности

  • ✅ Централизованный сбор метрик (opt-in через annotation prometheus.io/scrape: "true")
  • ✅ Долгосрочное хранение в VictoriaMetrics (90 дней retention)
  • ✅ Prometheus Operator для управления scraping (ServiceMonitor/PodMonitor)
  • ✅ Автоматические алерты для критичных событий кластера
  • ✅ Telegram интеграция для уведомлений
  • ✅ Grafana с pre-installed Kubernetes dashboards
  • ✅ kube-state-metrics для метрик состояния кластера
  • ✅ node-exporter для метрик хостов
  • ✅ Remote write из Prometheus в VictoriaMetrics
  • ✅ Single Binary режим VictoriaMetrics (простота развертывания)

Текущая конфигурация

  • Namespace: tech-monitoring
  • VictoriaMetrics: Single mode, 45Gi PVC, 90 дней retention
  • Prometheus: 2 часа локальный retention, remote_write в VictoriaMetrics, 8Gi PVC
  • Grafana: 8Gi PVC, admin/admin (изменить при первом входе)
  • Alertmanager: Telegram интеграция
  • Storage: Longhorn
  • Placement: Может размещаться на любых нодах (masters + workers)

Структура проекта

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
monitoring/
├── charts/                          # Helm values для компонентов
│   ├── victoria-metrics-single/
│   │   └── values.yaml
│   ├── kube-prometheus-stack/
│   │   └── values.yaml
│   └── grafana/
│       └── values.yaml
├── alerts/                          # ✨ Алерты (PrometheusRule)
│   ├── kubernetes-cluster-alerts.yaml
│   ├── monitoring-stack-alerts.yaml
│   └── README.md
├── manifests/                       # Kubernetes манифесты
│   ├── base/                        # Базовые манифесты (namespace, limits, quotas)
│   │   ├── namespace.yaml
│   │   ├── limitrange.yaml
│   │   ├── resourcequota.yaml
│   │   ├── storageclass.yaml
│   │   └── README.md
│   ├── monitors/             # ServiceMonitor и PodMonitor
│   │   ├── examples.yaml
│   │   └── README.md
│   ├── ingress/                     # Ingress для внешнего доступа
│   │   ├── grafana.yaml
│   │   ├── victoriametrics.yaml
│   │   ├── prometheus.yaml
│   │   ├── alertmanager.yaml
│   │   └── README.md
│   └── README.md
├── dashboards/                      # Grafana dashboards (JSON)
│   ├── kubernetes/                  # Kubernetes дашборды
│   ├── monitoring/                  # Мониторинг стека
│   ├── application/                 # Приложения
│   ├── infrastructure/              # Инфраструктура
│   └── README.md
├── scripts/                         # Утилиты
│   ├── create-telegram-secret.sh
│   └── import-dashboards.sh
├── helmfile-victoria-metrics.yaml
├── helmfile-prometheus.yaml
├── helmfile-grafana.yaml
├── Makefile
└── README.md

Организация файлов

alerts/ - все алерты (PrometheusRule), разделенные по категориям: - kubernetes-cluster-alerts.yaml - алерты для Kubernetes кластера - monitoring-stack-alerts.yaml - алерты для мониторинга - Ваши custom алерты можно добавлять сюда

manifests/ - все Kubernetes манифесты разделены по категориям: - base/ - базовые ресурсы (namespace, limits, quotas) - monitors/ - ServiceMonitor и PodMonitor для scraping метрик - ingress/ - Ingress для внешнего доступа

dashboards/ - Grafana dashboards в JSON формате, организованные по типам

charts/ - Helm values для кастомизации компонентов

scripts/ - вспомогательные скрипты для управления

Архитектура

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
┌────────────────────────────────────────────────────────────────────┐
│  Kubernetes Cluster                                                │
│                                                                    │
│  ┌──────────────────────────────────────────────────────────┐     │
│  │  Application Pods (with annotation)                      │     │
│  │  ├── Backend (prometheus.io/scrape: "true")             │     │
│  │  ├── Frontend (prometheus.io/scrape: "true")            │     │
│  │  └── Other Pod (no annotation - not scraped)            │     │
│  └────────────────┬─────────────────────────────────────────┘     │
│                   │ metrics                                        │
│  ┌────────────────▼─────────────────────────────────────────┐     │
│  │  tech-monitoring namespace                               │     │
│  │                                                           │     │
│  │  ┌──────────────────────────────────────────────┐        │     │
│  │  │  Prometheus (kube-prometheus-stack)          │        │     │
│  │  │  ├── Scrape (ServiceMonitor/PodMonitor)      │        │     │
│  │  │  ├── Rules evaluation                         │        │     │
│  │  │  ├── Local TSDB (2h retention)               │        │     │
│  │  │  └── Remote write → VictoriaMetrics          │        │     │
│  │  └────────────────┬─────────────────────────────┘        │     │
│  │                   │                                        │     │
│  │  ┌────────────────▼─────────────────────────────┐        │     │
│  │  │  Prometheus Operator                          │        │     │
│  │  │  ├── Manage Prometheus CRDs                   │        │     │
│  │  │  ├── ServiceMonitor discovery                 │        │     │
│  │  │  └── PrometheusRule management                │        │     │
│  │  └──────────────────────────────────────────────┘        │     │
│  │                                                           │     │
│  │  ┌──────────────────────────────────────────────┐        │     │
│  │  │  Exporters                                    │        │     │
│  │  │  ├── kube-state-metrics (K8s objects)         │        │     │
│  │  │  ├── node-exporter (host metrics)             │        │     │
│  │  │  └── CoreDNS, etcd, kubelet (system)          │        │     │
│  │  └──────────────────────────────────────────────┘        │     │
│  │                                                           │     │
│  │  ┌──────────────────────────────────────────────┐        │     │
│  │  │  VictoriaMetrics Single                       │        │     │
│  │  │  ├── Long-term TSDB (90d retention)           │        │     │
│  │  │  ├── 45Gi PVC (Longhorn)                      │        │     │
│  │  │  └── Prometheus-compatible query API          │        │     │
│  │  └────────────────┬─────────────────────────────┘        │     │
│  │                   │ query                                 │     │
│  │  ┌────────────────▼─────────────────────────────┐        │     │
│  │  │  Grafana                                      │        │     │
│  │  │  ├── DataSource: VictoriaMetrics              │        │     │
│  │  │  ├── Pre-installed Kubernetes dashboards      │        │     │
│  │  │  └── 8Gi PVC (Longhorn)                      │        │     │
│  │  └──────────────────────────────────────────────┘        │     │
│  │                                                           │     │
│  │  ┌──────────────────────────────────────────────┐        │     │
│  │  │  Alertmanager                                 │        │     │
│  │  │  ├── Receive alerts from Prometheus           │        │     │
│  │  │  ├── Group and route alerts                   │        │     │
│  │  │  └── Send to Telegram                         │        │     │
│  │  └────────────────┬─────────────────────────────┘        │     │
│  └────────────────────┼─────────────────────────────────────┘     │
└────────────────────────┼───────────────────────────────────────────┘
                         │
                         ▼
            ┌────────────────────────┐
            │  Telegram Bot          │
            │  (Alert notifications) │
            └────────────────────────┘

External Access (via Ingress + Authentik SSO):
  - grafana.internal.ai-ops.tech
  - victoriametrics.internal.ai-ops.tech
  - prometheus.internal.ai-ops.tech
  - alertmanager.internal.ai-ops.tech

Поток данных

  1. Сбор метрик: Prometheus scrapes метрики через ServiceMonitor/PodMonitor (opt-in)
  2. Обогащение: Kubernetes metadata добавляется автоматически
  3. Локальное хранение: Prometheus хранит метрики локально 2 часа
  4. Remote write: Метрики отправляются в VictoriaMetrics для долгосрочного хранения
  5. Evaluation: Prometheus проверяет rules и генерирует алерты
  6. Алертинг: Alertmanager получает алерты и отправляет в Telegram
  7. Визуализация: Grafana запрашивает метрики из VictoriaMetrics
  8. Хранение: VictoriaMetrics хранит метрики 90 дней

Быстрый старт

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

  1. Longhorn (для persistent storage)
  2. Подготовленные ноды (labels и taints)

1. Подготовка инфраструктуры

1
2
3
4
5
6
# Установка Longhorn (если еще не установлен)
cd infra/k8s
make longhorn-install-all

# Подготовка нод
cd ../.. && make k8s-prepare-nodes

2. Установка Prometheus Stack

1
2
cd infra/k8s
make monitoring-install-prometheus

Это установит: - Namespace tech-monitoring - LimitRange и ResourceQuota - StorageClass longhorn-monitoring - Prometheus Operator (устанавливает CRD для ServiceMonitor, PodMonitor, PrometheusRule) - Prometheus с remote_write в VictoriaMetrics - Alertmanager - kube-state-metrics - node-exporter - PrometheusRule с базовыми алертами

Важно: Prometheus должен быть установлен первым, так как он устанавливает CRD (Custom Resource Definitions), которые требуются для VictoriaMetrics (ServiceMonitor).

3. Установка VictoriaMetrics

1
make monitoring-install-victoria-metrics

Это установит: - VictoriaMetrics Single через Helm - ServiceMonitor для self-monitoring (требует Prometheus Operator CRD)

4. Создание Telegram secret

1
make monitoring-create-telegram-secret

Следуйте инструкциям для создания Telegram бота:

  1. Откройте Telegram и найдите @BotFather
  2. Отправьте /newbot и следуйте инструкциям
  3. Скопируйте bot token (формат: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
  4. Добавьте бота в группу
  5. Получите chat ID:
  6. Отправьте сообщение боту в группе
  7. Откройте: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
  8. Найдите "chat":{"id":-1001234567890} в ответе
  9. Используйте отрицательное число для группового чата

5. Установка Grafana

1
make monitoring-install-grafana

Это установит Grafana с: - Datasource VictoriaMetrics (по умолчанию) - Datasource Prometheus (дополнительно) - Pre-installed Kubernetes dashboards

6. Применение Ingress

1
kubectl apply -f monitoring/manifests/ingress/

7. Проверка статуса

1
make monitoring-status

Ожидаемый результат: - VictoriaMetrics pod в состоянии Running - Prometheus pod в состоянии Running - Alertmanager pod в состоянии Running - Grafana pod в состоянии Running - kube-state-metrics и node-exporter pods в Running - PVCs в состоянии Bound

8. Доступ к компонентам

Через ingress (с Authentik SSO): - Grafana: https://grafana.internal.ai-ops.tech - VictoriaMetrics: https://victoriametrics.internal.ai-ops.tech - Prometheus: https://prometheus.internal.ai-ops.tech - Alertmanager: https://alertmanager.internal.ai-ops.tech

Через port-forward (локальный доступ):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Grafana
make monitoring-port-forward-grafana
# http://localhost:3000 (admin/admin)

# VictoriaMetrics
make monitoring-port-forward-vm
# http://localhost:8428

# Prometheus
make monitoring-port-forward-prometheus
# http://localhost:9090

# Alertmanager
make monitoring-port-forward-alertmanager
# http://localhost:9093

Команды

Установка и обновление

1
2
3
4
5
6
7
8
make monitoring-install-all                # Полная установка стека
make monitoring-install-victoria-metrics   # Только VictoriaMetrics
make monitoring-install-prometheus         # Только Prometheus stack
make monitoring-install-grafana            # Только Grafana

make monitoring-update-victoria-metrics    # Обновление VictoriaMetrics
make monitoring-update-prometheus          # Обновление Prometheus
make monitoring-update-grafana             # Обновление Grafana

Управление секретами

1
make monitoring-create-telegram-secret     # Создание Telegram secret (интерактивно)

Мониторинг и отладка

1
2
3
4
5
make monitoring-status                     # Статус всего стека
make monitoring-logs-victoria-metrics      # Логи VictoriaMetrics
make monitoring-logs-prometheus            # Логи Prometheus
make monitoring-logs-alertmanager          # Логи Alertmanager
make monitoring-logs-grafana               # Логи Grafana

Доступ к компонентам

1
2
3
4
make monitoring-port-forward-grafana       # Port-forward Grafana (localhost:3000)
make monitoring-port-forward-vm            # Port-forward VictoriaMetrics (localhost:8428)
make monitoring-port-forward-prometheus    # Port-forward Prometheus (localhost:9090)
make monitoring-port-forward-alertmanager  # Port-forward Alertmanager (localhost:9093)

Тестирование

1
2
3
make monitoring-test-scrape                # Проверка scrape targets
make monitoring-test-remote-write          # Проверка remote_write в VM
make monitoring-test-alerts                # Отправка тестового алерта

Дашборды

1
2
3
make monitoring-import-dashboards          # Показать инструкцию по импорту
# Или напрямую:
bash monitoring/scripts/import-dashboards.sh 7249  # Kubernetes Cluster Monitoring

Удаление

1
make monitoring-uninstall                  # Удаление стека (УДАЛЯЕТ ДАННЫЕ!)

Справка

1
make monitoring-help                       # Справка по командам

Конфигурация

VictoriaMetrics Single

Конфигурация в charts/victoria-metrics-single/values.yaml:

Storage: - PVC: 45Gi (Longhorn) - Retention: 90 дней - Storage path: /storage

Resources: - Requests: 1000m CPU, 2Gi RAM - Limits: 2000m CPU, 4Gi RAM

Limits: - Memory: 80% от доступной - Max query duration: 30s - Max concurrent requests: 16 - Max labels per timeseries: 30

ServiceMonitor: - Enabled для self-monitoring - Interval: 30s

Prometheus (kube-prometheus-stack)

Конфигурация в charts/kube-prometheus-stack/values.yaml:

Storage: - PVC: 8Gi (Longhorn) - Local retention: 2 часа - Retention size: 9GB

Resources: - Requests: 500m CPU, 1Gi RAM - Limits: 2000m CPU, 4Gi RAM

Remote Write: - URL: http://vm-victoria-metrics-single-vm.tech-monitoring.svc.cluster.local:8428/api/v1/write - Max samples per send: 10000 - Max shards: 30 - Capacity: 50000

Scraping: - Interval: 30s - Timeout: 10s - Evaluation interval: 30s

Selectors (opt-in approach): - ServiceMonitor: prometheus: monitoring label - PodMonitor: prometheus: monitoring label - PrometheusRule: prometheus: monitoring label

Additional Scrape Configs: - Kubernetes pods с annotation prometheus.io/scrape: "true" - Автоматическое определение порта из prometheus.io/port - Автоматическое определение path из prometheus.io/path

Alertmanager

Конфигурация в charts/kube-prometheus-stack/values.yaml:

Storage: - PVC: 5Gi (Longhorn)

Resources: - Requests: 100m CPU, 128Mi RAM - Limits: 500m CPU, 512Mi RAM

Routing: - Group by: alertname, cluster, service, namespace - Group wait: 10s - Group interval: 10s - Repeat interval: 12h - Receiver: telegram

Telegram Integration: - Secret: alertmanager-telegram-secret - Bot token: из secret bot_token - Chat ID: из secret chat_id - Parse mode: HTML

Message Template:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
🔥 ALERT FIRING / ✅ RESOLVED

Alert: {{ .GroupLabels.alertname }}
Cluster: {{ .GroupLabels.cluster }}
Namespace: {{ .GroupLabels.namespace }}
Severity: {{ .CommonLabels.severity }}

Summary: {{ .CommonAnnotations.summary }}
Description: {{ .CommonAnnotations.description }}

Details:
- {{ .Labels.instance }}: {{ .Annotations.message }}

Grafana

Конфигурация в charts/grafana/values.yaml:

Storage: - PVC: 8Gi (Longhorn)

Resources: - Requests: 250m CPU, 512Mi RAM - Limits: 1000m CPU, 1Gi RAM

Credentials: - Admin user: admin - Admin password: admin (изменить при первом входе)

Datasources:

  1. VictoriaMetrics (по умолчанию):
  2. Type: Prometheus
  3. URL: http://vm-victoria-metrics-single-vm.tech-monitoring.svc.cluster.local:8428
  4. Interval: 30s

  5. Prometheus (дополнительно):

  6. Type: Prometheus
  7. URL: http://kube-prometheus-stack-prometheus.tech-monitoring.svc.cluster.local:9090
  8. Interval: 30s

Pre-installed Dashboards:

Dashboard ID Description
Kubernetes Cluster Monitoring 7249 Общий мониторинг кластера
Kubernetes Pod Monitoring 6417 Мониторинг подов
Node Exporter Full 1860 Детальные метрики хостов
Prometheus Stats 2 Статистика Prometheus
VictoriaMetrics Stats 10229 Статистика VictoriaMetrics
Alertmanager 9578 Alertmanager dashboard

Plugins: - grafana-piechart-panel - grafana-clock-panel - grafana-simple-json-datasource

Использование

Включение сбора метрик для подов (Opt-in)

По умолчанию метрики не собираются. Для включения сбора метрик добавьте annotation на под:

Через Deployment:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-backend
spec:
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"     # Включить сбор метрик
        prometheus.io/port: "9090"       # Порт метрик (default: 9090)
        prometheus.io/path: "/metrics"   # Путь метрик (default: /metrics)
    spec:
      containers:
      - name: backend
        image: my-backend:latest
        ports:
        - name: metrics
          containerPort: 9090

Через kubectl:

1
2
kubectl annotate pod <pod-name> prometheus.io/scrape="true"
kubectl annotate deployment <deployment-name> prometheus.io/scrape="true"

ServiceMonitor для Service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-backend
  namespace: tech-monitoring
  labels:
    prometheus: monitoring  # ОБЯЗАТЕЛЬНЫЙ label для discovery
spec:
  selector:
    matchLabels:
      app: my-backend
  namespaceSelector:
    matchNames:
      - default  # Или ваш namespace
  endpoints:
    - port: metrics  # Имя порта в Service
      interval: 30s
      path: /metrics

PodMonitor для Pods

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: my-app
  namespace: tech-monitoring
  labels:
    prometheus: monitoring  # ОБЯЗАТЕЛЬНЫЙ label для discovery
spec:
  selector:
    matchLabels:
      app: my-app
  namespaceSelector:
    matchNames:
      - default
  podMetricsEndpoints:
    - port: metrics
      interval: 30s
      path: /metrics

Проверка scrape targets

1
2
3
4
5
6
# Через port-forward
make monitoring-port-forward-prometheus
# Откройте http://localhost:9090/targets

# Или через kubectl
kubectl -n tech-monitoring port-forward svc/kube-prometheus-stack-prometheus 9090:9090

Алерты

Встроенные алерты

Все алерты определены в manifests/prometheusrule-basic-alerts.yaml:

Node Alerts: - NodeNotReady - нода недоступна (5 min) - NodeMemoryPressure - давление памяти на ноде (5 min) - NodeDiskPressure - давление диска на ноде (5 min)

Pod Alerts: - PodCrashLoopBackOff - под в crash loop (5 min) - PodNotReady - под не готов (10 min)

Storage Alerts: - PVCNearlyFull - PVC заполнен >85% (5 min) - PVCFull - PVC заполнен >95% (1 min)

Kubernetes API Alerts: - KubeAPIDown - Kubernetes API недоступен (5 min) - KubeAPIErrorRate - высокий процент ошибок API >5% (5 min)

etcd Alerts: - etcdDown - etcd недоступен (5 min)

Monitoring Stack Alerts: - PrometheusRemoteWriteFailing - проблемы с remote_write (5 min) - PrometheusRemoteWriteQueueFull - очередь remote_write заполнена (5 min) - PrometheusConfigReloadFailed - ошибка перезагрузки конфигурации (5 min) - AlertmanagerDown - Alertmanager недоступен (5 min) - AlertmanagerConfigReloadFailed - ошибка перезагрузки конфигурации (5 min) - VictoriaMetricsDown - VictoriaMetrics недоступен (5 min)

Добавление custom алертов

Создайте новый PrometheusRule:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: custom-alerts
  namespace: tech-monitoring
  labels:
    prometheus: monitoring  # ОБЯЗАТЕЛЬНЫЙ label
spec:
  groups:
    - name: custom
      interval: 30s
      rules:
        - alert: HighMemoryUsage
          expr: container_memory_usage_bytes{container!=""} / container_spec_memory_limit_bytes{container!=""} > 0.9
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "High memory usage in {{ $labels.namespace }}/{{ $labels.pod }}"
            description: "Container {{ $labels.container }} is using {{ $value | humanizePercentage }} of its memory limit"

Применить:

1
kubectl apply -f custom-alerts.yaml

Тестирование алертов

Для тестирования алертов выполните команду в поде Alertmanager:

1
2
3
4
5
# 1. Подключитесь к поду Alertmanager
kubectl -n tech-monitoring exec -it <alertmanager-pod-name> -c alertmanager -- sh

# 2. В поде выполните команду (замените дату на текущую)
wget -qO- --post-data='[{"labels":{"alertname":"TestAlert","severity":"warning","cluster":"ai-ops","namespace":"tech-monitoring","service":"test"},"annotations":{"summary":"Test alert from monitoring stack","description":"This is a test alert to verify Telegram integration","message":"Test alert message"},"startsAt":"2025-12-24T12:00:00.000Z"}]' --header='Content-Type: application/json' http://localhost:9093/api/v2/alerts

Вы должны получить уведомление в Telegram.

Dashboards

Pre-installed Dashboards

При установке Grafana автоматически импортируются следующие дашборды:

  1. Kubernetes Cluster Monitoring (7249)
  2. Общий обзор кластера
  3. CPU, Memory, Network, Disk usage
  4. Pods, Containers, Nodes status

  5. Kubernetes Pod Monitoring (6417)

  6. Детальные метрики подов
  7. Container resources
  8. Pod networking

  9. Node Exporter Full (1860)

  10. Детальные метрики хостов
  11. CPU, Memory, Disk, Network
  12. Filesystem, Load average

  13. Prometheus Stats (2)

  14. Статистика Prometheus
  15. Scrape metrics, TSDB stats
  16. Remote write metrics

  17. VictoriaMetrics Stats (10229)

  18. Статистика VictoriaMetrics
  19. Ingestion rate, Storage size
  20. Query performance

  21. Alertmanager (9578)

  22. Alertmanager dashboard
  23. Active alerts, Silences
  24. Notification stats

Импорт дополнительных дашбордов

Через скрипт:

1
2
3
4
5
6
7
# Импорт по ID с grafana.com
bash monitoring/scripts/import-dashboards.sh <dashboard_id>

# Примеры:
bash monitoring/scripts/import-dashboards.sh 315   # Kubernetes Cluster Monitoring (via Prometheus)
bash monitoring/scripts/import-dashboards.sh 8588  # Kubernetes Deployment Statefulset Daemonset metrics
bash monitoring/scripts/import-dashboards.sh 12114 # Kubernetes / Networking / Cluster

Через Grafana UI:

  1. Откройте Grafana: https://grafana.internal.ai-ops.tech
  2. Войдите (admin/admin)
  3. Нажмите "+" → "Import"
  4. Введите ID дашборда с grafana.com или загрузите JSON
  5. Выберите datasource: VictoriaMetrics
  6. Нажмите "Import"

Популярные Kubernetes дашборды: - 7249 - Kubernetes Cluster Monitoring - 315 - Kubernetes Cluster Monitoring (via Prometheus) - 1860 - Node Exporter Full - 6417 - Kubernetes Cluster (Prometheus) - 8588 - Kubernetes Deployment Statefulset Daemonset metrics - 10856 - Kubernetes / Views / Pods - 12114 - Kubernetes / Networking / Cluster

Создание custom dashboards

  1. Откройте Grafana
  2. Нажмите "+" → "Dashboard"
  3. Add panel
  4. Выберите datasource: VictoriaMetrics
  5. Напишите PromQL query
  6. Настройте визуализацию
  7. Save dashboard

Пример PromQL queries:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# CPU usage по подам
sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (namespace, pod)

# Memory usage по подам
sum(container_memory_usage_bytes{container!=""}) by (namespace, pod)

# Network traffic
sum(rate(container_network_receive_bytes_total[5m])) by (namespace, pod)

# Pod restarts
sum(kube_pod_container_status_restarts_total) by (namespace, pod)

# PVC usage
kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes * 100

Troubleshooting

VictoriaMetrics не запускается

Проблема: Pod в состоянии CrashLoopBackOff или Pending

Решение:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Проверка логов
make monitoring-logs-victoria-metrics

# Частые причины:
# 1. Недостаточно ресурсов на нодах
kubectl describe pod -n tech-monitoring -l app.kubernetes.io/name=victoria-metrics-single

# 2. PVC не может быть создан (Longhorn не установлен)
kubectl -n tech-monitoring get pvc

# 3. Неверные права доступа
kubectl -n tech-monitoring describe pod <vm-pod-name>

Prometheus не scrapes метрики

Проблема: Targets не появляются в Prometheus

Решение:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Проверка ServiceMonitor/PodMonitor
kubectl -n tech-monitoring get servicemonitor
kubectl -n tech-monitoring get podmonitor

# ServiceMonitor/PodMonitor должны иметь label "prometheus: monitoring"
kubectl -n tech-monitoring describe servicemonitor <name>

# Проверка подов с annotation
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.metadata.annotations.prometheus\.io/scrape}{"\n"}{end}' | grep true

# Проверка Prometheus targets
make monitoring-port-forward-prometheus
# Откройте http://localhost:9090/targets

Remote write в VictoriaMetrics не работает

Проблема: Метрики не записываются в VictoriaMetrics

Решение:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Проверка Prometheus logs
make monitoring-logs-prometheus

# Проверка метрик remote write
make monitoring-test-remote-write

# Проверка VictoriaMetrics
make monitoring-port-forward-vm
# Откройте http://localhost:8428/vmui

# Проверка connectivity
kubectl -n tech-monitoring exec -it <prometheus-pod> -c prometheus -- wget -O- http://vm-victoria-metrics-single-vm:8428/health

Alertmanager не отправляет в Telegram

Проблема: Алерты не приходят в Telegram

Решение:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Проверка secret
kubectl -n tech-monitoring get secret alertmanager-telegram-secret
kubectl -n tech-monitoring describe secret alertmanager-telegram-secret

# Проверка Alertmanager logs
make monitoring-logs-alertmanager

# Проверка Alertmanager config
kubectl -n tech-monitoring get secret alertmanager-kube-prometheus-stack-alertmanager-generated -o yaml

# Перезапуск Alertmanager после обновления secret
# Вариант 1: Попробовать разные label selectors (в зависимости от версии чарта)
kubectl rollout restart statefulset -n tech-monitoring -l app.kubernetes.io/name=alertmanager
kubectl rollout restart statefulset -n tech-monitoring -l app=alertmanager
kubectl rollout restart deployment -n tech-monitoring -l app.kubernetes.io/name=alertmanager

# Вариант 2: Найти Alertmanager ресурс вручную
kubectl get statefulset,deployment -n tech-monitoring | grep alertmanager

# Вариант 3: Использовать найденное имя напрямую (примеры для разных версий)
# Для kube-prometheus-stack < 60.0:
# kubectl rollout restart statefulset -n tech-monitoring alertmanager-kube-prometheus-stack-alertmanager
# Для kube-prometheus-stack >= 60.0:
kubectl rollout restart statefulset -n tech-monitoring kube-prometheus-stack-alertmanager

# Тестовый алерт
make monitoring-test-alerts

Grafana не показывает метрики

Проблема: Дашборды пустые или "No data"

Решение:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Проверка datasource
# Откройте Grafana → Configuration → Data sources → VictoriaMetrics
# Нажмите "Test" - должен быть "Data source is working"

# Проверка connectivity
kubectl -n tech-monitoring exec -it <grafana-pod> -- wget -O- http://vm-victoria-metrics-single-vm:8428/health

# Проверка метрик в VictoriaMetrics
make monitoring-port-forward-vm
# Откройте http://localhost:8428/vmui
# Выполните query: up

# Проверка Grafana logs
make monitoring-logs-grafana

High cardinality metrics

Проблема: Prometheus медленно работает или падает с "too many series"

Решение:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Проверка количества series
make monitoring-port-forward-prometheus
# Откройте http://localhost:9090/tsdb-status

# Проверка top metrics
# В Prometheus UI → Graph → выполните:
topk(10, count by (__name__)({__name__!=""}))

# Если слишком много series:
# 1. Не используйте в labels: user_id, request_id, trace_id, session_id
# 2. Используйте только low-cardinality labels: namespace, pod, container, node
# 3. Динамические значения ищите в содержимом метрик, а не в labels

PVC Nearly Full

Проблема: PVC заполнены на >85%

Решение:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Проверка PVC
kubectl -n tech-monitoring get pvc

# Проверка использования внутри пода
kubectl -n tech-monitoring exec <vm-pod> -- df -h /storage
kubectl -n tech-monitoring exec <prometheus-pod> -c prometheus -- df -h /prometheus

# Решение:
# 1. Увеличить retention period (уменьшить срок хранения)
# 2. Увеличить размер PVC (Longhorn поддерживает volume expansion)
kubectl -n tech-monitoring edit pvc <pvc-name>
# Увеличьте spec.resources.requests.storage

# 3. Проверить, что compaction работает (для VictoriaMetrics)
make monitoring-logs-victoria-metrics | grep compact

Best Practices

Opt-in подход для scraping

Система использует opt-in подход: метрики собираются только с подов/сервисов, у которых явно указана annotation или создан ServiceMonitor/PodMonitor.

Преимущества: - ✅ Безопасность: не собираем лишние метрики - ✅ Экономия ресурсов: меньше метрик → меньше CPU/памяти/хранилища - ✅ Контроль: явно видно, что мониторится - ✅ Низкая cardinality: меньше series в Prometheus/VictoriaMetrics

Рекомендации: - Добавляйте annotation на все важные production сервисы - Используйте для всех пользовательских приложений - Не добавляйте для системных подов (они уже мониторятся через ServiceMonitor) - Можно добавить через Helm values или Kustomize patches

Labels

✅ DO: Используйте low-cardinality labels

1
{namespace="production", container="api", node="worker-1"}

❌ DON'T: Не используйте high-cardinality labels

1
2
3
4
5
6
7
8
# ПЛОХО: pod_id меняется при каждом рестарте
{pod_id="abc123"}

# ПЛОХО: request_id уникален для каждого запроса
{request_id="req-xyz"}

# ПЛОХО: user_id создает миллионы series
{user_id="12345"}

Правило: Если значение label может иметь > 1000 уникальных значений, не используйте его как label.

Queries

✅ DO: Фильтруйте по labels сначала

1
rate(http_requests_total{namespace="production", service="api"}[5m])

❌ DON'T: Не сканируйте все метрики

1
rate(http_requests_total[5m])  # Очень медленно!

✅ DO: Используйте разумные временные диапазоны

1
rate(http_requests_total{namespace="production"}[5m])

❌ DON'T: Не запрашивайте слишком большие диапазоны

1
rate(http_requests_total{namespace="production"}[7d])  # Очень медленно!

Retention

✅ DO: Настройте retention в соответствии с требованиями

Текущий retention: - Prometheus: 2 часа (короткосрочное хранение) - VictoriaMetrics: 90 дней (долгосрочное хранение)

Для изменения отредактируйте: - Prometheus: charts/kube-prometheus-stack/values.yaml → prometheus.prometheusSpec.retention - VictoriaMetrics: charts/victoria-metrics-single/values.yaml → server.retentionPeriod

✅ DO: Мониторьте использование PVC

1
2
kubectl -n tech-monitoring get pvc
kubectl -n tech-monitoring exec <vm-pod> -- df -h /storage

Алертинг

✅ DO: Настройте алерты только для критичных событий

Текущие алерты уже настроены "без шума": - NodeNotReady (5 min) - PodCrashLoopBackOff (5 min) - PVCNearlyFull (85%, 5 min) - KubeAPIDown (5 min)

❌ DON'T: Не создавайте алерты на все подряд

Избегайте: - Алерты на warning события (только critical/error) - Алерты с короткими for: периодами (<5 min) - Алерты на метрики с высокой волатильностью

✅ DO: Группируйте алерты

Alertmanager автоматически группирует алерты по: - alertname - cluster - service - namespace

✅ DO: Используйте severity labels

1
2
labels:
  severity: critical  # critical, warning, info

Производительность

✅ DO: Используйте recording rules для часто запрашиваемых queries

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: recording-rules
  namespace: tech-monitoring
  labels:
    prometheus: monitoring
spec:
  groups:
    - name: recording
      interval: 30s
      rules:
        - record: namespace:pod_cpu_usage:sum
          expr: sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (namespace, pod)

✅ DO: Используйте VictoriaMetrics для долгосрочных запросов

VictoriaMetrics оптимизирован для долгосрочного хранения и быстрых запросов.

✅ DO: Ограничивайте количество одновременных queries

Настроено в VictoriaMetrics: - search.maxConcurrentRequests: 16 - search.maxQueryDuration: 30s

Интеграция с другими системами

Loki (Logs)

Если у вас установлен Loki (из папки logging), вы можете добавить его как datasource в Grafana:

1
2
3
4
5
6
7
# Добавьте в charts/grafana/values.yaml → datasources
- name: Loki
  type: loki
  access: proxy
  url: http://loki-gateway.tech-logging.svc.cluster.local
  jsonData:
    maxLines: 1000

Затем обновите Grafana:

1
make monitoring-update-grafana

Tracing (Tempo/Jaeger)

Если планируете добавить трейсинг, добавьте datasource:

1
2
3
4
- name: Tempo
  type: tempo
  access: proxy
  url: http://tempo.tech-tracing.svc.cluster.local:3100

Application Metrics

Для ваших приложений:

  1. Экспортируйте метрики в формате Prometheus (порт 9090, endpoint /metrics)
  2. Добавьте annotation на Deployment/Pod:
1
2
3
4
annotations:
  prometheus.io/scrape: "true"
  prometheus.io/port: "9090"
  prometheus.io/path: "/metrics"
  1. Или создайте ServiceMonitor (рекомендуется для production):
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-app
  namespace: tech-monitoring
  labels:
    prometheus: monitoring
spec:
  selector:
    matchLabels:
      app: my-app
  endpoints:
    - port: metrics
      interval: 30s

Дополнительные ресурсы

  • VictoriaMetrics Documentation
  • Prometheus Documentation
  • Grafana Documentation
  • Prometheus Operator Documentation
  • PromQL Tutorial
  • Grafana Dashboards

← Назад к главной документации

Меню
Главная Карта документации
0. С чего начать
С чего начать Что это за продукт Для кого он Как устроена документация Быстрые ссылки Как начать разработку Как найти нужный сервис К кому идти по вопросам
1. Продукт
Продукт
2. Домены
Домены Домен: Профиль пользователя Домен: Поиск Домен: Заказы / транзакции Домен: Уведомления Домен: Аналитика Домен: Рекомендации
3. Архитектура
Архитектура Диаграмма: auth микросервисы
4. Инженерия
Инженерия
5. Платформа
Платформа Облако Объектное хранилище CI/CD Секреты и сертификаты Резервное копирование и восстановление
6. Разработка
Разработка Быстрый старт Локальная настройка Карта репозиториев Стандарты кода Git-процесс Стратегия ветвления Руководство по код-ревью Критерии готовности Процесс релиза Флаги фич FAQ разработчика Миграция secure auth
7. Эксплуатация
Эксплуатация Дежурство Управление инцидентами Уровни критичности Политика эскалации Постмортемы Ранбуки Управление изменениями Непрерывность бизнеса
8. Аналитика
Аналитика План трекинга событий Определения KPI Каталог дашбордов Словарь метрик Эксперименты Стандарты отчётности
9. Управление
Управление Решения (ADR) Политика статуса контента Changelog обновлений документации

На странице

Оглавление Описание Возможности Текущая конфигурация Структура проекта Организация файлов Архитектура Поток данных Быстрый старт Предварительные требования 1. Подготовка инфраструктуры 2. Установка Prometheus Stack 3. Установка VictoriaMetrics 4. Создание Telegram secret 5. Установка Grafana 6. Применение Ingress 7. Проверка статуса 8. Доступ к компонентам Команды Установка и обновление Управление секретами Мониторинг и отладка Доступ к компонентам Тестирование Дашборды Удаление Справка Конфигурация VictoriaMetrics Single Prometheus (kube-prometheus-stack) Alertmanager Grafana Использование Включение сбора метрик для подов (Opt-in) ServiceMonitor для Service PodMonitor для Pods Проверка scrape targets Алерты Встроенные алерты Добавление custom алертов Тестирование алертов Dashboards Pre-installed Dashboards Импорт дополнительных дашбордов Создание custom dashboards Troubleshooting VictoriaMetrics не запускается Prometheus не scrapes метрики Remote write в VictoriaMetrics не работает Alertmanager не отправляет в Telegram Grafana не показывает метрики High cardinality metrics PVC Nearly Full Best Practices Opt-in подход для scraping Labels Queries Retention Алертинг Производительность Интеграция с другими системами Loki (Logs) Tracing (Tempo/Jaeger) Application Metrics Дополнительные ресурсы