Обзор Maple

Maple — это открытый монопо, который преобразует телеметрию вашей инфраструктуры в интерактивную анимированную карту сервисов в реальном времени. Переходите от чтения холодных метрик к тому, чтобы вид

📝 1516 words

Что такое Maple

Maple — это открытый мониторинговый инструмент, который решает фундаментальную проблему DevOps-инженеров и SRE-команд: переход от статичных дашбордов к живому пониманию потоков данных. Вместо того чтобы просматривать десятки графиков в Prometheus или Grafana, пытаясь сопоставить метрики с топологией сервисов, Maple строит анимированную карту зависимостей в реальном времени. Продукт написан на Go и Rust, что обеспечивает минимальное потребление ресурсов при обработке потоковой телеметрии. Стек включает gRPC для сбора метрик, WebSocket для передачи обновлений на фронтенд и WebGL для рендеринга графа.

Ключевое УТП — это не просто визуализация, а детекция аномалий на уровне топологии. Когда latency между API и базой данных ClickHouse возрастает, Maple не просто показывает цифру, а анимирует «затор» на ребре графа, подсвечивая красным весь путь запроса. Это позволяет за секунды локализовать проблему, а не тратить часы на анализ логов. Продукт поддерживает интеграцию с OpenTelemetry, Prometheus и собственные агенты, работающие в Kubernetes.

Maple позиционируется как альтернатива Datadog Live Map и Jaeger UI, но с фокусом на инфраструктурную телеметрию, а не только на трейсинг. Он подходит для микросервисных архитектур, где количество сервисов превышает 50, и ручное картирование зависимостей становится невозможным. Лицензия — Apache 2.0, что делает его привлекательным для компаний, которые хотят избежать vendor lock-in.

Архитектура и принцип работы

Архитектура Maple состоит из трех основных компонентов: Collector, Processor и Visualizer. Collector — это легковесный агент, написанный на Rust, который подключается к источникам телеметрии через OpenTelemetry Collector, Prometheus remote write и собственные плагины для Kafka, MySQL и ClickHouse. Агент собирает метрики latency, throughput, error rate и топологическую информацию (какие сервисы общаются друг с другом) с помощью eBPF-хуков на уровне ядра Linux. Это позволяет детектировать зависимости без модификации кода приложений.

Processor — это Go-сервис, который агрегирует данные в скользящем окне 30 секунд, строит граф зависимостей и применяет алгоритмы обнаружения аномалий (например, изолирующий лес для выбросов latency). Граф хранится в оперативной памяти с использованием структуры данных на основе хэш-таблиц и списков смежности. Processor экспортирует текущее состояние через gRPC-стрим на Visualizer.

Visualizer — это React-приложение с WebGL-рендерингом (Three.js), которое отображает граф в виде анимированной карты. Узлы — это сервисы (API, базы данных, очереди), ребра — это потоки данных с анимацией направления и толщиной, пропорциональной throughput. Цвет ребер меняется от зеленого (latency < 50ms) до красного (> 500ms). При клике на узел открывается панель с детальными метриками и trace-логами.

Архитектура Maple Collector (Rust) eBPF, OpenTelemetry Processor (Go) Граф, ML-аномалии Visualizer (React) WebGL, Three.js Kafka MySQL ClickHouse Prometheus gRPC-стрим состояния графа WebSocket-обновления для клиента Хранение: in-memory + опционально Redis

Важно отметить, что Maple не хранит исторические данные — это инструмент для оперативного реагирования. Для долгосрочного анализа данные экспортируются в Prometheus или ClickHouse. Такая архитектура обеспечивает задержку от сбора метрики до отображения на карте менее 1 секунды при нагрузке до 10 000 сервисов.

Ключевые возможности

  • Автоматическое обнаружение топологии: Используя eBPF, Maple детектирует сетевые соединения между процессами на уровне ядра. Это позволяет строить карту зависимостей для сервисов, написанных на любом языке, без необходимости внедрять SDK или изменять код. Поддерживаются TCP, UDP и gRPC-соединения.
  • Анимированная карта в реальном времени: Граф рендерится с частотой 60 FPS. Анимация потока данных показывает направление запросов, толщина ребер меняется динамически в зависимости от текущего throughput. При превышении порогов latency ребра меняют цвет с зеленого на желтый, затем на красный, а узел начинает пульсировать.
  • Интеграция с очередями сообщений: Специализированные плагины для Kafka и RabbitMQ парсят метаданные топиков и групп потребителей. Maple отображает не только факт подключения, но и lag потребителей, скорость записи и чтения, что критично для event-driven архитектур.
  • Детекция аномалий на основе ML: Встроенный алгоритм изолирующего леса анализирует latency и error rate в скользящем окне. При обнаружении аномалии Maple автоматически подсвечивает проблемный путь и отправляет alert через Webhook в PagerDuty или Slack. Пороги чувствительности настраиваются перцентилями (p99, p999).
  • Экспорт в OpenTelemetry: Maple может работать как источник данных для OpenTelemetry Collector, экспортируя топологию и метрики в формате OTLP. Это позволяет использовать его как часть существующего observability-стека без замены других инструментов.
  • Kubernetes-native развертывание: Оператор для Kubernetes автоматически обнаруживает поды, сервисы и ингрессы, строя карту на основе labels и annotations. Поддерживается автоматическое масштабирование Collector'ов через HPA.
  • API для кастомных интеграций: GraphQL API позволяет получать текущее состояние графа, историю изменений топологии и метрики в JSON-формате. Это дает возможность встраивать карту в собственные дашборды или системы управления инцидентами.

Характеристики и тарифы

ХарактеристикаЗначение
МодельSelf-hosted (Open Source) + Cloud (Managed)
ЦенаOpen Source: бесплатно (Apache 2.0). Cloud: от $0.10/час за инстанс + $0.01/тыс. метрик
APIGraphQL (порт 8080), gRPC (порт 9090), WebSocket (порт 8081)
ЛицензияApache 2.0
Язык реализацииGo (Processor), Rust (Collector), TypeScript (Visualizer)
Поддерживаемые базы данныхMySQL, PostgreSQL, ClickHouse, MongoDB (через плагины)
Очереди сообщенийKafka, RabbitMQ, NATS
Максимальное количество узлов10 000 (тестировано), до 50 000 с шардированием
Задержка отображения< 1 секунда (p99)
Требования к ресурсамCPU: 2 ядра, RAM: 4 ГБ (для 1000 узлов)

Установка и первые шаги

Установка Maple в Kubernetes занимает около 10 минут. Рекомендуется использовать Helm-чарт, который автоматически настраивает все компоненты. Для тестирования на локальной машине доступен Docker Compose файл.

# Быстрый старт с Docker Compose
git clone https://github.com/maple-dev/maple.git
cd maple/deploy/docker-compose
docker-compose up -d

# Проверка статуса
curl http://localhost:8080/health

# Открыть визуализатор в браузере
open http://localhost:3000

# Установка в Kubernetes через Helm
helm repo add maple https://maple-dev.github.io/helm-charts
helm install maple maple/maple \
  --namespace observability \
  --create-namespace \
  --set collector.replicas=2 \
  --set processor.replicas=1

# Настройка интеграции с Prometheus
kubectl apply -f https://raw.githubusercontent.com/maple-dev/maple/main/examples/prometheus-config.yaml

После запуска Maple автоматически начнет сканировать сетевые соединения. Первая карта появится в течение 30 секунд. Для интеграции с Kafka достаточно указать адрес брокера в конфигурации Collector, и Maple начнет парсить метаданные топиков.

Сравнение с аналогами

КритерийMapleDatadog Live MapJaeger UI
Ключевая фичаАнимированная карта в реальном времени с ML-детекцией аномалийСтатическая карта сервисов с историческими даннымиТрейсинг запросов с waterfall-диаграммами
ЦенаБесплатно (self-hosted) или $0.10/час (cloud)От $15/хост/месяцБесплатно (self-hosted)
Open SourceДа (Apache 2.0)НетДа (Apache 2.0)
Обнаружение топологииАвтоматическое через eBPFТребует установки агента и конфигурацииТолько на основе trace-заголовков
Поддержка очередейKafka, RabbitMQ, NATS (нативные плагины)Только через интеграцию с Datadog AgentТолько через трейсинг
ML-аномалииВстроенный изолирующий лесОтдельный модуль Watchdog (доп. оплата)Нет
Производительность< 1 сек задержка, 10K узлов2-5 сек задержка, до 50K узлов< 1 сек, но только для трейсов
Интеграция с K8sНативный операторDatadog OperatorJaeger Operator

Maple выигрывает у Datadog Live Map в цене и открытости, а у Jaeger — в автоматическом обнаружении топологии и поддержке очередей. Однако Jaeger остается лучшим выбором для глубокого анализа отдельных трейсов, а Datadog — для компаний, которым нужна единая платформа с поддержкой.

Полезные ссылки

Итог: вердикт Qantcore

★ Рейтинг: 4.3 / 5

Maple — это зрелый инструмент для команд, которые устали от статичных дашбордов и хотят видеть живую картину своей инфраструктуры. Он идеально подходит для микросервисных архитектур с интенсивным использованием очередей сообщений и баз данных. Основные сильные стороны — автоматическое обнаружение топологии через eBPF, низкая задержка и встроенная ML-детекция аномалий. Слабые места — отсутствие долгосрочного хранения данных (требуется интеграция с Prometheus или ClickHouse) и ограниченная поддержка баз данных (только SQL и ClickHouse, нет Cassandra или S3).

Рекомендуем Maple для сценариев, где критично быстрое обнаружение проблем в реальном времени: production-среды с высокими требованиями к latency, event-driven архитектуры на Kafka, и Kubernetes-кластеры с динамической топологией. Для команд, которые уже используют Jaeger или Datadog, Maple может стать полезным дополнением, но не полной заменой. Open Source-версия полностью функциональна и не имеет ограничений, что делает ее отличным выбором для стартапов и средних компаний.