EUM Android агент Proto Observability

Proto OBP End User Monitoring Android агент позволяет собирать данные о производительности мобильного приложения напрямую с клиентов, инструментируя приложения на устройствах конечных пользователей.

На этой странице:

Подключение и инициализация агента и модулей Proto Observability

Для подключения агента используется SDK для автоматической инструментации (POBP Android SDK).

В файле build.gradle.kts добавьте репозиторий:


repositories {
    mavenCentral()
    maven {
        url = uri("https://repo.proto.group/repository/maven-releases/")
        credentials {
            username = "customer-name"   // получите реквизиты доступа от Proto
            password = "your-password"   // получите реквизиты доступа от Proto
        }
    }
}

В файле build.gradle в корне проекта добавьте репозиторий в разделе subprojects:


subprojects {
    repositories {
        google()
        mavenCentral()
        maven {
            url = uri("https://repo.proto.group/repository/maven-releases/")
            credentials {
                username = "customer-name"   // получите реквизиты доступа от Proto
                password = "your-password"   // получите реквизиты доступа от Proto
            }
        }
    }
}
        

В файле build.gradle в папке проекта добавьте Android SDK в разделе dependencies


dependencies {
    // POBP RUM SDK Android - обязательный модуль
    implementation "ru.proto_group:pobp-sdk-android:1.15.4"
    // Если используется Android Compose
    implementation "ru.proto_group:pobp-sdk-android-compose:1.15.4"
    // Если используется Glide
    implementation "ru.proto_group:pobp-sdk-android-glide:1.15.4"

}

Инициализируйте SDK и сделайте необходимые import:

class SampleApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        // POBP RUM start
        val pobpAppname = "My Android App"  // название приложения для отображения в интерфейсе
        // список доменов для трейсинга - к запросам на эти домены будут добавляться заголовки для трейсинга
        val pobpTracedHosts = listOf(
            "www.your-site.ru",
            "api.your-site.ru"
        )
        // адрес для приема данных от RUM - данные должны проксироваться на https://proto-backend-server/mobile
        val pobpEndpoint = "https://your-site.ru/mobile"

        val configuration = Configuration.Builder(
            rumEnabled = true,             // обязательно true
            tracesEnabled = true,          // обязательно true
            logsEnabled = false,           // обязательно false
            crashReportsEnabled = false    // обязательно false
        )
            .sampleRumSessions(100F)       // 100F - все пользователи, 10F - 10% пользовательских сессиий
            .sampleTelemetry(0F)           // обязательно указать 0F
            .setFirstPartyHosts(pobpTracedHosts)
            .trackLongTasks(10000)        // обязательно
            .useCustomRumEndpoint(pobpEndpoint)
            .useCustomTracesEndpoint(pobpEndpoint)
            .build()

        val credentials = Credentials(
            clientToken = "1",              // обязательно 1
            envName = "prod",               // окружение, поддержка этого тега в интерфейсе появится позднее
            variant = NO_VARIANT ,          // обязательно
            rumApplicationId = pobpAppname, // обязательно
            serviceName = pobpAppname       // обязательно
        )
        Pobp.initialize(this, credentials, configuration, TrackingConsent.GRANTED) // обязательно

        // добавление данных о текущем пользователе - опционально
        Pobp.setUserInfo(
            id = "1234",                // строка, опционально
            name = "Василий Пупкин",    // строка, опционально
            email = "vass@pupkine.com"  // строка, опционально
        )
        val monitor = RumMonitor.Builder().build()
        GlobalRum.registerIfAbsent(monitor)
        // RUM end        

    }
}

Трейсинг запросов okhttp

Необходимо добавить interceptor, если у вас уже есть другие interceptor, то необходимо добавить PobpInterceptor самым первым.

val okHttpClient =  OkHttpClient.Builder()
    .addInterceptor(PobpInterceptor())
    .eventListenerFactory(PobpEventListener.Factory())
    .build()

Трейсинг запросов retrofit

Если вы используете Retrofit, позвольте ему использовать ваш OkHttpClient, и вы сможете получать информацию о сетевых запросах, сделанных с помощью Retrofit.

val retrofitClient = Retrofit.Builder()
    .client(okHttpClient)
    // …
    .build()

Трейсинг запросов glide

Подключите модуль Pobp для Glide в файле build.gradle.

Следуя документации Glide, вам нужно создать свой собственный модуль GlideAppModule с интеграцией Pobp путем расширения модуля PobpGlideModule, как показано ниже. Это позволит автоматически отслеживать сетевые запросы Glide, а также собирать ошибки дискового кэша и преобразования изображений (создавая события RUM Error).

Трейсы сетевых запросов собираются с применение настраиваемого сэмплирования. По умолчанию применяется сэмплирование на уровне 20%.

// список доменов для трейсинга - к запросам на эти домены будут добавляться заголовки для трейсинга
val pobpTracedHosts = listOf(
    "www.your-site.ru",
    "api.your-site.ru"
)

@GlideModule
class CustomGlideModule : 
    PobpGlideModule(
        pobpTracedHosts, traceSamplingRate = 20f
    )

Сквозная трассировка запросов от Android приложения

Трейсы транзакции от Android к инструментированным бэкендам, то есть бэкендам, на которых установлены агенты Proto OBP, будут объединяться в единую цепочку вызовов - трейс распределенной транзакции, начавшейся на Android устройстве.

../../images/185-android-trace.png