抓取目标的采样
应用程序通常部署了许多实例。虽然 Pyroscope 设计用于处理大量的 profiling 数据,但您可能只想抓取应用程序实例的一个子集。
例如,您的应用程序生成的 profiling 数据量可能导致分析每个实例变得不合理,或者您可能正在寻求降低成本。
通过配置 Grafana Alloy 收集器,Pyroscope 可以对抓取目标进行采样。
开始之前
确保您了解如何配置收集器以抓取目标,并熟悉组件配置语言。Alloy 配置文件使用 Alloy 配置语法。
配置
hashmod
动作和 modulus
参数配合使用,通过对一个或多个标签进行分片来启用采样行为。要进一步了解这些概念,请参阅 rule block 文档。简而言之,hashmod
对源标签执行 MD5 哈希计算,modulus
对输出执行模运算。
可以通过修改 hashmod
动作中的 modulus
值和 keep
动作中的 regex
参数来修改样本大小。modulus
值定义分片的数量,而 regex
值选择分片的一个子集。
注意
请谨慎选择用于
hashmod
动作的源标签。它们必须唯一地定义每个抓取目标,否则hashmod
将无法均匀地对目标进行分片。
例如,考虑一个部署在 Kubernetes 上、有 100 个 pod 副本的应用程序,这些副本都通过标签 pod_hash
唯一标识。以下配置设置为采样 15% 的 pod
discovery.kubernetes "profile_pods" {
role = "pod"
}
discovery.relabel "profile_pods" {
targets = concat(discovery.kubernetes.profile_pods.targets)
// Other rule blocks ...
rule {
action = "hashmod"
source_labels = ["pod_hash"]
modulus = 100
target_label = "__tmp_hashmod"
}
rule {
action = "keep"
source_labels = ["__tmp_hashmod"]
regex = "^([0-9]|1[0-4])$"
}
// Other rule blocks ...
}
注意事项
此策略不能保证精确采样。由于其依赖于 MD5 哈希,抓取目标到分片的分布不是完全均匀的。抓取目标数量越多,采样越准确。
请记住,如果哈希计算的标签是确定性的,您将看到确定性的分片,从而对抓取目标进行确定性采样。类似地,如果哈希计算的标签是非确定性的,您将看到以非确定性方式采样的抓取目标。