菜单
开源 RSS

配置参考

Grafana Agent 支持在 流模式 下进行 eBPF 分析。配置文件使用 River 语言编写,并由用于收集、转换和发送数据的组件组成。

pyroscope.ebpf 组件用于通过 eBPF 收集应用程序性能配置文件。

Pyroscope ebpf diagram

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

使用targets参数,您可以指定要对机器上哪些进程和容器进行分析。targets可以来自发现组件,例如discovery.processdicovery.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 -> proc 符号表 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++ 解码模式。可用选项为:nonesimplifiedtemplatesfullnone

支持的语言

pyroscope.ebpf组件支持以下语言

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

将数据发送到 Grafana Cloud Profiles

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

river
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 命名空间内运行,才能使pyroscope.ebpf组件正常工作。

目标

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

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

然后,每个进程都与目标列表中的指定目标相关联,该目标由容器 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 (histogram):发送到直接和间接组件的写入延迟。
  • pyroscope_ebpf_active_targets (gauge):组件跟踪的活动目标数量。
  • pyroscope_ebpf_profiling_sessions_total (counter):已完成的分析会话数量。
  • pyroscope_ebpf_profiling_sessions_failing_total (counter):分析会话失败的数量。
  • pyroscope_ebpf_pprofs_total (counter):ebpf 组件收集的 pprof 配置文件数量。

更多信息

查看以下资源以了解有关 eBPF 分析的更多信息