Интеграция Dynatrace для мониторинга мобильного приложения (APM)
Dynatrace отличается от Datadog и New Relic подходом к инструментации: вместо ручной расстановки трекинг-вызовов агент Dynatrace использует OneAgent с автоматическим обнаружением зависимостей через AI-движок Davis. На мобильной стороне это означает, что большинство HTTP-вызовов, крэшей и UI-зависаний начинают отслеживаться сразу после добавления SDK без написания кода.
Установка OneAgent Mobile
iOS:
// Podfile
pod 'Dynatrace', '~> 8.0'
// Или Swift Package Manager
.package(url: "https://github.com/Dynatrace/swift-mobile-sdk", from: "8.0.0")
import Dynatrace
// Info.plist или programmatic init
DTXApplicationID = "your-application-id"
DTXBeaconURL = "https://your-environment.live.dynatrace.com/mbeacon"
// В коде:
Dynatrace.startupWithConfig(nil)
Dynatrace использует свой beakon-эндпоинт (/mbeacon), а не стандартный ingestion API. Если в приложении настроен certificate pinning, URL *.live.dynatrace.com нужно добавить в whitelist или использовать DTXClusterURL с кастомным прокси.
Android:
// build.gradle (project)
classpath("com.dynatrace.tools.android:gradle-plugin:8.+")
// build.gradle (app)
apply plugin: 'com.dynatrace.instrumentation'
// assets/dynatrace.properties
DTXApplicationID=your-application-id
DTXBeaconURL=https://your-environment.live.dynatrace.com/mbeacon
Gradle-плагин Dynatrace тяжелее New Relic по влиянию на время сборки. На крупных проектах с 50k+ классов время incremental build может вырасти на 15–30 секунд.
Пользовательские действия (User Actions)
Dynatrace группирует всё, что произошло между касанием пользователя и завершением вызванных операций, в User Action. Это ключевая сущность: в ней видно, сколько времени заняло загрузить данные после нажатия кнопки.
Для кастомных действий:
let action = Dynatrace.enterAction("AddToCart")
// ... выполняем работу ...
action?.leaveAction()
Если внутри enterAction/leaveAction происходит URLSession-запрос, Dynatrace автоматически привяжет его к этому User Action. В дашборде Waterfall view покажет цепочку: жест → синхронизация данных → API-запрос → рендер.
Распределённая трассировка
Dynatrace поддерживает W3C traceparent и собственный формат x-dynatrace. Для корреляции с бэкендом:
// Manual tagging для кастомных HTTP-клиентов
if let requestTag = Dynatrace.getDynatraceStringTag() {
request.setValue(requestTag, forHTTPHeaderField: "x-dynatrace")
}
В Dynatrace Smartscape весь путь от мобильного клика до запроса к базе данных видно на одном экране — это то, за что платят enterprise-клиенты.
Типичные ошибки при интеграции
Двойная инициализация. При использовании SwiftUI + SceneDelegate иногда startupWithConfig вызывается дважды — из AppDelegate и из Scene(_:willConnectTo:). Dynatrace молча игнорирует второй вызов, но session ID сбрасывается, что ломает атрибуцию сессий.
ProGuard и R8. Gradle-плагин добавляет маппинг-файл в дашборд автоматически, но только если uploadEnabled = true в dynatrace.properties. Без этого stack trace в крэш-репортах будет обфусцированным.
Beacon URL в debug-сборке. Не забывайте переключать DTXBeaconURL для dev/staging окружений — тестовый трафик в production-окружении засоряет метрики.
Что делаем
- Подключаем OneAgent через Gradle-плагин (Android) и SPM/CocoaPods (iOS)
- Настраиваем beakon URL и Application ID для каждого окружения
- Инструментируем кастомные HTTP-клиенты (Alamofire, Retrofit) для распределённых трейсов
- Конфигурируем User Actions для ключевых пользовательских сценариев
- Настраиваем Davis AI Anomaly Detection под базовые метрики приложения
Сроки
Базовая интеграция с автоинструментацией: 2–3 дня. Настройка распределённых трейсов и кастомных User Actions: ещё 1 день. Стоимость рассчитывается индивидуально.







