菜单
开源

公开预览

beyla.ebpf

公开预览: 这是一个 公开预览 组件。公开预览组件可能会发生重大更改,并且可能会被覆盖相同用例的等效功能所取代。要使用该组件,stability.level 标志必须设置为 public-preview 或更低。

beyla.ebpf 组件用作 Grafana Beyla 的包装器,它使用 eBPF 自动检查应用程序可执行文件和操作系统网络层,并捕获与 Web 事务和速率错误持续时间 (RED) 指标相关的跟踪跨度,用于 Linux HTTP/S 和 gRPC 服务。您可以配置该组件以从特定端口或可执行文件路径收集遥测数据,以及从 Kubernetes 元数据收集其他标准。该组件公开指标,可以由 Prometheus 抓取组件收集,以及可以转发到 OTEL 导出器组件的跟踪。

注意

要运行此组件,Alloy 需要管理权限 (sudo),或者至少需要授予其 CAP_SYS_ADMINCAP_SYS_PTRACE 功能。在 Kubernetes 环境中,AppArmor 配置文件必须为 Unconfined,用于运行 Alloy 的部署或 DaemonSet。

用法

alloy
beyla.ebpf "<LABEL>" {

}

参数

beyla.ebpf 支持以下参数

名称类型描述默认值必需
open_portstring用于 Beyla 自动使用 eBPF 进行检测的运行服务的端口。""
executable_namestring要匹配以使 Beyla 自动使用 eBPF 进行检测的可执行文件的名称。""
debugbool为 Beyla 启用调试模式。false

open_port 接受以逗号分隔的端口列表(例如,80,443)和端口范围(例如,8000-8999)。如果可执行文件仅匹配列表中的一个端口,则认为它匹配选择标准。

executable_name 接受一个正则表达式,与完整的可执行文件命令行匹配,包括可执行文件在文件系统上的驻留目录。

debug 为 Beyla 启用调试模式。此模式记录 BPF 日志、网络日志、跟踪表示日志以及其他调试信息。

beyla.ebpf 的定义中支持以下块

层次结构描述必需
routesroutes配置路由以将 HTTP 路径匹配到用户提供的 HTTP 路径。
attributesattributes配置组件的 Beyla 属性。
attributes > kuberneteskubernetes 属性配置使用已检测 Pod 的 Kubernetes 元数据装饰指标和跟踪。
discoverydiscovery配置发现,以查找与给定标准匹配的可检测进程。
discovery > servicesservices配置要为组件发现的服务。
discovery > services > kuberneteskubernetes 服务配置要为组件发现的 Kubernetes 服务。
discovery > exclude_servicesservices配置要为组件排除的服务。
discovery > exclude_services > kuberneteskubernetes 服务配置要为组件排除的 Kubernetes 服务。
metricsmetrics配置 Beyla 公开的指标。
metrics > networknetwork配置 Beyla 的网络指标选项。
outputoutput配置将接收到的遥测数据发送到哪里。

> 符号表示更深的嵌套级别。例如,attributes > kubernetes 指的是在 attributes 块内定义的 kubernetes 块。

attributes 块

此块允许您配置指标和跟踪的某些属性的装饰方式。

它包含以下块

kubernetes 属性块

名称类型描述默认值必需
enablestring启用 Kubernetes 元数据装饰。false
cluster_namestringKubernetes 集群的名称。""

如果设置为 true,Beyla 将使用 Kubernetes 元数据装饰指标和跟踪。将添加以下标签

  • k8s.namespace.name
  • k8s.deployment.name
  • k8s.statefulset.name
  • k8s.replicaset.name
  • k8s.daemonset.name
  • k8s.node.name
  • k8s.pod.name
  • k8s.pod.uid
  • k8s.pod.start_time

如果设置为 false,Kubernetes 元数据装饰器将被禁用。

如果设置为 autodetect,Beyla 将尝试自动检测它是否在 Kubernetes 内部运行,如果满足该条件,则启用元数据装饰。

如果未设置 cluster_name,Beyla 将尝试从 Kubernetes API 检测集群名称。

routes 块

此块用于配置路由以将 HTTP 路径匹配到用户提供的 HTTP 路径。

名称类型描述默认值必需
patternslist(string)提供用于设置 http.route 跟踪/指标属性的 URL 路径模式列表[]
ignore_patternslist(string)提供用于从 http.route 跟踪/指标属性中忽略的 URL 路径模式列表。[]
ignore_modestring忽略模式时要使用的模式。""
unmatchedstring指定当跟踪 HTTP 路径与任何 patterns 条目不匹配时该怎么做。"heuristic"

patternsignored_patterns 是具有特定标签的模式列表,这些标签允许对路径段进行分组(或忽略它们)。匹配器标签可以是 :name{name} 格式。ignore_mode 属性是

  • all 丢弃与 ignored_patterns 匹配的指标和跟踪。
  • traces 仅丢弃与 ignored_patterns 匹配的跟踪。不会忽略任何指标事件。
  • metrics 仅丢弃与 ignored_patterns 匹配的指标。不会忽略任何跟踪事件。unmatched 属性是
  • unsethttp.route 属性保留为未设置状态。
  • pathhttp.route 字段属性复制到路径值。
    • 注意:此选项可能会导致摄取器侧的基数爆炸。
  • wildcardhttp.route 字段属性设置为基于星号的通用 /** 值。
  • heuristic 根据以下规则自动从路径值推导出 http.route 字段属性
    • 任何具有数字或 ASCII 字母表之外的字符(或 - 和 _)的路径组件,都将被替换为星号 *
    • 任何看起来不像单词的字母组件都将被替换为星号 *

discovery 块

此块用于配置发现,以查找与给定标准匹配的可检测进程。

它包含以下块

services 块

在某些情况下,Beyla 将检测各种服务,例如检测节点中所有服务的 Kubernetes DaemonSet。此块允许您根据服务的元数据过滤要检测的服务。如果您在同一个 services 条目中指定其他选择器,则检测到的进程需要匹配所有选择器属性。

名称类型描述默认值必需
namestring要匹配的服务的名称。""
namespacestring要匹配的服务的命名空间。""
open_portsstring用于 Beyla 自动使用 eBPF 进行检测的运行服务的端口。""
exe_pathstring用于 Beyla 自动使用 eBPF 进行检测的运行服务的路径。""

name 为匹配的已检测服务定义一个名称。它用于填充导出的指标/跟踪中的 service.name OTEL 属性和/或 service_name Prometheus 属性。open_port 接受以逗号分隔的端口列表(例如,80,443)和端口范围(例如,8000-8999)。如果可执行文件仅匹配列表中的一个端口,则认为它匹配选择标准。exe_path 接受一个正则表达式,与完整的可执行文件命令行匹配,包括可执行文件在文件系统上的驻留目录。

kubernetes 服务块

此块允许您根据 Kubernetes 元数据过滤要检测的服务。如果您在同一个 services 条目中指定其他选择器,则检测到的进程需要匹配所有选择器属性。

名称类型描述默认值必需
namespacestring要匹配的 Kubernetes 命名空间的正则表达式。""
pod_namestring要匹配的 Kubernetes Pod 的正则表达式。""
deployment_namestring要匹配的 Kubernetes 部署的正则表达式。""
statefulset_namestring要匹配的 Kubernetes StatefulSet 的正则表达式。""
replicaset_namestring要匹配的 Kubernetes ReplicaSets 的正则表达式。""
daemonset_namestring要匹配的 Kubernetes DaemonSets 的正则表达式。""
owner_namestring要匹配的运行 Pod 的 Kubernetes 所有者的正则表达式。""
pod_labelsmap(string)标签的键值对,键与 Kubernetes Pods 匹配,值作为正则表达式提供。{}

metrics 块

此块配置 Beyla 收集哪些指标。

名称类型描述默认值必需
featureslist(string)要为指标启用的功能列表。["application"]
instrumentationslist(string)要为指标启用的检测列表。["*"]

features 是要为指标启用的功能列表。以下功能可用

  • application 导出应用程序级指标。
  • application_span 以跟踪跨度指标格式导出应用程序级指标。
  • application_service_graph 导出应用程序级服务图指标。
  • application_process 导出有关运行检测应用程序的进程的指标。
  • network 导出网络级指标。

instrumentations 是要为指标启用的检测列表。以下检测可用

  • * 启用所有 instrumentations。如果列表中存在 *,则其他值将被忽略。
  • http 启用收集 HTTP/HTTPS/HTTP2 应用程序指标。
  • grpc 启用收集 gRPC 应用程序指标。
  • sql 启用收集 SQL 数据库客户端调用指标。
  • redis 启用收集 Redis 客户端/服务器数据库指标。
  • kafka 启用收集 Kafka 客户端/服务器消息队列指标。

network 块

此块配置 Beyla 的网络指标选项。

名称类型描述默认值必需
enabledbool启用网络指标收集。false

output 块

output 块配置一组组件,以将生成的遥测数据转发到这些组件。

支持以下参数

名称类型描述默认值必需
traceslist(otelcol.Consumer)要发送跟踪的消费者列表。[]

必须指定 output 块,但其所有参数都是可选的。默认情况下,遥测数据将被丢弃。配置 traces 参数以将跟踪数据发送到其他组件。

导出字段

以下字段被导出,可以被其他组件引用。

名称类型描述
targetslist(map(string))可以使用这些目标使用 eBPF 收集已检测服务的指标。

例如,targets 可以传递到 discovery.relabel 组件以重写目标的标签集,也可以传递到收集公开指标的 prometheus.scrape 组件。

导出的目标使用由 运行命令 指定的配置的 内存中流量 地址。

组件健康状况

仅当给出无效配置时,beyla.ebpf 才会报告为不健康。

调试信息

beyla.ebpf 不公开任何特定于组件的调试信息。

示例

指标

此示例使用 prometheus.scrape 组件 收集指定端口的 beyla.ebpf 的指标

alloy
beyla.ebpf "default" {
    open_port = <OPEN_PORT>
}

prometheus.scrape "beyla" {
  targets = beyla.ebpf.default.targets
  honor_labels = true // required to keep job and instance labels
  forward_to = [prometheus.remote_write.demo.receiver]
}

prometheus.remote_write "demo" {
  endpoint {
    url = <PROMETHEUS_REMOTE_WRITE_URL>

    basic_auth {
      username = <USERNAME>
      password = <PASSWORD>
    }
  }
}

替换以下内容

  • <OPEN_PORT>:Beyla 使用 eBPF 自动检测的运行服务的端口。
  • <PROMETHEUS_REMOTE_WRITE_URL>:要发送指标的 Prometheus remote_write 兼容服务器的 URL。
  • <USERNAME>:用于向 remote_write API 进行身份验证的用户名。
  • <PASSWORD>:用于向 remote_write API 进行身份验证的密码。

跟踪

此示例从 beyla.ebpf 获取跟踪,并将它们转发到 otlp

alloy
beyla.ebpf "default" {
    open_port = <OPEN_PORT>
    output {
        traces = [otelcol.processor.batch.default.input]
    }
}

otelcol.processor.batch "default" {
    output {
        traces  = [otelcol.exporter.otlp.default.input]
    }
}

otelcol.exporter.otlp "default" {
    client {
        endpoint = env("<OTLP_ENDPOINT>")
    }
}

替换以下内容

  • <OPEN_PORT>:Beyla 使用 eBPF 自动检测的运行服务的端口。
  • <OTLP_ENDPOINT>:要发送跟踪的 OpenTelemetry Collector 的端点。

兼容组件

beyla.ebpf 可以接受以下组件的参数

beyla.ebpf 具有可以被以下组件使用的导出

注意

连接某些组件可能没有意义,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。