菜单
开源 RSS

配置参考

Grafana Alloy 支持 eBPF 性能分析。配置文件使用 River 语言编写,由用于收集、转换和发送数据的组件组成。

pyroscope.ebpf 组件用于通过 eBPF 收集应用性能分析数据。

Pyroscope ebpf diagram

pyroscope.ebpf 运行在主机上,收集与当前主机上运行的进程相关的堆栈轨迹。

使用 targets 参数,您可以指定要在机器上对哪些进程和容器进行性能分析。targets 可以来自发现组件,例如 discovery.processdiscovery.kubernetesdiscovery.dockerdiscovery.dockerswarm

您可以使用 discovery.relabel 组件重新标记发现的目标并设置您自己的标签。有关更多信息,请参阅 组件 文档。

forward_to 参数应指向一个 pyroscope.write 组件,以便将收集的性能分析数据发送到您的 Pyroscope Server 或 Grafana Cloud

名称类型描述默认值必需
targetslist(map(string))按容器 ID 对性能分析数据分组的目标列表
forward_tolist(ProfilesReceiver)用于发送收集到的性能分析数据的接收器列表。
collect_intervalduration收集性能分析数据的频率15s
sample_rateint每秒收集多少个性能分析样本97
pid_cache_sizeintpid -> 进程符号表的 LRU 缓存大小32
build_id_cache_sizeintELF 文件构建 ID -> 符号表的 LRU 缓存大小64
same_file_cache_sizeintELF 文件 -> 符号表的 LRU 缓存大小8
container_id_cache_sizeintpid -> 容器 ID 表的 LRU 缓存大小1024
collect_user_profilebool启用/禁用用户空间性能分析收集的标志true
collect_kernel_profilebool启用/禁用内核空间性能分析收集的标志true
demanglestringC++ demangle 模式。可用选项:nonesimplifiedtemplatesfullnone

支持的语言

pyroscope.ebpf 组件支持以下语言

  • Go
  • Rust
  • 启用帧指针的 C/C++
  • Python

发送数据到 Grafana Cloud Profiles

当发送到 Grafana Cloud Profiles 时,您可以使用以下 pyroscope.write 组件配置,该配置使用了环境变量

alloy
pyroscope.write "endpoint" {
    endpoint {
        basic_auth {
            password = env("GC_PASSWORD")
            username = env("GC_USER")
        }
        url = env("GC_URL")
    }
}

确保您已正确配置 GC_URLGC_USERGC_PASSWORD 环境变量。

性能分析收集行为

pyroscope.ebpf 组件收集与当前主机上运行的进程相关的堆栈轨迹。您可以使用 sample_rate 参数定义每秒收集的堆栈轨迹数量。默认值为 97。

如果您未定义以下标签,它们将自动注入到收集的性能分析数据中。这些标签可以帮助您精确定位性能分析目标。

标签描述
service_namePyroscope 服务名称。如果可能,它会自动从发现元标签中选择。否则,默认为 unspecified
__name__pyroscope 指标名称。默认为 process_cpu
__container_id__从目标派生的容器 ID。

权限

您需要以 root 用户身份并在宿主机 PID 命名空间内运行 Agent,以便 pyroscope.ebpf 组件正常工作。

目标

targets 中的每个目标必须包含以下特殊标签之一,且该标签必须对应于被分析的容器或进程

  • __container_id__:容器 ID。
  • __meta_docker_container_id:Docker 容器的 ID。
  • __meta_kubernetes_pod_container_id:Kubernetes Pod 容器的 ID。
  • __process_pid__:进程 ID。

然后,每个进程会与 targets 列表中的一个指定目标关联,通过容器 ID 或进程 PID 来确定。

如果进程的容器 ID 与目标的容器 ID 标签匹配,则根据容器 ID 按目标聚合堆栈轨迹。如果进程的 PID 与目标的进程 PID 标签匹配,则根据进程 PID 按目标聚合堆栈轨迹。否则,该进程将不进行性能分析。

服务名称

特殊标签 service_name 是必需的,并且必须始终存在。如果未指定,将尝试从多个来源推断

  • __meta_kubernetes_pod_annotation_pyroscope_io_service_name,这是一个 pyroscope.io/service_name pod 注解。
  • __meta_kubernetes_namespace__meta_kubernetes_pod_container_name
  • __meta_docker_container_name
  • __meta_dockerswarm_container_label_service_name__meta_dockerswarm_service_name

如果未指定 service_name 且无法推断,则设置为 unspecified

公开的 Prometheus 指标

pyroscope.ebpf 组件公开以下 Prometheus 指标

  • pyroscope_fanout_latency (直方图):发送到直接和间接组件的写入延迟。
  • pyroscope_ebpf_active_targets (仪表):组件跟踪的活动目标数量。
  • pyroscope_ebpf_profiling_sessions_total (计数器):已完成的性能分析会话数量。
  • pyroscope_ebpf_profiling_sessions_failing_total (计数器):失败的性能分析会话数量。
  • pyroscope_ebpf_pprofs_total (计数器):ebpf 组件收集的 pprof 性能分析数据数量。

更多信息

请查阅以下资源,了解更多关于 eBPF 性能分析的信息