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

Иван Матвеев. Трассировка и логгирование в микросервисах: зачем, как, а также грабли и как наступать на них аккуратно

Иван Матвеев. Трассировка и логгирование в микросервисах: зачем, как, а также грабли и как наступать на них аккуратно

Когда вы строите микросервисную архитектуру, никто не думает о плохом. Но со временем у вас могут появиться проблемы: скажем, вы забудете оповестить о чем-то важном сервисы, или ключевой разработчик, который держал все в голове, решит сменить работу. И вот уже это не совсем ваше приложение…

Я хочу поделиться нашим опытом решения задачи “Как всегда понимать, как оно работает в целом”, и расскажу:
* почему единообразие логов и правильная трассировка — это маст хэв
* какие проблемы встают перед командой в начале пути к такому единообразию — и проблемы ли это?
* немного — про политическую волю
* какие результаты и сайдэффекты мы получили на выходе
* и куда хотим двигаться дальше

Python Community Chelyabinsk

October 07, 2019
Tweet

More Decks by Python Community Chelyabinsk

Other Decks in Programming

Transcript

  1. Проблемы Разные хранилища логов у разных сервисов Скорость роста ->

    выбор разных хранилищ Отсутствие трассировки между сервисами на уровне логов Разные подходы к тому, что и как логируется Скорость роста -> много команд
  2. Разные хранилища логов у разных сервисов Только команда знает, что

    и где лежит Разные доступы к системам Приход черного сапортера
  3. Отсутствие трассировки между сервисами Нельзя отследить цепочку действий, которую породило

    действие пользователя Нельзя связать ошибку и цепочку действий Сложно восстановить систему после сбоя
  4. Разные подходы к тому, что и как логируется Разные понимания,

    что кладется в логи Access логи Полнота логов Ошибки, которые никто не замечает
  5. Куда идем Трассировка запроса по всей системе Единообразие логов, их

    применение и хранение Минимизация телодвижений со стороны разработчиков
  6. Трассировка запроса (ТЗ) Запрос - это либо запрос от пользователя

    или от внешней системы, либо cron request-id как уникальный идентификатор запроса AMQP headers / HTTP headers как транспорт для request-id
  7. ТЗ HTTP Автоматический подхват из HTTP запроса $request_id из nginx

    как значение для request-id Автоматическое добавление обработчика в \GuzzleHttp\Client (тег в конфигурации)
  8. ТЗ AMQP / RabbitMQ Автоматический подхват из AMQP consumer Автоматическое

    добавление заголовка request-id при публикации AMQP
  9. Что логируем request-id / uid / process.id Имя канала и

    приложения user.id Переменные окружения Исключения
  10. Лог всего Kibana / elastic search Модуль для filebeat, JSON

    как формат Лог действия пользователей и работы бизнес логики