Доступно в редакциях:  CE, BE, SE, SE+, EE, CSE Lite (1.73), CSE Pro (1.73)

Стадия жизненного цикла модуляGeneral Availability

У модуля есть требования для установки

Модуль extended-monitoring расширяет возможности мониторинга кластера за счёт дополнительных экспортеров метрик Prometheus, которые позволяют выявлять потенциальные проблемы до того, как они скажутся на работе сервисов.

Возможности модуля:

  • Расширенный сбор метрик — собирает дополнительные метрики, а также включает готовые алерты и дашборды, которые позволяют быстрее обнаруживать и диагностировать инциденты:
    • собирает и экспортирует метрики по свободному месту и inode на узлах, а также по объектам с лейблом extended-monitoring.deckhouse.io/enabled="" в неймспейсе;
    • автоматически формирует алерты при достижении пороговых значений.
  • Мониторинг контейнерных образов:
    • добавляет метрики и отправляет алерты о недоступности образов контейнеров в хранилище образов контейнеров для всех типов рабочей нагрузки (Deployments, StatefulSets, DaemonSets, CronJobs);
    • помогает заранее узнать о возможных проблемах с запуском или обновлением подов.
  • События в кластере — собирает события Kubernetes и отображает их в виде метрик, что позволяет отслеживать динамику изменений и быстрее реагировать на инциденты.
  • Контроль сертификатов:
    • сканирует Secret’ы кластера и генерирует метрики об истечении срока действия x509-сертификатов;
    • позволяет не пропускать критические моменты и вовремя обновлять сертификаты, избегая простоя приложений из-за просроченных сертификатов.

Принцип работы

Модуль экспортирует в Prometheus специальные лейблы Kubernetes-объектов. Это позволяет задавать пороги срабатывания алертов через лейблы, а не через числа, жёстко прописанные в Prometheus-правилах.

До (порог 1 зашит в правило):

(
  kube_statefulset_status_replicas - kube_statefulset_status_replicas_ready
)
> 1

После (порог берётся из метрики модуля и может задаваться лейблом):

(
  kube_statefulset_status_replicas - kube_statefulset_status_replicas_ready
)
> on (namespace, statefulset)
(
  max by (namespace, statefulset) (extended_monitoring_statefulset_threshold{threshold="replicas-not-ready"})
)

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

Чтобы включить экспортирование метрик extended-monitoring, добавьте к неймспейсу лейбл extended-monitoring.deckhouse.io/enabled. Это можно сделать, например:

  • в Helm-чарте приложения — укажите лейбл в манифесте Namespace (рекомендуемый способ для GitOps);
  • в CI/CD-пайплайне, например в .gitlab-ci.yml, командой d8 k label namespace <NAMESPACE_NAME> extended-monitoring.deckhouse.io/enabled="";
  • вручную: d8 k label namespace my-app-production extended-monitoring.deckhouse.io/enabled="";
  • централизованно через модуль namespace-configurator, если лейбл нужно выставлять сразу на несколько неймспейсов.

где <NAMESPACE_NAME> — имя неймспейса.

Сразу же после этого для всех поддерживаемых Kubernetes-объектов в данном неймспейсе в Prometheus появятся метрики и пороги срабатывания алертов со значениями по умолчанию. Для ряда объектов вне неймспейсов, описанных ниже, мониторинг включается автоматически.

Переопределение порога срабатывания алерта для объекта

Чтобы переопределить порог срабатывания алерта для объекта, добавьте на объект лейбл с префиксом threshold.extended-monitoring.deckhouse.io/ и именем порога из списка ниже. Например:

d8 k label pod test threshold.extended-monitoring.deckhouse.io/disk-inodes-warning=30

В этом случае для пода test порог срабатывания disk-inodes-warning станет 30 вместо значения по умолчанию.

Переопределение порогов срабатывания алертов для неймспейса

Чтобы переопределить порог срабатывания алерта для неймспейса, установите такой же лейбл на уровне неймспейса. Например:

d8 k label namespace my-app-production threshold.extended-monitoring.deckhouse.io/5xx-warning=20

Это заменит порог по умолчанию для всех объектов неймспейса, у которых этот лейбл ещё не задан на самом объекте.

Отключение слежения за конкретным объектом

Чтобы отключить слежение за конкретным объектом, добавьте на объект лейбл extended-monitoring.deckhouse.io/enabled=false. После этого отключатся лейблы порогов по умолчанию и связанные с ними алерты.

Стандартные лейблы и поддерживаемые Kubernetes-объекты

Далее приведён список используемых в Prometheus Rules лейблов, а также их стандартные значения.

Все лейблы начинаются с префикса threshold.extended-monitoring.deckhouse.io/. Указанное в лейбле значение — число, которое устанавливает порог срабатывания алерта.

Например, лейбл threshold.extended-monitoring.deckhouse.io/5xx-warning: "5" на Ingress-ресурсе изменяет порог срабатывания алерта с 10% (по умолчанию) на 5%.

Объекты вне неймспейсов

Объекты вне неймспейсов не нуждаются в лейблах на неймспейсах, и мониторинг на них включается по умолчанию при включении модуля.

Узел
Лейбл Тип Значение по умолчанию
disk-bytes-warning Целое (проценты) 70
disk-bytes-critical Целое (проценты) 80
disk-inodes-warning Целое (проценты) 90
disk-inodes-critical Целое (проценты) 95
load-average-per-core-warning Целое 3
load-average-per-core-critical Целое 10

Эти лейблы не действуют для тех разделов, в которых расположены imagefs (по умолчанию — /var/lib/docker) и nodefs (по умолчанию — /var/lib/kubelet). Для этих разделов пороги настраиваются полностью автоматически согласно eviction thresholds в kubelet. Значения по умолчанию указаны в исходном коде Kubernetes, а также в описании экспортера порогов eviction kubelet.

Объекты в неймспейсах

Под
Лейбл Тип Значение по умолчанию
disk-bytes-warning Целое (проценты) 85
disk-bytes-critical Целое (проценты) 95
disk-inodes-warning Целое (проценты) 85
disk-inodes-critical Целое (проценты) 90
Ingress
Лейбл Тип Значение по умолчанию
5xx-warning Целое (проценты) 10
5xx-critical Целое (проценты) 20
Deployment
Лейбл Тип Значение по умолчанию
replicas-not-ready Целое (количество) 0

Порог подразумевает количество недоступных реплик сверх maxUnavailable. Сработает, если недоступно реплик больше на указанное значение, чем разрешено в maxUnavailable. То есть при нуле сработает, если недоступно больше, чем указано в maxUnavailable, а при единице сработает, если недоступно больше, чем указано в maxUnavailable, плюс 1. Таким образом, у конкретных Deployment, которые находятся в неймспейсе со включённым расширенным мониторингом и которым допустимо быть недоступными, можно установить этот параметр, чтобы не получать ненужные алерты.

StatefulSet
Лейбл Тип Значение по умолчанию
replicas-not-ready Целое (количество) 0

Порог подразумевает количество недоступных реплик сверх maxUnavailable (комментарии к Deployment).

DaemonSet
Лейбл Тип Значение по умолчанию
replicas-not-ready Целое (количество) 0

Порог подразумевает количество недоступных реплик сверх maxUnavailable (комментарии к Deployment).

CronJob

Работает только выключение через лейбл extended-monitoring.deckhouse.io/enabled=false.