Николай Савенко
Altenar
Этот доклад посвящен тому, как выстраивать современный distributed tracing в .NET — от базовых диагностических инструментов платформы до полноценной observability-архитектуры на базе OpenTelemetry.
Мы начнем с разбора EventSource, DiagnosticSource и ActivitySource, чтобы понять, как эволюционировал подход к телеметрии в .NET и почему именно ActivitySource стал основой для distributed tracing. Затем разберем context propagation: как передавать trace context между сервисами, брокерами и асинхронными процессами, в том числе на примере transactional outbox.
Отдельный блок будет посвящен OpenTelemetry как способу избежать vendor lock-in и сохранить свободу выбора между различными backend'ами.
В практической части я покажу, как принимать решения по инструментированию инфраструктурных библиотек: что делать, если компонент уже использует ActivitySource, если доступен только DiagnosticSource, если есть только EventSource или если инструментирования нет совсем.
Мы также рассмотрим auto-instrumentation и IL injection, их сильные стороны, ограничения и влияние на производительность. В докладе будут собраны лучшие практики: какие части системы стоит выделять в отдельные ActivitySource, какие операции превращать в Activity и как не перегрузить систему лишними span'ами.
Для локальной разработки я покажу, как использовать Aspire Dashboard отдельно от остального Aspire, а также коротко затрону инструменты IDE, например поддержку OpenTelemetry в Rider.
В завершение мы поговорим о корреляции трейсов и логов, о продвинутых возможностях вроде baggage, linked spans, exemplars и sampling, чтобы показать, как построить трассировку, которая будет полезна не только разработчикам, но и эксплуатации.
Altenar