> ## Documentation Index
> Fetch the complete documentation index at: https://test-8ad8522e-feat-ai-sre.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 应用管理

> 学习如何在 Flashduty 平台创建和管理 RUM 应用，包括应用创建、配置和权限管理

## 概述

RUM 应用是承载前端性能监控数据的容器，用于采集、存储和分析用户在前端应用中的真实体验数据。一个应用代表一个被监控的前端项目，可以是网站、移动应用或单页应用等。

<Tip>
  我们建议按照业务系统或应用来创建 RUM 应用，例如：官网、商城、管理后台等。
</Tip>

每个应用拥有独立的 `applicationId` 和 `clientToken`，用于识别数据来源并确保数据安全。应用创建后，您需要将 SDK 集成到您的前端代码中，以开始数据采集和监控。

## 应用权限

为了满足不同业务场景的数据安全需求，RUM 应用提供了灵活的访问级别设置：

| 访问级别   | 可见范围                     | 适用场景   |
| ------ | ------------------------ | ------ |
| **公开** | 账户内所有用户可见，可查看数据和处理 Issue | 通用业务应用 |
| **私有** | 仅创建者、账户管理员和主体账户可见        | 敏感业务数据 |

<Note>
  私有应用中，其他成员若需查看内容，可以通过分享故障链接的方式临时授权访问。
</Note>

## 创建应用

<Frame caption="RUM 应用创建界面">
  <img src="https://docs-cdn.flashcat.cloud/images/png/69baa5066dae4641adf1f769f3aacc54.png" alt="RUM 应用创建界面" />
</Frame>

通过 RUM 产品引导页面，您可以快速创建一个应用：

<Steps>
  <Step title="选择应用类型">
    选择应用对应的前端技术类型，目前支持 **JavaScript (JS)、Android、iOS、HarmonyOS、Flutter、微信小程序、Electron、React Native**。
  </Step>

  <Step title="设置管理团队">
    指定该应用的管理团队。

    <Warning>
      团队所属成员对该应用拥有全部操作权限，非团队成员对该应用的配置仅可只读访问。
    </Warning>
  </Step>

  <Step title="配置地理信息">
    默认情况下，自动启用用户地理位置数据采集。如需禁用客户端 IP 或地理位置数据的自动采集，请关闭地理信息收集开关。

    详见 [数据收集](/zh/rum/others/data-collection)。
  </Step>

  <Step title="配置告警">
    默认情况下，自动开启告警通知，方便您及时处理错误。

    详见 [Issue 告警](/zh/rum/error-tracking/issue-alerts)。
  </Step>
</Steps>

## SDK 配置

<video controls className="w-full aspect-video rounded-xl" src="https://docs-cdn.flashcat.cloud/videos/app-sdk-config.mov" />

您可以在 **应用配置 > SDK 配置** 中修改参数并实时预览初始化代码，以便快速接入 SDK。

控制台为不同平台提供了详细的集成引导：

* **JavaScript（Web）**：配置服务名等参数后，实时预览 `flashcatRum.init()` 初始化代码
* **Android**：展示完整的集成步骤，包括添加 Gradle 依赖（`cloud.flashcat:dd-sdk-android-core` 和 `cloud.flashcat:dd-sdk-android-rum`）、在 `Application.onCreate()` 中初始化 SDK 并启用 RUM，以及可选的 WebView 追踪集成
* **iOS**：展示完整的集成步骤，包括添加 Swift Package Manager 依赖（`fc-sdk-ios`，版本 0.6.0 起）、在 `AppDelegate.didFinishLaunchingWithOptions` 中初始化 SDK 并启用 RUM，以及可选的 WebView 追踪集成
* **Flutter**：Flutter SDK 封装了 Android/iOS 原生 SDK，一次集成即可同时监控两端，详见 [Flutter SDK 接入](/zh/rum/sdk/flutter/sdk-integration)
* **微信小程序**：通过表单填写 `env`、`service`、`version`、`sessionSampleRate` 后，实时预览基于 `@flashcatcloud/miniprogram-rum` 的 `flashcatRum.init()` 初始化代码（参见下方「微信小程序 SDK 配置助手」）
* **Electron**：提供分步接入向导——主进程安装 `@flashcatcloud/electron-sdk` 并在 `app.whenReady()` 中完成初始化（必须在创建任何窗口之前，顺序不对时 SDK 不报错但采集不到数据）；如需采集窗口内的页面浏览、用户操作、网络请求与 JS 错误，渲染进程可选接入 `@flashcatcloud/browser-rum`，数据经 IPC 桥交由主进程统一上报；使用 Vite / webpack / esbuild 打包主进程时，还可加入对应插件以保留 SDK 的运行时依赖。详见 [Electron SDK 接入](/zh/rum/sdk/electron/sdk-integration)
* **React Native**：提供四步接入向导——安装 `@flashcatcloud/mobile-react-native` 与导航库对应的视图采集包（`@flashcatcloud/mobile-react-navigation` 或 `@flashcatcloud/mobile-react-native-navigation`）并执行 `pod install`；用 `withDatadogMetroConfig` 包装 Metro 配置，让 release 构建的 bundle 与 sourcemap 带上 Debug ID；在应用入口尽早初始化 SDK（`serviceName` 必填，否则 Android 与 iOS 会拆成两个服务）；在导航容器就绪后开启自动视图采集。详见 [React Native SDK 接入](/zh/rum/sdk/react-native/sdk-integration)

每个平台的 SDK 配置页面都会自动填入当前应用的 `applicationId` 和 `clientToken`，您可以直接复制代码到项目中使用。

<Warning>
  在应用管理中修改 SDK 配置并不会实时生效到已集成的客户端。所有配置更改需要在您的前端代码中更新并重新部署才能生效。
</Warning>

### 服务定义

服务是一个独立的、可部署的代码存储库，它映射到一组页面。

<Tabs>
  <Tab title="单体应用">
    如果您的应用程序是作为一个整体构建的，那么您的 RUM 应用只需要一个服务名称。

    ```javascript theme={null}
    flashcatRum.init({
      applicationId: 'YOUR_APP_ID',
      clientToken: 'YOUR_CLIENT_TOKEN',
      service: 'my-web-app'  // 单一服务名称
    });
    ```
  </Tab>

  <Tab title="微前端/多页面应用">
    如果您的浏览器应用程序由多个独立存储库构建，请为不同模块设置不同的服务名称。

    ```javascript theme={null}
    // 主应用
    flashcatRum.init({
      service: 'main-app'
    });

    // 子应用 A
    flashcatRum.init({
      service: 'module-a'
    });
    ```
  </Tab>
</Tabs>

### 微信小程序 SDK 配置助手

当应用类型选择为「微信小程序」时，**应用配置 > SDK 配置** 会展示专门的小程序集成向导：左侧填写表单参数，右侧实时生成可直接复制的初始化代码。

#### 表单字段

| 字段                  | 说明                   | 校验规则                  | 默认值     |
| ------------------- | -------------------- | --------------------- | ------- |
| `env`               | 环境变量，例如 `prod`、`dev` | 仅支持英文、数字、下划线；最长 24 字符 | 无       |
| `service`           | 服务名称，所有事件默认带上此标签     | 仅支持英文、数字、下划线；最长 24 字符 | 无       |
| `version`           | 版本号，便于数据分析时筛选        | 仅支持英文、数字、`.`；最长 24 字符 | `1.0.0` |
| `sessionSampleRate` | 会话采样率（百分比）           | 整数，范围 `0 ~ 100`       | `10`    |

<Note>
  表单字段填写完毕后，无需点击保存——预览代码会随输入实时更新。`applicationId` 和 `clientToken` 由系统自动填入，无需手动配置。
</Note>

#### 两步集成

<Steps>
  <Step title="添加依赖">
    在小程序项目中执行以下命令安装 SDK，并通过微信开发者工具完成 npm 构建：

    ```bash theme={null}
    npm install @flashcatcloud/miniprogram-rum
    ```
  </Step>

  <Step title="复制初始化代码">
    点击右侧代码块右上角的复制按钮，将生成的初始化代码粘贴到小程序的 `app.js`：

    ```typescript theme={null}
    import { flashcatRum } from '@flashcatcloud/miniprogram-rum';

    flashcatRum.init({
      applicationId: "<APPLICATION_ID>",
      clientToken: "<CLIENT_TOKEN>",
      service: "<SERVICE_NAME>",
      env: "<ENV_NAME>",
      version: "1.0.0",
      sessionSampleRate: 10
    });
    ```
  </Step>
</Steps>

完整的 SDK 能力、采集开关和事件上报机制请参见 [微信小程序 SDK 接入](/zh/rum/sdk/wechat-miniprogram/sdk-integration)。

## Link 集成

Link 集成允许您把 RUM 事件与外部系统关联起来，例如链路追踪平台、日志检索、对象存储中的崩溃日志包或内部排障系统。配置完成后，RUM 会根据事件类型和事件上下文生成跳转链接，并在事件详情中展示 **关联 Link**。

Link 集成位于应用详情的 **Link 集成** 页签，适用于所有应用类型。具有 **RUM 应用更新** 权限的成员可以新增、编辑、启用、禁用或删除链接配置。

### 内置 Tracing

内置 Tracing 是 Link 集成中的默认卡片，用于把资源事件中的 `trace_id` 跳转到您的后端链路追踪系统。

<Steps>
  <Step title="填写跳转链接">
    在 **Link 集成** 页签中找到 **Tracing** 卡片，填写链路追踪系统的跳转链接。链接中可以使用 `${trace_id}` 变量，RUM 会在展示链接时替换为资源事件中的实际 Trace ID。

    例如：`https://your-tracing-system.com/trace/${trace_id}`
  </Step>

  <Step title="开启 Tracing">
    保存跳转链接后，打开 **Tracing** 开关。未填写跳转链接时，开关不可开启。
  </Step>
</Steps>

<Note>
  内置 Tracing 仅匹配资源事件，并且只有事件包含 `trace_id` 时才会展示。跳转链接必须以 `http://` 或 `https://` 开头。
</Note>

### 添加外部链接

除内置 Tracing 外，您可以为不同事件类型添加自定义外部链接。

<Steps>
  <Step title="添加链接">
    在 **Link 集成** 页签中点击 **添加外部链接**，填写链接名称和跳转链接。
  </Step>

  <Step title="选择适用事件类型">
    选择该链接适用的事件类型。当前支持 **崩溃、错误、视图、操作、资源、会话**。

    崩溃属于错误事件：选择 **错误** 会匹配普通错误和崩溃；选择 **崩溃** 只匹配崩溃事件。
  </Step>

  <Step title="插入变量并预览">
    在 **跳转链接** 中插入变量，例如 `${session_id}`、`${error_id}` 或 `${trace_id}`。页面会使用示例值实时预览最终 URL，便于您确认模板是否符合外部系统的查询格式。
  </Step>
</Steps>

| 配置项    | 说明                            | 规则                            |
| ------ | ----------------------------- | ----------------------------- |
| 链接名称   | 在 RUM 事件详情中展示的外部系统名称          | 必填                            |
| 适用事件类型 | 控制该链接在哪些 RUM 事件上展示            | 至少选择一个事件类型                    |
| 跳转链接   | 外部系统 URL，可包含 `${variable}` 变量 | 必须以 `http://` 或 `https://` 开头 |
| 单条开关   | 控制该外部链接是否生效                   | 关闭后不再展示该链接                    |

### 可用变量

Link 集成会从当前事件上下文中提取变量并替换到 URL 模板中。

| 变量                  | 说明            | 常见适用事件                       |
| ------------------- | ------------- | ---------------------------- |
| `${session_id}`     | 会话 ID         | 会话、视图、操作、错误、资源               |
| `${view_id}`        | 视图 ID         | 视图、操作、错误、资源                  |
| `${action_id}`      | 操作 ID         | 操作、错误、资源                     |
| `${error_id}`       | 错误 ID         | 错误、崩溃                        |
| `${resource_id}`    | 资源 ID         | 资源                           |
| `${trace_id}`       | 链路追踪 ID       | 资源、内置 Tracing                |
| `${application_id}` | RUM 应用 ID     | 所有事件                         |
| `${service}`        | 服务名称          | 采集了 `service` 的事件            |
| `${version}`        | 版本            | 采集了 `version` 的事件            |
| `${env}`            | 环境            | 采集了 `env` 的事件                |
| `${usr_id}`         | 用户 ID         | 采集了用户信息的事件                   |
| `${usr_name}`       | 用户名           | 采集了用户信息的事件                   |
| `${usr_email}`      | 用户邮箱          | 采集了用户信息的事件                   |
| `${start_time}`     | 当前事件详情查询的开始时间 | 查看器事件详情、异常追踪错误详情（Issue 错误样本） |
| `${end_time}`       | 当前事件详情查询的结束时间 | 查看器事件详情、异常追踪错误详情（Issue 错误样本） |

不是所有变量都能在每种事件类型上解析。编辑器会按当前选择的适用事件类型校验变量可用性：当前事件类型下无法解析的变量，在变量列表中显示为**虚线灰色**，悬停时会提示在哪些事件类型上取不到值。

| 变量                                                | 会话 | 视图 | 操作 | 错误/崩溃 | 资源 |
| ------------------------------------------------- | -- | -- | -- | ----- | -- |
| `${session_id}`                                   | ✓  | ✓  | ✓  | ✓     | ✓  |
| `${view_id}`                                      | ✗  | ✓  | ✓  | ✓     | ✓  |
| `${action_id}`                                    | ✗  | ✗  | ✓  | ✓     | ✓  |
| `${error_id}`                                     | ✗  | ✗  | ✗  | ✓     | ✗  |
| `${resource_id}`                                  | ✗  | ✗  | ✗  | ✗     | ✓  |
| `${trace_id}`                                     | ✗  | ✗  | ✗  | ✗     | ✓  |
| `${usr_id}`、`${usr_name}`、`${usr_email}`          | ✓  | ✓  | ✓  | ✓     | ✓  |
| `${service}`、`${version}`、`${env}`                | ✓  | ✓  | ✓  | ✓     | ✓  |
| `${application_id}`、`${start_time}`、`${end_time}` | ✓  | ✓  | ✓  | ✓     | ✓  |

<Note>
  可用性按事件类型对应的数据表是否包含该字段判断，而不是按某条具体事件是否恰好有值：标记为可用只表示该事件类型允许解析出值，并不保证每条事件都有值。崩溃属于错误事件，可用性与错误一致。
</Note>

如果模板中使用了当前事件类型下无法解析的变量，编辑器会在输入框下方显示内联警告：变量写在**查询参数**中时，生成链接时整个参数会被丢弃；写在**路径**中时，会原样保留 `${variable}` 字面量。示例预览（示例数据）会省略不可用变量的示例值，因此预览结果与生产环境实际生成的链接一致。

<Warning>
  通过旧版配置选中的「全部」事件类型，在 ID 类变量中仅保证 `${session_id}` 可以解析（「全部」取所有事件表字段的交集）。建议改用具体的事件类型，以便编辑器准确校验变量可用性。
</Warning>

<Tip>
  建议把可选变量放在查询参数中，例如 `https://logs.example.com/search?session=${session_id}&error=${error_id}`。当某个查询参数只包含缺失变量时，RUM 会在生成链接时省略该参数；路径中的缺失变量会保留为原始 `${variable}` 文本。
</Tip>

### 查看关联 Link

当事件匹配已启用的链接配置时，您可以在以下位置打开外部系统：

* **RUM 查看器事件详情**：右上角显示 **关联 Link** 下拉入口，适用于会话、视图、操作、错误和资源等事件详情
* **错误事件详情**：详情区域内嵌展示匹配的关联 Link 卡片，支持复制或打开链接
* **Issue 错误样本**：在错误样本下方展示匹配的关联 Link，便于从 Issue 直接跳转到日志、链路追踪或其他排障系统

## 隐私设置

隐私设置允许您控制 RUM SDK 采集的用户隐私数据范围，以满足不同地区的数据合规要求。

| 设置项        | 说明                       | 关联字段                                       |
| ---------- | ------------------------ | ------------------------------------------ |
| **地理位置信息** | 控制是否采集用户的国家、省份、城市等地理位置信息 | `@geo_country`、`@geo_province`、`@geo_city` |
| **IP 地址**  | 控制是否采集用户的 IPv4 和 IPv6 地址 | `@geo_ip_v4`、`@geo_ip_v6`                  |

<Warning>
  关闭地理位置或 IP 地址采集后，相关筛选和分析维度将不再可用。请根据业务需求和合规要求谨慎调整。
</Warning>

## 远程配置

「远程配置」页签允许你在线调整采集与隐私参数，而无需改代码、重新发版。启用后，本页配置覆盖 SDK 初始化设置；停用后，各端恢复使用 SDK 初始化设置，数据采集不会停止。

<Note>
  * 远程配置目前支持 **Browser**、**iOS** 与**微信小程序**类型应用，其他平台类型将随各端 SDK 发布逐步开放。
  * SaaS 环境下该功能按账号逐步放量。如果应用详情页未显示「远程配置」页签，请联系支持团队开通；私有化部署默认可用。
</Note>

### 配置项

| 配置项           | 取值                                   | 说明                                                                                                                             |
| ------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| **会话采样率**     | 0–100 整数（%）                          | 采集会话的比例。留空表示不下发该项，各端沿用 SDK 初始化时设置的值                                                                                            |
| **会话回放采样率**   | 0–100 整数（%）                          | 录制会话回放的比例。留空时沿用 SDK 设置                                                                                                         |
| **Trace 采样率** | 0–100 整数（%）                          | 在已采集的会话中再按此比例做一次会话级采样，决定哪些会话为符合条件请求注入 trace 头；同一会话内的结果一致。整体 Trace 覆盖率约为「会话采样率 × Trace 采样率」。留空时沿用 SDK 设置                        |
| **回放脱敏级别**    | `mask` / `mask-user-input` / `allow` | 会话回放对页面内容的默认遮蔽程度：`mask` 遮蔽文本并隐藏输入值；`mask-user-input` 保留页面文本、仅隐藏用户输入；`allow` 按原样录制。放宽级别会开始录制此前未采集的内容，且已上传的回放无法事后补充脱敏，发布前系统会再次确认 |
| **自定义配置项**    | 键值对，类型支持字符串 / 数字 / 布尔值 / JSON        | 随远程配置下发到客户端、由应用代码读取，平台不解析其内容。最多 5 个；键名最长 64 字节（按 UTF-8 计，非字符数），单个值最大 4 KB，JSON 值最多嵌套 3 层（对象、数组各计一层），全部自定义项合计最大 16 KB           |

iOS 与微信小程序应用同样展示「远程配置」页签，但这两端的 SDK 仅读取**会话采样率**与**自定义配置项**两项（两端均无 Session Replay，其余配置不下发也不生效）。各端 SDK 都需要在初始化时开启 `remoteConfigurationEnabled: true`（默认关闭，未开启的应用不会请求配置）；iOS 端需要 SDK 0.6.0 及以上，接入方式见 [iOS SDK 高级配置](/zh/rum/sdk/ios/advanced-config)。

<Warning>
  自定义配置项会下发到客户端，可能被终端用户读取。请勿填写密钥、访问令牌或个人敏感信息。
</Warning>

### 条件规则

条件规则是协议预留能力，当前控制台版本暂不支持编辑：页面上没有规则编辑界面，保存配置时服务端存量的规则会原样保留，不会被清除。后续版本将开放规则编辑。

协议语义简述：除默认值外，可按条件向不同客户端下发不同配置——

* 匹配条件支持 `env`、`app_version`、`sdk` 三个维度，条件之间为 AND 精确匹配；SDK 未上报的维度永不匹配该规则。单个匹配值最长 256 字节。
* 规则自上而下求值，**第一条完全匹配的规则生效**；规则的覆盖值叠加在默认配置之上，规则未设置的字段沿用默认配置。
* 每个应用最多 20 条规则。

### 发布与生效

* 发布前页面会逐项展示新版本与线上配置的差异，并可查看原始 JSON。发布时可填写选填的「变更说明」（最长 255 字，例如「大促期间降低采样率」），随版本保存并展示于变更历史。确认后发布生成新版本。
* 生效方式固定为「下一个新会话生效」：进行中的会话不受影响，新会话逐步使用新配置；支持远程配置的客户端通常在发布后约 4 小时内完成切换。
* 「立即生效」（新配置到达客户端时结束当前会话、立即按新配置开启新会话）为协议预留能力，当前控制台版本暂不支持选择，后续版本开放。紧急场景（需要立刻止血或放量采集）可调用 SDK 的 `stopSession()` 主动结束当前会话，让配置随新会话尽快生效。
* 协议还预留了「前台刷新」（`refresh_on_foreground`）开关：开启后客户端每次回到前台时重新拉取配置，而非等待轮询。默认关闭——所有客户端集中在回前台的时刻请求配置，形同发布 herd，会冲击配置端点，仅适合确实需要分钟级生效的应用。该开关暂不可在控制台设置，将随后续版本开放。

### 版本历史与采用情况

* 变更历史保留最近 50 个版本，更早的版本将自动清理且无法回滚。每条历史展示操作人与变更说明（如填写）。你可以将任一保留中的历史版本回滚为当前配置，回滚同样会生成新版本。
* 回滚产生的新版本带内容等价标注：若其配置内容与历史上某个更早版本完全相同，历史列表会标注该版本与那个最早相同内容的版本等价——版本号跳变不代表配置内容发生了变化。
* 发布面板按最近到达的采样会话展示**采用情况**与采用进度，状态标签为「等待新会话」（刚发布，尚无会话按当前版本开始）、「生效中」（部分会话已切换）、「最近会话已切换」（窗口内到达的会话均已在当前版本）、「未收到配置」（最近会话均未上报配置版本，常见为 SDK 未开启远程配置或版本过低）、「暂无数据」（窗口内暂无新会话）、「未检测到生效」（发布已超过约 8 小时仍未切到当前版本）；进度条中未上报配置版本的会话段标为「未上报」（SDK 版本过低或尚未拉取过配置）。点击**查看明细**可跳转到事件浏览器查看这批样本会话。窗口内采样会话少于 20 条时，面板只展示实际会话数、不估算占比（占比由采样率放大估算，样本过少时结果没有意义）。

## 删除应用

如果您不再需要某个应用，可以在应用详情的「基础信息」页签底部找到删除按钮。

<Warning>
  删除应用后：

  * 不会再接收任何新事件
  * 应用的 Client Token 将被立即撤销
  * 已采集的 RUM 事件数据仍可手动导出，或通过联系支持团队恢复已删除的应用

  此操作需要 **RUM 应用删除** 权限。
</Warning>

## 下一步

<CardGroup cols={3}>
  <Card title="SDK 接入指南" icon="code" href="/zh/rum/sdk/web/sdk-integration">
    了解如何接入 RUM SDK
  </Card>

  <Card title="高级配置" icon="sliders" href="/zh/rum/sdk/web/advanced-config">
    了解 SDK 的高级配置选项
  </Card>

  <Card title="分析看板" icon="chart-line" href="/zh/rum/analytics/web">
    查看和分析 RUM 数据
  </Card>

  <Card title="微信小程序 SDK" icon="mobile-screen-button" href="/zh/rum/sdk/wechat-miniprogram/sdk-integration">
    了解如何在微信小程序中接入 RUM SDK
  </Card>
</CardGroup>
