В модуле реализовано 59 алертов.

Модуль включен по умолчанию в наборах модулей: 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 svc/deckhouse-leader -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 svc/deckhouse-leader -c deckhouse -- deckhouse-controller module disable extended-monitoring
    

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

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

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

Параметры

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

  • settings
    объект
    • settings.certificates
      объект

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

      • settings.certificates.exporterEnabled
        булевый

        Включен ли certExporter.

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

    • settings.events
      объект

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

      • settings.events.exporterEnabled
        булевый

        Включен ли eventsExporter.

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

      • settings.events.severityLevel
        строка

        Enables eventsExporter.

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

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

    • settings.imageAvailability
      объект

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

      • settings.imageAvailability.exporterEnabled
        булевый

        Включен ли imageAvailabilityExporter.

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

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

        Список контроллеров, которые необходимо проверять, даже если количество реплик подов равняется 0 или контроллер находится в статусе suspend (приостановленный).

        Укажите All, для проверки всех типов контроллеров.

        Пример:

        forceCheckDisabledControllers:
        - Deployment
        - StatefulSet
        
        • Элемент массива
          строка

          Допустимые значения: Deployment, StatefulSet, DaemonSet, CronJob, All

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

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

        Пример:

        ignoredImages:
        - alpine:3.10
        - alpine:3.2
        
      • settings.imageAvailability.mirrors
        массив объектов

        Список зеркал для container registry.

        Пример:

        mirrors:
        - original: docker.io
          mirror: mirror.gcr.io
        - original: internal-registry.com
          mirror: mirror.internal-registry.com
        
        • settings.imageAvailability.mirrors.mirror
          строка

          Обязательный параметр

        • settings.imageAvailability.mirrors.original
          строка

          Обязательный параметр

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

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

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

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

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

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

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

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

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

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

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

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

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

    • settings.nodeSelector
      объект

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

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

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

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

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

      • settings.tolerations.effect
        строка
      • settings.tolerations.key
        строка
      • settings.tolerations.operator
        строка
      • settings.tolerations.tolerationSeconds
        целочисленный
      • settings.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"})
)