Модуль observability расширяет функциональность модуля prometheus и веб-интерфейса Deckhouse, предоставляя дополнительные возможности для гибкого управления метриками, дашбордами и алертами, а также средства разграничения доступа к ним.
Возможности модуля:
- Управление дашбордами — модуль позволяет пользователям добавлять собственные дашборды в формате Grafana.
- Управление группами триггеров и метрик — модуль позволяет создавать и настраивать собственные группы триггеров и метрик.
- Настройка уведомлений — модуль позволяет настраивать каналы уведомлений (Telegram, Slack, электронная почта, вебхуки), политики уведомлений, а также дает возможность отключать уведомления при необходимости.
- Работа с алертами — модуль предоставляет информацию об активных алертах, а также сохраняет историю завершенных алертов.
- Предоставление стандартных источников данных.
- Поддержка пользовательских источников данных — модуль дополнительно к предоставляемому набору стандартных источников данных позволяет добавить пользовательские.
Подробнее с описанием модуля можно ознакомиться в разделе документации модуля.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме контейнеры разных подов показаны как взаимодействующие напрямую. Фактически обмен выполняется через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса приводится над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме каждый под показан в единственном экземпляре.
Архитектура модуля observability на уровне 2 модели C4 и его взаимодействия с другими компонентами Deckhouse Kubernetes Platform (DKP) изображены на следующей диаграмме:
Компоненты модуля
Модуль состоит из следующих компонентов:
-
Observability-controller — состоит из одного контейнера observability-controller, управляет жизненным циклом большинства кастомных ресурсов модуля, таких как ObservabilityMetricsRulesGroup, ObservabilityNotificationChannels, ObservabilityNotificationSilence и других. С полным списком ресурсов, которыми управляет модуль, можно ознакомиться в разделе «Кастомные ресурсы» документации модуля.
-
Observability-webhook — состоит из одного контейнера observability-webhook, реализующего вебхук-сервер для проверки и изменения кастомных ресурсов через механизмы Validating/Mutating Admission Controllers.
-
Alert-kube-api — состоит из одного контейнера alert-kube-api, реализует Kubernetes Extension API Server, который расширяет Kubernetes API кастомными ресурсами ObservabilityAlert и ClusterObservabilityAlert. Alert-kube-api позволяет запрашивать алерты как кастомные ресурсы, используя в качестве бэкенда компонент Alertmanager модуля, и кеширует их в памяти для быстрого доступа.
-
Alertmanager — принимает алерты от компонента prometheus-main модуля
prometheus, обрабатывает и отправляет их конечным получателям. DKP поддерживает отправку алертов через следующие каналы доставки:Email;Telegram;Slack;Webhook.
Компонент содержит следующие контейнеры:
-
alertmanager — основной контейнер. В модуле используется в форк оригинального Alertmanager от компании «Флант», поддерживающий мультитенантность: разделение алертов на системные (кластерные) и проектные. Доставка алертов (политики, каналы, сайленсеры) также мультитенантная, что позволяет индивидуально настроить каналы и политики доставки в разных проектах.
-
kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к API-эндпоинту Alertmanager. Является Open Source-проектом.
-
Grafana — компонент, предоставляющий веб-интерфейс для визуализации данных мониторинга. В модуле используется форк Grafana от компании «Флант». Используемая модификация Grafana обладает расширенными возможностями, такими как разграничение доступа к метрикам и дашбордам в рамках мультитенантности. Дашборды Grafana модуля
observabilityинтегрированы в веб-интерфейс Deckhouse (управление системой мониторинга из одного окна).Компонент содержит следующие контейнеры:
- grafana — основной контейнер;
- grafana-kube-storage — сайдкар-контейнер, реализующий бэкенд для контейнера grafana и предоставляющий управление ресурсами Dashboard и чтение ресурсов Datasource API компонента Grafana. Данные ресурсы позволяют просматривать и управлять дашбордами в пределах неймспейсов (проектов), а также подключать пользовательские источники данных;
- nginx — сайдкар-контейнер, представляющий собой прокси-сервер NGINX, чья основная задача — это раздача статических файлов. Является Open Source-проектом.
-
Label-enforcer — компонент, выполняющий авторизацию и проксирование запросов пользователей к источникам метрик (prometheus-main через сервис label-proxy) и логов (loki через сервис logs-gateway), указанным в ресурсах Datasource API компонента grafana. Label-enforcer проверяет RBAC-доступ к данным мониторинга в зависимости от прав пользователя, получает список доступных неймспейсов и обогащает запросы лейблами для возможности фильтрации запрашиваемых данных в рамках неймспейсов пользователей. Подробнее о разграничении доступа к метрикам можно ознакомиться в документации модуля. Label-enforcer обрабатывает запросы на чтение и запись метрик.
Состоит из единственного контейнера enforcer.
-
Opagent (DaemonSet) — агент, предназначенный для сбора метрик с операционной системы и прикладного программного обеспечения, установленного на серверы. Разработан компанией «Флант» для Deckhouse Observability Platform (DOP) на основе Okagent (агента Okmeter), входящего в состав системы мониторинга Okmeter.
В модуле
observabilityopAgent подключается к managed-сервисам, таким какmanaged-postgres,managed-memcached,managed-kafkaи другим (список поддерживаемых сервисов постоянно расширяется), собирает с них метрики, после чего отправляет их в компонент prometheus-main модуляprometheus. Если включен модульobservability-platform, opAgent собирает метрики с узлов кластера и отправляет их в DOP.OpAgent отправляет собранные данные по протоколу Prometheus Remote Write:
- метрики managed-сервисов — в Prometheus через label-enforcer;
- метрики с узлов кластера — в DOP.
Состоит из единственного контейнера opagent.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
-
Kube-apiserver:
- для авторизации запросов к данным мониторинга;
- для управления кастомными ресурсами модуля.
- Prometheus-main — использует в качестве источника и приемника данных.
- Loki — использует в качестве источника данных.
- Получатели алертов — отправляет алерты.
- Deckhouse Observability Platform — использует в качестве приемника данных (метрики узлов).
С модулем взаимодействуют следующие внешние компоненты:
-
Kube-apiserver:
- выполняет проверку и изменение кастомных ресурсов модуля (с помощью validating- и mutating-вебхуков);
- пересылает в alert-kube-api запросы на кастомные ресурсы ObservabilityAlert и ClusterObservabilityAlert.
- Prometheus-main — отправляет алерты в Alertmanager.
- Веб-интерфейс Deckhouse — использует Grafana для визуализации данных мониторинга.