Предупреждение об общих проблемах Kubernetes / OpenShift: различия между версиями

Материал из Документация Ключ-АСТРОМ
Новая страница: «Версия Ключ-АСТРОМ 1.254+ Активный Шлюз версии 1.253+ Для оповещения об общих проблемах плат...»
 
Нет описания правки
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
Версия Ключ-АСТРОМ 1.254+


Активный Шлюз версии 1.253+
= Предупреждение об общих проблемах Kubernetes / OpenShift =


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


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


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


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


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


* Настройки применяются ко всем кластерам, узлам, пространствам имен или рабочим нагрузкам в клиенте Kubernetes / OpenShift.
== Просмотр предупреждений ==
Проблемы, закрытые вручную, появятся снова через 60 дней, если их первопричина остаётся нерешённой.


* Чтобы настроить параметры, перейдите в '''Настройки'''> '''Обнаружение аномалий''' и выберите любую страницу в разделе '''Kubernetes'''.
Просматривать предупреждения можно:


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


* Параметры применяются к выбранному кластеру или к узлам, пространствам имен и рабочим нагрузкам из выбранного кластера.
Выберите событие, чтобы перейти в '''Визуализацию данных''' и получить больше информации о метрике, вызвавшей событие.
* Чтобы настроить параметры, перейдите в настройки выбранного кластера Kubernetes и выберите любую страницу в разделе '''Обнаружение аномалий''' .


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


* Параметры применяются к выбранным пространствам имен или рабочим нагрузкам.
* Обнаружение проблем готовности кластера
* Чтобы настроить параметры, перейдите к параметрам выбранного пространства имен и выберите любую страницу в разделе '''Обнаружение аномалий''' .
* Обнаружение зависших развёртываний
* Обнаружение рабочих нагрузок без готовых подов
* Обнаружение событий backoff подов


[[Файл:kube1.png]]
=== Предупреждения кластера ===
{| class="wikitable"
!Название предупреждения
!Версия Ключ-АСТРОМ
!Тип проблемы
!Заголовок проблемы
!Описание проблемы
!Деактивация после
!Расчёт
!Поддерживается в
|-
|Насыщение 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-запросов на кластере ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.node.requests_cpu:splitBy():sum/builtin:kubernetes.node.cpu_allocatable:splitBy():sum*100.0</code>
|-
|DQL
|<pre>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}</pre>
|}


[[Файл:kube2.png]]
==== Обнаружение насыщения запросов памяти на кластере ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.node.requests_memory:splitBy():sum/builtin:kubernetes.node.memory_allocatable:splitBy():sum*100.0</code>
|-
|DQL
|<pre>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}</pre>
|}


==== Обнаружение насыщения подов на кластере ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>(builtin:kubernetes.node.pods:filter(and(eq(pod_condition,Ready))):splitBy():sum/builtin:kubernetes.node.pods_allocatable:splitBy():sum):default(0.0)*100.0</code>
|-
|DQL
|<pre>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}</pre>
|}


'''Примечание:''' Выберите событие, чтобы перейти к '''проводнику данных''' для получения дополнительной информации о метрике, которая сгенерировала событие.
==== Обнаружение проблем готовности кластера ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.cluster.readyz:splitBy():sum</code>
|-
|DQL
|<pre>timeseries {sum(dt.kubernetes.cluster.readyz, rollup: avg)}, by: {}</pre>
|}


'''Доступные оповещения'''
==== Обнаружение недоступности мониторинга ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|(нет выражения метрики)
|-
|DQL
|(нет DQL)
|}


Список доступных оповещений см. Ниже.
=== Предупреждения по умолчанию для новых тенантов ===
{| class="wikitable"
!Предупреждение
!Настройка
!Значение
|-
|Проблемы готовности
|период выборки в минутах
|3
|-
|Проблемы готовности
|период наблюдения в минутах
|5
|-
|Проблемы мониторинга
|период выборки в минутах
|15
|-
|Проблемы мониторинга
|период наблюдения в минутах
|30
|}


'''Кластерные оповещения'''
=== Предупреждения нод ===
{| class="wikitable"
{| class="wikitable"
|'''название предупреждения'''
!Название предупреждения
|'''Название проблемы'''
!Версия Ключ-АСТРОМ
|'''Описание проблемы'''
!Тип проблемы
|'''Тип проблемы'''
!Заголовок проблемы
|'''Значок'''
!Описание проблемы
|'''Релизная версия'''
!Деактивация после
!Расчёт
!Поддерживается в
|-
|-
|Detect CPU requests saturation
|Насыщение CPU-запросов на ноде
|CPU requests saturation on cluster
|Насыщенность запросов процессора превышает указанный порог.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|1.254
|Ресурс
|Насыщение CPU-запросов на ноде превышает указанный порог.
|Насыщение CPU-запросов на ноде превышает указанный порог.
|10 минут
|Сумма CPU-запросов ноды / Сумма выделяемого CPU ноды
|Kubernetes Classic, приложение Kubernetes
|-
|-
|Detect memory requests saturation
|Насыщение запросов памяти на ноде
|Memory requests saturation on cluster
|Насыщение запросов памяти превышает указанный порог.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|1.254
|Ресурс
|Насыщение запросов памяти на ноде превышает указанный порог.
|Насыщение запросов памяти на ноде превышает указанный порог.
|10 минут
|Сумма запросов памяти ноды / Сумма выделяемой памяти ноды
|Kubernetes Classic, приложение Kubernetes
|-
|-
|Detect readiness issues
|Насыщение подов на ноде
|Cluster not ready
|Конечная точка readyz указывает, что этот кластер не готов.
|AVAILABILITY_EVENT
|[[Файл:kube4.png]]
|1.254
|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-запросов на ноде ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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</code>
|-
|DQL
|<pre>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}</pre>
|}
==== Обнаружение насыщения запросов памяти на ноде ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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</code>
|-
|DQL
|<pre>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}</pre>
|}
==== Обнаружение насыщения подов на ноде ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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</code>
|-
|DQL
|<pre>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}</pre>
|}
==== Обнаружение проблем готовности ноды ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.node.conditions:filter(and(eq(node_condition,Ready),ne(condition_status,True))):splitBy(dt.kubernetes.node.system_uuid,k8s.node.name):sum</code>
|-
|DQL
|<pre>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}</pre>
|}
==== Обнаружение проблемных состояний ноды ====
{| class="wikitable"
!Тип
!Выражение
|-
|-
|Detect pods saturation
|Метрика
|Pods saturation on cluster
|<code>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</code>
|Насыщенность модулей превышает указанный порог.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.258
|-
|-
|Detect monitoring issues
|DQL
|Monitoring not available
|<pre>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}</pre>
|Мониторинг Dynatrace недоступен.
|AVAILABILITY_EVENT
|[[Файл:kube4.png]]
|1.258
|}
|}
'''Оповещения о нодах'''
 
=== Предупреждения по умолчанию для новых тенантов ===
{| class="wikitable"
{| class="wikitable"
|'''название предупреждения'''
!Предупреждение
|'''Название проблемы'''
!Настройка
|'''Описание проблемы'''
!Значение
|'''Тип проблемы'''
|'''Значок'''
|'''Релизная версия'''
|-
|-
|Detect readiness issues
|Проблемы готовности
|Node not ready
|период выборки в минутах
|Условия узла указывают на то, что этот узел не готов.
|3
|AVAILABILITY_EVENT
|[[Файл:kube4.png]]
|1.254
|-
|-
|Detect CPU requests saturation
|Проблемы готовности
|CPU requests saturation on node
|период наблюдения в минутах
|Насыщенность запросов процессора превышает указанный порог.
|5
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|-
|-
|Detect memory requests saturation
|Проблемное состояние ноды
|Memory requests saturation on node
|период выборки в минутах
|Насыщение запросов памяти превышает указанный порог.
|3
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|-
|-
|Detect pods saturation
|Проблемное состояние ноды
|Pods saturation on node
|период наблюдения в минутах
|Насыщенность модулей превышает указанный порог.
|5
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]] 
|1.254
|}
|}
'''Предупреждения о пространстве имен (namespace)'''
 
=== Предупреждения пространств имён ===
{| class="wikitable"
{| class="wikitable"
|'''название предупреждения'''
!Название предупреждения
|'''Название проблемы'''
!Версия Ключ-АСТРОМ
|'''Описание проблемы'''
!Тип проблемы
|'''Тип проблемы'''
!Заголовок проблемы
|'''Значок'''
!Описание проблемы
|'''Релизная версия'''
!Деактивация после
!Расчёт
!Поддерживается в
|-
|-
|Detect CPU requests quota saturation
|Насыщение квоты CPU-лимитов
|CPU requests quota saturation
|Насыщение квоты запросов процессора превышает указанный порог.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|1.254
|Ресурс
|Насыщение квоты CPU-лимитов превышает указанный порог.
|Насыщение квоты CPU-лимитов превышает указанный порог.
|10 минут
|Сумма использованных CPU-лимитов квоты ресурсов / Сумма CPU-лимитов квоты ресурсов
|Kubernetes Classic, приложение Kubernetes
|-
|-
|Detect memory requests quota saturation
|Насыщение квоты CPU-запросов
|Memory requests quota saturation
|Насыщение квоты запросов памяти превышает указанный порог.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|1.254
|Ресурс
|Насыщение квоты CPU-запросов превышает указанный порог.
|Насыщение квоты CPU-запросов превышает указанный порог.
|10 минут
|Сумма использованных CPU-запросов квоты ресурсов / Сумма CPU-запросов квоты ресурсов
|Kubernetes Classic, приложение Kubernetes
|-
|-
|Detect CPU limits quota saturation
|Насыщение квоты лимитов памяти
|CPU limits quota saturation
|Насыщение квоты CPU превышает указанный порог.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|1.254
|Ресурс
|Насыщение квоты лимитов памяти превышает указанный порог.
|Насыщение квоты лимитов памяти превышает указанный порог.
|10 минут
|Сумма использованных лимитов памяти квоты ресурсов / Сумма лимитов памяти квоты ресурсов
|Kubernetes Classic, приложение Kubernetes
|-
|-
|Detect memory limits quota saturation
|Насыщение квоты запросов памяти
|Memory limits quota saturation
|Насыщение квоты ограничений памяти превышает указанный порог.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|1.254
|Ресурс
|Насыщение квоты запросов памяти превышает указанный порог.
|Насыщение квоты запросов памяти превышает указанный порог.
|10 минут
|Сумма использованных запросов памяти квоты ресурсов / Сумма запросов памяти квоты ресурсов
|Kubernetes Classic, приложение Kubernetes
|-
|-
|Detect pods quota saturation
|Насыщение квоты подов
|Pods quota saturation
|Насыщение квоты pods превышает указанный порог.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]]
|1.254
|1.254
|Ресурс
|Насыщение квоты подов превышает указанный порог.
|Насыщение квоты подов превышает указанный порог.
|10 минут
|Сумма использованных подов квоты ресурсов / Сумма лимитов подов квоты ресурсов
|Kubernetes Classic, приложение Kubernetes
|}
=== Метрики пространств имён и выражения DQL ===
==== Обнаружение насыщения квоты CPU-лимитов в пространстве имён ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.resourcequota.limits_cpu_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.limits_cpu:splitBy(k8s.namespace.name):sum*100.0</code>
|-
|DQL
|<pre>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}</pre>
|}
|}
'''Предупреждения на уровне Workloads'''
 
==== Обнаружение насыщения квоты CPU-запросов в пространстве имён ====
{| class="wikitable"
{| class="wikitable"
|'''название предупреждения'''
!Тип
|'''Название проблемы'''
!Выражение
|'''Описание проблемы'''
|'''Тип проблемы'''
|'''Значок'''
|'''Релизная версия'''
|-
|-
|Detect workloads without ready pods
|Метрика
|No pod ready
|<code>builtin:kubernetes.resourcequota.requests_cpu_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.requests_cpu:splitBy(k8s.namespace.name):sum*100.0</code>
|В рабочей нагрузке нет готовых модулей.
|-
|ERROR_EVENT
|DQL
|[[Файл:kube5.png]]
|<pre>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}</pre>
|}
 
==== Обнаружение насыщения квоты лимитов памяти в пространстве имён ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.resourcequota.limits_memory_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.limits_memory:splitBy(k8s.namespace.name):sum*100.0</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение насыщения квоты запросов памяти в пространстве имён ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.resourcequota.requests_memory_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.requests_memory:splitBy(k8s.namespace.name):sum*100.0</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение насыщения квоты подов в пространстве имён ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.resourcequota.pods_used:splitBy(k8s.namespace.name):sum/builtin:kubernetes.resourcequota.pods:splitBy(k8s.namespace.name):sum*100.0</code>
|-
|DQL
|<pre>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}</pre>
|}
 
=== Предупреждения о постоянных томах (PVC) ===
{| class="wikitable"
!Название предупреждения
!Версия Ключ-АСТРОМ
!Тип проблемы
!Заголовок проблемы
!Описание проблемы
!Деактивация после
!Расчёт
!Поддерживается в
|-
|Kubernetes PVC: низкий процент свободного места на диске
|1.262
|Ресурс
|Доступное дисковое пространство для запроса на постоянный том ниже порога.
|Доступное дисковое пространство для запроса на постоянный том ниже порога.
|10 минут
|Доступные байты статистики тома / Ёмкость статистики тома
|Kubernetes Classic, приложение Kubernetes
|-
|Kubernetes PVC: низкий объём свободного места на диске
|1.262
|Ресурс
|Доступное дисковое пространство для запроса на постоянный том ниже порога.
|Доступное дисковое пространство для запроса на постоянный том ниже порога.
|10 минут
|Метрика доступных байтов статистики тома kubelet
|Kubernetes Classic, приложение Kubernetes
|}
 
=== Метрики PVC и выражения DQL ===
 
==== Обнаружение низкого процента свободного места на диске ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение низкого объёма свободного места на диске (МиБ) ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.persistentvolumeclaim.available:splitBy(k8s.namespace.name,k8s.persistent_volume_claim.name):avg</code>
|-
|DQL
|<pre>timeseries {avg(dt.kubernetes.persistentvolumeclaim.available)}, by: {k8s.namespace.name,k8s.persistent_volume_claim.name}</pre>
|}
 
=== Предупреждения рабочих нагрузок ===
{| class="wikitable"
!Название предупреждения
!Версия Ключ-АСТРОМ
!Тип проблемы
!Заголовок проблемы
!Описание проблемы
!Деактивация после
!Расчёт
!Поддерживается в
|-
|Использование CPU близко к лимитам
|1.264
|Ресурс
|Использование CPU превышает порог с точки зрения заданного лимита CPU.
|Использование CPU превышает порог с точки зрения заданного лимита CPU.
|10 минут
|Сумма использования CPU рабочей нагрузки / Сумма лимитов CPU рабочей нагрузки
|Kubernetes Classic, приложение Kubernetes
|-
|Перезапуски контейнеров
|1.254
|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
|-
|-
|Detect pending pods
|Поды застряли в состоянии ожидания
|Pending pods
|Рабочая нагрузка имеет ожидающие модули.
|RESOURCE_CONTENTION_EVENT
|[[Файл:kube3.png]] 
|1.254
|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
|-
|-
|Detect container restarts
|Нет готовых подов
|Container restarts
|Наблюдаемые перезапуски контейнера превышают указанный порог.
|ERROR_EVENT
|[[Файл:kube5.png]]
|1.254
|1.254
|Ошибка
|Рабочая нагрузка не имеет ни одного готового пода.
|Рабочая нагрузка не имеет ни одного готового пода.
|10 минут
|Сумма всех ожидающих или запущенных подов − Сумма неготовых ожидающих или запущенных подов. Поды заданий и CronJob исключены.
|Kubernetes Classic, приложение Kubernetes
|}
=== Метрики рабочих нагрузок и выражения DQL ===
==== Обнаружение насыщения использования CPU ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>(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</code>
|-
|-
|Detect workloads with non-ready pods
|DQL
|Not all pods are ready
|<pre>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}</pre>
|В рабочей нагрузке есть модули, которые не готовы.
|}
|ERROR_EVENT
 
|[[Файл:kube5.png]]
==== Обнаружение перезапусков контейнеров ====
|1.258
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.container.restarts:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)</code>
|-
|DQL
|<pre>timeseries {sum(dt.kubernetes.container.restarts, default:0.0, rollup: avg)}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}</pre>
|}
 
==== Обнаружение высокого троттлингования CPU ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>(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</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение событий сбоя задания ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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)</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение насыщения использования памяти ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>(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</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение убийств из-за нехватки памяти ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.container.oom_kills:splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)</code>
|-
|DQL
|<pre>timeseries {sum(dt.kubernetes.container.oom_kills, default:0.0, rollup: avg)}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}</pre>
|}
 
==== Обнаружение событий backoff подов ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.events:filter(and(eq(k8s.event.reason,BackOff))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение событий вытеснения подов ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.events:filter(and(eq(k8s.event.reason,Evicted))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum:default(0.0)</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение событий вытеснения подов (preemption) ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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)</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение подов, застрявших в состоянии ожидания ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.pods:filter(and(eq(pod_phase,Pending))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum</code>
|-
|DQL
|<pre>timeseries {sum(dt.kubernetes.pods, rollup: avg)}, filter: {((pod_phase=="Pending"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}</pre>
|}
 
==== Обнаружение подов, застрявших в состоянии завершения ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>builtin:kubernetes.pods:filter(and(eq(pod_status,Terminating))):splitBy(k8s.namespace.name,k8s.workload.kind,k8s.workload.name):sum</code>
|-
|DQL
|<pre>timeseries {sum(dt.kubernetes.pods, rollup: avg)}, filter: {((pod_status=="Terminating"))}, by: {k8s.namespace.name,k8s.workload.kind,k8s.workload.name}</pre>
|}
 
==== Обнаружение зависших развёртываний ====
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение рабочих нагрузок с неготовыми подами ====
Следующее выражение возвращает количество ожидающих и запущенных подов в неготовом состоянии. Поды заданий и CronJobs исключены.
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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)</code>
|-
|DQL
|<pre>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}</pre>
|}
 
==== Обнаружение рабочих нагрузок без готовых подов ====
Следующее выражение возвращает количество ожидающих и запущенных подов в готовом состоянии. Поды заданий и CronJobs исключены.
{| class="wikitable"
!Тип
!Выражение
|-
|Метрика
|<code>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)</code>
|-
|DQL
|<pre>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}</pre>
|}
 
=== Предупреждения по умолчанию для новых тенантов ===
{| class="wikitable"
!Предупреждение
!Настройка
!Значение
|-
|Перезапуски контейнеров
|порог
|1
|-
|Перезапуски контейнеров
|период выборки в минутах
|3
|-
|Перезапуски контейнеров
|период наблюдения в минутах
|5
|-
|Развёртывание зависло
|период выборки в минутах
|3
|-
|Развёртывание зависло
|период наблюдения в минутах
|5
|-
|Ожидающие поды
|порог
|1
|-
|Ожидающие поды
|период выборки в минутах
|10
|-
|Ожидающие поды
|период наблюдения в минутах
|15
|-
|Поды застряли в состоянии завершения
|период выборки в минутах
|10
|-
|Поды застряли в состоянии завершения
|период наблюдения в минутах
|15
|-
|Рабочая нагрузка без готовых подов
|период выборки в минутах
|10
|-
|Рабочая нагрузка без готовых подов
|период наблюдения в минутах
|15
|-
|Убийства из-за нехватки памяти
|предупреждать всегда
|—
|-
|События сбоя задания
|предупреждать всегда
|—
|-
|События backoff подов
|предупреждать всегда
|—
|-
|События вытеснения подов
|предупреждать всегда
|—
|-
|События вытеснения подов (preemption)
|предупреждать всегда
|—
|}
|}

Текущая версия от 11:46, 30 сентября 2026

Предупреждение об общих проблемах 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) предупреждать всегда —