You can upload symbol table files in bulk to a designated RUM OSS bucket. After the upload, the files appear in the RUM console under . You can then use these symbol tables to parse stack traces for exceptions.
Prerequisites
-
You have created a RUM application and obtained its application ID. For more information, see Integrate a web & H5 application, Integrate a mini program, and Monitor an Android application.
-
You have created an AccessKey. For more information, see Create an AccessKey.
-
You have attached the AliyunSTSAssumeRoleAccess policy to the AccessKey. For more information, see AliyunSTSAssumeRoleAccess.
-
You have an OSS client. OSS supports file uploads through multi-language SDKs and the ossutil command-line tool.
-
You have enabled the OSS bulk upload feature. To do so, perform the following steps:
On the Application Settings page, in the File Management section, turn on the Enable OSS batch upload switch.
Usage notes
-
You must use the region-specific OSS bucket provided by RUM. The bucket corresponds to the region of your RUM application. The following list shows the available buckets by region:
-
China (Hangzhou) (cn-hangzhou):
arms-rum-sourcemap-hz -
Singapore (ap-southeast-1):
arms-rum-sourcemap-sg -
US (Silicon Valley) (us-west-1):
arms-rum-sourcemap-usw
-
-
Destination path for OSS uploads:
${uid}/${pid}/${version}/Important-
uidis the ID of your Alibaba Cloud account (primary account),pidis the RUM application ID, andversionis a custom symbol table version. -
For iOS, you must package .dSYM files into a ZIP archive for upload. After the upload, RUM automatically parses the UUID of the .dSYM file.
-
RUM supports the following methods for uploading symbol tables in bulk:
Upload using the ossutil CLI
Before uploading with ossutil, you must configure your access credentials. For more information, see Configure ossutil.
Bulk upload a local directory
Command format:
ossutil cp -r ${localfolder}/ oss://${bucket}/${uid}/${pid}/${version}/
Example:
ossutil cp -r localfolder/ oss://arms-rum-sourcemap-hz/1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/
Upload a local file
Command format:
./ossutil64 cp ${examplefile} oss://${bucket}/${uid}/${pid}/${version}/
Example:
./ossutil64 cp examplefile.js.map oss://arms-rum-sourcemap-hz/1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/
Upload using an OSS SDK
The following example uses the Python SDK to upload the examplefile.js.map file. The UID is 1981000187653069, the PID is ji7ex7ti31@f1fadb692e6cdc8, and the version is 1.0.0.
For examples in other languages, see the SDK reference.
# -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Set the endpoint to the one that corresponds to the region where your bucket is located. For example, if your bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
# Set the bucket name.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'arms-rum-sourcemap-hz')
# The file must be opened in binary mode.
# Specify the full path of the local file. If you do not specify a full path, the file is uploaded from the directory where the sample program is run.
key = '1981000187653069/ji7ex7ti31@f1fadb692e6cdc8/1.0.0/'
bucket.put_object_from_file(key + 'examplefile.js.map', 'D:\\localpath\\examplefile.js.map')
Integrate with a CI/CD pipeline
You can integrate the ossutil command-line tool or an OSS SDK into your CI/CD pipeline to upload the symbol table files generated during builds to the specified OSS bucket.
iOS .dSYM packaging notes
To upload iOS .dSYM symbol tables, you must package one or more .dSYM files into a single ZIP file. For example, if a directory contains two symbol table files, AlibabaCloudRUM.framework.dSYM and iOSDemo.app.dSYM, the directory structure is as follows:
.
├── 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
Compress the .dSYM files in this directory into a ZIP file named test.zip. The compression process and output are as follows:
» 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%)
Upload the generated test.zip file.
The OSS upload destination path must include a version.
Common errors
Error message: Error: oss: service returned error: StatusCode=403, ErrorCode=AccessDenied, ErrorMessage="You have no right to access this object because of bucket acl."
If you receive a 403 error, check whether the account associated with your AccessKey has enabled Enable OSS batch upload in the console, as described in Prerequisites. This permission is isolated at the sub-account level. Uploads require an AccessKey from an account or sub-account that has this feature enabled.