System.Diagnostics.Metrics и
System.Diagnostics.ActivitySource — и сам ничего никуда не экспортирует. Инструменты принадлежат
компонентам; хост подписывается на них и решает, куда уходят данные. Имена на этой странице —
публичный контракт: стройте на них дашборды и алерты.
Включить экспорт
- Self-hosted образ
- Встроен в ваш хост
Образ уже подписан на оба метра и оба источника спанов, а также на инструментацию ASP.NET Core,
Без переменной ничего не экспортируется. С ней метрики, трассы и логи уходят по OTLP; остальные
стандартные переменные
HttpClient и рантайма .NET. Экспорт включается, когда стандартная переменная OpenTelemetry
указывает на коллектор:OTEL_EXPORTER_OTLP_* (протокол, заголовки) и OTEL_SERVICE_NAME
читает сам OpenTelemetry SDK, как обычно.Собственного scrape-эндпоинта у образа нет — /metrics не существует. Для Prometheus
направьте образ на OpenTelemetry Collector, а метрики отдавайте или отправляйте уже из него.Метрики
Транзакции — метр Veriqa.Core.TransactionEngine
initiatedсчитает транзакции, вошедшие в жизненный цикл;terminated— дошедшие до терминального состояния, каждую один раз: повторный терминальный переход дважды не считается.duration— время жизни от создания до терминального состояния. Когда в цикле человек, его определяет то, как долго он отвечает, а не сервер.- Воронка входа —
initiatedпротивterminatedс исходомcompleted; доля отказов — доля остальных исходов, кромеsuperseded: это повторная попытка, а не отказ, и она считается отдельно отfailed, чтобы повторы не поднимали долю сбоев.
completed — намеренно не confirmed. Пользователю в мессенджере показывается «подтверждено»;
движок записывает completed шагом позже, когда личность разрешена и сохранена. Поэтому вход,
подтверждённый в канале, всё ещё может закончиться исходом failed.Каналы — метр Veriqa.Core.ChannelAdapter
notice.failures— первый кандидат на алерт: растущий ряд означает, что пользователи не получают запрос подтверждения (notice_kind=message) или итоговый исход (notice_kind=outcome).error_code— код ошибки адаптера, всегда из реестра кодов.start.unservedделает видимой тишину. Пользователь открыл устаревшую ссылку или отсканировал старый QR, а канал без настроенного текста ответа не отвечает ничего — счётчик всё равно растёт.event.foreign_transaction— отправителю отвечают ровно так же, как на неизвестную транзакцию, поэтому ответ ничего не раскрывает. Устойчивый поток — кто-то перебирает чужие идентификаторы.
В тегах метрик нет идентификаторов. Теги не несут идентификаторов транзакции, сессии и
пользователя канала, получателя и текста сообщения. Каждый тег — закрытый перечень, поэтому
число временных рядов ограничено вашими каналами и значениями выше.
Трассы
Вход — это две трассы, а не одна. Пользователь отвечает через произвольное время после запроса,
а мессенджер контекст трассы не передаёт, поэтому входящее событие открывает собственную трассу.
Сшиваются они атрибутом:
veriqa.transaction.trace_id на входящем спане хранит идентификатор
трассы, создавшей транзакцию. Чтобы перейти от ответа к запросу входа, ищите в своём бэкенде по
этому значению.
- Для входа сохраняется идентификатор трассы запроса
/connect/authorize. Если ваше приложение передаётtraceparent, это трасса вашего приложения. - Для серверного подтверждения это
correlation_id, переданный вами в запросе. - То же значение пишется в поле
CorrelationIdзаписи аудита, так что журнал аудита и трассы соединяются им же. - Хост без трассировки для входа значения не сохраняет — идентификатор взамен не выдумывается, — и входящий спан остаётся без атрибута.
Как читать статус спана. Спан помечается
Error при сбое, который заканчивается внутри
покрываемой им операции; причина — в error_code. Незаданный статус значит «здесь сбой не
закончился», а не «операция прошла успешно»: исход транзакции — в метриках и журнале аудита.Polling входящего HTTP-запроса нет, и спана veriqa.channel.inbound тоже; спан
veriqa.transaction.complete при этом открывается.
Логи
В self-hosted образе логи включаются тем же переключателем, что и остальные сигналы: при заданнойOTEL_EXPORTER_OTLP_ENDPOINT они экспортируются по OTLP, с отформатированным сообщением и
областями (scopes) логирования. Записи, сделанные внутри спана, несут идентификаторы его трассы и
спана, так что строка лога ведёт к своей трассе.
Что пишется и не пишется в логи и на каком уровне — в разделе
Безопасность и обработка данных.
Health-эндпоинты
Это эндпоинты self-hosted образа.
Каналы намеренно не входят в readiness: недоступный мессенджер не должен выводить рабочую реплику
из ротации. Что
/health/channels сообщает и чего не сообщает — в
quickstart self-hosted.