Інтеграція New Relic для моніторингу мобільного додатку (APM)
New Relic Mobile — один з кількох APM-інструментів, де мобільний клієнт і бекенд живуть в одному акаунті без додаткового налаштування кореляції. Якщо на бекенді вже встановлений New Relic APM, мобільна частина інтегрується в ту ж ієрархію сутностей, і Distributed Tracing працює практично з коробки.
Встановлення агента
iOS через Swift Package Manager:
// Package.swift
.package(url: "https://github.com/newrelic/newrelic-ios-agent-spm", from: "7.4.0")
import NewRelic
// AppDelegate.application(_:didFinishLaunchingWithOptions:)
NewRelic.start(withApplicationToken: "AA-XXXXXXXX-XXXX")
Агент автоматично перехоплює URLSession-запити через swizzling. Якщо ви використовуєте кастомний URLProtocol або Alamofire з кастомними адаптерами, переконайтеся, що swizzling не конфліктує.
Android:
// build.gradle (project level)
classpath("com.newrelic.agent.android:agent-gradle-plugin:7.+")
// build.gradle (app level)
apply plugin: 'newrelic'
implementation("com.newrelic.agent.android:android-agent:7.+")
// MainActivity або Application.onCreate()
NewRelic.withApplicationToken("AA-XXXXXXXX-XXXX")
.withLoggingEnabled(false)
.start(applicationContext)
Gradle-плагін інструментує bytecode під час збірки — HTTP-виклики через OkHttp та HttpURLConnection починають відслідковуватися без змін коду. Зручно, але іноді викликає проблеми з ProGuard: додайте правила для класів com.newrelic.** у proguard-rules.pro.
Взаємодія з Distributed Tracing
New Relic передає заголовок newrelic (W3C TraceContext) у всі вихідні запити. На бекенді агент New Relic APM перехоплює цей заголовок та формує один трейс. У інтерфейсі New Relic One ви можете відкрити конкретний HTTP-запит з мобільного додатку і провалитися в серверний трейс на рівні SQL.
Важливо: Distributed Tracing для агентів мобільного пристрою New Relic за замовчуванням включено тільки для Infinite Tracing (якщо налаштований Trace Observer). Для стандартного семплінгу дозвольте це явно:
NewRelic.enableFeatures([.NRFeatureFlag_DistributedTracing])
Кастомні события та атрибути
// Кастомне evento
NewRelic.recordCustomEvent(
"CheckoutCompleted",
attributes: [
"order_id": orderId,
"total": total,
"payment_method": method
]
)
// Додати атрибут до поточної сесії
NewRelic.setAttribute("user_plan", value: "premium")
Еквіваленти на Android:
NewRelic.recordCustomEvent(
"CheckoutCompleted",
mapOf("order_id" to orderId, "total" to total)
)
Кастомні события надходять у NRQL — мову запитів New Relic. Наприклад:
SELECT count(*) FROM CheckoutCompleted
FACET payment_method
SINCE 7 days ago
TIMESERIES
Відслідковування помилок та крахів
New Relic Mobile автоматично збирає крахи. Записуйте оброблені винятки явно:
do {
try performPayment()
} catch {
NewRelic.recordError(error, attributes: ["context": "checkout"])
}
Крах-репорти у New Relic включають Thread State для всіх потоків, Application Not Responding события та Breadcrumb Trail — послідовність навігаційних та мережевих подій перед крахом.
Дашборди та алерти
New Relic Alerts дозволяє налаштувати NRQL-умови:
-- Алерт, якщо crash-free rate упав нижче 99.5%
SELECT percentage(count(*), WHERE crashCount = 0)
FROM MobileSession
WHERE appName = 'MyApp'
На відміну від Firebase Crashlytics, тут можна налаштувати алерт не просто на кількість крахів, а на бізнес-метрику — наприклад, падіння конверсії checkout, яке корелює з network error rate.
Що ми робимо
- Підключаємо агент для iOS/Android (або React Native через
@newrelic/react-native-agent) - Верифікуємо правильність HTTP-автоінструментації
- Налаштовуємо Distributed Tracing з агентом бекенду
- Створюємо кастомні события для вашої бізнес-воронки
- Налаштовуємо NRQL-алерти з сповіщеннями у Slack/PagerDuty
Часові оцінки
Базова інтеграція з автоінструментацією: 1–2 дні. Кастомні события та дашборди: ще 1 день. Ціна розраховується індивідуально.







