Предупреждение об общих проблемах Kubernetes / OpenShift

Материал из Документация Ключ-АСТРОМ
Версия от 11:46, 30 сентября 2026; IKuznetsov (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Предупреждение об общих проблемах Kubernetes / OpenShift

Версия Ключ-АСТРОМ 1.254+ Версия АктивногоШлюза 1.253+

Чтобы настроить предупреждения об общих проблемах платформы Kubernetes, следуйте инструкциям ниже.

Настройка

Существует три способа настройки предупреждений об общих проблемах Kubernetes/OpenShift. Настройка предупреждения на другом уровне предназначена только для упрощения конфигурации сразу нескольких сущностей. Это не меняет поведение предупреждения. Например, включение предупреждения о насыщении CPU рабочей нагрузки по-прежнему будет оценивать и создавать проблемы для каждой рабочей нагрузки Kubernetes отдельно, даже если оно настроено на уровне кластера Kubernetes. Подробнее об иерархии настроек см. в документации по настройкам.

  • Настройки уровня тенанта: применяются ко всем кластерам, нодам, пространствам имён или рабочим нагрузкам в тенанте Kubernetes/OpenShift.
    • Чтобы настроить, перейдите в Настройки > Обнаружение аномалий и выберите любую страницу в разделе Kubernetes.
  • Настройки уровня кластера: применяются к выбранному кластеру или к нодам, пространствам имён и рабочим нагрузкам выбранного кластера.
    • Чтобы настроить, перейдите в настройки выбранного кластера Kubernetes и выберите любую страницу в разделе Обнаружение аномалий.
  • Настройки уровня пространства имён: применяются к выбранным пространствам имён или рабочим нагрузкам.
    • Чтобы настроить, перейдите в настройки выбранного пространства имён и выберите любую страницу в разделе Обнаружение аномалий.

Просмотр предупреждений

Проблемы, закрытые вручную, появятся снова через 60 дней, если их первопричина остаётся нерешённой.

Просматривать предупреждения можно:

  • На странице Проблемы.
  • В разделе События страницы сведений о кластере.

Выберите событие, чтобы перейти в Визуализацию данных и получить больше информации о метрике, вызвавшей событие.

Доступные предупреждения

Ниже приведён список доступных предупреждений. Следующие предупреждения не переклассифицируются как сигналы предупреждений при включении обновлённой классификации.

  • Обнаружение проблем готовности кластера
  • Обнаружение зависших развёртываний
  • Обнаружение рабочих нагрузок без готовых подов
  • Обнаружение событий backoff подов

Предупреждения кластера

Название предупреждения Версия Ключ-АСТРОМ Тип проблемы Заголовок проблемы Описание проблемы Деактивация после Расчёт Поддерживается в
Насыщение CPU-запросов на кластере 1.254 Ресурс Насыщение CPU-запросов на кластере превышает указанный порог. Насыщение CPU-запросов на кластере превышает указанный порог. 10 минут Запросы CPU нод / Выделяемый CPU нод Kubernetes Classic, приложение Kubernetes
Насыщение запросов памяти на кластере 1.254 Ресурс Насыщение запросов памяти на кластере превышает указанный порог. Насыщение запросов памяти на кластере превышает указанный порог. 10 минут Запросы памяти нод / Выделяемая память нод Kubernetes Classic, приложение Kubernetes
Насыщение подов на кластере 1.258 Ресурс Насыщение подов кластера превышает указанный порог. Насыщение подов кластера превышает указанный порог. 10 минут Сумма готовых подов / Сумма выделяемых подов Kubernetes Classic, приложение Kubernetes
Кластер не готов 1.254 Доступность Конечная точка readyz указывает, что этот кластер не готов. Конечная точка readyz указывает, что этот кластер не готов. 10 минут Метрика readyz кластера Kubernetes Classic, приложение Kubernetes
Мониторинг недоступен 1.258 Доступность Мониторинг API Ключ-АСТРОМ недоступен. Мониторинг API Ключ-АСТРОМ недоступен. 10 минут — Kubernetes Classic, приложение Kubernetes

Метрики кластера и выражения DQL

Обнаружение насыщения CPU-запросов на кластере

Тип Выражение
Метрика builtin:kubernetes.node.requests_cpu:splitBy():sum/builtin:kubernetes.node.cpu_allocatable:splitBy():sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.container.requests_cpu, rollup: avg), o2=sum(dt.kubernetes.node.cpu_allocatable, rollup: avg)}, by: {}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение насыщения запросов памяти на кластере

Тип Выражение
Метрика builtin:kubernetes.node.requests_memory:splitBy():sum/builtin:kubernetes.node.memory_allocatable:splitBy():sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.container.requests_memory, rollup: avg), o2=sum(dt.kubernetes.node.memory_allocatable, rollup: avg)}, by: {}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение насыщения подов на кластере

Тип Выражение
Метрика (builtin:kubernetes.node.pods:filter(and(eq(pod_condition,Ready))):splitBy():sum/builtin:kubernetes.node.pods_allocatable:splitBy():sum):default(0.0)*100.0
DQL
timeseries o1=sum(dt.kubernetes.pods, rollup: avg), nonempty:true, filter: {((pod_condition=="Ready"))}, by: {}| join [timeseries operand=sum(dt.kubernetes.node.pods_allocatable, rollup: avg), nonempty:true, by: {}], on: {interval}, fields: {o2=operand}| fieldsAdd result=if(isNull(o1[]/o2[]), 0.0, else: o1[]/o2[])* 100.0| fieldsRemove {o1,o2}

Обнаружение проблем готовности кластера

Тип Выражение
Метрика builtin:kubernetes.cluster.readyz:splitBy():sum
DQL
timeseries {sum(dt.kubernetes.cluster.readyz, rollup: avg)}, by: {}

Обнаружение недоступности мониторинга

Тип Выражение
Метрика (нет выражения метрики)
DQL (нет DQL)

Предупреждения по умолчанию для новых тенантов

Предупреждение Настройка Значение
Проблемы готовности период выборки в минутах 3
Проблемы готовности период наблюдения в минутах 5
Проблемы мониторинга период выборки в минутах 15
Проблемы мониторинга период наблюдения в минутах 30

Предупреждения нод

Название предупреждения Версия Ключ-АСТРОМ Тип проблемы Заголовок проблемы Описание проблемы Деактивация после Расчёт Поддерживается в
Насыщение CPU-запросов на ноде 1.254 Ресурс Насыщение CPU-запросов на ноде превышает указанный порог. Насыщение CPU-запросов на ноде превышает указанный порог. 10 минут Сумма CPU-запросов ноды / Сумма выделяемого CPU ноды Kubernetes Classic, приложение Kubernetes
Насыщение запросов памяти на ноде 1.254 Ресурс Насыщение запросов памяти на ноде превышает указанный порог. Насыщение запросов памяти на ноде превышает указанный порог. 10 минут Сумма запросов памяти ноды / Сумма выделяемой памяти ноды Kubernetes Classic, приложение Kubernetes
Насыщение подов на ноде 1.254 Ресурс Насыщение подов на ноде превышает указанный порог. Насыщение подов на ноде превышает указанный порог. 10 минут Сумма запущенных подов на ноде / Лимит подов ноды Kubernetes Classic, приложение Kubernetes
Нода не готова 1.254 Доступность Нода не готова. Нода не готова. 10 минут Метрика состояния ноды, отфильтрованная по 'not ready' Kubernetes Classic, приложение Kubernetes
Проблемное состояние ноды 1.264 Ошибка Нода имеет одно или несколько проблемных состояний из следующих: ContainerRuntimeProblem, ContainerRuntimeUnhealthy, CorruptDockerOverlay2, DiskPressure, FilesystemCorruptionProblem, FrequentContainerdRestart, FrequentDockerRestart, FrequentGcfsSnapshotterRestart, FrequentGcfsdRestart, FrequentKubeletRestart, FrequentUnregisterNetDevice, GcfsSnapshotterMissingLayer, GcfsSnapshotterUnhealthy, GcfsdUnhealthy, KernelDeadlock, KubeletProblem, KubeletUnhealthy, MemoryPressure, NetworkUnavailable, OutOfDisk, PIDPressure, ReadonlyFilesystem Нода имеет одно или несколько проблемных состояний. 10 минут Метрика состояния нод Kubernetes Classic, приложение Kubernetes

Метрики нод и выражения DQL

Обнаружение насыщения CPU-запросов на ноде

Тип Выражение
Метрика builtin:kubernetes.node.requests_cpu:splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum/builtin:kubernetes.node.cpu_allocatable:splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.container.requests_cpu, rollup: avg), o2=sum(dt.kubernetes.node.cpu_allocatable, rollup: avg)}, by: {dt.kubernetes.node.system_uuid,k8s.node.name}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение насыщения запросов памяти на ноде

Тип Выражение
Метрика builtin:kubernetes.node.requests_memory:splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum/builtin:kubernetes.node.memory_allocatable:splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.container.requests_memory, rollup: avg), o2=sum(dt.kubernetes.node.memory_allocatable, rollup: avg)}, by: {dt.kubernetes.node.system_uuid,k8s.node.name}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение насыщения подов на ноде

Тип Выражение
Метрика builtin:kubernetes.node.pods:filter(and(eq(pod_phase,Running))):splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum/builtin:kubernetes.node.pods_allocatable:splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum*100.0
DQL
timeseries o1=sum(dt.kubernetes.pods, rollup: avg), nonempty:true, filter: {((pod_phase=="Running"))}, by: {dt.kubernetes.node.system_uuid,k8s.node.name}| join [timeseries operand=sum(dt.kubernetes.node.pods_allocatable, rollup: avg), nonempty:true, by: {dt.kubernetes.node.system_uuid,k8s.node.name}], on: {interval}, fields: {o2=operand}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение проблем готовности ноды

Тип Выражение
Метрика builtin:kubernetes.node.conditions:filter(and(eq(node_condition,Ready),ne(condition_status,True))):splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum
DQL
timeseries {sum(dt.kubernetes.node.conditions, rollup: avg)}, filter: {((node_condition=="Ready")AND(condition_status!=true))}, by: {dt.kubernetes.node.system_uuid,k8s.node.name}

Обнаружение проблемных состояний ноды

Тип Выражение
Метрика builtin:kubernetes.node.conditions:filter(and(or(eq(node_condition,ContainerRuntimeProblem),eq(node_condition,ContainerRuntimeUnhealthy),eq(node_condition,CorruptDockerOverlay2),eq(node_condition,DiskPressure),eq(node_condition,FilesystemCorruptionProblem),eq(node_condition,FrequentContainerdRestart),eq(node_condition,FrequentDockerRestart),eq(node_condition,FrequentGcfsSnapshotterRestart),eq(node_condition,FrequentGcfsdRestart),eq(node_condition,FrequentKubeletRestart),eq(node_condition,FrequentUnregisterNetDevice),eq(node_condition,GcfsSnapshotterMissingLayer),eq(node_condition,GcfsSnapshotterUnhealthy),eq(node_condition,GcfsdUnhealthy),eq(node_condition,KernelDeadlock),eq(node_condition,KubeletProblem),eq(node_condition,KubeletUnhealthy),eq(node_condition,MemoryPressure),eq(node_condition,NetworkUnavailable),eq(node_condition,OutOfDisk),eq(node_condition,PIDPressure),eq(node_condition,ReadonlyFilesystem)),eq(condition_status,True))):splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum
DQL
timeseries {sum(dt.kubernetes.node.conditions, rollup: avg)}, filter: {(((node_condition=="ContainerRuntimeProblem")OR(node_condition=="ContainerRuntimeUnhealthy")OR(node_condition=="CorruptDockerOverlay2")OR(node_condition=="DiskPressure")OR(node_condition=="FilesystemCorruptionProblem")OR(node_condition=="FrequentContainerdRestart")OR(node_condition=="FrequentDockerRestart")OR(node_condition=="FrequentGcfsSnapshotterRestart")OR(node_condition=="FrequentGcfsdRestart")OR(node_condition=="FrequentKubeletRestart")OR(node_condition=="FrequentUnregisterNetDevice")OR(node_condition=="GcfsSnapshotterMissingLayer")OR(node_condition=="GcfsSnapshotterUnhealthy")OR(node_condition=="GcfsdUnhealthy")OR(node_condition=="KernelDeadlock")OR(node_condition=="KubeletProblem")OR(node_condition=="KubeletUnhealthy")OR(node_condition=="MemoryPressure")OR(node_condition=="NetworkUnavailable")OR(node_condition=="OutOfDisk")OR(node_condition=="PIDPressure")OR(node_condition=="ReadonlyFilesystem"))AND(condition_status==true))}, by: {dt.kubernetes.node.system_uuid,k8s.node.name}

Предупреждения по умолчанию для новых тенантов

Предупреждение Настройка Значение
Проблемы готовности период выборки в минутах 3
Проблемы готовности период наблюдения в минутах 5
Проблемное состояние ноды период выборки в минутах 3
Проблемное состояние ноды период наблюдения в минутах 5

Предупреждения пространств имён

Название предупреждения Версия Ключ-АСТРОМ Тип проблемы Заголовок проблемы Описание проблемы Деактивация после Расчёт Поддерживается в
Насыщение квоты CPU-лимитов 1.254 Ресурс Насыщение квоты CPU-лимитов превышает указанный порог. Насыщение квоты CPU-лимитов превышает указанный порог. 10 минут Сумма использованных CPU-лимитов квоты ресурсов / Сумма CPU-лимитов квоты ресурсов Kubernetes Classic, приложение Kubernetes
Насыщение квоты CPU-запросов 1.254 Ресурс Насыщение квоты CPU-запросов превышает указанный порог. Насыщение квоты CPU-запросов превышает указанный порог. 10 минут Сумма использованных CPU-запросов квоты ресурсов / Сумма CPU-запросов квоты ресурсов Kubernetes Classic, приложение Kubernetes
Насыщение квоты лимитов памяти 1.254 Ресурс Насыщение квоты лимитов памяти превышает указанный порог. Насыщение квоты лимитов памяти превышает указанный порог. 10 минут Сумма использованных лимитов памяти квоты ресурсов / Сумма лимитов памяти квоты ресурсов Kubernetes Classic, приложение Kubernetes
Насыщение квоты запросов памяти 1.254 Ресурс Насыщение квоты запросов памяти превышает указанный порог. Насыщение квоты запросов памяти превышает указанный порог. 10 минут Сумма использованных запросов памяти квоты ресурсов / Сумма запросов памяти квоты ресурсов Kubernetes Classic, приложение Kubernetes
Насыщение квоты подов 1.254 Ресурс Насыщение квоты подов превышает указанный порог. Насыщение квоты подов превышает указанный порог. 10 минут Сумма использованных подов квоты ресурсов / Сумма лимитов подов квоты ресурсов Kubernetes Classic, приложение Kubernetes

Метрики пространств имён и выражения DQL

Обнаружение насыщения квоты CPU-лимитов в пространстве имён

Тип Выражение
Метрика builtin:kubernetes.resourcequota.limits_cpu_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.limits_cpu:splitBy(k8s.namespace.name):sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.resourcequota.limits_cpu_used, rollup: avg), o2=sum(dt.kubernetes.resourcequota.limits_cpu, rollup: avg)}, by: {k8s.namespace.name}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение насыщения квоты CPU-запросов в пространстве имён

Тип Выражение
Метрика builtin:kubernetes.resourcequota.requests_cpu_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.requests_cpu:splitBy(k8s.namespace.name):sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.resourcequota.requests_cpu_used, rollup: avg), o2=sum(dt.kubernetes.resourcequota.requests_cpu, rollup: avg)}, by: {k8s.namespace.name}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение насыщения квоты лимитов памяти в пространстве имён

Тип Выражение
Метрика builtin:kubernetes.resourcequota.limits_memory_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.limits_memory:splitBy(k8s.namespace.name):sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.resourcequota.limits_memory_used, rollup: avg), o2=sum(dt.kubernetes.resourcequota.limits_memory, rollup: avg)}, by: {k8s.namespace.name}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение насыщения квоты запросов памяти в пространстве имён

Тип Выражение
Метрика builtin:kubernetes.resourcequota.requests_memory_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.requests_memory:splitBy(k8s.namespace.name):sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.resourcequota.requests_memory_used, rollup: avg), o2=sum(dt.kubernetes.resourcequota.requests_memory, rollup: avg)}, by: {k8s.namespace.name}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение насыщения квоты подов в пространстве имён

Тип Выражение
Метрика builtin:kubernetes.resourcequota.pods_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.pods:splitBy(k8s.namespace.name):sum*100.0
DQL
timeseries {o1=sum(dt.kubernetes.resourcequota.pods_used, rollup: avg), o2=sum(dt.kubernetes.resourcequota.pods, rollup: avg)}, by: {k8s.namespace.name}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Предупреждения о постоянных томах (PVC)

Название предупреждения Версия Ключ-АСТРОМ Тип проблемы Заголовок проблемы Описание проблемы Деактивация после Расчёт Поддерживается в
Kubernetes PVC: низкий процент свободного места на диске 1.262 Ресурс Доступное дисковое пространство для запроса на постоянный том ниже порога. Доступное дисковое пространство для запроса на постоянный том ниже порога. 10 минут Доступные байты статистики тома / Ёмкость статистики тома Kubernetes Classic, приложение Kubernetes
Kubernetes PVC: низкий объём свободного места на диске 1.262 Ресурс Доступное дисковое пространство для запроса на постоянный том ниже порога. Доступное дисковое пространство для запроса на постоянный том ниже порога. 10 минут Метрика доступных байтов статистики тома kubelet Kubernetes Classic, приложение Kubernetes

Метрики PVC и выражения DQL

Обнаружение низкого процента свободного места на диске

Тип Выражение
Метрика builtin:kubernetes.persistentvolumeclaim.available:splitBy(k8s.namespace.name,k8s.persistent_volume_claim.name):avg/builtin:kubernetes.persistentvolumeclaim.capacity:splitBy(k8s.namespace.name,k8s.persistent_volume_claim.name):avg*100.0
DQL
timeseries {o1=avg(dt.kubernetes.persistentvolumeclaim.available), o2=avg(dt.kubernetes.persistentvolumeclaim.capacity)}, by: {k8s.namespace.name,k8s.persistent_volume_claim.name}| fieldsAdd result=o1[]/o2[]* 100.0| fieldsRemove {o1,o2}

Обнаружение низкого объёма свободного места на диске (МиБ)

Тип Выражение
Метрика builtin:kubernetes.persistentvolumeclaim.available:splitBy(k8s.namespace.name,k8s.persistent_volume_claim.name):avg
DQL
timeseries {avg(dt.kubernetes.persistentvolumeclaim.available)}, by: {k8s.namespace.name,k8s.persistent_volume_claim.name}

Предупреждения рабочих нагрузок

Название предупреждения Версия Ключ-АСТРОМ Тип проблемы Заголовок проблемы Описание проблемы Деактивация после Расчёт Поддерживается в
Использование CPU близко к лимитам 1.264 Ресурс Использование CPU превышает порог с точки зрения заданного лимита CPU. Использование CPU превышает порог с точки зрения заданного лимита CPU. 10 минут Сумма использования CPU рабочей нагрузки / Сумма лимитов CPU рабочей нагрузки Kubernetes Classic, приложение Kubernetes
Перезапуски контейнеров 1.254 Ошибка Наблюдаемые перезапуски контейнеров превышают указанный порог. Наблюдаемые перезапуски контейнеров превышают указанный порог. 15 минут Метрика перезапусков контейнеров Kubernetes Classic, приложение Kubernetes
Высокое троттлингование CPU 1.264 Ресурс Отношение троттлингования CPU к лимитам превышает указанный порог. Отношение троттлингования CPU к лимитам превышает указанный порог. 10 минут Сумма троттлингования CPU рабочей нагрузки / Сумма лимитов CPU рабочей нагрузки Kubernetes Classic, приложение Kubernetes
Событие сбоя задания 1.268 Ошибка Обнаружены события с причинами 'BackoffLimitExceeded', 'DeadlineExceeded' или 'PodFailurePolicy'. Обнаружены события с причинами 'BackoffLimitExceeded', 'DeadlineExceeded' или 'PodFailurePolicy'. 60 минут Метрика событий, отфильтрованная по причине и типу рабочей нагрузки Kubernetes Classic, приложение Kubernetes
Использование памяти близко к лимитам 1.264 Ресурс Использование памяти (рабочий набор памяти) превышает порог с точки зрения заданного лимита памяти. Использование памяти (рабочий набор памяти) превышает порог с точки зрения заданного лимита памяти. 10 минут Сумма рабочего набора памяти рабочей нагрузки / Сумма лимитов памяти рабочей нагрузки Kubernetes Classic, приложение Kubernetes
Убийства из-за нехватки памяти 1.268 Ошибка Для подов этой рабочей нагрузки наблюдались убийства из-за нехватки памяти. Для подов этой рабочей нагрузки наблюдались убийства из-за нехватки памяти. 15 минут Метрика убийств из-за нехватки памяти Kubernetes Classic, приложение Kubernetes
Событие backoff 1.268 Ошибка Для подов этой рабочей нагрузки обнаружены события с причиной 'BackOff'. Проверьте поды со статусом 'ImagePullBackOff' или 'CrashLoopBackOff'. Для подов этой рабочей нагрузки обнаружены события с причиной 'BackOff'. Проверьте поды со статусом 'ImagePullBackOff' или 'CrashLoopBackOff'. 15 минут Метрика событий, отфильтрованная по причине Kubernetes Classic, приложение Kubernetes
Событие вытеснения пода 1.268 Ошибка Для подов этой рабочей нагрузки обнаружены события с причиной 'Evicted'. Для подов этой рабочей нагрузки обнаружены события с причиной 'Evicted'. 60 минут Метрика событий, отфильтрованная по причине Kubernetes Classic, приложение Kubernetes
Событие вытеснения 1.268 Ошибка Для подов этой рабочей нагрузки обнаружены события с причинами 'Preempted' или 'Preempting'. Для подов этой рабочей нагрузки обнаружены события с причинами 'Preempted' или 'Preempting'. 60 минут Метрика событий, отфильтрованная по причине Kubernetes Classic, приложение Kubernetes
Поды застряли в состоянии ожидания 1.254 Ресурс Рабочая нагрузка имеет поды в состоянии ожидания. Рабочая нагрузка имеет поды в состоянии ожидания. 10 минут Метрика подов, отфильтрованная по фазе 'Pending' Kubernetes Classic, приложение Kubernetes
Поды застряли в состоянии завершения 1.260 Ресурс Рабочая нагрузка имеет поды, застрявшие в состоянии завершения. Рабочая нагрузка имеет поды, застрявшие в состоянии завершения. 10 минут Метрика подов, отфильтрованная по статусу 'Terminating' Kubernetes Classic, приложение Kubernetes
Развёртывание зависло 1.260 Ошибка Развёртывание зависло и больше не продвигается. Развёртывание зависло и больше не продвигается. 10 минут Метрика состояния рабочей нагрузки, отфильтрованная по 'not progressing' Kubernetes Classic, приложение Kubernetes
Не все поды готовы 1.258 Ошибка Рабочая нагрузка имеет поды, которые не готовы. Рабочая нагрузка имеет поды, которые не готовы. 10 минут Сумма всех ожидающих или запущенных подов − Сумма готовых ожидающих или запущенных подов. Поды заданий и CronJob исключены. Kubernetes Classic, приложение Kubernetes
Нет готовых подов 1.254 Ошибка Рабочая нагрузка не имеет ни одного готового пода. Рабочая нагрузка не имеет ни одного готового пода. 10 минут Сумма всех ожидающих или запущенных подов − Сумма неготовых ожидающих или запущенных подов. Поды заданий и CronJob исключены. Kubernetes Classic, приложение Kubernetes

Метрики рабочих нагрузок и выражения DQL

Обнаружение насыщения использования CPU

Тип Выражение
Метрика (builtin:kubernetes.workload.cpu_usage:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum/builtin:kubernetes.workload.limits_cpu:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum):default(0.0)*100.0
DQL
timeseries {o1=sum(dt.kubernetes.container.cpu_usage, rollup: avg), o2=sum(dt.kubernetes.container.limits_cpu, rollup: avg)}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}| fieldsAdd result=if(isNull(o1[]/o2[]), 0.0, else: o1[]/o2[])* 100.0| fieldsRemove {o1,o2}

Обнаружение перезапусков контейнеров

Тип Выражение
Метрика builtin:kubernetes.container.restarts:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)
DQL
timeseries {sum(dt.kubernetes.container.restarts, default:0.0, rollup: avg)}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение высокого троттлингования CPU

Тип Выражение
Метрика (builtin:kubernetes.workload.cpu_throttled:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum/builtin:kubernetes.workload.limits_cpu:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum):default(0.0)*100.0
DQL
timeseries {o1=sum(dt.kubernetes.container.cpu_throttled, rollup: avg), o2=sum(dt.kubernetes.container.limits_cpu, rollup: avg)}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}| fieldsAdd result=if(isNull(o1[]/o2[]), 0.0, else: o1[]/o2[])* 100.0| fieldsRemove {o1,o2}

Обнаружение событий сбоя задания

Тип Выражение
Метрика builtin:kubernetes.events:filter(and(or(eq(k8s.event.reason,BackoffLimitExceeded),eq(k8s.event.reason,DeadlineExceeded),eq(k8s.event.reason,PodFailurePolicy)),or(eq(k8s.workload.kind,job),eq(k8s.workload.kind,cronjob)))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)
DQL
timeseries {sum(dt.kubernetes.events, default:0.0, rollup: avg)}, filter: {(((k8s.event.reason=="BackoffLimitExceeded")OR(k8s.event.reason=="DeadlineExceeded")OR(k8s.event.reason=="PodFailurePolicy"))AND((k8s.workload.kind=="job")OR(k8s.workload.kind=="cronjob")))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение насыщения использования памяти

Тип Выражение
Метрика (builtin:kubernetes.workload.memory_working_set:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum/builtin:kubernetes.workload.limits_memory:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum):default(0.0)*100.0
DQL
timeseries {o1=sum(dt.kubernetes.container.memory_working_set, rollup: avg), o2=sum(dt.kubernetes.container.limits_memory, rollup: avg)}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}| fieldsAdd result=if(isNull(o1[]/o2[]), 0.0, else: o1[]/o2[])* 100.0| fieldsRemove {o1,o2}

Обнаружение убийств из-за нехватки памяти

Тип Выражение
Метрика builtin:kubernetes.container.oom_kills:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)
DQL
timeseries {sum(dt.kubernetes.container.oom_kills, default:0.0, rollup: avg)}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение событий backoff подов

Тип Выражение
Метрика builtin:kubernetes.events:filter(and(eq(k8s.event.reason,BackOff))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)
DQL
timeseries {sum(dt.kubernetes.events, default:0.0, rollup: avg)}, filter: {((k8s.event.reason=="BackOff"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение событий вытеснения подов

Тип Выражение
Метрика builtin:kubernetes.events:filter(and(eq(k8s.event.reason,Evicted))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)
DQL
timeseries {sum(dt.kubernetes.events, default:0.0, rollup: avg)}, filter: {((k8s.event.reason=="Evicted"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение событий вытеснения подов (preemption)

Тип Выражение
Метрика builtin:kubernetes.events:filter(or(eq(k8s.event.reason,Preempted),eq(k8s.event.reason,Preempting))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)
DQL
timeseries {sum(dt.kubernetes.events, default:0.0, rollup: avg)}, filter: {((k8s.event.reason=="Preempted")OR(k8s.event.reason=="Preempting"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение подов, застрявших в состоянии ожидания

Тип Выражение
Метрика builtin:kubernetes.pods:filter(and(eq(pod_phase,Pending))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum
DQL
timeseries {sum(dt.kubernetes.pods, rollup: avg)}, filter: {((pod_phase=="Pending"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение подов, застрявших в состоянии завершения

Тип Выражение
Метрика builtin:kubernetes.pods:filter(and(eq(pod_status,Terminating))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum
DQL
timeseries {sum(dt.kubernetes.pods, rollup: avg)}, filter: {((pod_status=="Terminating"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение зависших развёртываний

Тип Выражение
Метрика builtin:kubernetes.workload.conditions:filter(and(eq(workload_condition,Progressing),eq(condition_status,False))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum
DQL
timeseries {sum(dt.kubernetes.workload.conditions, rollup: avg)}, filter: {((workload_condition=="Progressing")AND(condition_status==false))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}

Обнаружение рабочих нагрузок с неготовыми подами

Следующее выражение возвращает количество ожидающих и запущенных подов в неготовом состоянии. Поды заданий и CronJobs исключены.

Тип Выражение
Метрика builtin:kubernetes.pods:filter(and(ne(pod_phase,Failed),ne(pod_phase,Succeeded),ne(k8s.workload.kind,job),ne(k8s.workload.kind,cronjob),ne(pod_status,Terminating))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum-builtin:kubernetes.pods:filter(and(ne(pod_phase,Failed),ne(pod_phase,Succeeded),ne(k8s.workload.kind,job),ne(k8s.workload.kind,cronjob),eq(pod_condition,Ready),ne(pod_status,Terminating))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)
DQL
timeseries o1=sum(dt.kubernetes.pods, rollup: avg), filter: {((pod_phase!="Failed")AND(pod_phase!="Succeeded")AND(k8s.workload.kind!="job")AND(k8s.workload.kind!="cronjob")AND(pod_status!="Terminating"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}| join [timeseries operand=sum(dt.kubernetes.pods, default:0.0, rollup: avg), nonempty:true, filter: {((pod_phase!="Failed")AND(pod_phase!="Succeeded")AND(k8s.workload.kind!="job")AND(k8s.workload.kind!="cronjob")AND(pod_condition=="Ready")AND(pod_status!="Terminating"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}], on: {interval}, fields: {o2=operand}| fieldsAdd result=o1[]-o2[]| fieldsRemove {o1,o2}

Обнаружение рабочих нагрузок без готовых подов

Следующее выражение возвращает количество ожидающих и запущенных подов в готовом состоянии. Поды заданий и CronJobs исключены.

Тип Выражение
Метрика builtin:kubernetes.pods:filter(and(ne(pod_phase,Failed),ne(pod_phase,Succeeded),ne(k8s.workload.kind,job),ne(k8s.workload.kind,cronjob))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum-builtin:kubernetes.pods:filter(and(ne(pod_phase,Failed),ne(pod_phase,Succeeded),ne(k8s.workload.kind,job),ne(k8s.workload.kind,cronjob),ne(pod_condition,Ready))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)
DQL
timeseries o1=sum(dt.kubernetes.pods, rollup: avg), filter: {((pod_phase!="Failed")AND(pod_phase!="Succeeded")AND(k8s.workload.kind!="job")AND(k8s.workload.kind!="cronjob"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}| join [timeseries operand=sum(dt.kubernetes.pods, default:0.0, rollup: avg), nonempty:true, filter: {((pod_phase!="Failed")AND(pod_phase!="Succeeded")AND(k8s.workload.kind!="job")AND(k8s.workload.kind!="cronjob")AND(pod_condition!="Ready"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}], on: {interval}, fields: {o2=operand}| fieldsAdd result=o1[]-o2[]| fieldsRemove {o1,o2}

Предупреждения по умолчанию для новых тенантов

Предупреждение Настройка Значение
Перезапуски контейнеров порог 1
Перезапуски контейнеров период выборки в минутах 3
Перезапуски контейнеров период наблюдения в минутах 5
Развёртывание зависло период выборки в минутах 3
Развёртывание зависло период наблюдения в минутах 5
Ожидающие поды порог 1
Ожидающие поды период выборки в минутах 10
Ожидающие поды период наблюдения в минутах 15
Поды застряли в состоянии завершения период выборки в минутах 10
Поды застряли в состоянии завершения период наблюдения в минутах 15
Рабочая нагрузка без готовых подов период выборки в минутах 10
Рабочая нагрузка без готовых подов период наблюдения в минутах 15
Убийства из-за нехватки памяти предупреждать всегда —
События сбоя задания предупреждать всегда —
События backoff подов предупреждать всегда —
События вытеснения подов предупреждать всегда —
События вытеснения подов (preemption) предупреждать всегда —