通過OSS將符號表檔案批量上傳到指定的RUM OSS Bucket下,即可在使用者體驗監控控制台的中看到上傳的符號表檔案,後續您可以在異常明細中使用已上傳的符號表對異常堆棧進行解析。
前提條件
已建立使用者體驗監控應用,並擷取應用Pid。具體操作,請參見接入Web & H5應用、接入小程式和接入行動裝置 App。
已建立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才具有該許可權。