Пользователи жалуются на медленную работу корпоративного портала. Разработчики утверждают, что код оптимизирован. Администраторы показывают нормальную загрузку серверов. Знакомая ситуация? Проблема в том, что традиционный мониторинг инфраструктуры не показывает, что происходит внутри приложений. Именно здесь на сцену выходит мониторинг производительности приложений - технология, с которой видно, что происходит под капотом программного обеспечения.
Современные приложения - сложные многослойные системы, где запрос пользователя проходит через веб-сервер, обращается к базе данных, вызывает внешние API и возвращает результат. Каждый из этих компонентов может стать узким местом, но без соответствующих инструментов найти проблему - всё равно что искать иголку в стоге сена.
Application Performance Monitoring (APM) решает эту задачу, предоставляя детальную информацию о том, как работают приложения в реальном времени. Система отслеживает каждый запрос от момента поступления до момента отправки ответа, измеряет время выполнения отдельных операций и выявляет проблемные участки кода.
Особенно важен грамотный APM для офисных систем, работающих на локальных серверах. Даже базовый сервер для офиса может обслуживать десятки приложений одновременно, и без понимания их взаимодействия сложно обеспечить стабильную работу всей инфраструктуры.
Application Performance Monitoring - это методология и набор инструментов для отслеживания производительности программных приложений. В отличие от традиционного мониторинга серверов, который смотрит на метрики железа, APM сосредотачивается на том, как ведут себя сами приложения. Если комплексный мониторинг серверов отвечает на вопрос «жив ли сервер», то APM отвечает на вопрос «почему приложение отвечает три секунды вместо трёхсот миллисекунд».
Давайте сравним веб-приложение с многоэтажным зданием. Обычный мониторинг показывает, сколько электричества потребляет здание и какая в нём температура. APM же заглядывает в каждую комнату, считает количество людей на каждом этаже и измеряет, сколько времени занимает подъём на лифте с первого этажа на десятый.
Первая - трассировка запросов. Система прослеживает путь каждого запроса через всю инфраструктуру: когда пользователь нажимает кнопку «Отправить» в веб-форме, APM фиксирует момент получения запроса веб-сервером, время обработки в приложении, запросы к базе данных, вызовы внешних сервисов и момент отправки ответа обратно.
Вторая - поиск узких мест. Из трассировок видно, какой именно компонент замедляет всю систему: медленный SQL-запрос, неоптимальный алгоритм или проблемы с сетевым соединением. Это принципиальное отличие от инфраструктурного мониторинга, который покажет только, что процессор загружен на 80%, но не скажет чем.
Третья - взгляд глазами пользователя. APM измеряет производительность так, как её видит человек по ту сторону экрана: время загрузки страниц, частоту ошибок, отзывчивость интерфейса. Сервер может отвечать за 50 миллисекунд, а страница собираться четыре секунды - и без этой метрики вы об этом не узнаете.
Четвёртая - обнаружение отклонений. Система замечает, что обычно быстрый вызов API начал выполняться вдвое дольше, даже если это время всё ещё укладывается в допустимые пределы. Так проблема ловится до того, как о ней сообщат пользователи.
Эффективная APM-система состоит из нескольких взаимосвязанных компонентов, каждый из которых выполняет свою роль:
Центральный сервер принимает данные от распределённых агентов, хранит их и предоставляет интерфейсы для анализа.
Требования к его железу довольно специфичны. Система обрабатывает большие объёмы временных рядов в реальном времени, поэтому критичны быстрые накопители и достаточный объём оперативной памяти. Сетевая подсистема тоже важна: агенты шлют данные непрерывно, и на десятках хостов это заметный поток.

Понимание того, какие показатели действительно важны, определяет эффективность всей системы мониторинга. Не все метрики одинаково полезны для диагностики.
| Метрика | Что показывает | На что смотреть |
|---|---|---|
| Время отклика (Response Time) | Сколько занимает обработка запроса целиком | Среднее прячет проблему. 95-й процентиль означает: 95% запросов быстрее этого значения, 5% - медленнее |
| Время до первого байта (TTFB) | Скорость обработки на сервере без учёта передачи данных | Растёт - проблема на стороне приложения или базы, а не сети |
| Время ответа базы данных | Сколько выполняются SQL-запросы | Частая причина тормозов. Смотреть вместе с планами выполнения |
| Пропускная способность (Throughput) | Сколько запросов система обрабатывает в единицу времени | Помогает понять масштаб нагрузки и планировать ресурсы |
| Одновременные пользователи | Сколько людей реально активны прямо сейчас | Не путать с общим числом сессий - разница бывает кратной |
| Доля ошибок (Error Rate) | Процент неуспешных запросов | Разбивать по типам: ошибки клиента (4xx), ошибки сервера (5xx), исключения в коде |
| Время обнаружения (MTTD) | Как быстро система замечает проблему | Чем меньше, тем раньше команда узнаёт об инциденте |
Главная ловушка здесь - среднее значение. Оно послушно показывает приличную цифру и прячет за собой те несколько процентов пользователей, у которых всё плохо. Поэтому пороги и алерты строят на процентилях.
Современные приложения редко работают изолированно. Обычный веб-запрос может пройти через несколько микросервисов, обратиться к разным базам данных и внешним API. Распределённая трассировка показывает весь этот путь целиком - подробнее о ней мы писали в разборе мониторинга микросервисной архитектуры.
Работает это на двух понятиях. Trace ID - уникальный идентификатор, который присваивается запросу и передаётся через все компоненты системы; по нему разрозненные логи и метрики собираются в единую картину. Span - отдельная операция внутри трассировки, со временем начала, временем завершения и дополнительными данными. Спаны выстраиваются в иерархию, повторяющую последовательность вызовов, и по ней видно, где именно запрос застрял.
Стандарт OpenTelemetry обеспечивает совместимость между разными APM-решениями и упрощает инструментирование приложений: один раз размечаете код - и можете менять систему мониторинга, не переписывая разметку.
Трассировать каждый запрос дорого: это и нагрузка на систему, и огромные объёмы данных на хранении. Поэтому APM-системы применяют выборочную трассировку (sampling), и подходов здесь три.
При выборке на входе решение принимается в начале запроса по заранее заданным правилам - например, трассировать каждый сотый запрос или все запросы от определённых пользователей. Просто и дёшево, но редкая ошибка может не попасть в выборку.
При выборке на выходе система разбирает полную трассировку и решает, сохранять её или нет, уже по результату. Так сохраняются все трассировки с ошибками плюс случайная выборка успешных. Дороже по ресурсам, но ничего важного не теряется.
Адаптивная выборка меняет частоту трассировки на ходу, в зависимости от текущей нагрузки и важности конкретной части системы.
Рынок предлагает множество вариантов, и выбор зависит от инфраструктуры, бюджета и требований. Коммерческие платформы дают богатую функциональность из коробки, профессиональную поддержку и интеграцию с корпоративными системами: автоматическое обнаружение приложений, готовые дашборды под популярные технологии, продвинутый анализ. Открытые инструменты дают больше гибкости и контроля, но требуют серьёзных усилий на настройку и сопровождение - это вариант для команд с глубокой технической экспертизой. Облачные платформы заточены под микросервисы и контейнеры, автоматически подхватывают Kubernetes и Docker.
Первое - поддержка ваших технологий. У решения должны быть готовые агенты под все языки и фреймворки, которые реально используются в организации. Второе - масштабируемость: система должна выдержать рост нагрузки без деградации. Третье - интеграция с тем, что уже работает: инфраструктурным мониторингом, конвейером сборки, системой управления инцидентами. Четвёртое - полная стоимость владения, где лицензии часто оказываются меньшей частью расходов по сравнению с развёртыванием, обучением команды и сопровождением.

Честный ответ: чаще, чем принято думать. Если у вас три-четыре приложения на одном сервере, инфраструктурного мониторинга и логов хватит для 90% ситуаций - Zabbix с базовыми триггерами покажет и загрузку процессора, и очередь к диску, и падение сервиса. APM начинает окупаться там, где запрос проходит через несколько сервисов и виноватого не найти простым перебором, либо где простой стоит ощутимых денег и важна скорость постановки диагноза.
Отдельный аргумент против - стоимость владения. Агенты едят ресурсы, данные занимают место, а настройка и поддержка требуют человека, который в этом разбирается. Для инфраструктуры из пары серверов эти расходы обычно не окупаются.
Успешное внедрение - это не разовая задача, а процесс, который требует планирования и координации между командами.
Начинается всё с инвентаризации приложений: нужен список того, что вообще работает, на каком стеке, насколько критично для бизнеса и какие проблемы с производительностью известны уже сейчас. Дальше - пилотный проект: лучше взять приложение средней сложности с понятными проблемами, чтобы быстро показать результат и набить руку.
Инструментирование может потребовать изменений в коде или конфигурации. Современные агенты стараются свести их к минимуму, но полностью избежать удаётся не всегда - это стоит закладывать в план.
И, наконец, обучение. Разработчики должны понимать, как читать данные APM и превращать их в правки кода. Эксплуатация должна уметь настраивать оповещения и реагировать на проблемы.
Без обучения команды APM превращается в дорогой дашборд, на который никто не смотрит.
Грамотная настройка оповещений определяет, будет ли от APM польза в ежедневной работе. Слишком много алертов - и команда перестаёт их читать; слишком мало - и важные проблемы проходят незамеченными.
Эталонные значения устанавливают для каждого приложения отдельно: нормальное время отклика простого API может составлять 50 миллисекунд, а сложного отчёта - несколько секунд. Пороги лучше строить на процентилях: алерт на 95-й процентиль поймает проблему небольшой группы пользователей, которую среднее значение просто размажет. Отдельно полезны связанные оповещения, учитывающие несколько метрик сразу: рост времени отклика вместе с ростом нагрузки на базу почти наверняка означает проблему с SQL-запросами.
Сбор данных - только начало. Главная ценность APM в том, что из этих данных получаются выводы, с которыми можно что-то сделать.
Анализ трендов показывает, как производительность меняется со временем. Постепенный рост времени отклика может указывать на утечку памяти, разрастание базы или деградацию индексов. Корреляционный анализ помогает связать метрики между собой: если время ответа API растёт вместе с числом одновременных пользователей, значит, упёрлись в масштабируемость. Сравнение версий показывает, что именно сделал с производительностью последний релиз - многие APM-системы сопоставляют метрики до и после развёртывания автоматически.
Вместо общей рекомендации «оптимизируйте базу данных» APM показывает конкретный медленный запрос и конкретный участок кода. Дальше работают три приёма, и первый обычно даёт наибольший эффект при наименьших усилиях.
Оптимизация SQL-запросов. APM показывает и время выполнения, и планы запросов, а из планов видно отсутствующие индексы и неудачные соединения таблиц. Кэширование - из данных понятно, какие операции выполняются чаще всего и что имеет смысл закэшировать. Асинхронная обработка - длительные операции выносятся из основного потока, а APM подсказывает, какие именно операции на это претендуют.
Инфраструктурный мониторинг смотрит на железо и операционную систему: процессор, память, диски, сеть. APM смотрит внутрь приложения: сколько занял конкретный запрос, где он провёл больше всего времени, какой SQL-запрос его задержал. Первый скажет «процессор загружен на 80%», второй - «80% времени запроса уходит на выборку из таблицы заказов без индекса».
Обычно нет. При такой инфраструктуре виноватого находят перебором за полчаса, а инфраструктурного мониторинга и логов хватает. APM окупается там, где запрос проходит через несколько сервисов или где простой стоит заметных денег.
Зависит от решения и настроек, но накладные расходы есть всегда: и на процессор, и на память, и на сеть. Их снижают выборочной трассировкой: агент разбирает представительную выборку запросов вместо всего потока. Реальную цифру для своего стека нужно замерять на пилоте, а не брать из маркетинговых материалов.
Для базовых задач - да. Zabbix покажет, что сервис упал или что очередь к диску выросла, логи покажут ошибки. Чего они не покажут - распределения времени внутри запроса и пути запроса через несколько сервисов. Если проблема формулируется как «где-то тормозит, но непонятно где», значит, задача уже для APM.
Он работает с большими объёмами временных рядов в реальном времени, поэтому в первую очередь важны быстрые накопители и запас оперативной памяти. Процессор обычно не становится узким местом раньше дисков. Сеть тоже стоит учитывать: агенты шлют данные постоянно.
Мониторинг производительности приложений превратился из приятного дополнения в рабочий инструмент диагностики. Без понимания того, как ведут себя приложения, сложно обеспечить качественный пользовательский опыт и разумно расходовать ресурсы инфраструктуры. Смежные темы разбираем отдельно: мониторинг виртуальных машин и контейнеров и предиктивный мониторинг, который пытается предсказать отказ до того, как он случится.
Приложение тормозит, а причина непонятна?
Инженеры ITTELO помогут разобраться, упирается ли нагрузка в железо, и подберут конфигурацию под реальный профиль вашей нагрузки: соберут и протестируют сервер под задачу перед отгрузкой, с гарантией и поддержкой после продажи. На рынке серверов 11+ лет.
Сервер для базы данных купить · +7 (800) 551-80-12 · info@ittelo.ru