Files
Deal/deploy/observability/promtail.yml
T
Rustam Khalimov 27c7831910
ci / build-test (push) Canceled after 0s
Deal — единая кодовая база
SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/
Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue,
контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер),
Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог).

Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0,
тесты 1340/130/52/38/9 зелёные.
2026-09-11 23:56:47 +03:00

53 lines
3.1 KiB
YAML

# Promtail — сбор логов контейнеров deal-стека для Loki (Ruling 7/9, план Task 14).
#
# Источник — docker-логи ВСЕХ контейнеров хоста через docker_sd (нужен доступ к docker.sock, см.
# compose.prod.yml). Контейнеры deal-процессов пишут в stdout одну JSON-строку на событие
# (Serilog CompactJsonFormatter, Ruling 7) — лог можно парсить в Loki через «| json» без доп. шаблонов.
# relabel добавляет метки: container (имя контейнера) и service (имя compose-сервиса из стандартной
# метки com.docker.compose.service) — по ним строятся дашборды Grafana (Deal-Health, Deal-Auth,
# Deal-Errors, Deal-Rps, Deal-Logs). Pipeline дополнительно поднимает поле Serilog "@l" в метку
# level (Information/Warning/Error/Fatal) — по ней фильтруют панели Deal-Logs.
server:
http_listen_port: 9080
grpc_listen_port: 0
# Позиции чтения — на volume deal_promtail_data (переживают рестарт контейнера).
positions:
filename: /var/lib/promtail/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: docker
docker_sd_configs:
- host: unix:///var/run/docker.sock
refresh_interval: 5s
relabel_configs:
# Имя контейнера (docker присваивает <проект>-<сервис>-<n> или container_name).
- source_labels: ["__meta_docker_container_name"]
regex: "/(.*)"
target_label: container
# Имя compose-сервиса (core/telegram-service/ai-service/ml-service/...) из метки compose.
- source_labels: ["__meta_docker_container_label_com_docker_compose_service"]
target_label: service
# Поток stdout/stderr — отдельной меткой (у Serilog весь вывод — stdout).
- source_labels: ["__meta_docker_container_log_stream"]
target_label: stream
pipeline_stages:
# Пайплайн применяется ТОЛЬКО к deal-процессам (match по метке service из relabel выше):
# их логи — одна JSON-строка Serilog CompactJsonFormatter на событие. Прочие контейнеры
# хоста (postgres/minio/caddy/loki/...) пишут не-JSON — их пайплайн не трогает.
- match:
selector: '{service=~"core|telegram-service|ai-service|ml-service"}'
stages:
# Поле Serilog "@l" (ключ со спецсимволом @ — литерал JMESPath в одинарных кавычках).
- json:
expressions:
level: '"@l"'
# drop_malformed не задан (false) — строка без валидного JSON не роняется, а проходит
# без метки level (деградация мягкая).
- labels:
level: