Sentry SDK 开销测量(Benchmark)

简介: Sentry SDK 开销测量(Benchmark)

动机



  • 关于 SDK 影响的问题无法回答
  • 不知道我们造成了多少开销以及多少开销是可以接受的

这里聚焦的是 Web 服务器的性能监控(跟踪)。


它是如何工作的



image.png


Sentry SDK Benchmark 提供了一组以不同编程语言和不同框架实现的预打包 Web 应用程序。


对于 "baseline" 目录中的每个原始应用程序, 在相应的 "instrumented" 目录中都有一个稍作修改的应用程序, 该目录是原始应用程序的副本,添加 Sentry 检测(错误和性能监控)的更改最少。"baseline" 应用程序是来自 TechEmpower Framework Benchmarks 的实现。

基准运行程序(sentry-sdk-benchmark 工具)将一个或多个应用程序作为输入,并连续创建 Docker Compose 项目以测试和收集数据以比较 baselineinstrumented 应用程序。输出显示为 HTML 报告。


每个 Docker Compose 项目负责启动目标 appdatabase 服务器和辅助工具,以生成负载并测量延迟和资源消耗。这些组件作为少数几个 Docker 容器存在:


image.png


每个被测应用程序都应该与 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 或更高版本)。


  1. 编译 benchmark runner:


go build .


  1. (可选)通过将 sentry-sdk-benchmark 二进制文件移动到 $PATH 中的目录来安装它,例如:


mv sentry-sdk-benchmark /usr/local/bin/


  1. 运行 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
相关文章
|
Web App开发 资源调度 测试技术
Sentry 开发者贡献指南 - 浏览器 SDK 集成测试
Sentry 开发者贡献指南 - 浏览器 SDK 集成测试
143 0
Sentry 开发者贡献指南 - 浏览器 SDK 集成测试
|
存储 JSON JavaScript
Sentry 开发者贡献指南 - SDK 开发(会话)
Sentry 开发者贡献指南 - SDK 开发(会话)
430 0
|
资源调度 监控 JavaScript
Sentry 官方 JavaScript SDK 简介与调试指南
Sentry 官方 JavaScript SDK 简介与调试指南
542 0
Sentry 官方 JavaScript SDK 简介与调试指南
|
存储 Rust JavaScript
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)
267 0
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇)
|
JavaScript 前端开发 测试技术
Sentry 开发者贡献指南 - JavaScript SDK Minimal
Sentry 开发者贡献指南 - JavaScript SDK Minimal
157 0
|
存储 JSON 数据处理
Sentry 开发者贡献指南 - SDK 开发(数据处理)
Sentry 开发者贡献指南 - SDK 开发(数据处理)
147 0
|
缓存 JSON Unix
Sentry 开发者贡献指南 - SDK 开发(客户端报告)
Sentry 开发者贡献指南 - SDK 开发(客户端报告)
269 0
|
存储 监控 JavaScript
Sentry 开发者贡献指南 - SDK 开发(性能监控)
Sentry 开发者贡献指南 - SDK 开发(性能监控)
969 0
|
JSON JavaScript 前端开发
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇)
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇)
327 0
|
API 开发工具 Python
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇)
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇)
195 0

热门文章

最新文章