Scanner.Observability 0.1.2
Scanner.Observability
Общие observability-хелперы для HTTP-сервисов bscanner.
Что входит в пакет
- middleware и helpers для
correlation id - request logging baseline с подавлением шумных путей
- обёртки для HTTP metrics через
prometheus-net.AspNetCore - helper для доменной метрики
scan_item_result_total - helper для логирования результатов сканирования
Базовое подключение в ASP.NET Core
using Scanner.Observability;
var app = builder.Build();
app.UseCorrelationId();
app.UseScannerRequestLogging();
app.UseAuthentication();
app.UseAuthorization();
app.UseScannerHttpMetrics();
app.MapHealthChecks("/health");
app.MapScannerMetrics();
app.MapReverseProxy();
Настройка correlation id
По умолчанию пакет:
- использует заголовок
x-correlation-id - переиспользует входной correlation id, если он пришёл в запросе
- генерирует новый id, если входного значения нет
- синхронизирует
HttpContext.TraceIdentifier - добавляет correlation id в response header
При необходимости поведение можно переопределить:
app.UseCorrelationId(options =>
{
options.HeaderName = "x-request-id";
options.UseIncomingHeader = true;
options.IncludeInResponseHeader = true;
options.SetTraceIdentifier = true;
});
Настройка request logging
По умолчанию request logging:
- пишет completion log и для успешных, и для ошибочных запросов
- подавляет шум от
/healthи/metrics - сохраняет
correlation_idв structured log fields
Если нужно не скрывать технические пути, а логировать их на пониженном уровне:
using Microsoft.Extensions.Logging;
app.UseScannerRequestLogging(options =>
{
options.NoisePathLogLevel = LogLevel.Debug;
});
Metrics endpoint
Для HTTP metrics пакет даёт две обёртки:
app.UseScannerHttpMetrics();app.MapScannerMetrics();
По умолчанию metrics endpoint публикуется на /metrics. Путь можно переопределить:
app.MapScannerMetrics(options =>
{
options.EndpointPath = "/internal/metrics";
});
Documented Verification Harness
Минимальный verification harness для сервиса, который использует пакет:
- Поднять сервис с
UseCorrelationId(),UseScannerRequestLogging(),UseScannerHttpMetrics()иMapScannerMetrics(). - Проверить, что
GET /healthотвечает как и до подключения пакета. - Проверить, что
GET /metricsотвечает успешно и не ломает обычный pipeline приложения. - Выполнить обычный HTTP-запрос без входного correlation id.
- Убедиться, что в логах появился completion log с
correlation_id. - Убедиться, что шум от
/healthи/metricsлибо подавлен, либо понижен до ожидаемого уровня.
No packages depend on Scanner.Observability.
.NET 8.0
- prometheus-net (>= 8.2.1)
- prometheus-net.AspNetCore (>= 8.2.1)