通过OSS将符号表文件批量上传到指定的RUM OSS Bucket下,即可在用户体验监控控制台的中看到上传的符号表文件,后续您可以在异常明细中使用已上传的符号表对异常堆栈进行解析。
前提条件
- 已创建用户体验监控应用,并获取应用Pid。具体操作,请参见接入Web & H5应用、接入小程序和接入移动应用。 
- 已创建AccessKey。具体操作,请参见创建AccessKey。 
- 对上述AccessKey已赋予AliyunSTSAssumeRoleAccess权限,具体操作,请参见AliyunSTSAssumeRoleAccess。 
- 已开通OSS文件批量上传功能。具体开通步骤如下: - 在应用设置页面的文件管理区域,单击开启OSS批量上传文件开关。  
注意事项
- 必须使用RUM按地域提供的OSS Bucket,地域和用户体验监控应用所在的地域相关,各地域Bucket列表如下: - 中国杭州地域(cn-hangzhou): - arms-rum-sourcemap-hz
- 新加坡地域(ap-southeast-1): - arms-rum-sourcemap-sg
- 美国硅谷地域(us-west-1): - arms-rum-sourcemap-usw
 
- 上传到OSS的目标路径: - ${uid}/${pid}/${version}/重要- uid是阿里云账号(主账号)ID,- pid是用户体验监控应用ID,- version是自定义的符号表版本。
- iOS的.dSYM文件上传时需要将.dSYM打包成ZIP压缩包上传,上传后用户体验监控会自动解析.dSYM符号表文件的UUID。 
 
用户体验监控目前支持通过以下几种方式批量上传符号表,您可以根据需求选择其中一种:
使用ossutil命令行工具上传
使用ossutil上传时,需要提前配置访问凭证,具体操作,请参见配置ossutil。
指定本地目录批量上传
上传命令格式:
ossutil cp -r ${localfolder}/ oss://${bucket}/${uid}/${pid}/${version}/示例:
ossutil cp -r localfolder/ oss://arms-rum-sourcemap-hz/1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/指定本地文件上传
上传命令格式:
./ossutil64 cp ${examplefile} oss://${bucket}/${uid}/${pid}/${version}/示例:
./ossutil64 cp examplefile.js.map oss://arms-rum-sourcemap-hz/1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/使用OSS SDK上传
以下使用Python SDK举例,指定上传examplefile.js.map文件,UID为1981000187653069,PID为ji7ex7ti31@f1fadb692e6cdc8,Version为1.0.0。
示例代码如下,其他语言的操作请参见SDK参考。
# -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'arms-rum-sourcemap-hz')
# 必须以二进制的方式打开文件。
# 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
key = '1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/'
bucket.put_object_from_file(key + 'examplefile.js.map', 'D:\\localpath\\examplefile.js.map')
集成CI/CD流水线自动批量上传
CI/CD流水线可集成OSS命令行工具或OSS SDK,将编译生成的符号表文件通过上述工具上传到指定的OSS Bucket下。
iOS .dSYM符号表打包注意事项
上传iOS .dSYM符号表必须将单个或多个.dSYM文件打包成一个ZIP文件进行上传,例如在一个目录下存在 AlibabaCloudRUM.framework.dSYM和iOSDemo.app.dSYM两个符号表文件,文件目录如下:
.
├── AlibabaCloudRUM.framework.dSYM
│   └── Contents
│       ├── Info.plist
│       └── Resources
│           ├── DWARF
│           │   └── AlibabaCloudRUM
│           └── Relocations
│               └── aarch64
│                   └── AlibabaCloudRUM.yml
└── iOSDemo.app.dSYM
    └── Contents
        ├── Info.plist
        └── Resources
            ├── DWARF
            │   ├── iOSDemo
            │   └── iOSDemo.txt
            └── Relocations
                └── aarch64
                    └── iOSDemo.yml将此目录下的.dSYM文件打包压缩为test.zip文件,压缩过程和结果如下:
» zip -r test.zip *.dSYM                                                    
  adding: AlibabaCloudRUM.framework.dSYM/ (stored 0%)
  adding: AlibabaCloudRUM.framework.dSYM/Contents/ (stored 0%)
  adding: AlibabaCloudRUM.framework.dSYM/Contents/Resources/ (stored 0%)
  adding: AlibabaCloudRUM.framework.dSYM/Contents/Resources/Relocations/ (stored 0%)
  adding: AlibabaCloudRUM.framework.dSYM/Contents/Resources/Relocations/aarch64/ (stored 0%)
  adding: AlibabaCloudRUM.framework.dSYM/Contents/Resources/Relocations/aarch64/AlibabaCloudRUM.yml (deflated 90%)
  adding: AlibabaCloudRUM.framework.dSYM/Contents/Resources/DWARF/ (stored 0%)
  adding: AlibabaCloudRUM.framework.dSYM/Contents/Resources/DWARF/AlibabaCloudRUM (deflated 71%)
  adding: AlibabaCloudRUM.framework.dSYM/Contents/Info.plist (deflated 52%)
  adding: iOSDemo.app.dSYM/ (stored 0%)
  adding: iOSDemo.app.dSYM/Contents/ (stored 0%)
  adding: iOSDemo.app.dSYM/Contents/Resources/ (stored 0%)
  adding: iOSDemo.app.dSYM/Contents/Resources/Relocations/ (stored 0%)
  adding: iOSDemo.app.dSYM/Contents/Resources/Relocations/aarch64/ (stored 0%)
  adding: iOSDemo.app.dSYM/Contents/Resources/Relocations/aarch64/iOSDemo.yml (deflated 89%)
  adding: iOSDemo.app.dSYM/Contents/Resources/DWARF/ (stored 0%)
  adding: iOSDemo.app.dSYM/Contents/Resources/DWARF/iOSDemo.txt (deflated 72%)
  adding: iOSDemo.app.dSYM/Contents/Resources/DWARF/iOSDemo (deflated 72%)
  adding: iOSDemo.app.dSYM/Contents/Info.plist (deflated 52%)将最终生成的test.zip文件上传即可。
OSS上传目标路径需要添加版本号(version)。
常见错误
报错内容:Error: oss: service returned error: StatusCode=403, ErrorCode=AccessDenied, ErrorMessage="You have no right to access this object because of bucket acl."
如果报403错误码,请检查当前您使用的AccessKey对应的账号是否已参考前提条件在控制台侧开通开启OSS批量上传文件。该权限为子账号级别隔离,只有在控制台侧开通该功能的账号对应的AccessKey才具有该权限。