本文介绍如何将 Sentry SDK 采集的应用数据写入阿里云日志服务(SLS),以便在用户体验监控控制台查看和分析。
前提条件
该功能目前处于灰度试用阶段,请通过工单申请。
已开通云监控 2.0 服务。
已新建工作空间(Workspace)。
已在客户端应用中集成 Sentry SDK,且 SDK 版本满足要求。具体版本要求,请参见Sentry SDK 接入用户体验监控概述。
本方案仅支持 Sentry Envelope 协议格式。如您使用的 SDK 版本较低(如 JavaScript SDK v6 及以下),请先升级至支持 Envelope 的版本。
步骤一:创建 RUM 应用
登录云监控2.0控制台,选择目标工作空间,在左侧导航栏单击接入中心。
在左侧导航栏,单击接入中心。
在用户体验监控区域,根据应用类型选择对应的平台卡片(如 iOS、Android、Web 等)。
输入应用名称,根据需要配置其他参数,单击创建应用。
创建成功后,进入应用设置 > 基础信息页面,获取以下信息:
参数
说明
获取位置
Workspace
工作空间名称
应用设置 > 基础信息
Endpoint
数据上报域名
应用设置 > 基础信息 > 接入配置
ServiceId
RUM 应用 ID
应用设置 > 基础信息
步骤二:在 Sentry 创建项目(可选)
如需同时使用 Sentry 控制台查看数据,请执行此步骤以获取 Sentry 项目 ID。
登录 Sentry 控制台。
创建新项目(Project),平台选择与客户端应用一致。
进入项目设置页面,找到项目的 DSN 配置。
从 DSN 中提取项目 ID(URL 路径的最后一段数字)。
例如,DSN 为 https://xxx@sentry.example.com/21\,则项目 ID 为 21。
说明 如不需要使用 Sentry 控制台,可跳过此步骤,后续配置中的项目 ID 填写 0。步骤三:配置数据写入
根据使用场景,选择以下任一方式配置数据写入。新用户或已完成迁移验证的用户,建议使用 SDK 直写方式。从自建 Sentry 迁移的用户,建议先使用 Nginx 双写方式进行过渡,验证数据完整性后再切换至 SDK 直写。
方式一:SDK 直写
修改客户端应用中 Sentry SDK 的 DSN 配置,将数据上报地址指向阿里云 SLS。
DSN 格式
原始 Sentry DSN 格式:
https://<public_key>@<sentry_host>/<project_id>修改后的 阿里云 DSN 格式:
https://<public_key>@<endpoint>/rum/sentry/<workspace>/<service_id>/<project_id>参数说明
参数 | 说明 |
public_key | Sentry DSN 中的公钥,SLS 不校验此参数,可使用任意值 |
endpoint | 数据上报域名,在步骤一中获取 |
workspace | 工作空间名称,在步骤一中获取 |
service_id | RUM 应用 ID,在步骤一中获取 |
project_id | Sentry 项目 ID,在步骤二中获取。如不使用 Sentry 控制台,填写 |
配置示例
以下为各平台 SDK 的配置示例。
iOS(Swift)
import Sentry
SentrySDK.start { options in
options.dsn = "https://key@cn-chengdu.log.aliyuncs.com/rum/sentry/my-workspace/abc123@example/21"
options.debug = true
}Android(Kotlin)
import io.sentry.android.core.SentryAndroid
SentryAndroid.init(this) { options ->
options.dsn = "https://key@cn-chengdu.log.aliyuncs.com/rum/sentry/my-workspace/abc123@example/21"
options.isDebug = true
}Web(JavaScript)
import * as Sentry from "@sentry/browser";
Sentry.init({
dsn: "https://key@cn-chengdu.log.aliyuncs.com/rum/sentry/my-workspace/abc123@example/21",
debug: true,
});Electron
import * as Sentry from "@sentry/electron";
Sentry.init({
dsn: "http://key@cn-chengdu.log.aliyuncs.com/rum/sentry/my-workspace/abc123@example/21",
});Vue
import * as Sentry from "@sentry/vue";
Sentry.init({
app,
dsn: "http://key@cn-chengdu.log.aliyuncs.com/rum/sentry/my-workspace/abc123@example/21",
});方式二:Nginx 镜像双写
通过 Nginx mirror 模块将数据同时写入原 Sentry 服务和阿里云 SLS。
适用场景:需同时在标准版 Sentry、RUM 版 Sentry 和阿里云 RUM 控制台查看数据。
配置步骤
在 Nginx 配置文件中添加 SLS 转发的 upstream:
upstream rum_forwarder { server <endpoint>:80; keepalive 2; }添加 URI 映射规则,根据 Sentry 项目 ID 配置对应的转发路径:
map $request_uri $forwarder_path { # 默认转发路径 default /rum/sentry/<workspace>/<service_id>; # 按项目 ID 配置不同的转发路径 "~^/api/<project_id>/envelope/" /rum/sentry/<workspace>/<service_id_for_project_1>; "~^/api/1/envelope/" /rum/sentry/<workspace>/<service_id_for_project_1>; "~^/api/2/envelope/" /rum/sentry/<workspace>/<service_id_for_project_2>; }在 Sentry API 路由中启用流量镜像:
location ~ ^/api/[1-9]\d*/ { proxy_pass http://relay; mirror /rum_mirror; mirror_request_body on; } location = /rum_mirror { internal; proxy_pass http://rum_forwarder$forwarder_path$request_uri; proxy_set_header Host <endpoint>; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Request-Id $request_id; proxy_set_header Connection ''; proxy_read_timeout 5s; proxy_send_timeout 5s; proxy_connect_timeout 5s; proxy_ignore_client_abort on; }重新加载 Nginx 配置:
nginx -t && nginx -s reload
多项目配置示例
如有多个 Sentry 项目需要转发至不同的 RUM 应用,按以下方式配置 map 规则:
map $request_uri $forwarder_path {
default /rum/sentry/my-workspace/default-service;
# 项目 1 → RUM 应用 A
"~^/api/1/envelope/" /rum/sentry/my-workspace/service-a;
# 项目 2 → RUM 应用 B
"~^/api/2/envelope/" /rum/sentry/my-workspace/service-b;
# 项目 3 → RUM 应用 C
"~^/api/3/envelope/" /rum/sentry/my-workspace/service-c;
}
完整配置示例
http {
upstream rum_forwarder {
server <endpoint>:80;
keepalive 2;
}
map $request_uri $forwarder_path {
# 默认转发路径
default /rum/sentry/<workspace>/<service_id>;
# 按项目 ID 配置不同的转发路径
"~^/api/1/envelope/" /rum/sentry/<workspace>/<service_id_for_project_1>;
"~^/api/2/envelope/" /rum/sentry/<workspace>/<service_id_for_project_2>;
}
server {
listen 80;
server_name sentry.example.com;
# Sentry API 路由 - 启用镜像
location ~ ^/api/[1-9]\d*/ {
proxy_pass http://relay;
mirror /rum_mirror;
mirror_request_body on;
}
# SLS 镜像处理
location = /rum_mirror {
internal;
proxy_pass http://rum_forwarder$forwarder_path$request_uri;
proxy_set_header Host <endpoint>;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Request-Id $request_id;
proxy_set_header Connection '';
proxy_read_timeout 5s;
proxy_send_timeout 5s;
proxy_connect_timeout 5s;
proxy_ignore_client_abort on;
}
# 其他 Sentry 路由配置
# ...
}
}
参数说明
参数 | 说明 |
endpoint | SLS 数据上报域名,如 |
workspace | 工作空间名称 |
service_id | RUM 应用 ID |
project_id | Sentry 项目 ID。 |
验证数据写入
完成配置后,通过以下方式验证数据是否正常写入:
在客户端应用中触发一个测试错误或事件。
登录云监控2.0控制台,进入用户体验监控 > 应用列表。
选择对应的 RUM 应用,查看是否有新数据上报。数据上报后,通常在 1-2 分钟内可在控制台查看。
常见问题
Q:DSN 中的 public_key 是否可以随意填写?
A:是的,SLS 不校验 Sentry DSN 中的 public_key 参数。建议保留原有的 key 值以便追溯。
Q:数据写入 SLS 后,是否还能在 Sentry 控制台查看?
A:可以。您需要部署定制版的 Sentry Web 和 Snuba API 容器,从 SLS 读取数据。具体操作请参见配置 Sentry 控制台读取用户体验监控数据。