Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Филипп Бочаров «Распределенная трассировка Jaeger в .NET»

Филипп Бочаров «Распределенная трассировка Jaeger в .NET»

Наша команда развивает в МТС платформу Наблюдаемости. Это набор open source инструментов, которые делают работу распределенных систем простой и прозрачной. Мы собираем множество данных о нашем IT-ландшафте, но особый акцент делаем на распределенной трассировке систем и процессов.

В докладе я расскажу — почему распределенная трассировка так важна и как выжать из нее максимум! Честно рассмотрю нюансы, особенности и подводные камни использования Jaeger для.NET приложений. Дам обзор существующих открытых стандартов и альтернативных подходов в области трассировки.

Ceecdee9ee77b63d81100be62b7e1090?s=128

DotNetRu

July 10, 2020
Tweet

Transcript

  1. Распределенная трассировка Jaeger в .NET Бочаров Филипп bocharovf@gmail.com

  2. О себе Бочаров Филипп Руководитель проектов по разработке в МТС

    ИТ Занимаюсь разработкой платформы Наблюдаемости. Помогаю продуктовым командам сделать работу сложных распределенных систем понятной и прозрачной.
  3. Часть 1 из 6 В которой мы говорим о Проблеме

  4. С чего все начиналось 2014 год: перевод крупной CRM с

    монолита на SOA-архитектуру 100 сервисов, 1000 типов процессов, 50 млн. процессов/сутки Сложно проводить диагностику процессов: • Отладка на машине разработчика невозможна • Сотни разрозненных лог-файлов • Долго искать логи конкретного процесса Решение: собственная система трассировки и централизованного логирования - 30% трудозатрат на 1 баг
  5. МТС сегодня • 350+ цифровых продуктов: телемедицина, Smart Farming, Big

    Data, умный дом, внутренние платформы … • Гетерогенность IT-ландшафта: продукты используют разные языки, платформы и фреймворки • Экосистема продуктов МТС: продукты взаимодействуют между собой, образуя цельное предложение Проблема: c ростом количества продуктов растет сложность диагностики интеграционных проблем
  6. Пинг-понг багов Продукт C 1 команда в Москве 3 сервиса,

    5 человек Node.js, kubernetes, Elasticsearch A B C Продукт A 12 команд в Москве, Минске 40+ сервисов, 100+ человек .NET, Windows, собственная система логирования Продукт B 2 команды в Москве, Казани 10 сервисов, 12 человек Java, unix, логирование в файлы Вызов Вызов У нас проблем не было … А у нас уже логи потерлись  Это наверное команда A накосячила Пользователи Эй, у вас продажи не работают! Когда почините?!
  7. Часть 2 из 6 В которой мы изучим теорию

  8. 8 Наблюдаемость - возможность задавать вопросы о системе и получать

    понятные, быстрые и полные ответы. Наблюдаемость
  9. Три столпа наблюдаемости Единый связный массив данных, позволяющий проводить анализ

  10. Продукт Процесс Приложение Инфраструктура Наблюдаемость уровней IT-ландшафта +

  11. Компромисс наблюдаемости Полнота! Актуальность! Анализируемость! Диагностика занимает несколько дней Дорого

    и сложно Дорого и сложно уровень Наблюдаемости Стоимость решения запредельная
  12. Как можно обеспечить наблюдаемость? Инвазивные Белый ящик Примеры: • Observability

    as a code (Jaeger) • APM агент (AppDynamics) Неинвазивные Черный ящик Примеры: • Сбор и анализ сетевого трафика • Аналитика по базе данных • Машинный анализ логов
  13. The OpenTracing project API инструментирования, независимый от трассировщика Open Source,

    Apache 2.0 Языки: C#, Java, C++, PHP, Python, Ruby, Objective-C, Go, JavaScript, … Трассировщики: Jaeger, LightStep, Instana, DataDog
  14. Новый стандарт OpenTelemetry + = Метрики и трассировка Alpha версия

    для C# OpenTracing OpenCensus
  15. Реестр готовых решений

  16. Для .net core Инструментирование основано на DiagnosticSource Из коробки работают:

    • Asp.net core • EFCore • HttpClient
  17. Часть 3 из 6 В которой мы переходим к практике

  18. Платформа Наблюдаемости • Platform as a Service • end2end наблюдаемость

    • Единое хранилище данных • Аналитика и инсайты Набор инструментов для решения задач наблюдаемости процессов в экосистеме МТС
  19. Jaeger Agent Jaeger Collector Apache Kafka Elasticsearch Kibana Jaeger UI

    Logstash Application Логи Трассировка Пост-обработка Метрики SLA Машина клиента Grafana Jaeger Ingester Prometheus Метрики pull
  20. Часть 4 из 6 В которой мы будем восхищаться распределенной

    трассировкой
  21. Распределенная трассировка Причинно-следственная связь событий в процессе (дерево процесса) Span

    Trace:
  22. Передача контекста

  23. Пост обработка спанов Apache Kafka Elasticsearch Jaeger Stream service Prometheus

    Grafana Производные метрики Трассировка Очередной спан
  24. Пример для asp.net core

  25. Пример для EFCore

  26. Дашборд производительности Тепловая карта длительности выполнения • asp.net core action

    • запросов EFCore
  27. Дашборд результативности У каждого спана есть теги с признаком ошибки,

    именем хоста и сервиса. Отсюда дашборд с количеством ошибок по сервисам и хостам.
  28. Настройка правил мониторинга

  29. Пример алерта В алерте: 1. Ссылка на дашборд 2. Информация

    о проблемном методе
  30. Карта IT-ландшафта

  31. Часть 5 из 6 В которой мы будем преодолевать трудности

  32. Мы все настроили, но ничего не работает 1. Сетевой доступ

    отсутствует telnet … 2. Неправильно инициализирован трейсер 3. Не подключен / не настроен пакет инструментирования Смотрим трафик через Fiddler Включаем опцию Jaeger LogSpan (только для отладки!) telnet <jaegerhost> <jaegerport> GlobalTracer.Instance.ToString().Contains("NoopTracer")
  33. Спан без родителя Либо родительский спан еще не пришел …

    Либо он уже никогда не придет …
  34. Потеря данных Клиент Jaeger Nginx Jaeger Collector Apache Kafka Jaeger

    Ingester Elasticsearch Спаны … У каждого сервиса свои причины потери данных !
  35. Потеря данных Клиент Jaeger Nginx • Кольцевой буфер: не успел

    отправить – потерял • Ограничение на размер батча 65 Кб • Ограничение на размер запроса
  36. Потеря данных Jaeger Collector Apache Kafka • ~7 400 спанов/секунду

    • Ограниченный размер очереди. Превысил – потерял. --collector.queue-size=10000 --collector.num-workers=50 • Ограничение на размер сообщения
  37. Потеря данных Jaeger Ingester Elasticsearch • ~8 700 спанов/секунду •

    Ограничение на количество уникальных тегов
  38. Построение карты IT-ландшафта 20 млн. спанов в сутки: Apache Spark

    съедает CPU и RAM Нужен новый подход: потоковый расчет связей, например через Kafka Stream
  39. Часть 6 из 6 В которой мы рассмотрим альтернативы

  40. Grafana как альтернатива

  41. ELK стек как альтернатива

  42. Спасибо !