当前位置: 首页 > 科技观察

说说SentryRelay二次开发调试

时间:2023-03-19 21:38:19 科技观察

开发要搭建Relay,我们需要最新稳定版的Rust。箱子被分成具有多个功能的工作区,因此在运行构建或运行测试时始终确保传递--all和--all-features标志。处理功能还需要C编译器和CMake。要安装开发环境,必须安装librdkafka并在路径上。在macOS上,我们需要使用brewinstalllibrdkafka安装它,因为安装脚本使用brew--prefix来确定正确的位置。我们使用VSCode进行开发。此存储库包含用于配置代码样式、linter和有用功能的设置文件。首次打开项目时,请确保安装推荐的扩展,因为它们可以让编辑器在编码过程中提供帮助。存储库的根目录包含一个Makefile,其中包含对开发有用的命令:makecheck:运行代码格式检查和linters。这在打开拉取请求之前很有用。maketest:运行单元测试、集成测试和Python包测试(有关更多信息,请参见下文)。makeall:运行所有检查和测试。这会运行大多数也在CI中执行的任务。makeclean:删除所有构建工件、virtualenv和缓存文件。集成测试要求Redis和Kafka以其默认配置运行。获取所有必需服务的最便捷方式是通过sentrydevservices,这需要最新的Sentry开发环境。sentrydevserviceshttps://develop.sentry.dev/services/devservices构建和运行重建和运行Relay最简单的方法是使用cargo。根据您的配置,您可能需要运行Sentry的本地实例。#首次初始化Relaycargorun--all-features--configinit#重建并运行所有功能cargorun--all-features--run标准构建命令也可用作make目标。请注意,发布版本仍会生成调试信息。#在调试模式下不进行优化构建。makebuild#使用发布优化和调试信息构建。makerelease要快速验证Relay在进行一些更改后编译,您还可以使用cargocheck:cargocheck--all--all-featuresfeature默认情况下,Relay编译时没有处理模式。这是作为代理运行的中继的配置。有两个可选功能:处理:启用事件处理和摄取。这允许在配置中启用处理。启用后,中继将生成事件到Kafka主题中,而不是将它们转发到配置的上游。此外,它将执行完整的事件规范化、过滤和速率限制。ssl:在服务器中启用SSL支持。要启用某个功能,请将其传递给cargo调用。例如,要在启用处理功能的所有工作区crate上运行测试,请运行:cargorun--features=processingtest测试套件包括单元测试、集成测试套件和用于Python包的单独测试套件。单元测试是作为Rustcrate的一部分实现的,可以通过以下方式运行:#testdefaultfunctionalitymaketest-rust#runRusttestsforallfunctionalitymaketest-rust-all集成测试套件需要python。默认情况下,集成测试套件将创建一个virtualenv,构建启用处理的Relay二进制文件,并运行一组集成测试:#创建一个新的virtualenv,构建Relay并运行集成测试maketest-integration#手动构建并运行单个测试makebuild.venv/bin/pytesttests/integration-kLinting我们使用来自最新稳定通道的rustfmt和clippy进行代码格式化和linting。为确保这些工具设置正确并以正确的配置运行,请使用以下make目标:#格式化整个代码库makeformat#运行clippymakelint在整个代码库上使用Python和C-ABI潜在地,新功能也将需要添加到Python包中。这首先需要在CABI中公开新功能。为此,请参阅RelayC-ABI自述文件。RelayC-ABI自述文件https://getsentry.github.io/relay/relay_cabi/我们强烈建议在虚拟环境中开发和测试python包。更新和测试ABI后,确保virtualenv处于活动状态并安装构建本机库的包。有两种安装方式:#安装release版本,推荐:pipinstall--editable./py#安装debug版本,安装速度较快,但运行时慢很多:RELAY_DEBUG=1pipinstall--editable./py对于测试,我们使用无处不在的pytest。再次确保您的virtualenv处于活动状态并且安装了最新版本的本机库。然后,运行:#创建一个新的virtualenv,安装发行版并运行测试maketest-python#手动运行单独的测试。venv/bin/pytestpy/tests-kDevelopmentServer如果你安装了systemfd和cargo-watch,makedevserver命令可以自动重新加载中继:cargoinstallsystemfdcargo-watchmakedevserverSSL这个仓库包含SSL-certificate+privatekey用于开发目的。它有两种格式:(.pem,.cert)对和.pfx(PKCS#12)文件。密码,.pfx文件就是密码。使用Sentry要使用现有的Sentrydevserver、自托管Sentry安装或SentrySaaS开发Relay,请在.relay/config.yml中将上游配置为Sentry服务器的URL。例如,在本地开发中将relay.upstream设置为http://localhost:8000/。要使用本地开发Sentry测试处理模式,请使用以下配置:relay:#指向你的SentrydevserverURL:upstream:http://localhost:8000/#监听3000以外的端口:port:3001logging:#启用完整日志记录Loggingandbacktraces:level:traceenable_backtraces:truelimits:#Speedupshutdownon^Cshutdown_timeout:0processing:#启用存储规范化处理模式并将数据发布到Kafka:enabled:truekafka_config:-{name:"bootstrap.servers",value:"127.0.0.1:9092"}-{name:"message.max.bytes",value:2097176}redis:"redis://127.0.0.1"请注意,Sentrydevserver仍在端口StartRelay上运行在3000上具有类似的配置。中继不会干扰您的开发构建。为确保将SDK发送到您的开发实例,请更新DSN中的端口:http://@localhost:3001/发布管理我们使用craft发布新版本。有两个单独的项目要发布:根文件夹中的中继二进制文件。在该目录中运行craftprepare和craftpublish以分别创建发布版本并发布它。我们使用日历版本控制并与Sentry协调发布。RelayPython库和C-ABI从py/子文件夹分发。切换到该目录并运行craftprepare和craftpublish。我们在开发周期中使用语义版本控制和发布。crafthttps://github.com/getsentry/craftcalendaredversionhttps://calver.orgsemanticversioninghttps://semver.orgchangelog描述暴露给Python包的变更,请在py/CHANGELOG.md添加一个条目。这包括但不限于事件规范化、PII清理和协议。对于中继服务器的更改,请在以下标题下向CHANGELOG.md添加一个条目:功能:用于新的用户可见功能。错误修复:针对用户可见的错误修复。内部:用于内部操作中的功能和错误修复,尤其是处理模式。在变更日志条目中,请添加指向此PR的链接(考虑更具描述性的消息):-${getCleanTitle()}。(${PR_LINK})如果以上都不适用,您可以通过添加#skip-changelog来退出。