Skip to the content.

Task 85 — OpenTelemetry polish: console gating, process instrumentation, histogram buckets, async logging

Phase: 5 Initiative: 46 Status: done Owner: — Slug: otel-logging-polish

Goal

Четыре observability/perf-проблемы:

  1. Console exporter всегда on (M): OtelHostBuilderExtensions.cs:69,97 — console exporter для tracing и metrics добавляется всегда, даже с OTLP. Удваивает export cost + блокирует stdout.
  2. Process instrumentation не зарегистрирован (H): Hercules.csproj:70 — OpenTelemetry.Instrumentation.Process package referenced но AddProcessInstrumentation не вызывается → нет CPU/memory metrics.
  3. Histogram buckets default (M): OtelMetrics.cs:46-78 — latency/token histograms используют default buckets (too few high-end buckets) → плохое разрешение для SLO dashboards.
  4. Logging perf (M): нет async logger; LogWarning в retry hot paths без sampling → log flooding при sustained failure.

Acceptance criteria

Sub-tasks

Implementation notes

Реализовано в коммите (см. git log):

Validation

Тестовое замечание

OtelPolishTests.LlmRetryCounter_is_registered_and_usable первоначально делал Add(1, ...) в counter, что при параллельном запуске искажало результат ResilientLLMClientSampledLogTests (получал +1 от соседнего test class’а). Заменено на Assert.NotNull(...) — функциональное поведение Add покрывается интеграционным тестом в ResilientLLMClientSampledLogTests.

Scope / Likely files

src/agent/Observability/OtelHostBuilderExtensions.cs, src/agent/Observability/OtelMetrics.cs, src/agent/LLM/ResilientLLMClient.cs, src/agent/Quotas/QuotaGuard.cs, src/agent/Agent/AgentCore.cs, src/agent/Program.cs, src/agent/Hercules.WebApi/Program.cs, src/agent/appsettings.json

Dependencies

Risks / Rollback

Sampled logging может пропустить первый occurrence критического event; всегда emit metric counter + emit LogError (не sampled) для critical. Console gating: dev experience может пострадать — добавить Otel.ConsoleExporterEnabled override. Rollback: вернуть always-on console.