用户体验监控支持通过自定义域名上报数据,主要分为四个步骤:上传证书、本地验证数据上报、修改自定义域名DNS解析和使用自定义域名上报数据。
前提条件
确保您已成功接入用户体验监控,同时对应的SLS Project已经成功创建。
查询用户体验监控SLS Project的路径如下:应用名称-应用设置-基础信息-应用信息-日志信息。
SDK要求:当前仅支持使用Java SDK上传证书,版本需要≥ 0.6.78,Maven依赖配置参考:
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>aliyun-log</artifactId> <version>0.6.142</version> </dependency>
操作步骤
步骤一:上传证书
权限要求
推荐使用RAM用户的AK SK来进行相关操作,使用前需要对RAM用户授予相应的权限,授权方式可以参考:为RAM用户授权。
最小授权粒度:对您的用户体验监控的Project资源授予log:PutCname、log:DeleteCname、log:ListCname权限,可参考以下配置自定义权限策略:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": ["log:PutCname", "log:DeleteCname", "log:ListCname"],
"Resource": "acs:log:*:*:project/${your rum sls project name}/*"
}
]
}上传证书代码示例
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.CertificateConfiguration;
import com.aliyun.openservices.log.request.SetProjectCnameRequest;
import com.aliyun.openservices.log.response.ListProjectCnameResponse;
import org.junit.Test;
import java.io.*;
import java.nio.file.Files;
public class CnameSample {
public static String readStreamAsString(InputStream in, String charset) throws IOException {
if (in == null) {
return "";
}
Reader reader = null;
Writer writer = new StringWriter();
String result;
char[] buffer = new char[1024];
try {
int n = -1;
reader = new BufferedReader(new InputStreamReader(in, charset));
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
result = writer.toString();
} finally {
in.close();
if (reader != null) {
reader.close();
}
if (writer != null) {
writer.close();
}
}
return result;
}
private static String readFileAsString(String filename) throws Exception {
File file = new File(filename);
return readStreamAsString(Files.newInputStream(file.toPath()), "utf-8");
}
@Test
public void testCname() throws Exception {
// 自定义域名证书的公钥文件
String pubKey = readFileAsString("public.pem");
// 自定义域名证书的私钥文件
String priKey = readFileAsString("private.key");
// 用户体验监控对应的 project
String project = "${your rum sls project name}";
// 自定义域名 xx.abc.com
String cname = "your cname";
// 日志服务的服务接入点。此处以北京为例,其它地域请根据实际情况填写
String endpoint = "cn-beijing.log.aliyuncs.com";
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
SetProjectCnameRequest request1 = new SetProjectCnameRequest(project, cname);
request1.setCertificateConfiguration(new CertificateConfiguration()
.withPublicKey(pubKey)
.withPrivateKey(priKey));
Client client = new Client(endpoint,
accessKeyId,
accessKeySecret);
client.setProjectCname(request1);
}
}client对象中参数说明:
参数名 | 描述 |
endpoint | SLS Endpoint可参考:服务接入点。需要使用 公网接入地址。 |
accessKeyId | 查看RAM用户AK可参考:查看RAM用户的AccessKey信息。 |
accessKeySecret | 查看RAM用户AK可参考:查看RAM用户的AccessKey信息。 |
解除证书关联与查询证书
步骤二:本地验证数据上报
在正式切换自定义域名的DNS解析前,需要先在本地验证数据上报是否正常,以确认证书上传的有效性。
本地执行dig命令,获取到 ${用户体验监控SLS project}.${对应地域的SLS 公网接入地址} 域名的一个IP地址。SLS公网接入地址可参考步骤一:上传证书中参数说明。
通过本地hosts文件,将自定义域名绑定到通过上述操作获取到的一个IP地址。
将RUM接入配置中的Endpoint的域名部分,替换成您的自定义域名,然后在本地测试数据上报。此部分可以参考步骤四:使用自定义域名上报。
步骤三:修改自定义域名DNS解析
在本地验证数据成功上报后,可以将您自定义域名的DNS解析,CNAME到 ${用户体验监控SLS project}.${对应地域的SLS 公网接入地址}。
步骤四:使用自定义域名上报
Web、小程序、小游戏、Uniapp、Flutter、ReactNative类型的应用,将应用设置-基础信息-集成探针展示的Endpoint中的域名部分,替换成您的自定义域名。
以Web应用为例,例如控制台展示的Endpoint为:
https://proj-xtrace-xxxx-cn-hangzhou.cn-hangzhou.log.aliyuncs.com/rum/web/v2?workspace=default-cms-xxxx-cn-hangzhou&service_id=xxx@yyyy,您需要将Endpoint的 域名部分 替换成您的自定义域名,替换后的Endpoint为:https://your.custom.domain/rum/web/v2?workspace=default-cms-xxxx-cn-hangzhou&service_id=xxx@yyyy。
Android、iOS和HarmonyOS,如果SDK版本号< 2.0.0,则将ConfigAddress中的域名部分替换成自定义域名;如果版本号≥ 2.0.0,则将Endpoint中的域名部分替换成自定义域名。
以Android 应用为例,如果您的SDK版本号< 2.0.0,则将ConfigAddress改成
https://your.custom.domain;如果您的SDK版本号≥2.0.0,则将Endpoint改成https://your.custom.domain。