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 | |
Организация файлов
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 | |
Поток данных
- Сбор метрик: Prometheus scrapes метрики через ServiceMonitor/PodMonitor (opt-in)
- Обогащение: Kubernetes metadata добавляется автоматически
- Локальное хранение: Prometheus хранит метрики локально 2 часа
- Remote write: Метрики отправляются в VictoriaMetrics для долгосрочного хранения
- Evaluation: Prometheus проверяет rules и генерирует алерты
- Алертинг: Alertmanager получает алерты и отправляет в Telegram
- Визуализация: Grafana запрашивает метрики из VictoriaMetrics
- Хранение: VictoriaMetrics хранит метрики 90 дней
Быстрый старт
Предварительные требования
- Longhorn (для persistent storage)
- Подготовленные ноды (labels и taints)
1. Подготовка инфраструктуры
1 2 3 4 5 6 | |
2. Установка Prometheus Stack
1 2 | |
Это установит:
- 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 | |
Это установит: - VictoriaMetrics Single через Helm - ServiceMonitor для self-monitoring (требует Prometheus Operator CRD)
4. Создание Telegram secret
1 | |
Следуйте инструкциям для создания Telegram бота:
- Откройте Telegram и найдите @BotFather
- Отправьте
/newbotи следуйте инструкциям - Скопируйте bot token (формат:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz) - Добавьте бота в группу
- Получите chat ID:
- Отправьте сообщение боту в группе
- Откройте:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates - Найдите
"chat":{"id":-1001234567890}в ответе - Используйте отрицательное число для группового чата
5. Установка Grafana
1 | |
Это установит Grafana с: - Datasource VictoriaMetrics (по умолчанию) - Datasource Prometheus (дополнительно) - Pre-installed Kubernetes dashboards
6. Применение Ingress
1 | |
7. Проверка статуса
1 | |
Ожидаемый результат:
- 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 | |
Команды
Установка и обновление
1 2 3 4 5 6 7 8 | |
Управление секретами
1 | |
Мониторинг и отладка
1 2 3 4 5 | |
Доступ к компонентам
1 2 3 4 | |
Тестирование
1 2 3 | |
Дашборды
1 2 3 | |
Удаление
1 | |
Справка
1 | |
Конфигурация
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 | |
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:
- VictoriaMetrics (по умолчанию):
- Type: Prometheus
- URL:
http://vm-victoria-metrics-single-vm.tech-monitoring.svc.cluster.local:8428 -
Interval: 30s
-
Prometheus (дополнительно):
- Type: Prometheus
- URL:
http://kube-prometheus-stack-prometheus.tech-monitoring.svc.cluster.local:9090 - 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 | |
Через kubectl:
1 2 | |
ServiceMonitor для Service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
PodMonitor для Pods
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Проверка scrape targets
1 2 3 4 5 6 | |
Алерты
Встроенные алерты
Все алерты определены в 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 | |
Применить:
1 | |
Тестирование алертов
Для тестирования алертов выполните команду в поде Alertmanager:
1 2 3 4 5 | |
Вы должны получить уведомление в Telegram.
Dashboards
Pre-installed Dashboards
При установке Grafana автоматически импортируются следующие дашборды:
- Kubernetes Cluster Monitoring (7249)
- Общий обзор кластера
- CPU, Memory, Network, Disk usage
-
Pods, Containers, Nodes status
-
Kubernetes Pod Monitoring (6417)
- Детальные метрики подов
- Container resources
-
Pod networking
-
Node Exporter Full (1860)
- Детальные метрики хостов
- CPU, Memory, Disk, Network
-
Filesystem, Load average
-
Prometheus Stats (2)
- Статистика Prometheus
- Scrape metrics, TSDB stats
-
Remote write metrics
-
VictoriaMetrics Stats (10229)
- Статистика VictoriaMetrics
- Ingestion rate, Storage size
-
Query performance
-
Alertmanager (9578)
- Alertmanager dashboard
- Active alerts, Silences
- Notification stats
Импорт дополнительных дашбордов
Через скрипт:
1 2 3 4 5 6 7 | |
Через Grafana UI:
- Откройте Grafana: https://grafana.internal.ai-ops.tech
- Войдите (admin/admin)
- Нажмите "+" → "Import"
- Введите ID дашборда с grafana.com или загрузите JSON
- Выберите datasource: VictoriaMetrics
- Нажмите "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
- Откройте Grafana
- Нажмите "+" → "Dashboard"
- Add panel
- Выберите datasource: VictoriaMetrics
- Напишите PromQL query
- Настройте визуализацию
- Save dashboard
Пример PromQL queries:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Troubleshooting
VictoriaMetrics не запускается
Проблема: Pod в состоянии CrashLoopBackOff или Pending
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 | |
Prometheus не scrapes метрики
Проблема: Targets не появляются в Prometheus
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Remote write в VictoriaMetrics не работает
Проблема: Метрики не записываются в VictoriaMetrics
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 | |
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 | |
Grafana не показывает метрики
Проблема: Дашборды пустые или "No data"
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
High cardinality metrics
Проблема: Prometheus медленно работает или падает с "too many series"
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 | |
PVC Nearly Full
Проблема: PVC заполнены на >85%
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
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 | |
❌ DON'T: Не используйте high-cardinality labels
1 2 3 4 5 6 7 8 | |
Правило: Если значение label может иметь > 1000 уникальных значений, не используйте его как label.
Queries
✅ DO: Фильтруйте по labels сначала
1 | |
❌ DON'T: Не сканируйте все метрики
1 | |
✅ DO: Используйте разумные временные диапазоны
1 | |
❌ DON'T: Не запрашивайте слишком большие диапазоны
1 | |
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 | |
Алертинг
✅ 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 | |
Производительность
✅ DO: Используйте recording rules для часто запрашиваемых queries
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
✅ 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 | |
Затем обновите Grafana:
1 | |
Tracing (Tempo/Jaeger)
Если планируете добавить трейсинг, добавьте datasource:
1 2 3 4 | |
Application Metrics
Для ваших приложений:
- Экспортируйте метрики в формате Prometheus (порт 9090, endpoint /metrics)
- Добавьте annotation на Deployment/Pod:
1 2 3 4 | |
- Или создайте ServiceMonitor (рекомендуется для production):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Дополнительные ресурсы
- VictoriaMetrics Documentation
- Prometheus Documentation
- Grafana Documentation
- Prometheus Operator Documentation
- PromQL Tutorial
- Grafana Dashboards