Comments 4
Хм, почитал - как будто смотрю в зеркало. Когда десятилетние Perl/PHP‑монолиты сосуществуют с молодыми микросервисами, заставить всё это хозяйство нормально собирать трейсы - тот ещё квест. Мы пару лет назад мучились с Python и старым Java‑бэкендом: официальный Elastic APM для одних языков слишком «жирный», для других - вообще отсутствует. Для Python ещё как‑то терпимо, для Java - страшно, а для старого Cobol - вообще тьма 😅. Пришлось сочинять свой шлюз на Go: NDJSON на входе, ответ 200 клиенту сразу и дальше всё в канал - картина знакомая. Circuit Breaker подсмотрели у Netflix Hystrix, хотя у Sony есть классная реализация для Go (gobreaker на GitHub) - вдруг кому пригодится.
Радует, что вы чётко придерживаетесь идеи «клиент не должен ждать» и отдельно собираете метрики. Я в своё время даже думал завернуть это в плагин для OpenTelemetry Collector - любопытно, не смотрели ли вы в сторону OTel? Там есть collector, который умеет проксировать и агрегировать трейсинг из разных языков, а расширяется через модули. Может, сэкономило бы пару ночей 🙂.
Отдельный привет про гигантские пейлоады и количество спанов: стоит одному разработчику решить обвязать каждую функцию измерением времени, как APM‑сервер начинает залипать на коленке. Мы у себя ввели лимиты по глубине трейсов и, если канал начинает пухнуть, пишем в локальный кэш, чтобы не потерять события во время «открытого» Circuit Breaker.
В целом здорово видеть, что простая прокси может так хорошо разгрузить монолиты и дать прозрачность. Возьму пару идей к себе в backlog и скину ребятам - у нас ещё полно коллег, которые до сих пор корячатся с Elastic. А тем, кто хочет вдохновения, вот репозиторий gobreaker (https://github.com/sony/gobreaker) - там куча примеров по паттерну Circuit Breaker. Хм, может и нам что‑нибудь подобное в open source выложить? 😄
Вау! Спасибо, что поделились вашим опытом, очень круто, что для кого-то наша история оказалась настолько близкой)
В сторону OpenTelemetry посматриваем на будущее тоже, опыт других намекает, что такой переход даст нам много полезного.
Кстати, идея с кэшом классная, пойду и нам в backlog заведу задачку))
В своё время внедрял ElasticAPM на проекте. В итоге отказались из-за огромных тормозов и непомерного трафика. Как итог перешли на OpenTelemetry. Два года - полёт нормальный, чего и Вам желаю.
Сбор и отправка APM-трейсов из разных сервисов: как мы приручили трейсинг в монолитах