Модуль включен по умолчанию в наборах модулей: Default, Managed. Модуль выключен по умолчанию в наборе модулей Minimal.

Как явно включить или отключить модуль…

Чтобы явно включить или выключить модуль extended-monitoring, установите spec.enabled в true или false в ModuleConfig/extended-monitoring (создайте, при необходимости), или воспользуйтесь командой deckhouse-controller module в поде d8-system/deckhouse.

Пример включения модуля:

  • с помощью ресурса ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: extended-monitoring
    spec:
      enabled: true
    
  • с помощью команды deckhouse-controller (требуется kubectl, настроенный на работу с кластером):

    kubectl -ti -n d8-system exec deploy/deckhouse -c deckhouse -- deckhouse-controller module enable extended-monitoring
    

Пример выключения модуля:

  • с помощью ресурса ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: extended-monitoring
    spec:
      enabled: false
    
  • с помощью команды deckhouse-controller (требуется kubectl, настроенный на работу с кластером):

    kubectl -ti -n d8-system exec deploy/deckhouse -c deckhouse -- deckhouse-controller module disable extended-monitoring
    

Чтобы настроить модуль, используйте custom resource ModuleConfig с именем extended-monitoring (подробнее о настройке Deckhouse…).

Пример ресурса ModuleConfig/extended-monitoring для настройки модуля:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: extended-monitoring
spec:
  version: 1
  enabled: true
  settings: # <-- Параметры модуля из раздела "Параметры" ниже.

Параметры

Версия схемы: 1

  • certificatesобъект

    Настройки для мониторинга сертификатов в кластере Kubernetes.

    • certificates.exporterEnabledбулевый

      Включен ли certExporter.

      По умолчанию: false

  • eventsобъект

    Настройки для мониторинга event’ов в кластере Kubernetes.

    • events.exporterEnabledбулевый

      Включен ли eventsExporter.

      По умолчанию: false

    • events.severityLevelстрока

      Enables eventsExporter.

      По умолчанию: "OnlyWarnings"

      Допустимые значения: All, OnlyWarnings

  • imageAvailabilityобъект

    Настройки для мониторинга доступности образов в кластере.

    • imageAvailability.exporterEnabledбулевый

      Включен ли imageAvailabilityExporter.

      По умолчанию: true

    • imageAvailability.ignoredImagesмассив строк

      Список образов, для которых нужно пропустить проверку, например alpine:3.12 или quay.io/test/test:v1.1.

      Пример:

      ignoredImages:
      - alpine:3.10
      - alpine:3.2
      
    • imageAvailability.registryобъект

      Настройки подключения к container registry.

      • imageAvailability.registry.schemeстрока

        Протокол доступа к container registry.

        По умолчанию: "HTTPS"

        Допустимые значения: HTTP, HTTPS

      • imageAvailability.registry.tlsConfigобъект

        Настройки подключения к container registry

        • imageAvailability.registry.tlsConfig.caстрока

          Корневой сертификат, которым можно проверить сертификат container registry при работе по HTTPS (если registry использует самоподписанные SSL-сертификаты).

        • imageAvailability.registry.tlsConfig.insecureSkipVerifyбулевый

          Пропускать ли валидацию TLS-сертификата для container registry.

          По умолчанию: false

  • nodeSelectorобъект

    Структура, аналогичная spec.nodeSelector пода Kubernetes.

    Если ничего не указано или указано false, будет использоваться автоматика.

  • tolerationsмассив объектов

    Структура, аналогичная spec.tolerations пода Kubernetes.

    Если ничего не указано или указано false, будет использоваться автоматика.

    • tolerations.effectстрока
    • tolerations.keyстрока
    • tolerations.operatorстрока
    • tolerations.tolerationSecondsцелочисленный
    • tolerations.valueстрока

Как использовать extended-monitoring-exporter

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

  • добавить в проект соответствующий helm-чарт (рекомендуемый);
  • добавить в описание .gitlab-ci.yml (kubectl patch/create);
  • поставить руками (kubectl label namespace my-app-production extended-monitoring.deckhouse.io/enabled="");
  • настроить через namespace-configurator модуль.

Сразу же после этого для всех поддерживаемых Kubernetes-объектов в данном namespace в Prometheus появятся default-метрики + любые кастомные с префиксом threshold.extended-monitoring.deckhouse.io/. Для ряда non-namespaced Kubernetes-объектов, описанных ниже, мониторинг включается автоматически.

К Kubernetes-объектам threshold.extended-monitoring.deckhouse.io/что-то свое можно добавить любые другие лейблы с указанным значением. Пример: kubectl label pod test threshold.extended-monitoring.deckhouse.io/disk-inodes-warning=30. В таком случае значение из лейбла заменит значение по умолчанию.

Слежение за объектом можно отключить индивидуально, поставив на него лейбл 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%.

Non-namespaced Kubernetes-объекты

Non-namespaced Kubernetes-объекты не нуждаются в лейблах на namespace и мониторинг на них включается по умолчанию при включении модуля.

Node
Label Type Default value
disk-bytes-warning int (percent) 70
disk-bytes-critical int (percent) 80
disk-inodes-warning int (percent) 90
disk-inodes-critical int (percent) 95
load-average-per-core-warning int 3
load-average-per-core-critical int 10

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

Namespaced Kubernetes-объекты

Под
Label Type Default value
disk-bytes-warning int (percent) 85
disk-bytes-critical int (percent) 95
disk-inodes-warning int (percent) 85
disk-inodes-critical int (percent) 90
Ingress
Label Type Default value
5xx-warning int (percent) 10
5xx-critical int (percent) 20
Deployment
Label Type Default value
replicas-not-ready int (count) 0

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

Statefulset
Label Type Default value
replicas-not-ready int (count) 0

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

DaemonSet
Label Type Default value
replicas-not-ready int (count) 0

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

CronJob

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

Как работает

Модуль экспортирует в Prometheus специальные лейблы Kubernetes-объектов. Позволяет улучшить Prometheus-правила путем добавления порога срабатывания для алертов. Использование метрик, экспортируемых данным модулем, позволяет, например, заменить «магические» константы в правилах.

До:

(
  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"})
)