配置 Sentry SDK 数据写入

更新时间:
复制为 MD 格式

本文介绍如何将 Sentry SDK 采集的应用数据写入阿里云日志服务(SLS),以便在用户体验监控控制台查看和分析。

前提条件

本方案仅支持 Sentry Envelope 协议格式。如您使用的 SDK 版本较低(如 JavaScript SDK v6 及以下),请先升级至支持 Envelope 的版本。

步骤一:创建 RUM 应用

  1. 登录云监控2.0控制台,选择目标工作空间,在左侧导航栏单击接入中心

  2. 在左侧导航栏,单击接入中心

  3. 用户体验监控区域,根据应用类型选择对应的平台卡片(如 iOS、Android、Web 等)。

  4. 输入应用名称,根据需要配置其他参数,单击创建应用

  5. 创建成功后,进入应用设置 > 基础信息页面,获取以下信息:

    参数

    说明

    获取位置

    Workspace

    工作空间名称

    应用设置 > 基础信息

    Endpoint

    数据上报域名

    应用设置 > 基础信息 > 接入配置

    ServiceId

    RUM 应用 ID

    应用设置 > 基础信息

步骤二:在 Sentry 创建项目(可选)

如需同时使用 Sentry 控制台查看数据,请执行此步骤以获取 Sentry 项目 ID。

  1. 登录 Sentry 控制台。

  2. 创建新项目(Project),平台选择与客户端应用一致。

  3. 进入项目设置页面,找到项目的 DSN 配置。

  4. 从 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 控制台,填写 0

配置示例

以下为各平台 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 控制台查看数据。

配置步骤

  1. 在 Nginx 配置文件中添加 SLS 转发的 upstream:

    upstream rum_forwarder {
        server <endpoint>:80;
        keepalive 2;
    }
  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>;
    }
  3. 在 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;
       }
  4. 重新加载 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 数据上报域名,如 cn-chengdu.log.aliyuncs.com

workspace

工作空间名称

service_id

RUM 应用 ID

project_id

Sentry 项目 ID。

验证数据写入

完成配置后,通过以下方式验证数据是否正常写入:

  1. 在客户端应用中触发一个测试错误或事件。

  2. 登录云监控2.0控制台,进入用户体验监控 > 应用列表

  3. 选择对应的 RUM 应用,查看是否有新数据上报。数据上报后,通常在 1-2 分钟内可在控制台查看。

常见问题

Q:DSN 中的 public_key 是否可以随意填写?

A:是的,SLS 不校验 Sentry DSN 中的 public_key 参数。建议保留原有的 key 值以便追溯。

Q:数据写入 SLS 后,是否还能在 Sentry 控制台查看?

A:可以。您需要部署定制版的 Sentry Web 和 Snuba API 容器,从 SLS 读取数据。具体操作请参见配置 Sentry 控制台读取用户体验监控数据。