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

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

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

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

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

Avatar for JSC “Arcadia Inc.”

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/