monitoring: decouple default profile from optional llm/llm-gpu

Целевой набор профилей 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 — это ожидаемо, не баг.
This commit is contained in:
2026-07-25 21:58:20 +03:00
parent 93e98f445b
commit ca54fe84d1
4 changed files with 50 additions and 29 deletions

View File

@@ -41,19 +41,22 @@ groups:
# LLM-сервер (llama.cpp, job `llm` — см. комментарий в prometheus.yml
# про сетевой алиас `llm`/`llm-gpu`) недоступен. Актуально ТОЛЬКО на
# инсталляциях с включённым профилем `llm`/`llm-gpu` (пресеты 35,
# `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`.

View File

@@ -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 (пресеты 35).",
"description": "up{job=\"llm\"} — 1, если Prometheus успешно скрейпит llama.cpp (алерт LlmDown, deploy/monitoring/alerts.yml). Job llm и алерт LlmDown закомментированы по умолчанию (см. prometheus.yml/alerts.yml) — раскомментируйте оба на инсталляциях с профилем llm/llm-gpu (пресеты 35), иначе эта панель показывает «No data».",
"type": "stat",
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 16 },
"datasource": { "type": "prometheus", "uid": "prometheus" },

View File

@@ -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` (пресеты 35 install.sh).
# - job_name: llm
# static_configs:
# - targets: ["llm:8080"]

View File

@@ -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` (пресеты 35
`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`
(пресеты 35) — на пресетах 1/2 (без AI) таргет `llm:8080` в принципе не
резолвится и алерт будет постоянно активен, если профиль `monitoring`
включён без AI-профиля; в таком случае правило можно закомментировать в
локальной копии `alerts.yml`.
(пресеты 35) — по умолчанию (профили `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. Хранение