From ca54fe84d10cb1b54711dca4134bb0a9e726be9d Mon Sep 17 00:00:00 2001 From: Max Ronzhin Date: Sat, 25 Jul 2026 21:58:20 +0300 Subject: [PATCH] monitoring: decouple default profile from optional llm/llm-gpu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Целевой набор профилей compose по умолчанию (media,monitoring) не включает llm/llm-gpu — job `llm` в prometheus.yml и алерт LlmDown в alerts.yml закомментированы, иначе Prometheus постоянно логировал бы неудачный скрейп несуществующего таргета, а LlmDown вечно оставался бы firing. Раскомментировать оба вместе — на инсталляциях с профилем llm/llm-gpu (пресеты 3-5 install.sh). Дашборд «Пайплайны пост-обработки» и docs/deploy/monitoring.md обновлены с пояснением, что большинство панелей показывают «No data» без transcribe/llm — это ожидаемо, не баг. --- deploy/monitoring/alerts.yml | 35 ++++++++++--------- .../grafana/dashboards/pipelines.json | 3 +- deploy/monitoring/prometheus.yml | 14 ++++++-- docs/deploy/monitoring.md | 27 +++++++++----- 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/deploy/monitoring/alerts.yml b/deploy/monitoring/alerts.yml index 549c6a2..f6231fc 100644 --- a/deploy/monitoring/alerts.yml +++ b/deploy/monitoring/alerts.yml @@ -41,19 +41,22 @@ groups: # LLM-сервер (llama.cpp, job `llm` — см. комментарий в prometheus.yml # про сетевой алиас `llm`/`llm-gpu`) недоступен. Актуально ТОЛЬКО на # инсталляциях с включённым профилем `llm`/`llm-gpu` (пресеты 3–5, - # `install.sh`) — на пресетах 1/2 (без AI) таргет `llm:8080` в принципе - # не резолвится, и этот алерт будет постоянно активен, если профиль - # `monitoring` включён без AI-профиля; для таких инсталляций правило - # можно отключить (закомментировать) в локальной копии alerts.yml. - - alert: LlmDown - expr: up{job="llm"} == 0 - for: 2m - labels: - severity: critical - annotations: - summary: "LLM-сервер (llama.cpp) недоступен" - description: >- - Prometheus не может достучаться до llm:8080 дольше 2 минут — - суммаризация встанет (задачи будут копиться в очереди summarize, - см. также алерт QueueGrowing). Проверить - `docker compose ps llm` / `llm-gpu` и `docker compose logs llm`. + # `install.sh`) — целевой набор профилей по умолчанию (`media,monitoring`, + # см. .env.example) их не включает, поэтому правило закомментировано + # вместе с job `llm` в prometheus.yml (иначе `up{job="llm"}` не находит + # ни одной серии — сам по себе закомментированный job уже не даёт этому + # алерту сработать, но держать активное правило на несуществующую + # метрику вводит в заблуждение). Раскомментируйте оба вместе на + # инсталляциях с профилем `llm`/`llm-gpu`. + # - alert: LlmDown + # expr: up{job="llm"} == 0 + # for: 2m + # labels: + # severity: critical + # annotations: + # summary: "LLM-сервер (llama.cpp) недоступен" + # description: >- + # Prometheus не может достучаться до llm:8080 дольше 2 минут — + # суммаризация встанет (задачи будут копиться в очереди summarize, + # см. также алерт QueueGrowing). Проверить + # `docker compose ps llm` / `llm-gpu` и `docker compose logs llm`. diff --git a/deploy/monitoring/grafana/dashboards/pipelines.json b/deploy/monitoring/grafana/dashboards/pipelines.json index aa4c7bb..7032f87 100644 --- a/deploy/monitoring/grafana/dashboards/pipelines.json +++ b/deploy/monitoring/grafana/dashboards/pipelines.json @@ -1,5 +1,6 @@ { "title": "Пайплайны пост-обработки", + "description": "Требует профилей compose transcribe/llm (см. .env.example, COMPOSE_PROFILES) — по умолчанию (media,monitoring) большинство панелей будет показывать «No data», это ожидаемо, не баг.", "uid": "vidconf-pipelines", "editable": false, "timezone": "browser", @@ -104,7 +105,7 @@ { "id": 5, "title": "LLM-сервер доступен (job=llm)", - "description": "up{job=\"llm\"} — 1, если Prometheus успешно скрейпит llama.cpp (алерт LlmDown, deploy/monitoring/alerts.yml). Актуально только на инсталляциях с профилем llm/llm-gpu (пресеты 3–5).", + "description": "up{job=\"llm\"} — 1, если Prometheus успешно скрейпит llama.cpp (алерт LlmDown, deploy/monitoring/alerts.yml). Job llm и алерт LlmDown закомментированы по умолчанию (см. prometheus.yml/alerts.yml) — раскомментируйте оба на инсталляциях с профилем llm/llm-gpu (пресеты 3–5), иначе эта панель показывает «No data».", "type": "stat", "gridPos": { "h": 4, "w": 6, "x": 0, "y": 16 }, "datasource": { "type": "prometheus", "uid": "prometheus" }, diff --git a/deploy/monitoring/prometheus.yml b/deploy/monitoring/prometheus.yml index 04c43e2..15bf565 100644 --- a/deploy/monitoring/prometheus.yml +++ b/deploy/monitoring/prometheus.yml @@ -40,6 +40,14 @@ scrape_configs: # которого в сети compose есть сетевой алиас `llm`, см. его определение в # deploy/docker-compose.yml) — эти профили взаимоисключающи, поэтому один # job без дублирования и без вечно недоступного второго таргета. - - job_name: llm - static_configs: - - targets: ["llm:8080"] + # + # Закомментировано по умолчанию: целевой набор профилей compose — + # `media,monitoring` (см. .env.example, COMPOSE_PROFILES), БЕЗ `llm`/ + # `llm-gpu` — таргет `llm:8080` в этом случае не резолвится вовсе, и + # Prometheus писал бы в лог постоянные ошибки скрейпа, а алерт `LlmDown` + # (deploy/monitoring/alerts.yml, тоже закомментирован) вечно оставался бы + # firing. Раскомментируйте оба вместе на инсталляциях с профилем + # `llm`/`llm-gpu` (пресеты 3–5 install.sh). + # - job_name: llm + # static_configs: + # - targets: ["llm:8080"] diff --git a/docs/deploy/monitoring.md b/docs/deploy/monitoring.md index 245ec89..e2b1778 100644 --- a/docs/deploy/monitoring.md +++ b/docs/deploy/monitoring.md @@ -19,7 +19,7 @@ ## 2. Запуск ```bash -docker compose -f deploy/docker-compose.yml --profile monitoring up -d +docker compose -f deploy/docker-compose.yml --env-file .env --profile monitoring up -d ``` - Prometheus: http://localhost:9090 @@ -53,32 +53,41 @@ Job `llm` в `prometheus.yml` скрейпит `llm:8080/metrics` см. `deploy/docker-compose.yml`) — профили `llm`/`llm-gpu` взаимоисключающи по пресету, поэтому один job без дублирования. +**По умолчанию job `llm` закомментирован** в `prometheus.yml` (вместе с +алертом `LlmDown` в `alerts.yml`) — целевой набор профилей compose +(`media,monitoring`, см. `.env.example`) не включает `llm`/`llm-gpu`, и +таргет `llm:8080` не резолвится вовсе. Раскомментируйте job и алерт вместе, +если инсталляция запущена с профилем `llm`/`llm-gpu` (пресеты 3–5 +`install.sh`) — иначе панель «LLM-сервер доступен» дашборда «Пайплайны +пост-обработки» будет показывать «No data». + ## 4. Алерты (`deploy/monitoring/alerts.yml`) | Алерт | Условие | severity | |---|---|---| | `PipelineFailed` | рост числа сеансов в статусе `failed` за 15 минут | critical | | `QueueGrowing` | глубина очереди растёт 15 минут подряд и превышает 10 задач | warning | -| `LlmDown` | `up{job="llm"} == 0` дольше 2 минут | critical | +| `LlmDown` | `up{job="llm"} == 0` дольше 2 минут | critical (закомментирован по умолчанию) | `LlmDown` актуален только на инсталляциях с профилем `llm`/`llm-gpu` -(пресеты 3–5) — на пресетах 1/2 (без AI) таргет `llm:8080` в принципе не -резолвится и алерт будет постоянно активен, если профиль `monitoring` -включён без AI-профиля; в таком случае правило можно закомментировать в -локальной копии `alerts.yml`. +(пресеты 3–5) — по умолчанию (профили `media,monitoring`, без AI) правило +закомментировано в `alerts.yml` вместе с job `llm` в `prometheus.yml`. +Раскомментируйте оба, если поднимаете профиль `llm`/`llm-gpu`. -Проверка — искусственно завалить пайплайн и убедиться, что алерт срабатывает: +Проверка (после раскомментирования job/алерта, на инсталляции с профилем +`llm`/`llm-gpu`) — искусственно завалить пайплайн и убедиться, что алерт +срабатывает: ```bash # Стек с профилями media, transcribe, llm, monitoring уже поднят, # идёт активная суммаризация (сеанс в статусе summarizing). -docker compose -f deploy/docker-compose.yml stop llm +docker compose -f deploy/docker-compose.yml --env-file .env stop llm # Подождать > 2 минут → Prometheus (http://localhost:9090/alerts) # должен показать LlmDown в состоянии firing, следом — QueueGrowing # (очередь summarize перестаёт разбираться) и, если сеанс не восстановится # за 15 минут (recover_stuck_summaries переставит задачу, workers/celery_app.py), # PipelineFailed. -docker compose -f deploy/docker-compose.yml start llm +docker compose -f deploy/docker-compose.yml --env-file .env start llm ``` ## 5. Хранение