1 个不稳定版本
0.0.0 | 2023年12月19日 |
---|
#8 in #高分辨率
2KB
Rezolus
Rezolus是一个收集详细系统性能遥测数据并通过高分辨率遥测暴露爆发模式的工具。Rezolus提供了基本系统指标、性能计数器和eBPF(扩展伯克利包过滤)遥测的支持。测量是提高性能的第一步。
每项指标的文档可以在METRICS文档中找到。
概述
Rezolus从多个不同的来源收集遥测数据。目前,Rezolus从传统来源(procfs、sysfs)、perf_events子系统以及BPF收集遥测数据。每个采样器实现了一套一致的功能,以便可以轻松添加新的功能以进一步扩展Rezolus的功能。
每个遥测来源都进行了过采样,以便我们可以在时间间隔内构建直方图。这个直方图使我们能够捕捉到将出现在远上下百分位数的变异性。这种过采样方法是Rezolus与其他遥测代理相比的关键区别之一。
Rezolus支持BPF以及更常见的遥测来源,是捕捉性能异常、分析系统性能和进行性能诊断的非常复杂的工具。
有关底层指标库和采样器设计的更详细信息,可以在DESIGN文档中找到。
功能
- 传统遥测来源(procfs、sysfs等)
- 对硬件性能计数器的perf_events支持
- 对BPF的支持,以测量内核和用户空间活动
- 过采样和百分位指标以捕获爆发
传统遥测来源
Rezolus从传统来源(procfs、sysfs)收集指标,为CPU、磁盘和网络提供基本遥测。Rezolus导出CPU利用率、磁盘带宽、磁盘IOPs、网络带宽、网络数据包速率、网络错误以及TCP和UDP协议计数器。
这些基本遥测来源,结合过采样以捕获它们的爆发,通常可以提供系统性能的高级视图,并可能迅速指示资源饱和或错误发生的区域。
Perf Events
性能事件允许我们报告硬件和软件事件。典型的软件事件包括页面错误、上下文切换和CPU迁移。典型的硬件事件包括CPU周期、指令退休、缓存命中、缓存未命中以及关于底层硬件上工作负载运行的多种详细指标。
这些指标通常用于高级性能调试,以及调整和优化工作。
BPF
BPF可以暴露大量的性能信息,这使我们能够在非常细粒度的层面上让Linux内核执行遥测捕获和聚合。
Rezolus附带了一些采样器,可以捕获块IO大小分布、EXT4和XFS操作延迟分布以及调度程序运行队列延迟分布。您会看到在这里我们主要暴露大小和延迟的分布。内核将每个操作的适当值记录到直方图中。然后Rezolus从用户空间访问这个直方图,并将值传输到其自己的内部存储中,然后将其暴露给外部聚合器。
通过在内核中收集遥测数据,我们能够收集关于发生频率极高的事件的数据,例如任务调度,同时收集遥测数据时的性能开销最小。BPF采样器可以用来捕获运行时性能异常以及描述工作负载。
采样率和分辨率
为了准确反映突发事件的强度,采样率必须至少是记录最短突发事件的持续时间的两倍。这确保至少有一个样本完全重叠事件的突发部分。对于传统的时间序列,这意味着峰值至少需要120秒或更长时间才能在强度上被准确记录。Rezolus允许配置采样率,使我们能够在分辨率和资源消耗之间进行权衡。在10Hz采样率下,200毫秒或更长时间的连续突发足以在pMax中准确反映。与之相比,按分钟指标需要120000毫秒,或者按秒指标需要2000毫秒的连续突发才能被准确记录。
入门指南
构建
Rezolus是用标准的Rust工具链构建的,可以通过rustup或遵循Rust 网站上的说明进行安装和管理。
本指南的其余部分假设您已经选择通过rustup安装工具链。
注意:Rezolus旨在在Linux系统上构建和部署,但有一些非常有限的支持用于在MacOS上测试整体框架。它专注于为Linux系统提供系统遥测。为了获得最佳体验和开发新的采样器,您应该在Linux上构建和运行。
从源代码克隆和构建Rezolus
git clone https://github.com/twitter/rezolus
cd rezolus
# create an unoptimized development build
cargo build
# run the unoptimized binary and display help
cargo run -- --help
# create an optimized release build
cargo build --release
# run the optimized binary and display help
cargo run --release -- --help
# run the optimized binary with the example config (needs sudo for perf_events)
cargo build --release && \
sudo target/release/rezolus --config configs/example.toml
# metrics can be viewed in human-readable form with curl
curl --silent https://127.0.0.1:4242/vars
带有BPF支持的构建
默认情况下,BPF支持未编译入。如果您希望生成带有BPF支持的构建,请按照以下步骤操作
先决条件
BPF支持需要我们链接到BPF编译器集合。您可以使用您发行版提供的版本,也可以从源代码构建BCC并安装。知道您安装了哪个版本的BCC至关重要。Rezolus通过构建时使用不同的功能标志支持多个版本的BCC。
我们的当前策略是支持从Debian Stable或CentOS 7的发行版存储库中的版本(以较旧者为准)到BCC最新版本的BCC。
本政策为Debian、Ubuntu、CentOS、Fedora、Arch和Gentoo的当前稳定版和测试版提供保障。其他发行版的用户可能需要从源代码构建BCC的支持版本。有关详细信息,请参阅BCC安装指南。
构建
如上所述,我们提供不同的功能标志以映射到各种支持的BCC版本。`bpf`功能将映射到由rust-bcc项目支持的最新版本。对于大多数用户来说,这将是最合适的标志。但是,如果您必须链接到较旧的BCC版本,您将需要使用更具体的功能标志形式。这些针对特定版本的标志形式为`bpf_v0_10_0`,其中BCC版本反映在功能名称中。您可以在本项目的Cargo清单中找到功能标志的完整列表。
# create an optimized release build with BPF support
cargo build --release --features bpf
sudo target/release/rezolus --config configs/example.toml
# metrics can be viewed in human-readable form with curl
curl --silent https://127.0.0.1:4242/vars
HTTP公开
Rezolus通过HTTP公开度量标准,不同的路径对应不同的公开格式。
- 可读性:`/vars`
- JSON:`/vars.json`,`/metrics.json`,`/admin/metrics.json`
- Prometheus:`/metrics`
注意:目前,除JSON公开之外,任何其他路径都默认提供。此行为可能会在未来发生变化,不应依赖于它。
此外,您可以在根级路径`/`上获取运行版本。
支持
在GitHub上创建新问题。
贡献
我们认为一个欢迎的社区很重要,并要求您在与社区的所有互动中遵循Twitter的开源行为准则。
作者
- Brian Martin [email protected]
完整贡献者列表可在GitHub上找到:贡献者
关注Twitter上的@TwitterOSS以获取更新。
许可
版权所有2019 Twitter,Inc。
在Apache许可证版本2.0下授权:https://apache.ac.cn/licenses/LICENSE-2.0
安全问题?
请通过Twitter的赏金计划(https://hackerone.com/twitter)而不是GitHub报告敏感的安全问题。