Elastic APM — компонент платформы ELK Stack (Elasticsearch, Logstash, Kibana) для мониторинга производительности приложений. Система отслеживает полный жизненный цикл HTTP-запроса через микросервисную архитектуру: от входящего запроса до ответа из базы данных, с разбивкой задержки по сервисам и span-ам.
Как работает
Архитектура Elastic APM состоит из трёх частей:
- APM Agent — библиотека, встраиваемая в приложение. Поддерживает Java, Python, Ruby, Node.js, Go, .NET, PHP, JavaScript (RUM). Агент автоматически инструментирует популярные фреймворки (Django, Flask, Rails, Express, Spring) и перехватывает SQL-запросы, HTTP-вызовы, очереди.
- APM Server — промежуточный компонент, принимающий данные от агентов по HTTP и отправляющий их в Elasticsearch. С версии 7.7+ встроен в Elasticsearch (Fleet).
- Kibana APM UI — визуализация: карта сервисов, waterfall-диаграммы трейсов, тепловые карты задержек, ошибки, метрики инфраструктуры.
Ключевые концепции:
- Транзакция — верхнеуровневый запрос (входящий HTTP, фоновая задача).
- Span — отдельная операция внутри транзакции (SQL-запрос, HTTP к внешнему сервису, вызов Redis).
- Trace — полный путь запроса через несколько сервисов с распределённым контекстом (W3C Trace Context / Elastic B3).
Elastic APM совместим с OpenTelemetry: агенты OTel могут отправлять данные в APM Server, что позволяет использовать единый бэкенд для гетерогенной инфраструктуры.
История
Elastic приобрела компанию Opbeat в 2017 году, на её технологиях построен Elastic APM. Первая стабильная версия Elastic APM выпущена в 2018 году (Elastic Stack 6.x). В 2020 году APM Server интегрирован в Elasticsearch Fleet. В 2021 году добавлена поддержка OpenTelemetry. В 2023 году Elastic переработала UI в рамках платформы Elastic Observability.
На что обращать внимание
Накладные расходы агента: в языках с JIT-компиляцией (Java, .NET) — 1–3% CPU, в интерпретируемых (Python, Ruby) — 3–7%. Для продакшена настраивайте семплирование (transaction_sample_rate = 0.1–0.5): полная трассировка всех запросов создаёт значительную нагрузку на Elasticsearch. Storage: один трейс занимает 1–5 КБ; при 1000 RPS и 100% семплировании это ~50–250 МБ/час только для трейсов. Конкурирующие решения: New Relic, Datadog, Jaeger (open source), Zipkin.
История Elastic APM
Elastic APM (Application Performance Monitoring) анонсирован Elastic в 2017 году как часть Elastic Stack. Версия 6.2 (2018) — первый GA-релиз с Java и Node.js агентами. К 2023 году поддерживаются агенты для Java, .NET, Go, Node.js, Python, Ruby, PHP, RUM (Real User Monitoring). Elastic APM конкурирует с Datadog APM, New Relic, Jaeger (для distributed tracing). OpenTelemetry — открытый стандарт для метрик, трейсов и логов; Elastic APM поддерживает OpenTelemetry с 7.13 (2021).
Компоненты Elastic APM
- APM Server: принимает данные от агентов, записывает в Elasticsearch.
- APM Agents: библиотеки в приложении, автоматически инструментируют запросы.
- Kibana APM UI: визуализация трейсов, зависимостей, медленных транзакций.
Elastic APM vs Jaeger vs Zipkin
| Параметр | Elastic APM | Jaeger | Zipkin |
|---|---|---|---|
| Хранение | Elasticsearch | Cassandra/ES/Badger | MySQL/ES/Cassandra |
| Метрики + Трейсы | да | только трейсы | только трейсы |
| Агенты | 8 языков | OpenTelemetry | OpenTelemetry |
Практическое применение на хостинге
Elastic APM устанавливается на VPS: APM Server требует доступ к Elasticsearch. Агент добавляется в приложение как зависимость (для PHP: composer require elastic/apm-agent). Трейсы показывают полный путь запроса: веб-сервер → PHP-FPM → запрос к MySQL → ответ. Помогает найти N+1 проблемы в ORM и медленные SQL-запросы.