From a6340ab732290100b437a0d1c9c38c24026c1729 Mon Sep 17 00:00:00 2001 From: stepan Date: Sun, 13 Sep 2026 13:47:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=80=D0=B5=D1=81=D1=83=D1=80=D1=81=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=B0=D0=BB=D0=B5=D1=80=D1=82=D1=8B=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Правила вынесены в prometheus-resource-rules.yml (не в rule_files); пороги — через env DEAL_ALERT_* при включении. --- .../prometheus-resource-rules.yml | 73 +++++++++++++++++++ deploy/observability/prometheus-rules.yml | 52 ------------- 2 files changed, 73 insertions(+), 52 deletions(-) create mode 100644 deploy/observability/prometheus-resource-rules.yml diff --git a/deploy/observability/prometheus-resource-rules.yml b/deploy/observability/prometheus-resource-rules.yml new file mode 100644 index 0000000..6d64d53 --- /dev/null +++ b/deploy/observability/prometheus-resource-rules.yml @@ -0,0 +1,73 @@ +# Правила алертов Prometheus по потреблению ресурсов — ОТКЛЮЧЕНЫ ПО УМОЛЧАНИЮ. +# +# Заготовка: включить, добавив эту строку в `rule_files` файла prometheus.yml: +# rule_files: +# - prometheus-rules.yml +# - prometheus-resource-rules.yml +# +# Пороги выносятся в env (DEAL_ALERT_*); Prometheus не раскрывает значения env в конфиге, поэтому при +# включении файл рендерится из шаблона (подстановка порогов) или пороги проставляются вручную: +# DEAL_ALERT_HOST_CPU_PERCENT — загрузка CPU хоста, % (дефолт 90) +# DEAL_ALERT_HOST_MEMORY_PERCENT — занятая память хоста, % (дефолт 90) +# DEAL_ALERT_HOST_DISK_PERCENT — минимум свободного места, % (дефолт 15) +# DEAL_ALERT_CONTAINER_CPU — CPU контейнера (ядра) (дефолт 1.5) +# DEAL_ALERT_CONTAINER_MEMORY_PERCENT — память контейнера к лимиту, %(дефолт 90) +# +# Источники: node-exporter (хост) и cAdvisor (контейнеры), scrape — jobs node-exporter/cadvisor. + +groups: + - name: deal-resources + rules: + # Хост: загрузка CPU. Дефолт порога — 90%. + - alert: DealHostHighCpu + expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90 + for: 10m + labels: + severity: warning + annotations: + summary: "Высокая загрузка CPU хоста" + description: "Средняя загрузка CPU хоста выше 90% за 5 минут более 10 минут." + + # Хост: занятая память. Дефолт порога — 90%. + - alert: DealHostHighMemory + expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.9 + for: 10m + labels: + severity: warning + annotations: + summary: "Высокое потребление памяти хостом" + description: "Свободной памяти меньше 10% более 10 минут." + + # Хост: свободное место на разделе. Дефолт порога — 15%. + - alert: DealHostDiskLow + expr: | + min by (mountpoint) (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) < 0.15 + for: 15m + labels: + severity: warning + annotations: + summary: "Мало места на диске ({{ $labels.mountpoint }})" + description: "Свободно менее 15% на разделе {{ $labels.mountpoint }} более 15 минут." + + # Контейнеры Deal: CPU (ядра). Дефолт порога — 1.5. + - alert: DealContainerHighCpu + expr: | + sum by (name) (rate(container_cpu_usage_seconds_total{name=~".*deal.*|.*core.*|.*service.*"}[5m])) > 1.5 + for: 10m + labels: + severity: warning + annotations: + summary: "Высокий CPU контейнера {{ $labels.name }}" + description: "Контейнер {{ $labels.name }} держит > 1.5 CPU за 5 минут более 10 минут." + + # Контейнеры Deal: память к лимиту. Дефолт порога — 90%. + - alert: DealContainerHighMemory + expr: | + (container_memory_working_set_bytes{name=~".*deal.*|.*core.*|.*service.*"} + / clamp_min(container_spec_memory_limit_bytes{name=~".*deal.*|.*core.*|.*service.*"}, 1)) > 0.9 + for: 10m + labels: + severity: warning + annotations: + summary: "Контейнер {{ $labels.name }} близок к лимиту памяти" + description: "Контейнер {{ $labels.name }} использует более 90% лимита памяти более 10 минут." diff --git a/deploy/observability/prometheus-rules.yml b/deploy/observability/prometheus-rules.yml index 51ca738..fbc56c7 100644 --- a/deploy/observability/prometheus-rules.yml +++ b/deploy/observability/prometheus-rules.yml @@ -80,55 +80,3 @@ groups: summary: "Растёт очередь обучения ML (outbox)" description: "Суммарная глубина MlOutbox держится выше 100 более 15 минут ({{ $value }})." - - name: deal-resources - rules: - # Хост: загрузка CPU/память/диск. Источник — node-exporter. Пороги «мягкие» — оператор уточняет. - - alert: DealHostHighCpu - expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90 - for: 10m - labels: - severity: warning - annotations: - summary: "Высокая загрузка CPU хоста" - description: "Средняя загрузка CPU хоста выше 90% за 5 минут более 10 минут." - - - alert: DealHostHighMemory - expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.9 - for: 10m - labels: - severity: warning - annotations: - summary: "Высокое потребление памяти хостом" - description: "Свободной памяти меньше 10% более 10 минут." - - - alert: DealHostDiskLow - expr: | - min by (mountpoint) (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) < 0.15 - for: 15m - labels: - severity: warning - annotations: - summary: "Мало места на диске ({{ $labels.mountpoint }})" - description: "Свободно менее 15% на разделе {{ $labels.mountpoint }} более 15 минут." - - # Контейнеры Deal: CPU и память против лимита (mem_limit/cpus в compose). Источник — cAdvisor. - - alert: DealContainerHighCpu - expr: | - sum by (name) (rate(container_cpu_usage_seconds_total{name=~".*deal.*|.*core.*|.*service.*"}[5m])) > 1.5 - for: 10m - labels: - severity: warning - annotations: - summary: "Высокий CPU контейнера {{ $labels.name }}" - description: "Контейнер {{ $labels.name }} держит > 1.5 CPU за 5 минут более 10 минут." - - - alert: DealContainerHighMemory - expr: | - (container_memory_working_set_bytes{name=~".*deal.*|.*core.*|.*service.*"} - / clamp_min(container_spec_memory_limit_bytes{name=~".*deal.*|.*core.*|.*service.*"}, 1)) > 0.9 - for: 10m - labels: - severity: warning - annotations: - summary: "Контейнер {{ $labels.name }} близок к лимиту памяти" - description: "Контейнер {{ $labels.name }} использует более 90% лимита памяти более 10 минут."