Истории о том, как с помощью APM инструмента найти узкие места в Atlassian Confluence?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Привет, Хабр! 

На связи Гончик, любитель APM (application performance monitoring) инструментов, в частности Glowroot

Сегодня расскажу о том, как за кратчайшее время найти узкие места в Confluence On-Prem на основе одной промышленной инсталляции. Поскольку стенд использовался для обучения, где источником базы знаний был Confluence. А осень это пора наплыва пользователей-учеников и необходимо было провести аудит и подготовить изменения, поскольку система уже претерпевала ранее проблемы отдачи своевременно контента пользователям в периоды наплыва читателей.

Конечно, было первым шагом решить проверить ОС параметры и они прям с запасом по ресурсам - ок, и access log обратного прокси nginx, но их не было в связи с директивой access log off. Из полезного подтюнил терминацию ssl, подключил http2. Не стал фокусироваться на нем, поскольку стало ясно, что надо идти в сторону Tomcat (рекомендации вендора).

Далее у меня был один рестарт, где добавил агента Glowroot и пошел смотреть графики (о том как установить писал тут). Далее три разбора на разных уровнях управления и обслуживания приложением, которые мне показались полезным и интересным читателю.

Разбор первый (На старт)

Продолжил с анализа соединения СУБД и Confluence, поскольку Confluence - nginx, работал отлично.

Первым делом Glowroot, показал что на каждый запрос в БД, у нас Confluence делает проверки состояния соединения, следующим образом. 

Но это количество равняется 11, и тратится от 0,20 мс до 0,32 мс на каждый запрос. То есть в среднем от 2 до 3 миллисекунд тратим на проверки состояния. И если у нас не будет кэширования на уровне приложения или при инвалидации кэширования то это узкое место.

Далее уточнив о версии субд и версии драйвера посредством данной ссылки {CONFLUENCE_URL}/admin/systeminfo.action появился простор для размышления. Особенно, со старой доброй табличкой по задержкам, так как она мне всегда помогает примерно на глаз определить узкие места. 

В принципе, вендор Атлассиан активно использует у себя PostgreSQL и видно,  в принципе по поддерживаемым СУБД.

А так как у меня использует пока MySQL обновление драйвера традиционно снизило симптомы. Чтобы понять причины, мне помогла статья “После обновления онлайн-базы данных возникает проблема чрезмерного отката транзакций базы данных”. Где решением фактически был переход на другой пуллер (https://github.com/alibaba/druid/wiki/FAQ). А в моем случае,  переход на PostgreSQL. (:

Про то как устроен параметр useSessionStatus, можно скачать коннектор и проверить использование метода isReadOnly. 

И зависимость версии легко проверить, посмотреть первое условие в методе. 

Резюмируя, краткосрочное решение - принятие рисков и обновление драйвера коннектора к СУБД, а долгосрочного решения выбрал переход PostgreSQL 11.

Разбор второй (Внимание) 

Часто в анализе,  поиск паттернов таких как время жалоб и корреляция с графиками времени ответа приложения всегда помогает, особенно в процентилях, что есть понимание, где видно, что происходит с небольшим объемом запросов.

Перейдя в режим slow traces в панели мониторинга Glowroot, можно детальнее посмотреть на поведение системы.

а также на следующий наблюдал следующее поведение.

Все это меня натолкнуло на просмотр расписания пакетных операции, например время запуска процесса создания резервных копии.

Первым делом проверил в веб интерфейсе ({CONFLUENCE_URL}/admin/scheduledjobs/viewscheduledjobs.action) и отключил бэкапы в xml на уровне приложения. Так же можно увидеть историю запусков, и в принципе понять, что как раз к 6:30 утра заканчивается.

Но как только зайдя в систему с правами root,  проверил crontab, где также увидел что запускается скрипт по резервному копированию с 5 утра и заканчивал около 6:15 утра по времени моего ПК.  Так как это классическое узкое место, просто отключение в силу ненадобности. Так как на уровне виртуализации производится резервное копирование раз в час, и СУБД находится на другой сервере, поэтому самое основное это домашняя директория Confluence.

Резюмируя, простые причины всегда надо проверять. Расписание создания бэкапов это первое, что нужно проверить если поведение должно как-то коррелирует с проблемой.

Разбор третий (Марш)

Так как у нас разбор не был закончен именно с работой между СУБД и приложения, то перейдя во вкладку Queries и отсортировав именно по среднему времени выполнения увидел интересный паттерн, который можете увидеть на скриншоте ниже.

Да, именно в таблицу AO_7B47A5_EVENT эпизодически INSERT проходит медленно, когда большое количество пользователей открывает странички в Confluence. А так как префикс AO_*  является индикатором таблиц созданных посредством ORM Active Objects. А как правило это плагины, устанавливаемые в платформу. Тут Гугл быстро навел на следующий тикет https://jira.atlassian.com/browse/CONFSERVER-69474, который указал что виновник приложение Confluence Analytics. Поискав в админке приложении (Managed Apps) находим его, предварительно выставив All Apps в скоупе поиска.  Вуаля находим приложение, и еще оно не лицензировано, согласно скриншоту.

Так как данное не очень приемлемо, отправил запрос вендору о необходимости представлении метрик и предоставлении правил по retention policy логов аналитики в БД, полной асинхронной работы по аналитике. Так как после очистки записей в таблице, отдача контента на глазах ускорилась. 

Резюмируя, что важно верифицировать медленные запросы, и смотреть логи медленных запросов (на тот момент не было их для анализа). Поскольку это сильно помогает предоставлять информацию вендорам, чтобы улучшили,  например, расширение по аналитике в последней версии Confluence много лучше работает и не так аффектит систему, хотя есть проблема с работой с вложениями. 

В качества вывода, основная бизнес метрика именно пользовательское ощущение спало, что подтверждается ответом от бизнес заказчика “Да, жалоб не было”. Но у нас есть, что продолжить делать, так как собрался довольно большой бэклог изменений по улучшению системы.

Спасибо, что прочитали до конца, буду рад если данные ситуации были интересные, то я продолжу делиться подобными историями использования инструментов трассировки и поисков. 

Всегда рад Вашим вопросам, а также видеть Вас Телеграм чатике сообщества  Atlassian.

Хорошего дня, Гончик.

Источник: https://habr.com/ru/company/exness/blog/590351/


Интересные статьи

Интересные статьи

На Хабре принято рассказывать про красивое программирование... Увы, в суровой практике такой красоты пока не встретил. Зато ввязался в эпичную битву: адский легаси, share...
Старая иллюстрация: семья из четырёх человек играет в настольную игру, пока футуристический электромобиль автоматически управляет собой (1957 год). Первым беспилотным транспортом был...
Первая модель искусственного нейрона Мак-Каллока-Питтса Сейчас один из самых популярных инструментов искусственного интеллекта — это нейронные сети. Само название намекает на то, что...
Битрикс24 — популярная в малом бизнесе CRM c большими возможностями даже на бесплатном тарифе. Благодаря API Битрикс24 (даже в облачной редакции) можно легко интегрировать с другими системами.
Тема статьи навеяна результатами наблюдений за методикой создания шаблонов различными разработчиками, чьи проекты попадали мне на поддержку. Порой разобраться в, казалось бы, такой простой сущности ка...