Sentry Relay 二次开发调试简介

简介: Sentry Relay 二次开发调试简介

开发



要构建 Relay,我们需要最新的稳定版 Rustcrate 被拆分为具有多个功能的工作区,因此在运行构建或运行测试时,请始终确保传递 --all--all-features 标志。processing 功能还需要 C 编译器和 CMake


要安装开发环境,必须安装 librdkafka 并在 path 上。在 macOS 上,我们需要使用 brew install librdkafka 安装它,因为安装脚本使用 brew --prefix 来确定正确的位置。


我们使用 VSCode 进行开发。此存储库包含配置代码样式、linter 和有用功能的设置文件。首次打开项目时,请确保 安装推荐扩展,因为它们将允许编辑器在编码期间提供帮助。


存储库的根目录包含一个 Makefile,其中包含用于开发的有用命令:


  • make check: 运行代码格式检查和 linter。这在打开 pull request 之前很有用。
  • make test: 运行单元测试、集成测试和 Python 包测试(有关更多信息,请参见下文)。
  • make all: 运行所有检查和测试。这会运行在 CI 中也执行的大多数任务。
  • make clean: 删除所有构建工件、virtualenv 和缓存文件。

集成测试要求 RedisKafka 在其默认配置中运行。获取所有必需服务的最便捷方式是通过 sentry devservices,这需要最新的 Sentry 开发环境。

  • sentry devservices


构建和运行


重建和运行 Relay 的最简单方法是使用 cargo。根据配置,您可能需要运行 Sentry 的本地实例。


# 第一次初始化 Relay
cargo run --all-features -- config init
# 重建并运行所有功能
cargo run --all-features -- run


标准构建命令也可用作 make 目标。请注意,发布版本仍会生成调试信息。


# 在调试模式下不进行优化构建。
make build
# 使用发布优化和调试信息进行构建。
make release


为了在进行一些更改后快速验证 Relay 是否编译,您还可以使用 cargo check


cargo check --all --all-features


功能


默认情况下,Relay 编译时不使用 processing 模式。这是用于作为代理运行的中继的配置。有两个可选功能:


  • processing: 启用事件处理(event processing)摄取(ingestion)功能。这允许在配置中启用 processing。启用后,Relay 会将事件生成到 Kafka topic 中,而不是转发到配置的上游。此外,它将执行完整的事件规范化过滤速率限制
  • ssl: 在服务器中启用 SSL 支持。

要启用功能,请将其传递给 cargo 调用。例如,要在启用了 processing 功能的情况下跨所有 workspace crates 运行测试,请运行:


cargo run --features=processing


测试


测试套件包括单元测试、集成测试套件和 Python 包的单独测试套件。单元测试是作为 Rust crates 的一部分实现的,可以通过以下方式运行:


# 测试默认功能
make test-rust
# 为所有功能运行 Rust 测试
make test-rust-all


集成测试套件需要 python。默认情况下,集成测试套件将创建一个 virtualenv,构建启用处理的 Relay 二进制文件,并运行一组集成测试:


# 创建一个新的 virtualenv,构建 Relay 并运行集成测试
make test-integration
# 手动构建和运行单个测试
make build
.venv/bin/pytest tests/integration -k <test_name>


Linting


我们使用来自最新稳定通道的 rustfmtclippy 进行代码格式化和 linting。要确保正确设置这些工具并使用正确的配置运行,请使用以下 make 目标:


# 格式化整个代码库
make format
# 在整个代码库上运行 clippy
make lint


Python 和 C-ABI


潜在地,还需要将新功能添加到 Python 包中。这首先需要在 C ABI 中公开新功能。为此,请参阅 Relay C-ABI readme。


  • Relay C-ABI readme

我们强烈建议在 virtual environment 中开发和测试 python 包。更新和测试 ABI 后,确保 virtualenv 处于活动状态并安装构建原生库的包。有两种安装方法:


# 安装发布版本,推荐:
pip install --editable ./py
# 安装调试版本,安装速度更快,但运行时慢得多:
RELAY_DEBUG=1 pip install --editable ./py


对于测试,我们使用无处不在的 pytest。同样,确保您的 virtualenv 处于活动状态并且已安装最新版本的原生库。然后,运行:


# 创建一个新的 virtualenv,安装发布版本并运行测试
make test-python
# 手动运行单个测试
.venv/bin/pytest py/tests -k <test_name>


开发 Server


如果你安装了 systemfdcargo-watchmake devserver 命令可以自动重新加载 Relay


cargo install systemfd cargo-watch
make devserver


SSL


该存储库包含用于开发目的的 SSL-certificate + private key。它有两种格式:一种是 (.pem, .cert) 对,一种是 .pfx (PKCS #12) 文件。


密码,.pfx 文件是 password


与 Sentry 一起使用


要使用现有的 Sentry devserverself-hosted Sentry 安装或 Sentry SaaS 开发 Relay,请将 .relay/config.yml 中的 upstream 配置为 Sentry serverURL。例如,在本地开发中将 relay.upstream 设置为 http://localhost:8000/


要使用本地 development Sentry 测试 processing 模式,请使用以下配置:


relay:
  # 指向您的 Sentry devserver URL:
  upstream: http://localhost:8000/
  # 监听 3000 以外的端口:
  port: 3001
logging:
  # 启用完整的日志记录和回溯:
  level: trace
  enable_backtraces: true
limits:
  # 在 ^C 上加速 shutdown
  shutdown_timeout: 0
processing:
  # 启用存储规范化的 processing 模式并将数据发布到 Kafka:
  enabled: true
  kafka_config:
    - { name: "bootstrap.servers", value: "127.0.0.1:9092" }
    - { name: "message.max.bytes", value: 2097176 }
  redis: "redis://127.0.0.1"


请注意,Sentry devserver 还在 processing 模式下在端口 3000 上以类似配置启动 Relay。该 Relay 不会干扰您的开发构建。为确保 SDK 发送到您的开发实例,请更新 DSN 中的端口:


http://<key>@localhost:3001/<id>


发布管理


我们使用 craft 来发布新版本。有两个单独的项目要发布:


  • Relay binary 从根文件夹中发布。在该目录中运行 craft preparecraft publish 以分别创建发布版本并发布它。我们使用日历版本控制并与 Sentry 协调发布。
  • Relay Python libraryC-ABIpy/ 子文件夹中发布。切换到该目录并运行 craft preparecraft publish。我们在开发周期中使用语义版本控制和发布。
  • craft
  • 日历化版本
  • 语义版本控制


变更日志说明


对于暴露给 Python package 的更改,请在 py/CHANGELOG.md 中添加一个条目。这包括但不限于事件规范化PII 清理协议。对于 Relay server 的更改,请在

CHANGELOG.md 的以下标题下添加一个条目:


  1. Features: 用于新的用户可见功能。
  2. Bug Fixes: 用于用户可见的错误修复。
  3. Internal: 用于内部操作中的功能和错误修复,尤其是 processing 模式。

changelog 条目中,请添加指向此 PR 的链接(考虑更具描述性的消息):


- ${getCleanTitle()}. (${PR_LINK})


如果以上都不适用,您可以通过在 PR 描述中添加 #skip-changelog 来选择退出。

相关文章
|
消息中间件 缓存 监控
Sentry 开发人员文档(中文手册,二次开发指南)
Sentry 开发人员文档(中文手册,二次开发指南)
2990 0
Sentry 开发人员文档(中文手册,二次开发指南)
|
存储 监控 安全
Sentry 企业级数据安全解决方案 - Relay 入门
Sentry 企业级数据安全解决方案 - Relay 入门
304 0
Sentry 企业级数据安全解决方案 - Relay 入门
|
存储 SQL 监控
Sentry 监控 - Snuba 数据中台架构(Data Model 简介)
Sentry 监控 - Snuba 数据中台架构(Data Model 简介)
249 0
Sentry 监控 - Snuba 数据中台架构(Data Model 简介)
|
存储 安全 应用服务中间件
Sentry 企业级数据安全解决方案 - Relay 操作指南
Sentry 企业级数据安全解决方案 - Relay 操作指南
311 0
|
资源调度 监控 JavaScript
Sentry 官方 JavaScript SDK 简介与调试指南
Sentry 官方 JavaScript SDK 简介与调试指南
523 0
Sentry 官方 JavaScript SDK 简介与调试指南
|
存储 SQL JSON
Sentry 监控 - Snuba 数据中台架构(Query Processing 简介)
Sentry 监控 - Snuba 数据中台架构(Query Processing 简介)
204 0
Sentry 监控 - Snuba 数据中台架构(Query Processing 简介)
|
存储 消息中间件 SQL
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
766 0
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
|
JSON 开发工具 数据安全/隐私保护
Sentry 企业级数据安全解决方案 - Relay PII 和数据清理
Sentry 企业级数据安全解决方案 - Relay PII 和数据清理
221 0
|
JSON 数据安全/隐私保护 数据格式
Sentry 企业级数据安全解决方案 - Relay 项目配置
Sentry 企业级数据安全解决方案 - Relay 项目配置
145 0
|
消息中间件 存储 缓存
Sentry 企业级数据安全解决方案 - Relay 监控 & 指标收集
Sentry 企业级数据安全解决方案 - Relay 监控 & 指标收集
325 0