Модуль включен по умолчанию в наборах модулей: Default
, Managed
.
Модуль выключен по умолчанию в наборе модулей Minimal
.
Чтобы настроить модуль используйте 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
- certificates.exporterEnabledбулевый
- eventsобъект
Настройки для мониторинга event’ов в кластере Kubernetes.
- events.exporterEnabledбулевый
Включен ли eventsExporter.
По умолчанию:
false
- events.severityLevelстрока
Enables eventsExporter.
По умолчанию:
"OnlyWarnings"
Допустимые значения:
All
,OnlyWarnings
- events.exporterEnabledбулевый
- imageAvailabilityобъект
Настройки для мониторинга доступности образов в кластере.
- imageAvailability.exporterEnabledбулевый
Включен ли imageAvailabilityExporter.
По умолчанию:
true
- imageAvailability.ignoredImagesмассив строк
Список образов, для которых нужно пропустить проверку, например
alpine:3.12
илиquay.io/test/test:v1.1
.Пример:
ignoredImages: - alpine:3.10 - alpine:3.2
- imageAvailability.skipRegistryCertVerificationбулевый
Пропускать ли валидацию TLS-сертификата для Docker Registry.
По умолчанию:
false
- imageAvailability.exporterEnabledбулевый
- nodeSelectorобъект
Структура, аналогичная
spec.nodeSelector
Kubernetes pod.Если ничего не указано или указано
false
— будет использоваться автоматика. - tolerationsмассив объектов
Структура, аналогичная
spec.tolerations
в Kubernetes Pod.Если ничего не указано или указано
false
— будет использоваться автоматика.- tolerations.effectстрока
- tolerations.keyстрока
- tolerations.operatorстрока
- tolerations.tolerationSecondsцелочисленный
- tolerations.valueстрока
Как использовать extended-monitoring-exporter
Чтобы включить экспортирование extended-monitoring метрик, нужно навесить на Namespace аннотацию extended-monitoring.flant.com/enabled
любым удобным способом, например:
- добавить в проект соответствующий helm-чарт (рекомендуемый)
- добавить в описание
.gitlab-ci.yml
(kubectl patch/create) - поставить руками (
kubectl annotate namespace my-app-production extended-monitoring.flant.com/enabled=""
). - настроить через namespace-configurator модуль.
Сразу же после этого, для всех поддерживаемых Kubernetes объектов в данном Namespace в Prometheus появятся default метрики + любые кастомные с префиксом threshold.extended-monitoring.flant.com/
. Для ряда non-namespaced Kubernetes объектов, описанных ниже, мониторинг и стандартные аннотации включаются автоматически.
К Kubernetes объектам threshold.extended-monitoring.flant.com/что-то своё
можно добавить любые другие аннотации с указанным значением. Пример: kubectl annotate pod test threshold.extended-monitoring.flant.com/disk-inodes-warning-threshold=30
.
В таком случае, значение из аннотации заменит значение по умолчанию.
Слежение за объектом можно отключить индивидуально, поставив на него аннотацию extended-monitoring.flant.com/enabled=false
. Соответственно, отключатся и аннотации по умолчанию, а также все алерты, привязанные к аннотациям.
Стандартные аннотации и поддерживаемые Kubernetes объекты
Далее приведён список используемых в Prometheus Rules аннотаций, а также их стандартные значения.
Внимание! Все аннотации:
- Начинаются с префикса
threshold.extended-monitoring.flant.com/
; - Имеют целочисленное значение в качестве value, за исключением Namespace-аннотации
extended-monitoring.flant.com/enabled
(в которой value можно опустить). Указанное в value значение устанавливает порог срабатывания алерта.
Non-namespaced Kubernetes objects
Не нуждаются в аннотации на Namespace. Включены по умолчанию.
Node
Annotation | Type | Default value |
---|---|---|
disk-bytes-warning | int (percent) | 70 |
disk-bytes-critical | int (percent) | 80 |
disk-inodes-warning | int (percent) | 85 |
disk-inodes-critical | int (percent) | 90 |
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 objects
Pod
Annotation | 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 |
container-throttling-warning | int (percent) | 25 |
container-throttling-critical | int (percent) | 50 |
container-cores-throttling-warning | int (cores) | |
container-cores-throttling-critical | int (cores) |
Ingress
Annotation | Type | Default value |
---|---|---|
5xx-warning | int (percent) | 10 |
5xx-critical | int (percent) | 20 |
Deployment
Annotation | Type | Default value |
---|---|---|
replicas-not-ready | int (count) | 0 |
Порог подразумевает количество недоступных реплик сверх maxUnavailable. Сработает, если недоступно реплик больше на указанное значение чем разрешено в maxUnavailable
. Т.е. при нуле сработает, если недоступно больше чем указано в maxUnavailable
, а при единице, сработает если недоступно больше чем указано в maxUnavailable
плюс 1. Таким образом, у конкретных Deployment, находящихся в Namespace со включенным расширенным мониторингом и которым допустимо быть недоступными, можно подкрутить этот параметр, чтобы не получать ненужные алерты.
Statefulset
Annotation | Type | Default value |
---|---|---|
replicas-not-ready | int (count) | 0 |
Порог подразумевает количество недоступных реплик сверх maxUnavailable (см. комментарии к Deployment).
DaemonSet
Annotation | Type | Default value |
---|---|---|
replicas-not-ready | int (count) | 0 |
Порог подразумевает количество недоступных реплик сверх maxUnavailable (см. комментарии к Deployment).
CronJob
Работает только выключение через аннотацию extended-monitoring.flant.com/enabled=false
.
Как работает
Модуль экспортирует в Prometheus специальные аннотации Kubernetes-объектов. Позволяет улучшить Prometheus-правила, путём добавления порога срабатывания для алертов. Использование метрик, экспортируемых данным модулем, позволяет, например, заменить “магические” константы в правилах.
До:
max by (namespace, pod, container) (
(
rate(container_cpu_cfs_throttled_periods_total[5m])
/
rate(container_cpu_cfs_periods_total[5m])
)
> 0.85
)
После:
max by (namespace, pod, container) (
(
rate(container_cpu_cfs_throttled_periods_total[5m])
/
rate(container_cpu_cfs_periods_total[5m])
)
> on (namespace, pod) group_left
max by (namespace, pod) (extended_monitoring_pod_threshold{threshold="container-throttling-critical"}) / 100
)