12 KiB
module-09-vm2. Наблюдаемость ВМ2 Processing
Статус: целевая спецификация реализации наблюдаемости на ВМ2.
Канонический контракт (JSON-лог, redaction, sampling, Collector pipeline, SigNoz) —arch-07-observability.md. Его поля, labels иservice.namespaceздесь не переопределяются.
Контур ВМ1 в этот документ не входит:module-09-observability-vm1.md. Корреляция сквозного запроса — поrequest_id/trace_id.
1. Назначение и границы
Документ задаёт, что агент ВМ2 реализует в Compose, коде, тестах и алертах этой машины.
ВМ2 владеет nginx (public CRM webhook + private 8443), message-safety, bitrix-sync, clamd/freshclam, Redis Safety и локальным Collector. Guest bootstrap, Keycloak, api-backend и bitrix-local-app живут на ВМ1. ВМ2 не использует Docker hostname collector ВМ1.
Агент ВМ2 не добавляет scrape, дашборды и алерты сервисов ВМ1.
2. Сервисы и service.name
| Компонент | service.name |
|---|---|
| nginx public/private | nginx |
message-safety API/worker |
message-safety |
bitrix-sync |
bitrix-sync |
| Redis Safety | redis |
| local Collector | otel-collector |
clamd / freshclam покрываются host/container metrics и сигналами Safety (signature age, scan lanes), отдельное service.name в реестр arch-07 не добавляется без явного решения.
Различать экземпляр от ВМ1 через host.name / service.instance.id.
3. Collector на ВМ2
- отдельный экземпляр в root Compose ВМ2, собственный volume
otel-queue; - приложения ВМ2 экспортируют OTLP только в
otel-collector:4317этой машины; - export в SigNoz
192.168.0.5:4317; hostname collector ВМ1 запрещён; - pipeline, processors, limits,
otel-queue-initи fail-open — arch-07 §3, §13, §14. - telemetry outage fail-open для Safety readiness, но создаёт alert; business fail-open не отменяет Safety fail-closed на содержимом.
Scrape targets ВМ2 (кроме самого Collector): Redis Safety exporter, nginx exporter, сервисные /metrics message-safety и bitrix-sync, если они не идут OTLP.
4. Instrumentation
Правила FastAPI/HTTPX/PG/Redis/S3/workers, JSON access log nginx и hostmetrics — arch-07 §8. Ниже только покрытие ВМ2.
4.1. message-safety
- server spans API с route template; poll
202не маскирует финальный verdict; - worker spans claim/process/finalize и span links на origin
request_id/trace_idcaller; - child spans: PostgreSQL Safety schema, Redis Safety, S3 quarantine, ClamAV/DNS classification без file content и raw URL;
/health/liveисключить из traces; capability/readiness — metrics и sampled logs;- stub mode (
400, non-sticky) маркируется какstub; production SLO Safety на stub недостоверен.
4.2. bitrix-sync
- server spans webhook (после nginx allow-list);
- worker/batch/CRM client spans; Bitrix может не вернуть context — span закрывается результатом;
- async queue — span link, не подмена долгого worker trace;
- query token, raw payload и download URL не попадают в attributes.
4.3. nginx ВМ2
Access log по arch-07 §8.4. Route class — bounded set: exact CRM webhook, ACME/redirect, private Safety. Query/body webhook не логируются. Метрика webhook_rejected_total{receiver,reason="source_ip"} формируется на nginx, потому что запрещённый запрос до upstream не доходит.
Без native OTEL module первый server span создаёт message-safety или bitrix-sync.
4.4. Redis Safety и PostgreSQL
Exporter и ACL — arch-07 §8.2–8.3. Клиентские pool/queue metrics публикуют Safety и bitrix-sync. Keys/values, file bytes и message text не экспортируются.
4.5. Host/Docker ВМ2
CPU, memory, disk, network, restarts/OOM, Docker daemon, clock sync — arch-07 §8.5. Отдельно контролировать clamd restarts, signature age и scan lane saturation.
5. Метрики бизнес-потоков ВМ2
Message Safety
- checks/verdicts по
allow|deny|pending|error; processing_mode, active/usedconfig_version, config activation result,message_safety_mock_enabledи forced outcomes поtext|file/allow|deny;- poll duration/count buckets, timeout и recovery backlog age;
- stub mode info и terminal
400отдельно, пока действует test-only контракт; - cache hit, Redis latency, task expired/not-found.
Files / S3 со стороны Safety
- quarantine object age/orphans;
- checksum/MIME/size reject;
- S3 dependency latency/error by operation and logical bucket.
Init/complete/promote/presigned download со стороны API — спецификация ВМ1.
bitrix-sync
- queue depth/oldest age, workflow/command transitions;
- CRM batch latency/subcommand outcome;
- limiter/throttle, retry/DLQ;
- webhook/reconciliation lag;
- mapping invariants и business-alert SLA;
- nginx
webhook_rejected_total{receiver,reason="source_ip"}.
До module-07 preflight Queue/CRM SLI не включаются; dashboard показывает sync_disabled, а не синтетический CRM success.
UUID/user/session/dialog/task/message id не labels.
6. Dashboards ВМ2
В SigNoz, с filter host.name / environment ВМ2:
- nginx ingress ВМ2: RPS, 4xx/5xx, upstream latency/status, TLS, cache, CRM webhook (accept/reject by source IP, method, rate limit). Без guest API/WS — это ВМ1.
- message-safety: capabilities, verdicts,
202poll, PG queue age/leases/fencing, ClamAV/signature age, file/link cache и DNS dependency. Stub явно маркируется. - bitrix-sync: mode/readiness, queue depth/oldest age, workflow/command transitions, CRM batch latency/subcommand outcome, limiter/throttle, retry/DLQ, webhook/reconciliation lag, mapping invariants и business-alert SLA. До cutover —
sync_disabled. - Redis Safety: memory/evictions/AOF/latency/clients/keyspace.
Сквозные Executive/SLO, Business flow и Collector health — arch-07 §10.
7. Alerts ВМ2
Политика SLO — arch-07 §11. Ниже alerts, которые закрывает on-call ВМ2.
Paging
- oldest safety task >5 минут либо Safety DLQ >0;
- Message Safety active config missing/invalid, referenced artifact unavailable или config refresh stale >5 с;
message_safety_mock_enabled=1— active page/high-severity alert без auto-resolve по времени; закрывается только после возврата в standard;- bitrix-sync invalid/revoked credential или обязательная configuration/grant missing;
- bitrix-sync technical DLQ >0, mapping invariant violation или worker/limiter heartbeat stale;
- bitrix-sync queue oldest age >30 с при healthy CRM либо sustained рост;
- Contact webhook/reconciliation cursor lag выше двух configured intervals;
- Redis Safety unavailable, AOF error или sustained evictions;
- Collector ВМ2 exporter queue >80%, dropped/refused telemetry >0 sustained;
- TLS expiry public webhook host и private
8443<14 дней warning, <7 дней page; - disk/OOM/restart loop ВМ2;
clamdrestart loop / stale signatures по runbook module-05.
Ticket/warning
- p95 Safety poll/scan regression 20% release-over-release;
- bitrix-sync CRM last success stale, rate-limit errors выше baseline или business alert SLA overdue;
- quarantine orphan growth;
- cardinality/ingest growth >2× baseline на сериях ВМ2.
Keycloak login, guest bootstrap и edge API 5xx ВМ1 — не алерты репозитория ВМ2.
8. Docker Compose ВМ2
Root Compose включает otel-collector по arch-07 §14. Сети приложений ВМ2: backend + observability; nginx — свои public/private сети по arch-03 / module-03-nginx-vm2.md.
Optional profile observability-local на ВМ2 по умолчанию выключен: малая VM, extra RAM/disk не закладываются.
9. Runbooks ВМ2
Общие (Collector not-ready, missing telemetry, remote outage, cardinality, PII) — arch-07 §16.
Высокая latency сообщения (hop ВМ2)
- Найти task/span по
request_idcaller. - Разделить Safety API, worker lease, ClamAV/DNS, S3 quarantine, sync queue.
- Проверить circuit, queue age, PG leases/fencing и Redis Safety.
- Не повторять ambiguous scan/send без исходного idempotency key.
- Следовать runbook
module-05-message-safety.md/module-07-bitrix-sync.md. - Delay до Safety (nginx/API ВМ1) — инцидент владельца ВМ1.
MOCK включён в production-like
- Подтвердить
message_safety_mock_enabled=1и paging alert. - Не auto-resolve по времени.
- Вернуть standard через root-owned five-command helper; проверить persistent alert closed.
- Canary allow/deny после возврата.
10. Definition of Done ВМ2
Дополнительно к arch-07 §17:
- Collector ВМ2 validate + up в root Compose; hostname collector ВМ1 не используется;
- инструментированы
message-safetyAPI/worker иbitrix-sync; - nginx JSON parsing, webhook reject metric и private
8443correlation проверены; - Redis Safety, host/Collector, ClamAV signature age metrics доступны;
- дашборды и alerts §6–§7 provisioned либо явно TBD до SigNoz packaging;
- stub/MOCK маркируются; production Safety SLO не объявляется на stub;
- до sync cutover dashboard
sync_disabled; - canary secret/PII/message body/file content/presigned URL отсутствуют в сигналах ВМ2;
- request с известным
request_idнаходится в Safety spans; сквозной nginx ВМ1 → API → Safety —arch-10-deployment.md§11 /module-10-deployment-vm2.md.
11. TBD и конфликты, принадлежащие ВМ2
- Conflict module-05: test-only
400/ non-sticky verdict. Dashboards маркируютstub; production SLO Safety недостоверен. - Conflict module-07: до preflight/cutover показывать
sync_disabled, не синтетический CRM success. - O-TBD5 в части nginx OTEL module pinned image ВМ2.
12. Ссылки
- Контракт:
arch-07-observability.md. - ВМ1:
module-09-observability-vm1.md. - Указатель:
module-09-observability.md. - Safety / sync / nginx:
module-05-message-safety.md,module-07-bitrix-sync.md,module-03-nginx-vm2.md. - Деплой:
module-10-deployment-vm2.md.