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

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

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

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

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

DotNetRu

July 10, 2020
Tweet

More Decks by DotNetRu

Other Decks in Technology

Transcript

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

    ИТ Занимаюсь разработкой платформы Наблюдаемости. Помогаю продуктовым командам сделать работу сложных распределенных систем понятной и прозрачной.
  2. С чего все начиналось 2014 год: перевод крупной CRM с

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

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

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

    понятные, быстрые и полные ответы. Наблюдаемость
  6. Компромисс наблюдаемости Полнота! Актуальность! Анализируемость! Диагностика занимает несколько дней Дорого

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

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

    Apache 2.0 Языки: C#, Java, C++, PHP, Python, Ruby, Objective-C, Go, JavaScript, … Трассировщики: Jaeger, LightStep, Instana, DataDog
  9. Платформа Наблюдаемости • Platform as a Service • end2end наблюдаемость

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

    Logstash Application Логи Трассировка Пост-обработка Метрики SLA Машина клиента Grafana Jaeger Ingester Prometheus Метрики pull
  11. Пост обработка спанов Apache Kafka Elasticsearch Jaeger Stream service Prometheus

    Grafana Производные метрики Трассировка Очередной спан
  12. Дашборд результативности У каждого спана есть теги с признаком ошибки,

    именем хоста и сервиса. Отсюда дашборд с количеством ошибок по сервисам и хостам.
  13. Мы все настроили, но ничего не работает 1. Сетевой доступ

    отсутствует telnet … 2. Неправильно инициализирован трейсер 3. Не подключен / не настроен пакет инструментирования Смотрим трафик через Fiddler Включаем опцию Jaeger LogSpan (только для отладки!) telnet <jaegerhost> <jaegerport> GlobalTracer.Instance.ToString().Contains("NoopTracer")
  14. Потеря данных Клиент Jaeger Nginx Jaeger Collector Apache Kafka Jaeger

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

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

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

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

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