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

Отладка микросервисных приложений

Отладка микросервисных приложений

Микросервисы принесли много полезного. Это и переиспользование кода, и гибкое масштабирование, и прозрачная архитектура. Вместе с тем возник ряд сложностей, таких как отладка. Теперь не достаточно включить дебагер в любимой IDE и прожать F8.

Я расскажу про трейсинг и мониторинг в микросервисной среде. Опыт наших проектов, практические советы, подводные камни.

JSC “Arcadia Inc.”

October 19, 2019
Tweet

More Decks by JSC “Arcadia Inc.”

Other Decks in Programming

Transcript

  1. О себе • DevOps Engineer c бэкграундом разработчика • Опыт

    коммерческой разработки с 2008 года • Внедряю Kubernetes • Продвигаю DevOps
  2. Something went wrong • Что-то пошло не так, но неизвестно

    что • Причина: глобальный обработчик ошибок
  3. Когда нужно отлаживать • Это вообще не работает • Это

    работает, но не так, как нужно • Это работает медленно
  4. Шаг 0: Что было • Логи есть • Plain text

    • Всё вперемешку вследствие асинхронности • Поиск по логам через `grep -e`
  5. Шаг 1: Структурирование • Добавление уровней: debug, info, warn... •

    Логирование в формате JSON • Статический текст сообщения • Перенос всех параметров в массив params • Поиск по логам через запросы к JSON • Можно использовать jq вместо grep
  6. • Добавили во все запросы flow_id • flow_id формируется на

    фронтенде • Передаётся вместе с запросом по всей системе • Добавляется в логи Шаг 2: Отслеживание
  7. Шаг 3: Ищем bottle neck • Детализации логов не достаточно,

    чтобы искать узкие места • Хочется более наглядную картину
  8. OpenTracing • Проект CNCF • Де-факто стандарт трассировки • Инструментарий

    для всех известных языков • Готовая интеграция с популярными фреймворками
  9. Jaeger • Написан на Go • Реализует OpenTracing API •

    Имеет свой язык запросов и UI
  10. Статистика и алерты • Клиент Jaeger поддерживает Prometheus exporter •

    А значит, все блага Prometheus • Уведомления в AlertManager • И графики в Grafana • А еще автоскейлинг в Kubernetes
  11. Поддержка Jaeger • Reverse Proxy: Nginx, Traefik, Haproxy, etc •

    Service Mesh: Istio, LinkerD, etc • 9 языков официально: Go, JavaScript (TS), Java, Python, Ruby, PHP, Objective-C, C++, C# • https://www.jaegertracing.io/docs/1.8/client-libraries/ • https://opentracing.io/