From 1c0c35946d62a82d5e129838c5eb3af2b5500341 Mon Sep 17 00:00:00 2001 From: stepan Date: Sun, 13 Sep 2026 13:47:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8E=20observability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/observability/README.md | 6 ++++-- docs/technical/Техническая-документация-Дейл.md | 15 ++++++++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/deploy/observability/README.md b/deploy/observability/README.md index 4623529..6a2879c 100644 --- a/deploy/observability/README.md +++ b/deploy/observability/README.md @@ -35,14 +35,16 @@ Grafana → папка «Дейл» → `Deal-Metrics-Overview` / `Deal-Logs` / - **метрики**: `DealMetricsHosting` — OTel → Prometheus, отдельный HTTP/1.1-эндпоинт `/metrics:9464` (env `METRICS_PORT`); -- **трейсы**: `DealTracingHosting` — OTel → OTLP, включается env `OTEL_EXPORTER_OTLP_ENDPOINT` +- **трейсы**: `DealTracingHosting` — OTel → OTLP, **опт-ин** через env `OTEL_EXPORTER_OTLP_ENDPOINT` (адрес коллектора; без него трейсинг выключен), имя сервиса — `OTEL_SERVICE_NAME`; - **логи**: Serilog JSON обогащается `TraceId`/`SpanId` (`TraceContextEnricher`) для связи с трейсами. ## Дашборды и алерты Дашборды — как код: `grafana/dashboards/*.json` (правки только в репозитории, UI не сохраняет). -Алерты — `prometheus-rules.yml` (доступность, ошибки/5xx, очереди, ресурсы хоста и контейнеров). +Алерты — `prometheus-rules.yml` (доступность, ошибки/5xx, очереди). Алерты по **ресурсам** вынесены в +`prometheus-resource-rules.yml` и **отключены по умолчанию**; включаются добавлением файла в `rule_files`, +пороги — через env `DEAL_ALERT_*` (см. шапку файла). ## Обновление версий образов diff --git a/docs/technical/Техническая-документация-Дейл.md b/docs/technical/Техническая-документация-Дейл.md index 64bb129..76dce27 100644 --- a/docs/technical/Техническая-документация-Дейл.md +++ b/docs/technical/Техническая-документация-Дейл.md @@ -311,10 +311,11 @@ settings(Key varchar(200) PK, ValueJson text, UpdatedAt timestamptz) -- `Deal.Grpc.Hosting` (`DealTracingHosting`) для telegram/ai/ml/storage и `Deal.Api/Observability/ DealTracingHosting.cs` для ядра. Инструментируется входящий HTTP/gRPC (AspNetCore), исходящие HTTP-клиенты и gRPC-клиенты (GrpcNetClient) — трейсы сквозные от входа до БД/внешних сервисов. -- **Включение — через env** `OTEL_EXPORTER_OTLP_ENDPOINT` (адрес коллектора, напр. - `http://otel-collector:4317`); без него трейсинг выключен (коллектор не задан — dev без профиля - `observability`). Имя сервиса в трейсах — `OTEL_SERVICE_NAME` (дефолт по процессу: `core`, - `telegram-service`, `ai-service`, `ml-service`, `storage-service`). +- **Включение — опт-ин через env** `OTEL_EXPORTER_OTLP_ENDPOINT` (адрес коллектора, напр. + `http://otel-collector:4317`); без него трейсинг выключен. В compose env задан пустым + (`${DEAL_OTEL_ENDPOINT:-}`) — чтобы включить, задайте `DEAL_OTEL_ENDPOINT` в `.env`. Имя сервиса в + трейсах — `OTEL_SERVICE_NAME` (дефолт по процессу: `core`, `telegram-service`, `ai-service`, + `ml-service`, `storage-service`). - **Корреляция с логами**: Serilog обогащается `TraceId`/`SpanId` из `Activity.Current` (`TraceContextEnricher`) — в Loki-логе есть `TraceId`, а датасорс Loki `derivedFields` даёт переход из лога в трейс Tempo (и обратно — `tracesToLogsV2`). @@ -328,8 +329,8 @@ settings(Key varchar(200) PK, ValueJson text, UpdatedAt timestamptz) -- (CPU/RAM/сеть/диск); **node-exporter** (`prom/node-exporter:v1.9.1`) — ресурсы **хоста** (CPU/RAM/ диски/сеть). Оба scrape'ит Prometheus (jobs `cadvisor`, `node-exporter` в `prometheus.yml`). - Дашборд `Deal-Resources` (uid `deal-resources`): CPU/RAM контейнеров, CPU/RAM хоста, свободное место - на дисках. Алерты группы `deal-resources` (`prometheus-rules.yml`): высокая загрузка CPU/памяти - хоста, мало места на диске, приближение контейнера к лимиту CPU/памяти. + на дисках. Правила алертов по ресурсам — в отдельном файле `prometheus-resource-rules.yml`, + **отключены по умолчанию** (не входят в `rule_files`); пороги — через env `DEAL_ALERT_*` при включении. --- @@ -362,7 +363,7 @@ settings(Key varchar(200) PK, ValueJson text, UpdatedAt timestamptz) -- - Одна внутренняя сеть; наружу — только **caddy** (80/443): TLS (шапка `deploy/caddy/Caddyfile` — `tls internal` для dev/интранет, для реального домена заменить на Cloudflare-origin/сертификаты), статика `src/frontend/dist`, `reverse_proxy /api → core:5080`, security-заголовки (CSP/HSTS — здесь). -- `core` (:5080 http + :5082 gRPC-ингресс), `telegram/ai/ml-service` (mTLS-env, Ruling 6), +- `core` (:5080 http + :5082 gRPC-ингресс), `telegram/ai/ml/storage-service` (mTLS-env, Ruling 6), `postgres`/`minio` **без host-портов**; healthcheck'и — `grpc_health_probe` (при mTLS — TLS-проба с PEM `deal-client.crt/.key`)/`pg_isready`. - Профиль `observability`: `otel-collector`/`tempo` (трейсы), `loki`/`promtail` (логи),