Pyroscope 摄取器
摄取器是一个有状态组件,它首先在写入路径上将传入的性能分析数据写入磁盘存储,并在读取路径上为查询返回时序样本。
来自分发器的传入性能分析数据不会立即写入长期存储,而是保存在摄取器的内存中或卸载到摄取器的磁盘上。最终,所有性能分析数据都会写入磁盘并定期上传到长期存储。因此,在读取路径上执行查询时,查询器可能需要从摄取器和长期存储中获取样本。
任何调用摄取器的 Pyroscope 组件都会首先查找在哈希环中注册的摄取器,以确定哪些摄取器可用。每个摄取器可能处于以下状态之一:
PENDING(待处理)
摄取器刚刚启动。在此状态下,摄取器不接收写入或读取请求。JOINING(加入中)
摄取器启动并加入环。在此状态下,摄取器不接收写入或读取请求。摄取器从磁盘加载令牌(如果配置了-ingester.ring.tokens-file-path
)或生成一组新的随机令牌。最后,摄取器可以选择观察环中的令牌冲突,解决后进入ACTIVE
状态。ACTIVE(活动中)
摄取器已启动并正在运行。在此状态下,摄取器可以接收写入和读取请求。LEAVING(退出中)
摄取器正在关闭并退出环。在此状态下,摄取器不接收写入请求,但仍可以接收读取请求。UNHEALTHY(异常)
摄取器未能向哈希环发送心跳。在此状态下,分发器会绕过摄取器,这意味着摄取器不接收写入或读取请求。
要配置摄取器的哈希环,请参阅配置成员列表。
摄取器写入去放大
摄取器在内存中存储最近接收的样本,以便执行写入去放大。如果摄取器立即将接收的样本写入长期存储,系统将难以扩展,因为长期存储会承受很高的压力。因此,摄取器会在内存中批量和压缩样本,并定期将它们上传到长期存储。
写入去放大是 Pyroscope 总拥有成本 (TCO) 低的主要原因。
摄取器故障和数据丢失
如果摄取器进程崩溃或突然退出,尚未上传到长期存储的所有内存中的性能分析数据可能会丢失。可以通过以下方式缓解此故障模式:
- 复制
复制
默认情况下,每个性能分析时序都会复制到三个摄取器。如果仲裁数量的摄取器接收到数据,写入 Pyroscope 集群即成功。在复制因子为 3 的情况下,仲裁数量至少为 2。如果 Pyroscope 集群丢失一个摄取器,丢失的摄取器头部块中持有的内存中性能分析数据至少在另一个摄取器中可用。在单个摄取器故障的情况下,不会丢失性能分析数据。如果多个摄取器故障,如果故障影响到持有特定性能分析时序副本的所有摄取器,则可能会丢失性能分析数据。