Внедрить современный observability-стек (логи, метрики, трейсы, ресурсы) #18

Merged
rust merged 6 commits from t17_observability into main 2026-09-13 14:05:08 +03:00
Owner

#17

Стек

Современный vendor-neutral: OpenTelemetry (SDK во всех сервисах → Collector) + Loki (логи) + Tempo (трейсы) + Prometheus (метрики) + cAdvisor/node-exporter (ресурсы) + Grafana (единый UI). OpenSearch не берём (тяжёлый и дублировал бы Loki) — бэкенд логов при желании меняется без правок кода сервисов.

Что сделано

  • Трейсы: DealTracingHosting в Deal.Grpc.Hosting и Deal.Api/Observability — OTel AspNetCore/Http/GrpcNetClient → OTLP; включается env OTEL_EXPORTER_OTLP_ENDPOINT, имя — OTEL_SERVICE_NAME; подключено во всех 5 процессах.
  • Логи: TraceContextEnricher — Serilog обогащает TraceId/SpanId; datasource Loki derivedFields ведёт к трейсу, Tempo tracesToLogsV2 — обратно.
  • Стек: otel-collector (contrib 0.160.0) → tempo 2.8.1; cadvisor 0.52.1 + node-exporter 1.9.1 → Prometheus; профиль observability в prod и dev.
  • Дашборды: Deal-Traces (TraceQL + переход к логам), Deal-Resources (CPU/RAM контейнеров и хоста, диски).
  • Алерты: группа deal-resources (CPU/память/диск хоста, близость контейнера к лимитам) + существующие.
  • Docs: §7 техдокументации + deploy/observability/README.md.

Проверки

  • Сборка 5 решений: 0 предупреждений / 0 ошибок.
  • Тесты: core 1342, telegram 130, ai 52, ml 38, storage 9 — зелёные.
  • YAML/JSON-конфиги валидны; docker compose config (prod + dev, профиль observability) — OK.

Не проверено

Живой end-to-end (нет запущенного Docker-демона): таргеты Prometheus, трейсы в Tempo, дашборды. Конфиг коллектора проверен парсером YAML, команда validate образа не запускалась.

Фронт не трогался.

https://gitea.khomegeneric.keenetic.pro/rust/Deal/issues/17 ## Стек Современный vendor-neutral: **OpenTelemetry** (SDK во всех сервисах → Collector) + **Loki** (логи) + **Tempo** (трейсы) + **Prometheus** (метрики) + **cAdvisor/node-exporter** (ресурсы) + **Grafana** (единый UI). OpenSearch не берём (тяжёлый и дублировал бы Loki) — бэкенд логов при желании меняется без правок кода сервисов. ## Что сделано - **Трейсы:** `DealTracingHosting` в `Deal.Grpc.Hosting` и `Deal.Api/Observability` — OTel AspNetCore/Http/GrpcNetClient → OTLP; включается env `OTEL_EXPORTER_OTLP_ENDPOINT`, имя — `OTEL_SERVICE_NAME`; подключено во всех 5 процессах. - **Логи:** `TraceContextEnricher` — Serilog обогащает `TraceId`/`SpanId`; datasource Loki `derivedFields` ведёт к трейсу, Tempo `tracesToLogsV2` — обратно. - **Стек:** `otel-collector` (contrib 0.160.0) → `tempo` 2.8.1; `cadvisor` 0.52.1 + `node-exporter` 1.9.1 → Prometheus; профиль `observability` в prod и dev. - **Дашборды:** `Deal-Traces` (TraceQL + переход к логам), `Deal-Resources` (CPU/RAM контейнеров и хоста, диски). - **Алерты:** группа `deal-resources` (CPU/память/диск хоста, близость контейнера к лимитам) + существующие. - **Docs:** §7 техдокументации + `deploy/observability/README.md`. ## Проверки - Сборка 5 решений: 0 предупреждений / 0 ошибок. - Тесты: core 1342, telegram 130, ai 52, ml 38, storage 9 — зелёные. - YAML/JSON-конфиги валидны; `docker compose config` (prod + dev, профиль observability) — OK. ## Не проверено Живой end-to-end (нет запущенного Docker-демона): таргеты Prometheus, трейсы в Tempo, дашборды. Конфиг коллектора проверен парсером YAML, команда `validate` образа не запускалась. Фронт не трогался.
stepan added 3 commits 2026-09-13 04:49:07 +03:00
Общая настройка DealTracingHosting (Deal.Grpc.Hosting + Deal.Api):
AspNetCore/Http/GrpcNetClient инструментация, OTLP-экспорт во внешний
коллектор, имя сервиса из env. Логи обогащаются TraceId/SpanId.
Профиль observability: otel-collector (приём OTLP) -> tempo (трейсы),
cadvisor/node-exporter (ресурсы) в Prometheus, дашборды Deal-Traces и
Deal-Resources, datasource Tempo и связь логов с трейсами, алерты по
ресурсам; OTel-env у всех процессов.
stepan requested review from rust 2026-09-13 04:49:08 +03:00
stepan added 3 commits 2026-09-13 13:47:38 +03:00
- endpoint коллектора по умолчанию пуст: трейсы включаются только при
  заданном DEAL_OTEL_ENDPOINT;
- storage-service добавлен в prod-compose (mTLS, OTel env, healthcheck);
- node-exporter: убран rslave (несовместим с Docker Desktop).
Правила вынесены в prometheus-resource-rules.yml (не в rule_files);
пороги — через env DEAL_ALERT_* при включении.
Обновить документацию observability
ci / build-test (pull_request) Successful in 2m52s
1c0c35946d
rust merged commit a2da86ced7 into main 2026-09-13 14:05:08 +03:00
rust deleted branch t17_observability 2026-09-13 14:05:08 +03:00
Sign in to join this conversation.