Інтеграція 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 або програмна ініціалізація
DTXApplicationID = "your-application-id"
DTXBeaconURL = "https://your-environment.live.dynatrace.com/mbeacon"
// У коді:
Dynatrace.startupWithConfig(nil)
Dynatrace використовує свій beacon endpoint (/mbeacon), а не стандартний ingestion API. Якщо ваш додаток використовує certificate pinning, додайте *.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 секунд.
Користувацькі дії
Dynatrace групує все, що відбулося між натиском користувача та завершенням викликаних операцій, у User Action. Це ключова сутність: ви бачите, скільки часу зайняло завантажити дані після натиснення кнопки.
Для кастомних дій:
let action = Dynatrace.enterAction("AddToCart")
// ... виконати роботу ...
action?.leaveAction()
Якщо URLSession-запит відбувається всередині enterAction/leaveAction, Dynatrace автоматично прив'язує його до цієї User Action. На дашборді Waterfall view показує ланцюг: жест → синхронізація даних → API-запит → рендер.
Розподілена трасування
Dynatrace підтримує W3C traceparent та його власний формат x-dynatrace. Для кореляції з бекендом:
// Ручне мічення для кастомних 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 окружень — тестовий трафік у продакшн-окруженні засоряє метрики.
Що ми робимо
- Підключаємо OneAgent через Gradle-плагін (Android) та SPM/CocoaPods (iOS)
- Налаштовуємо beacon URL та Application ID для кожного окруження
- Інструментуємо кастомні HTTP-клієнти (Alamofire, Retrofit) для розподілених трейсів
- Налаштовуємо User Actions для ключових сценаріїв користувача
- Встановлюємо Davis AI Anomaly Detection для базових метрик
Часові оцінки
Базова інтеграція з автоінструментацією: 2–3 дні. Налаштування розподілених трейсів та кастомних User Actions: ще 1 день. Ціна розраховується індивідуально.







