动机
- 关于 SDK 影响的问题无法回答
- 不知道我们造成了多少开销以及多少开销是可以接受的
这里聚焦的是 Web 服务器的性能监控(跟踪)。
它是如何工作的
Sentry SDK Benchmark 提供了一组以不同编程语言和不同框架实现的预打包 Web 应用程序。
- https://github.com/getsentry/sentry-sdk-benchmark
- https://github.com/getsentry/sentry-sdk-benchmark/tree/main/platform
对于 "baseline" 目录中的每个原始应用程序, 在相应的 "instrumented" 目录中都有一个稍作修改的应用程序, 该目录是原始应用程序的副本,添加 Sentry 检测(错误和性能监控)的更改最少。"baseline" 应用程序是来自 TechEmpower Framework Benchmarks 的实现。
基准运行程序(sentry-sdk-benchmark
工具)将一个或多个应用程序作为输入,并连续创建 Docker Compose
项目以测试和收集数据以比较 baseline
和 instrumented
应用程序。输出显示为 HTML
报告。
每个 Docker Compose
项目负责启动目标 app
、database
服务器和辅助工具,以生成负载并测量延迟和资源消耗。这些组件作为少数几个 Docker
容器存在:
每个被测应用程序都应该与 PostgreSQL
数据库交互,以响应来自 load generator
的请求,如 Database Updates test 中所述。
load generator
以模拟 "open model" 的固定速率向目标应用程序抛出流量,参阅:Closed versus open system models and their impact on performance and scheduling, Schroeder et al。
当目标 app
使用 Sentry 进行检测时,Sentry SDK
被配置为将数据从应用程序发送到 Mock Sentry Ingestion Server
,这基本上是真实 Sentry
摄入管道的自定义测试替代品。
load generator
还负责编排所有测试步骤并从所有其他组件收集数据(直接或间接通过 Container Metrics Collector
)。
用法
您将需要最新版本的 docker
(带有 Docker Compose V2)和 go
(v1.17 或更高版本)。
- 编译 benchmark runner:
go build .
- (可选)通过将
sentry-sdk-benchmark
二进制文件移动到$PATH
中的目录来安装它,例如:
mv sentry-sdk-benchmark /usr/local/bin/
- 运行
sentry-sdk-benchmark
工具:
sentry-sdk-benchmark platform/python/django
清理资源
sentry-sdk-benchmark
工具在运行后总是会尝试清理资源(容器、镜像和网络)。在最终留下某些东西的情况下,以下命令可以帮助清理资源。
请谨慎使用以下命令,因为其中一些命令可能会影响不一定由 sentry-sdk-benchmark
创建的资源。
Docker 清理命令
列出并删除所有 `Docker Compose` 项目,包括容器、镜像和网络:
docker compose ls -a -q | xargs -tI '{}' docker compose -p '{}' down --remove-orphans --rmi local
列出并删除所有 Docker 容器:
docker ps -a -q | xargs -tn10 docker rm -f
删除所有未使用的 Docker 网络:
docker network prune
删除带有
sentry-sdk-benchmark
标签的镜像:
docker images -f "label=io.sentry.sentry-sdk-benchmark" -q | sort -u | xargs -tn10 docker rmi -f
删除所有悬空(未标记)镜像:
docker images -f "dangling=true" -q | xargs -tn10 docker rmi -f