采样抓取目标
应用程序通常部署了许多实例。虽然 Pyroscope 旨在处理大量性能分析数据,但您可能只需要抓取应用程序的某些实例。
例如,应用程序生成的性能分析数据量可能会导致对每个实例进行性能分析变得不合理,或者您可能以降低成本为目标。
通过配置 Grafana Alloy(首选)或 Grafana Agent(旧版)收集器,Pyroscope 可以采样抓取目标。
注意
Grafana Alloy 是我们分发的 OTel 收集器的新的名称。Grafana Agent 已弃用,并在 2025 年 10 月 31 日之前处于长期支持 (LTS) 状态。Grafana Agent 将于 2025 年 11 月 1 日达到使用寿命终点 (EOL)。阅读更多关于我们建议迁移到 Grafana Alloy 的原因。
在您开始之前
确保您了解如何配置收集器以抓取目标,并且熟悉组件配置语言。Alloy 配置文件使用 Alloy 配置语法。Agent Flow 文件使用 River 语言。
配置
hashmod
操作和 modulus
参数结合使用,通过对一个或多个标签进行分片来启用采样行为。要进一步了解这些概念,请参阅 规则块文档。简而言之,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 哈希,因此抓取目标到分片之间没有完全均匀的分布。更多的抓取目标会产生越来越准确的采样。
请记住,如果哈希的标签是确定性的,则您会看到确定性的分片,从而导致抓取目标的确定性采样。类似地,如果哈希的标签是非确定性的,则您会看到抓取目标以非确定性的方式进行采样。