本文介绍通过日志服务SDK接入Android Trace数据的操作步骤。
前提条件
步骤一:引入库文件
您需要在Android Studio工程对应模块下的build.gradle文件中增加以下依赖。
implementation 'com.aliyun.openservices:aliyun-log-android-sdk:bricks_1.0.7'
implementation 'com.aliyun.openservices:alysls-android-trace:1.0.0'
接入Android Trace数据所涉及的依赖包说明如下表所示。
库文件 | 说明 |
---|---|
aliyun-log-android-sdk | 核心SDK,用于采集Android数据到日志服务。 |
alysls-android-trace | 接入Trace数据的插件。 |
步骤二:配置接入服务
- 添加Application类,即在$PROJECT/app/src/main/AndroidManifest.xml文件中增加Application类。
例如添加MyApplication类,配置示例如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.aliyun.sls.android.demo"> ... <application android:icon="@mipmap/ic_launcher" ... android:name="com.aliyun.sls.android.demo.SLSDemoApplication" ... android:theme="@style/AppTheme"> ... </application> </manifest>
Android Studio将根据您所添加的MyApplication类,自动创建一个名为MyApplication的类并添加到当前项目。 - 在MyApplication.onCreate方法中,增加如下初始化代码。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); SLSAdapter adapter = SLSAdapter.getInstance(); // 添加Trace插件。 adapter.addPlugin(SLSTracePlugin.getInstance()); SLSConfig config = new SLSConfig(this); config.pluginTraceEndpoint = "endpoint"; config.pluginTraceLogProject = "project"; config.pluginTraceLogStore = "store"; // 根据集成情况,自主开启日志开关。 config.debuggable = true; adapter.init(config); } }
- SLSConfig
SLSConfig类定义了关键的配置字段。
类型 字段 示例值 说明 调试参数 debuggable true 是否调试日志信息。 说明 发布时,建议关闭,即配置为config.debuggable = false。配置参数 appVersion 无 App版本号。建议保持默认配置。 appName 无 App名称。建议保持默认配置。 配置参数 traceEndpoint cn-hangzhou.log.aliyuncs.com 您在创建Trace实例时所绑定的Project的Endpoint。如何获取,请参见公网服务入口。 注意 只支持公网服务入口。traceLogProject sls-ayasls-demo 您在创建Trace实例时所绑定的Project。更多信息,请参见创建Trace实例。 traceLogStore sls-d60f-traces Trace服务中用于存储原始Trace数据的Logstore。Logstore名称为{instance}-traces,其中instance为您所创建的Trace实例的ID。更多信息,请参见创建Trace实例。 accessKeyId LTAI****eYDw 具备日志服务Project资源访问权限的RAM用户的AccessKey ID。如何获取,请参见访问密钥。如何为RAM用户授权,请参见配置权限助手。 accessKeySecret lrRq****GOVM 具备日志服务Project资源访问权限的RAM用户的AccessKey Secret。如何获取,请参见访问密钥。如何为RAM用户授权,请参见配置权限助手。 securityToken 124f****a369 具备日志服务Project资源访问权限的RAM用户的访问密钥Token。使用STS方式接入时,需要配置。如何获取,请参见AssumeRole。 自定义参数 channel Google 自定义参数,App渠道号。 channelName Google 自定义参数,App渠道名称。 userNick Tom 自定义参数,用户昵称。 longLoginNick Tom 自定义参数,用户昵称,最后一次登录的用户昵称。 userId 423423 自定义参数,用户ID。 longLoginUserId 423423 自定义参数,用户ID,最后一次登录的用户ID。 loginType pswd 自定义参数,用户登录类型。 业务参数 slsConfig.addCustom("customKey", "customValue"); slsConfig.addCustom("action_name", "click");slsConfig.addCustom("action_args", "detail_id:243434"); 用于添加业务参数,键值对形式。 - customKey:参数名。
- customValue:参数值。
- SLSAdapter
SLSAdapter类是插件的管理类。
方法 说明 getInstance() 返回SLSAdapter单例。 addPlugin(plugin) 增加一个插件。 init(slsConfig) 初始化所有插件。 注意 init()方法会初始化所有的插件,请勿单独调用插件的init()方法。调用init()方法前,需先调用addPlugin()方法。resetSecurityToken(accessKeyId, accessKeySecret, securityToken) 更新STS Token。 注意 resetSecurityToken()需要在调用initWithSLSConfig方法后再调用。updateConfig(slsConfig) 更新SLSConfig配置信息,适用于自定义参数、traceEndpoint、traceLogProject和traceLogStore。 注意 updateConfig()需要在调用initWithSLSConfig方法后再调用。
- SLSConfig
- 通过STS方式配置accessKeyId、accessKeySecret和securityToken。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); SLSAdapter adapter = SLSAdapter.getInstance(); // 添加Trace插件。 adapter.addPlugin(SLSTracePlugin.getInstance()); SLSConfig config = new SLSConfig(this); // 初始化时,传入STS AccessKey信息。 config.accessKeyId = accesskeyid; config.accessKeySecret = accesskeysecret; config.securityToken = securityToken; config.pluginTraceEndpoint = "endpoint"; config.pluginTraceLogProject = "project"; config.pluginTraceLogStore = "logstore"; // 根据集成情况,自主开启日志开关。 config.debuggable = true; adapter.init(config); } }
- 构造一个Span。
// 1. 获取Tracer实例。 Tracer tracer = SLSTelemetry.getInstance().getTracer("your_tracer_name"); // 2. 构造SpanBuilder。 SpanBuilder spanBuilder = tracer.spanBuilder("your_span_name"); spanBuilder.setAttribute("属性key", "属性 value"); // 3. 构造Span。 Span span = spanBuilder.startSpan(); // 根据业务需求添加属性。 span.setAttribute("属性key", "属性value"); // 根据业务需求添加event事件。 span.addEvent("your event"); // 4. 设置Span状态。默认为UNSET,成功为OK,失败为ERROR。 span.setStatus(StatusCode.OK); // 5. 结束一个Span。 span.end();
- 构造一条Trace数据。
// 1. 获取Tracer实例。 Tracer tracer = SLSTelemetry.getInstance().getTracer("your_tracer_name"); // 2. 构造第一个Span。 SpanBuilder spanBuilder = tracer.spanBuilder("your_span_name_1"); spanBuilder.setAttribute("属性key1", "属性value1"); Span span = spanBuilder.startSpan(); span.setAttribute("属性key2", "属性value2"); span.addEvent("your event"); span.setStatus(StatusCode.OK); // 3. 构造第二个Span。 SpanBuilder spanBuilder = tracer .spanBuilder("your_span_name_2") // 此处需要设置第一个span的Context。 .setParent(Context.current().with(span)); spanBuilder.setAttribute("属性key1", "属性value1"); Span span2 = spanBuilder.startSpan(); span2.setAttribute("属性key2", "属性value2"); span2.addEvent("your event"); span2.setStatus(StatusCode.OK); // 4. 结束第二个span。 span2.end(); // 5. 最后结束第一个span。 span.end();
- 通过TextMapPropagator连接前后端。
// 1.获取Tracer实例。 Tracer tracer = SLSTelemetry.getInstance().getTracer("your_tracer_name"); // 2.构造第一个Span。 SpanBuilder spanBuilder = tracer.spanBuilder("/"); // 自定义指定span name。 spanBuilder.setAttribute("属性key1", "属性value1"); Span span = spanBuilder.startSpan(); span.setAttribute("属性key2", "属性value2"); span.addEvent("your event"); span.setStatus(StatusCode.OK); span.end(); // 以HttpURLConnection为例进行说明。 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 3.构造TextMapSetter。 TextMapSetter<HttpURLConnection> setter = new TextMapSetter<HttpURLConnection>() { @Override public void set(HttpURLConnection carrier, String key, String value) { carrier.setRequestProperty(key, value); } }; // 4.在http request header中注入traceparent和tracestate。 SLSTelemetry slsTelemetry = SLSTelemetry.getInstance(); TextMapPropagator textMapPropagator = slsTelemetry.getPropagators().getTextMapPropagator(); textMapPropagator.inject(context, connection, setter);