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:
@@ -41,19 +41,22 @@ groups:
|
|||||||
# LLM-сервер (llama.cpp, job `llm` — см. комментарий в prometheus.yml
|
# LLM-сервер (llama.cpp, job `llm` — см. комментарий в prometheus.yml
|
||||||
# про сетевой алиас `llm`/`llm-gpu`) недоступен. Актуально ТОЛЬКО на
|
# про сетевой алиас `llm`/`llm-gpu`) недоступен. Актуально ТОЛЬКО на
|
||||||
# инсталляциях с включённым профилем `llm`/`llm-gpu` (пресеты 3–5,
|
# инсталляциях с включённым профилем `llm`/`llm-gpu` (пресеты 3–5,
|
||||||
# `install.sh`) — на пресетах 1/2 (без AI) таргет `llm:8080` в принципе
|
# `install.sh`) — целевой набор профилей по умолчанию (`media,monitoring`,
|
||||||
# не резолвится, и этот алерт будет постоянно активен, если профиль
|
# см. .env.example) их не включает, поэтому правило закомментировано
|
||||||
# `monitoring` включён без AI-профиля; для таких инсталляций правило
|
# вместе с job `llm` в prometheus.yml (иначе `up{job="llm"}` не находит
|
||||||
# можно отключить (закомментировать) в локальной копии alerts.yml.
|
# ни одной серии — сам по себе закомментированный job уже не даёт этому
|
||||||
- alert: LlmDown
|
# алерту сработать, но держать активное правило на несуществующую
|
||||||
expr: up{job="llm"} == 0
|
# метрику вводит в заблуждение). Раскомментируйте оба вместе на
|
||||||
for: 2m
|
# инсталляциях с профилем `llm`/`llm-gpu`.
|
||||||
labels:
|
# - alert: LlmDown
|
||||||
severity: critical
|
# expr: up{job="llm"} == 0
|
||||||
annotations:
|
# for: 2m
|
||||||
summary: "LLM-сервер (llama.cpp) недоступен"
|
# labels:
|
||||||
description: >-
|
# severity: critical
|
||||||
Prometheus не может достучаться до llm:8080 дольше 2 минут —
|
# annotations:
|
||||||
суммаризация встанет (задачи будут копиться в очереди summarize,
|
# summary: "LLM-сервер (llama.cpp) недоступен"
|
||||||
см. также алерт QueueGrowing). Проверить
|
# description: >-
|
||||||
`docker compose ps llm` / `llm-gpu` и `docker compose logs llm`.
|
# Prometheus не может достучаться до llm:8080 дольше 2 минут —
|
||||||
|
# суммаризация встанет (задачи будут копиться в очереди summarize,
|
||||||
|
# см. также алерт QueueGrowing). Проверить
|
||||||
|
# `docker compose ps llm` / `llm-gpu` и `docker compose logs llm`.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"title": "Пайплайны пост-обработки",
|
"title": "Пайплайны пост-обработки",
|
||||||
|
"description": "Требует профилей compose transcribe/llm (см. .env.example, COMPOSE_PROFILES) — по умолчанию (media,monitoring) большинство панелей будет показывать «No data», это ожидаемо, не баг.",
|
||||||
"uid": "vidconf-pipelines",
|
"uid": "vidconf-pipelines",
|
||||||
"editable": false,
|
"editable": false,
|
||||||
"timezone": "browser",
|
"timezone": "browser",
|
||||||
@@ -104,7 +105,7 @@
|
|||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"title": "LLM-сервер доступен (job=llm)",
|
"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",
|
"type": "stat",
|
||||||
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 16 },
|
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 16 },
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
||||||
|
|||||||
@@ -40,6 +40,14 @@ scrape_configs:
|
|||||||
# которого в сети compose есть сетевой алиас `llm`, см. его определение в
|
# которого в сети compose есть сетевой алиас `llm`, см. его определение в
|
||||||
# deploy/docker-compose.yml) — эти профили взаимоисключающи, поэтому один
|
# deploy/docker-compose.yml) — эти профили взаимоисключающи, поэтому один
|
||||||
# job без дублирования и без вечно недоступного второго таргета.
|
# job без дублирования и без вечно недоступного второго таргета.
|
||||||
- job_name: llm
|
#
|
||||||
static_configs:
|
# Закомментировано по умолчанию: целевой набор профилей compose —
|
||||||
- targets: ["llm:8080"]
|
# `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"]
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
## 2. Запуск
|
## 2. Запуск
|
||||||
|
|
||||||
```bash
|
```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
|
- Prometheus: http://localhost:9090
|
||||||
@@ -53,32 +53,41 @@ Job `llm` в `prometheus.yml` скрейпит `llm:8080/metrics`
|
|||||||
см. `deploy/docker-compose.yml`) — профили `llm`/`llm-gpu` взаимоисключающи
|
см. `deploy/docker-compose.yml`) — профили `llm`/`llm-gpu` взаимоисключающи
|
||||||
по пресету, поэтому один job без дублирования.
|
по пресету, поэтому один 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`)
|
## 4. Алерты (`deploy/monitoring/alerts.yml`)
|
||||||
|
|
||||||
| Алерт | Условие | severity |
|
| Алерт | Условие | severity |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `PipelineFailed` | рост числа сеансов в статусе `failed` за 15 минут | critical |
|
| `PipelineFailed` | рост числа сеансов в статусе `failed` за 15 минут | critical |
|
||||||
| `QueueGrowing` | глубина очереди растёт 15 минут подряд и превышает 10 задач | warning |
|
| `QueueGrowing` | глубина очереди растёт 15 минут подряд и превышает 10 задач | warning |
|
||||||
| `LlmDown` | `up{job="llm"} == 0` дольше 2 минут | critical |
|
| `LlmDown` | `up{job="llm"} == 0` дольше 2 минут | critical (закомментирован по умолчанию) |
|
||||||
|
|
||||||
`LlmDown` актуален только на инсталляциях с профилем `llm`/`llm-gpu`
|
`LlmDown` актуален только на инсталляциях с профилем `llm`/`llm-gpu`
|
||||||
(пресеты 3–5) — на пресетах 1/2 (без AI) таргет `llm:8080` в принципе не
|
(пресеты 3–5) — по умолчанию (профили `media,monitoring`, без AI) правило
|
||||||
резолвится и алерт будет постоянно активен, если профиль `monitoring`
|
закомментировано в `alerts.yml` вместе с job `llm` в `prometheus.yml`.
|
||||||
включён без AI-профиля; в таком случае правило можно закомментировать в
|
Раскомментируйте оба, если поднимаете профиль `llm`/`llm-gpu`.
|
||||||
локальной копии `alerts.yml`.
|
|
||||||
|
|
||||||
Проверка — искусственно завалить пайплайн и убедиться, что алерт срабатывает:
|
Проверка (после раскомментирования job/алерта, на инсталляции с профилем
|
||||||
|
`llm`/`llm-gpu`) — искусственно завалить пайплайн и убедиться, что алерт
|
||||||
|
срабатывает:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Стек с профилями media, transcribe, llm, monitoring уже поднят,
|
# Стек с профилями media, transcribe, llm, monitoring уже поднят,
|
||||||
# идёт активная суммаризация (сеанс в статусе summarizing).
|
# идёт активная суммаризация (сеанс в статусе 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)
|
# Подождать > 2 минут → Prometheus (http://localhost:9090/alerts)
|
||||||
# должен показать LlmDown в состоянии firing, следом — QueueGrowing
|
# должен показать LlmDown в состоянии firing, следом — QueueGrowing
|
||||||
# (очередь summarize перестаёт разбираться) и, если сеанс не восстановится
|
# (очередь summarize перестаёт разбираться) и, если сеанс не восстановится
|
||||||
# за 15 минут (recover_stuck_summaries переставит задачу, workers/celery_app.py),
|
# за 15 минут (recover_stuck_summaries переставит задачу, workers/celery_app.py),
|
||||||
# PipelineFailed.
|
# PipelineFailed.
|
||||||
docker compose -f deploy/docker-compose.yml start llm
|
docker compose -f deploy/docker-compose.yml --env-file .env start llm
|
||||||
```
|
```
|
||||||
|
|
||||||
## 5. Хранение
|
## 5. Хранение
|
||||||
|
|||||||
Reference in New Issue
Block a user