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

Трассировка микросервисов или когда метрик и ло...

Ruslan Gainanov
February 26, 2025
2

Трассировка микросервисов или когда метрик и логов недостаточно

Мониторинг микросервисов крайне необходимая часть качественной работы современных веб-сервисов. Мониторинг помогает оценить состояние системы в целом и сигнализировать о проблемах, но при условии, что вы заранее подготовились и добавили расчет метрик и настроили алерты для определения возможных неполадок в системе. За счет логов можно более точно локализовать обнаруженные неполадки, но в случае множества микросервисов это может быть затруднительно. А если возникла ошибка в сервисах, разрабатываемых не вами, то это почти невозможно. Особенно трудной задачей является поиск узких мест в системе. Например, когда ваша система возвращает ответ пользователю дольше, чем рассчитывали, но при этом все сервисы работают в штатном режиме. Как решать такие задачи?

Здесь могут помочь распределенные трассировки микросервисов, за счет построения графа трассировок и расчета метрик АРМ можно быстро локализовать проблемные места и выполнить необходимые оптимизации. За последнее время технологии в этой области далеко шагнули вперед, появились стандартизированные решения и были разработаны библиотеки для автоинструментации, которые позволяют без сложных манипуляций с кодом воспользоваться всеми преимуществами распределенных трассировок.

Спикер расскажет, что необходимо для запуска систем трассировок на базе open-source решений, покажет на простых примерах как настроить сбор трейсов с микросервисов на Python (fastapi, SQLAlchemy, httpx), как потом работать с трейсами и какую полезную информацию можно извлечь.

Спикер: Руслан Гайнанов, тимлид DevOps-команды в ИТ-Холдинге Т1

Запись доклада - https://www.youtube.com/live/_0BEvQjhVvs?si=YWNQSjZtCBUMwJ_k&t=26767

Ruslan Gainanov

February 26, 2025
Tweet

More Decks by Ruslan Gainanov

Transcript

  1. ? ?

  2. 7

  3. 8

  4. 9

  5. 10

  6. 12

  7. 13

  8. 14

  9. 15

  10. 18 Обо мне Гайнанов Руслан: • тимлид команды DevOps в

    дивизионе продуктовой разработки компании Т1-Иннотех • выпускник Пермского Политеха, каф.ИТАС Занимаюсь разработкой сервисов для автоматизации разработки и внедрения продуктов компании
  11. Содержание 1. мониторинг систем 2. трейсы и спаны 3. технологии

    4. zero-code (auto) трассировки 5. сбор и работа с трейсами
  12. 26 Зачем нужен мониторинг? • определять состояние системы • выявлять

    ошибки системы и их причины • оперативно сообщать при наступлении каких-либо событий
  13. 27 Зачем нужен мониторинг? • определять состояние системы • выявлять

    ошибки системы и их причины • оперативно сообщать при наступлении каких-либо событий • помогать в поиске узких мест и оптимизации
  14. 34 Из чего состоит трассировка? Спан (span) - единица какой-либо

    работы/операции Трейс (trace) - объединение спанов по одному запросу
  15. 39 Что дает распределенная трассировка? • определение источника проблемы •

    определение схемы взаимодействий сервисов и пути запроса
  16. 40 Что дает распределенная трассировка? • определение источника проблемы •

    определение схемы взаимодействий сервисов и пути запроса • расчет задержек на всех уровнях
  17. 45 История OpenTelemetry OpenCensus • старт в 2018 • проект

    Google • API и SDK • метрики и трейсы • Google, Splunk, Microsoft OpenTracing • старт в 2016 • проект CNCF • только API • трейсы • Uber, Datadog, RedHat, Jaeger OpenTelemetry • старт в 2019 • проект CNCF • Spec, API и SDK • трейсы и метрики • объединил всех
  18. 46 OpenTelemetry в 2024 - no vendor-lock: - > 40

    компаний - > 1000 контрибьюторов - GA & Stable - 5k на GitHub - интеграции с популярными системами мониторинга: Grafana, Kibana, Jaeger, etc.
  19. 47 OpenTelemetry SDK - текущий статус Traces Metrics Logs C++

    Stable Stable Stable C#/.NET Stable Stable Stable Java Stable Stable Stable PHP Stable Stable Stable Go Stable Stable Beta JavaScript Stable Stable Development Python Stable Stable Development Ruby Stable Development Development Swift Stable Development Development https://opentelemetry.io/docs/languages/#status-and-releases
  20. 49

  21. 57 Файл app.py: Простой веб-сервер на Flask (python) from flask

    import Flask app = Flask(__name__) @app.route("/") def index(): return "hello-world" if __name__ == "__main__": app.run(host="0.0.0.0", port=8001)
  22. 65 Trace Context - передача контекста в HTTP заголовках Как

    связать одним трейсом 2 сервиса?
  23. 66 Trace Context - передача контекста в HTTP заголовках Как

    связать одним трейсом 2 сервиса?
  24. 67 Trace Context - передача контекста в HTTP заголовках Как

    связать одним трейсом 2 сервиса?
  25. 74 Посмотреть и попробовать - Tempo for Traces - Prometheus

    for Metrics - Loki for Logs - OpenTelemetry Collector for Processing - Grafana & Jaeger for UI - Logs-to-Trace & Trace-to-Logs - Flask & FastAPI applications - Auto- & Manual-Instrumentation - Useful Links @GRomR1/docker-tracing-demo
  26. Скажим нет трасировкам! - не заменят метрики и логи -

    100+ rps, 10+ микросервисов == дорого и сложно - но если очень хочется, то можно. см. доклад статью - буфер не бесконечен - теряем трейсы - 99% трейсов - бесполезны 80