如果您的业务本身是一个SDK,想监控自身的稳定性或进行自定义事件打点,可以根据本文接入相关能力。接入SDK后,验证数据上报成功,即可在应用性能监控全链路版平台上使用相关功能。
注意
APMPlus提供的SDK监控能力主要包括:
稳定性监控包括Java崩溃、Native崩溃、ANR和自定义异常。
在project级别的build.gradle
添加maven地址。
maven { url 'https://artifact.bytedance.com/repository/Volcengine/' }
在组件module的build.gradle
文件的dependencies中添加以下代码。
implementation "com.volcengine:apm_insight_crash:1.5.0"
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);
崩溃功能介绍,请参见崩溃分析。
在project级别的build.gradle
添加maven地址。
maven { url 'https://artifact.bytedance.com/repository/Volcengine/' }
在组件module的build.gradle
文件的dependencies中添加以下代码。
implementation "com.volcengine:apm_insight_sdk:1.1.8"
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级别的日志回捞和主动上报日志,以及在崩溃时上报日志,用来有效排查单点问题。
在project级别的build.gradle
添加maven地址。
maven { url 'https://artifact.bytedance.com/repository/Volcengine/' }
在组件module的build.gradle
文件的dependencies中添加以下代码。
implementation "com.volcengine:apm_insight_cloud:0.0.3.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()); }
日志回捞功能介绍,请参见回捞。