You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android应用的分析与诊断数据同步至Azure Application Insights

将Android应用数据同步至Azure Application Insights的正确方案

目前官方推荐的方案是使用Azure Monitor OpenTelemetry SDK for Android,这是替代已弃用的旧版Application Insights Android SDK的标准方案,可完整覆盖自定义事件、异常及崩溃数据的采集与上报。

1. 集成依赖

在Module级别的build.gradle(或build.gradle.kts)中添加以下依赖:

// OpenTelemetry核心依赖
implementation "io.opentelemetry:opentelemetry-sdk:1.32.0"
implementation "io.opentelemetry:opentelemetry-sdk-trace:1.32.0"
implementation "io.opentelemetry:opentelemetry-sdk-logs:1.32.0"
implementation "io.opentelemetry:opentelemetry-exporter-otlp:1.32.0"

// Azure Monitor导出器
implementation "com.azure.monitor:azure-monitor-opentelemetry-exporter:1.0.0-beta.22"

注:请使用最新稳定版本号,避免依赖冲突。

2. 初始化SDK

在应用启动时(比如Application类的onCreate方法)完成SDK初始化,配置Azure连接字符串:

import com.azure.monitor.opentelemetry.exporter.AzureMonitorExporterBuilder
import io.opentelemetry.api.OpenTelemetry
import io.opentelemetry.sdk.OpenTelemetrySdk
import io.opentelemetry.sdk.logs.SdkLoggerProvider
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessor
import io.opentelemetry.sdk.trace.SdkTracerProvider
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        // 从Azure Application Insights资源获取连接字符串
        val connectionString = "YOUR_APPLICATION_INSIGHTS_CONNECTION_STRING"

        // 创建Azure Monitor导出器
        val exporter = AzureMonitorExporterBuilder()
            .connectionString(connectionString)
            .buildTraceExporter()

        val logExporter = AzureMonitorExporterBuilder()
            .connectionString(connectionString)
            .buildLogExporter()

        // 初始化TracerProvider(用于追踪/自定义事件)
        val tracerProvider = SdkTracerProvider.builder()
            .addSpanProcessor(BatchSpanProcessor.builder(exporter).build())
            .build()

        // 初始化LoggerProvider(用于日志/异常)
        val loggerProvider = SdkLoggerProvider.builder()
            .addLogRecordProcessor(BatchLogRecordProcessor.builder(logExporter).build())
            .build()

        // 构建OpenTelemetry实例
        val openTelemetry = OpenTelemetrySdk.builder()
            .setTracerProvider(tracerProvider)
            .setLoggerProvider(loggerProvider)
            .buildAndRegisterGlobal()
    }
}

3. 上报自定义事件

通过Tracer创建Span来记录自定义事件,携带事件属性:

val tracer = OpenTelemetry.globalTracerProvider.get("MyAppTracer")

// 记录用户点击按钮事件
tracer.spanBuilder("Button_Clicked")
    .setAttribute("button_id", "submit_btn")
    .setAttribute("user_id", "12345")
    .startSpan()
    .end()

4. 捕获异常与崩溃

捕获未处理异常

实现全局异常处理器,将异常信息上报:

class GlobalExceptionHandler(private val defaultHandler: Thread.UncaughtExceptionHandler) : Thread.UncaughtExceptionHandler {
    private val logger = OpenTelemetry.globalLoggerProvider.get("MyAppLogger")

    override fun uncaughtException(t: Thread, e: Throwable) {
        // 记录异常日志
        logger.logRecordBuilder()
            .setSeverity(Severity.ERROR)
            .setBody("Uncaught exception: ${e.message}")
            .setAttribute("thread_name", t.name)
            .setAttribute("exception_type", e.javaClass.name)
            .setAttribute("stack_trace", e.stackTraceToString())
            .emit()

        // 调用默认处理器
        defaultHandler.uncaughtException(t, e)
    }
}

在Application的onCreate中注册:

val defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
Thread.setDefaultUncaughtExceptionHandler(GlobalExceptionHandler(defaultHandler))

捕获已处理异常

在代码中捕获异常时,直接通过Logger上报:

try {
    // 业务代码
} catch (e: IOException) {
    logger.logRecordBuilder()
        .setSeverity(Severity.WARN)
        .setBody("File operation failed: ${e.message}")
        .setAttribute("error_code", "FILE_IO_ERROR")
        .emit()
}

5. 关键注意事项

  • 连接字符串:必须从Azure Portal的Application Insights资源中获取,确保权限正确。
  • 网络权限:在AndroidManifest.xml中添加<uses-permission android:name="android.permission.INTERNET" />和<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />。
  • 采样配置:可通过BatchSpanProcessor和BatchLogRecordProcessor配置采样率,避免数据量过大。
  • 版本兼容:确保OpenTelemetry SDK与Azure Monitor导出器版本匹配,参考官方版本矩阵。

内容的提问来源于stack exchange,提问作者Aniket

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:21:12