You need to enable JavaScript to run this app.
导航

Android组件监控SDK接入

最近更新时间2024.01.15 17:32:09

首次发布时间2023.03.21 15:48:12

如果您的业务本身是一个SDK,想监控自身的稳定性或进行自定义事件打点,可以根据本文接入相关能力。接入SDK后,验证数据上报成功,即可在应用性能监控全链路版平台上使用相关功能。

注意

  • Android组件监控SDK目前仅限在中国大陆应用使用(不包括港澳台地区)。
  • SDK在初始化的时候就采集用户信息,请确保采集前已经获得用户授权。用户需授权SDK隐私政策,详情请参见SDK隐私政策,未授权不会采集任何用户信息。

功能介绍

APMPlus提供的SDK监控能力主要包括:

稳定性监控

稳定性监控包括Java崩溃、Native崩溃、ANR和自定义异常。

步骤一:接入依赖

  1. 在project级别的build.gradle添加maven地址。

    maven {
        url 'https://artifact.bytedance.com/repository/Volcengine/'
    }
    
  2. 在组件module的build.gradle文件的dependencies中添加以下代码。

    implementation "com.volcengine:apm_insight_crash:1.5.0"
    

步骤二:初始化SDK

MonitorCrash.Config config = MonitorCrash.Config.sdk({{AppId}})
        .token({{AppToken}})// 数据鉴权token,可从平台应用信息处获取,token错误无法上报数据
        .versionCode(1) // 必须SDK版本号
        .versionName("1.0") // 必须SDK版本名称
        .keywords("a.b.c", "d.e.b") //设置可能出现在崩溃堆栈内的特定字符串(比如包名)不设置不过滤,不支持正则表达式,对Java崩溃和ANR生效
        .soList("a.so", "b.so", "c.so") //Native崩溃监控,不设置不上报,不支持正则表达式
        //可选,可以设置自定义did,不设置会使用内部默认的
        //.dynamicParams(new MonitorCrash.Config.IDynamicParams() {
        //    @Override
        //    public String getDid() {//返回空会使用内部默认的did
        //        return null;
        //    }
        //
        //    @Override
        //    public String getUserId() {
        //        return null;
        //    }
        //})
        //可选,添加业务自定义数据,在崩溃详情页展示
        //.customData(crashType -> {
        //    HashMap<String, String> map = new HashMap<>();
        //    map.put("app_custom", "app_value");
        //    return map;
        //})
        //.pageViewTags(map) // 设置PV自定义维度
        .build();
MonitorCrash monitorCrash = MonitorCrash.initSDK(this, config);

步骤三:验证数据

崩溃功能介绍,请参见崩溃分析
图片

事件自定义打点

步骤一:接入依赖

  1. 在project级别的build.gradle添加maven地址。

    maven {
        url 'https://artifact.bytedance.com/repository/Volcengine/'
    }
    
  2. 在组件module的build.gradle文件的dependencies中添加以下代码。

    implementation "com.volcengine:apm_insight_sdk:1.1.8"
    

步骤二:初始化SDK

SDKEventInitConfig.Builder builder = SDKEventInitConfig.builder()
        .aid(sSDKAid)//平台的aid
        .token(sToken)//平台的token
        .context(getApplicationContext())//context
        .channel("channel")//SDK渠道
        .appVersion("1.0.0")//sdk 的版本号
        .updateVersionCode("10001")//sdk 的小版本号
        .hostAid("APM_DEMO")// 宿主App的唯一标识
        .debugMode(true)//debug模式,会打印测试日志。正式环境设置为release
        .setDynamicParams(new SDKEventIDynamicParams() {
            @Override
            public String getDid() {
                //必填,返回设备标识 did,也可以使用业务自己的did
                return AppLog.getInstance(sSDKAid).getDid();
            }

            @Override
            public String getUserId() {
                //返回用户标识 user id,没有可以为空
                return "";
            }
        });
SDKEventManager.init(builder.build());

步骤三:上报事件

您可以在SDK接入APMPlus时按照以下示例在代码里配置事件上报,也可以在平台添加事件,配置key和value并且配置采样,端上上报即可在平台查看事件。
上报示例:

HashMap<String, String> dimension = new HashMap<>();
//维度值
dimension.put("key1", "value1");
dimension.put("key2", "value2");
HashMap<String, Double> metric = new HashMap<>();
//指标值 指标值必须为数字
metric.put("metric1", (double) 10);
metric.put("metric2", 8.8);
SDKEventManager.getSDKMonitor(aid).monitorEvent("event_test", dimension, metric);

接口说明:

/**
 * 事件上报
 *
 * @param serviceName 事件名
 * @param dimension   可枚举Key-Value,标识维度
 * @param metric      不可枚举的Key-Value,标识指标
 */
public void monitorEvent(final String serviceName, final Map<String, String> dimension, final Map<String, Double> metric)

/**
 * 事件上报
 *
 * @param serviceName 事件名
 * @param dimension   可枚举Key-Value,标识维度
 * @param metric      不可枚举的Key-Value,标识指标
 * @param logExtra    用户自定义数据,不会生成报表,在单点查询原始日志里面可以看到
 */
public void monitorEvent(final String serviceName, final Map<String, String> dimension, final Map<String, Double> metric,final JSONObject logExtra) 

注意

上报事件只支持上述接口,请勿调用其他接口。

步骤四:排查问题

如果没有展示事件,提供排查日志。初始化配置为debug模式,Logcat日志过滤关键字ApmInsight:的所有日志提供给研发人员用于分析和解决问题。

//代表event1 采样没有命中
2021-04-11 21:28:01.317 13535-13592/com.example.apm.insight.demo D/ApmInsight: SDK event:event1 simple:false
//代表event2 采样命中
2021-04-11 21:28:01.771 13535-13592/com.example.apm.insight.demo D/ApmInsight: SDK event:event2 simple:true

步骤五:验证数据

事件功能介绍,请参见事件分析

您也可以通过自定义看板消费事件数据,具体配置请参见自定义看板

日志回捞

支持SDK级别的日志回捞和主动上报日志,以及在崩溃时上报日志,用来有效排查单点问题。

步骤一:接入依赖

  1. 在project级别的build.gradle添加maven地址。

    maven {
        url 'https://artifact.bytedance.com/repository/Volcengine/'
    }
    
  2. 在组件module的build.gradle文件的dependencies中添加以下代码。

    implementation "com.volcengine:apm_insight_cloud:0.0.3.sdk"
    

步骤二:初始化SDK

//初始化Vlog日志实例。
VLogConfig config = new VLogConfig.Builder(getApplicationContext())
        .setLogDirPath(this.getFilesDir() + "/Vlog/" + sSDKAid)//sSDKAid 为平台申请的aid
        .setMaxDirSize(5 * 1024 * 1024)  // max directory size
        .setSubProcessMaxDirSizeRatio(0.1f) // max directory size of each instance for sub process
        .setLogFileExpDays(14) // log file expired days
        .build();
VLog.createInstance(config, sSDKAid);      
 
//初始化回捞组件
SDKCloudInitConfig.Builder builder = SDKCloudInitConfig.builder();
builder.aid(sSDKAid);//平台的aid
builder.token(sToken);//平台的token
builder.context(getApplicationContext());//上下文context
builder.debugMode(true);//测试阶段设置为debug有log排查日志。线上配置为false
builder.channel("channel");// sdk渠道
builder.updateVersionCode("1.1.1");// sdk的版本号
builder.setDynamicParams(new SDKIDynamicParams() {
    @Override
    public String getDid() {
        //必填,设备唯一标识 did。当前写法为内部默认生成的did,也可以返回业务自己定义的did
        return AppLog.getInstance(sSDKAid).getDid();
    }

    @Override
    public String getUserId() {
        //用户唯一标识userid,可以为空
        return "";
    }
});
//拉取平台配置的回捞命令时机:回捞组件默认初始化时候会拉取一次命令.
SDKCloudManager.getInstance().init(builder.build());       
        
//日志打印
ILog iLog = VLog.getInstance(aid);
iLog.i("sdk_cloud", "test i");
iLog.e("sdk_cloud", "test e");

//可选:除了支持日志回捞,在用户反馈情况也支持主动上报Vlog日志。主动上报的日志在平台的 单点追查->自定义文件 输入did可以查询到日志
//上报前一小时的Vlog日志。上报日志会消耗平台事件量,注意合理使用
SDKCloudManager.getSDKCloud(sSDKAid).uploadVlog(System.currentTimeMillis() - 60  * 60 * 1000, System.currentTimeMillis());

方法说明:

SDKCloud.java
/**
 * Vlog日志 主动上报
 *
 * @param start 起始时间 毫秒
 * @param end   结束时间 毫秒
 */
public void uploadVlog(long start, long end) {
    AlogActiveUploadManager.upLoadVlog(start, end, null, initConfig.getAid());
}

步骤三:验证数据

日志回捞功能介绍,请参见回捞
图片
图片