Делаем волшебство в России: история о создании APM для «ВкусВилл»
Привет! Это команда «Автомакон». Мы ИТ-интегратор, в том числе занимаемся разработкой мобильных и web-приложений. Делаем много интересного и нужного для людей, например, строим экосистему «ВкусВилл». Но сейчас — не совсем про заказную разработку.
Коротко о статье
Мы сделали хороший аналог зарубежным APM. Вот и решили, что не стоит сдерживаться и жадничать, а лучше поделиться с сообществом нашим опытом. По ссылке запись на бета-тестирование продукта, который мы строили-строили и почти построили. Оценивайте и делитесь ОС!
Пока не претендуем на звание «Лучший APM 2023 года», даем честное слово, что скоро его докрутим. Объективно, APM Wizard не такой крутой, как DataDog или NewRelic, но – самое главное – он доступен в России.
Если уже знаете о том, что такое APM – жмяк. Если пока нет, ниже в статье можно восполнить пробел в знаниях.
Погружение в контекст
Чтобы не прыгать с места в карьер, введем в контекст и расскажем историю. Кого-то она удивит, а других чему-то научит.
Однажды, когда наступила зима 2020 года и мы даже не догадывались, какое интересное время ждет нас впереди, начали только появляться первые признаки пандемии (помните, была такая), мобильное приложение «ВкусВилл» еще не стало лидером доставки в России, а было простым приложением с базовым набором функций: посмотреть адреса магазинов, составить список покупок, воспользоваться системой лояльности, просканировать QR-код в магазинах.
А теперь представьте, что в какой-то момент все стало невероятно падать. Коллеги точно поймут эти «веселые» ощущения [как в известном меме «This is fine»]. Помню неделю, на которой мы буквально лежали по несколько часов каждый день. В то время наша команда была еще крохой, у нас даже не было DevOps’а (честно, мы не жалуемся, просто было вот так) и мы с разработчиками проводили много времени, выгружая логи в поиске проблем производительности методов и настраивая алармы на эти проблемы.
С началом пандемии все локальные проблемы стали влиять на бизнес глобальнее. Например, для такого важного действия как сканирование QR-кода для начисления бонусов в магазине все-таки была неудобная альтернатива – покупатель должен был продиктовать номер телефона. Единственной альтернативой для доставки товаров было оформление заказа у конкурентов.
Тогда мы решили, что нам нужно усилиться и получить помощь со стороны, поэтому позвали внешних консультантов – Самата Галимова и Федора Борщева (ссылки на коллег в конце статьи). Ребята подсказали огромное количество идей для Highload, но ключевое – посмотрели на наши мониторинги, покачали головой, вздохнули и предложили выбросить это все далеко и желательно навсегда и немедленно подключить APM.
(Не?)занудный текст о том, что такое APM
Application Performance Management – это набор технологий и методик, который позволяет разработчикам отслеживать, анализировать и оптимизировать производительность своих приложений. APM предоставляет ценную информацию о различных аспектах работы приложений, таких, как время отклика, задержки, использование ресурсов и другие метрики, которые помогают выявить узкие места и проблемы производительности.
Одной из ключевых возможностей APM считается трейсинг. Трейсы представляют собой детальные записи о прохождении запросов и транзакций через систему приложения. Они позволяют отследить каждый шаг выполнения запроса, включая время выполнения каждого компонента и возможные задержки. Такой подход дает разработчикам полное представление о процессе обработки запросов и помогает идентифицировать узкие места и причины снижения производительности.
Трейсы объединяются в спаны. Спан – это набор технологий и методик, которые помогают разработчикам отслеживать и улучшать производительность приложений. Он предоставляет информацию о времени отклика, задержках и использовании ресурсов, помогая выявить проблемы и узкие места в производительности.
APM предоставляет еще один инструмент – «Карта сервисов». Карта сервисов – это визуальное представление архитектуры приложения, которое показывает связи и взаимодействия между различными компонентами и сервисами в системе. Она помогает разработчикам лучше понять сложные взаимосвязи между компонентами, отслеживать зависимости и оценивать влияние каждого компонента на производительность приложения в целом.
Зачем разработчикам использовать APM? Выделили три ключевых преимущества:
APM позволяет оперативно выявлять и устранять проблемы производительности, что способствует улучшению пользовательского опыта и повышению удовлетворенности пользователей;
APM помогает разработчикам оптимизировать код и ресурсы, сокращая время отклика приложения и повышая его эффективность;
APM предоставляет ценные данные и инсайты, которые помогают принимать информированные решения о доработке и развитии приложений.
Так было раньше: как мы работали с DataDog
DataDog мы подключили и настроили буквально за несколько недель: добавили продуктовые серверы, смотрели ошибки, которые приходили от агентов PHP и агентов инфраструктуры. Вместе с ошибками приходили трейсы, которые просматривали разработчики. Любое отклонение от показателя выполнения выше 300 мс. исправляли в тот же день.
По инфраструктуре команда смотрела трафик, нагрузку на всю инфраструктуру и выявляла нестабильность работы сервиса.
Мы настроили систему работу с алармами. Для работы с ключевыми [о недоступности сервисов] подключили внешние агенты DataDog через life-checkpoint.
Кроме этого, настроили алармы на все ошибки 500+ – их получали от агентов, установленных в приложении. Отдельно выделили все инфраструктурные алармы по нагрузке SQL-серверов: превышение порогов использования процессора, памяти и других метрик.
DataDog понравился наличием очень крутых агентов, но мы столкнулись с проблемой получения только тех трейсов, которые в эти агенты были «вшиты». Например, мы не могли получить проприетарные метрики по базам данных, по Redis etc.
Одна из проблем, с которой пришлось столкнуться, заключалась в получении трейсов ошибок бэкенда. Мы получали стандартные, без возможности углубиться в теме. Например, на основе эндпоинта API не могли получить название конкретной хранимой процедуры T-SQL, которая в этом эндпоинте задействована. А в случае получения кода ответа меньше 500 не было обозначения в качестве проблемы.
Как же мы сделали для «ВкусВилл» лучшее* APM в России
Нескромно, согласен. Точнее будет так: *лучшее в России, с учетом тех конкурентов, которых мы нашли но, продукт которых не попробовали, потому что он выглядел хуже нашего.
Long story short, начало типичное: было все хорошо, а потом стало плохо, и это плохо нужно было как-то исправить.
Вот так было и у нас: в какой-то момент пропала возможность оплачивать DataDog. А, как вы понимаете, DataDog задавал тон работе, как ковер в художественном фильме «Большой Лебовски».
Отдел DevOps взял на себя задачу повторить весь функционал, которым мы пользовались, причем в короткий срок.
Сейчас в системе зарегистрировано более 300 графиков. Ключевые 50 из них вынесены на отдельный дашборд: графики утилизации всей инфраструктуры, работы всех бэкендов, все графики по ошибкам, ключевые бизнес-метрики по типу количества заказов в единицу времени.
Мы не волшебники, а только учимся
APM Wizard уже почти, но все еще не DataDog. Резюмирую то, что у нас получилось сделать:
Система работает с приложениями, написанными на PHP, Go, Java, Java Script (Node.js), Python, Ruby.
OpenTelemetry для генерации span’ы из различных окружений. На балансировщике мы получаем запросы id трейса, по которому мы можем собирать все последующие SPAN из приложений, следующие дальше по цепочке. В итоге, в базу мы собираем все документы по id трейса, на котором строится Trace View.
Коллекторы собирают span’ы, делают сортировку, готовят bulk-запросы и передают данные в ElasticSearch. Затем мы забираем данные в Grafana и Jager UI или работаем с сырыми данными через Elastic API.
Через Grafana UI отрисовываем span’ы в зависимости от сервиса, который их генерирует. Например, в панели с ошибками показываем ошибки по признаку: типу ошибки, сервису, etc.
Сейчас в процессе довольно много вещей:
Cделать хорошую систему алармов (со сложной системой эскалации, смс и роботизированными звонками по ночам). Используем Grafana on call. Почти вывели в прод.
Доработать систему мониторинга трейсов. Сейчас под нагрузкой работает не так хорошо, как мы хотим.
Проработать с прогнозированием нагрузок: графически показывать насколько текущие значения отличаются от предполагаемых и делать алармы о том, что скоро что-то пойдет не так.
Наметили основную цель – проверить MVP, насколько у нас получилось сделать коробочное решение, которое легко можно развернуть не только на наших проектах.
Как можно принять участие в «магии»
Сейчас мы в активном поиске бизнеса или студии разработки, которые используют любой из поддерживаемых нами стеков, для проведения бета-тестирования. Если вы руководите такой компанией и готовы нам посодействовать в доработке российского АРМ – напишите на почту apm@automacon.ru или пройдите регистрацию на сайте.
Эволюционная цель
С «ВкусВилл» мы работаем давно и очень плотно. Такое сотрудничество оставляет свой след. Их подход к работе, выстраиванию бизнес-процессов и отношений внутри команд вдохновляет. Чтобы понять бизнес, нужно всегда обращаться к его ценностям и эволюционной цели. Об эволюционной цели «ВкусВилл» можно почитать здесь.
А в данной статье мы поделимся эволюционной целью, которую сформулировали для нашего продукта – APM Wizard.
Есть определенные отраслевые стандарты, которые позволяют любому разработчику наблюдать за ключевыми показателями эффективности приложения и своевременно их корректировать. В концепции эволюционной цели ее достижение может быть отделимо от самого бизнеса, поэтому созданный нами инструмент может быть проработан и другими организациями.
Верим, что в IT-сообществе важную роль играет взаимопомощь. Мы стремимся создать вдохновляющую среду, в которой каждый разработчик может свободно экспериментировать и создавать приложения, веб-сервисы без ограничений. Мы готовы поддержать условных «инди» разработчиков, обеспечивая бесплатный доступ к APM Wizard. Для низконагруженных приложений с небольшим количеством хостов мониторинг останется абсолютно бесплатным как сегодня, так и в будущем. Наша миссия заключается в том, чтобы предоставить коллегам-разработчикам возможность полностью реализовать свои творческие идеи и воплотить их в функциональные приложения, не сталкиваясь с финансовыми преградами.
Открытый бета-тест
Раз вы дочитали до этого момента, уверены на 99,99%, что тема вам интересна. Если хотите попробовать созданный нашей командой APM Wizard, пройдите регистрацию на сайте.
Полезные ссылки
Записаться на бета-тестирование.
Как и обещали в начале статьи, делимся контактами Феди и Самата