菜单
开源

关于 Pyroscope 架构

Pyroscope 采用基于微服务的架构。系统拥有多个可水平扩展的微服务,这些微服务可以独立并行运行。Pyroscope 微服务被称为组件。

Pyroscope 的设计将所有组件的代码编译成一个单独的二进制文件。-target 参数控制该单一二进制文件充当哪些组件。对于那些希望简单上手的人来说,Pyroscope 也可以在单体模式下运行,所有组件都在一个进程中同时运行。更多信息请参阅部署模式

Pyroscope 组件

大多数组件是无状态的,在进程重启之间不需要持久化任何数据。一些组件是有状态的,依赖于非易失性存储来防止进程重启之间的数据丢失。有关每个组件的详细信息,请参阅组件中的相应页面。

写入路径

Architecture of Pyroscope's write path

Ingester 从 Distributor 接收传入的性能分析数据。每个推送请求都属于一个租户,Ingester 将接收到的性能分析数据附加到存储在本地磁盘上的特定租户 Pyroscope 数据库中。

一旦接收到该租户的第一批性能分析数据,每个 Ingester 就会懒惰地创建该租户的 Pyroscope 数据库。

内存中的性能分析数据会定期刷新到磁盘并创建新的块。

更多信息请参阅Ingester

序列分片和复制

默认情况下,每个性能分析序列都会被复制到三个 Ingester 中,每个 Ingester 将自己的块写入长期存储。Compactor 将来自多个 Ingester 的块合并成一个块,并移除重复的样本。块压缩显著降低了存储利用率。

读取路径

Architecture of Pyroscope's read path

进入 Pyroscope 的查询到达 query-frontend 组件,该组件负责加速查询并将其分派给 query-scheduler

query-scheduler 维护一个查询队列,并确保公平地执行每个租户的查询。

Querier 充当工作节点,从 query-scheduler 中的队列拉取查询。Querier 连接到 Ingester 以获取执行查询所需的所有数据。有关查询执行方式的更多信息,请参阅querier

根据所选的时间窗口,Querier 会调用Ingester 获取近期数据,并调用store-gateways 获取长期存储的数据。

长期存储

Pyroscope 存储格式在块格式页面中有详细描述。Pyroscope 存储格式将每个租户的性能分析数据存储到他们自己的磁盘块中。每个磁盘块目录包含一个索引文件、一个包含元数据的文件和 Parquet 表。

Pyroscope 要求块文件使用以下任何对象存储

更多信息请参阅配置对象存储配置磁盘存储