公开预览
beyla.ebpf
公开预览: 这是一个 公开预览 组件。公开预览组件可能会发生重大更改,并且可能会被覆盖相同用例的等效功能所取代。要使用该组件,
stability.level
标志必须设置为public-preview
或更低。
beyla.ebpf
组件用作 Grafana Beyla 的包装器,它使用 eBPF 自动检查应用程序可执行文件和操作系统网络层,并捕获与 Web 事务和速率错误持续时间 (RED) 指标相关的跟踪跨度,用于 Linux HTTP/S 和 gRPC 服务。您可以配置该组件以从特定端口或可执行文件路径收集遥测数据,以及从 Kubernetes 元数据收集其他标准。该组件公开指标,可以由 Prometheus 抓取组件收集,以及可以转发到 OTEL 导出器组件的跟踪。
注意
要运行此组件,Alloy 需要管理权限 (sudo
),或者至少需要授予其CAP_SYS_ADMIN
和CAP_SYS_PTRACE
功能。在 Kubernetes 环境中,AppArmor 配置文件必须为Unconfined
,用于运行 Alloy 的部署或 DaemonSet。
用法
beyla.ebpf "<LABEL>" {
}
参数
beyla.ebpf
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
open_port | string | 用于 Beyla 自动使用 eBPF 进行检测的运行服务的端口。 | "" | 否 |
executable_name | string | 要匹配以使 Beyla 自动使用 eBPF 进行检测的可执行文件的名称。 | "" | 否 |
debug | bool | 为 Beyla 启用调试模式。 | false | 否 |
open_port
接受以逗号分隔的端口列表(例如,80,443
)和端口范围(例如,8000-8999
)。如果可执行文件仅匹配列表中的一个端口,则认为它匹配选择标准。
executable_name
接受一个正则表达式,与完整的可执行文件命令行匹配,包括可执行文件在文件系统上的驻留目录。
debug
为 Beyla 启用调试模式。此模式记录 BPF 日志、网络日志、跟踪表示日志以及其他调试信息。
块
在 beyla.ebpf
的定义中支持以下块
层次结构 | 块 | 描述 | 必需 |
---|---|---|---|
routes | routes | 配置路由以将 HTTP 路径匹配到用户提供的 HTTP 路径。 | 否 |
attributes | attributes | 配置组件的 Beyla 属性。 | 否 |
attributes > kubernetes | kubernetes 属性 | 配置使用已检测 Pod 的 Kubernetes 元数据装饰指标和跟踪。 | 否 |
discovery | discovery | 配置发现,以查找与给定标准匹配的可检测进程。 | 否 |
discovery > services | services | 配置要为组件发现的服务。 | 否 |
discovery > services > kubernetes | kubernetes 服务 | 配置要为组件发现的 Kubernetes 服务。 | 否 |
discovery > exclude_services | services | 配置要为组件排除的服务。 | 否 |
discovery > exclude_services > kubernetes | kubernetes 服务 | 配置要为组件排除的 Kubernetes 服务。 | 否 |
metrics | metrics | 配置 Beyla 公开的指标。 | 否 |
metrics > network | network | 配置 Beyla 的网络指标选项。 | 否 |
output | output | 配置将接收到的遥测数据发送到哪里。 | 是 |
>
符号表示更深的嵌套级别。例如,attributes > kubernetes
指的是在 attributes
块内定义的 kubernetes
块。
attributes 块
此块允许您配置指标和跟踪的某些属性的装饰方式。
它包含以下块
kubernetes 属性块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
enable | string | 启用 Kubernetes 元数据装饰。 | false | 否 |
cluster_name | string | Kubernetes 集群的名称。 | "" | 否 |
如果设置为 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 路径。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
patterns | list(string) | 提供用于设置 http.route 跟踪/指标属性的 URL 路径模式列表 | [] | 否 |
ignore_patterns | list(string) | 提供用于从 http.route 跟踪/指标属性中忽略的 URL 路径模式列表。 | [] | 否 |
ignore_mode | string | 忽略模式时要使用的模式。 | "" | 否 |
unmatched | string | 指定当跟踪 HTTP 路径与任何 patterns 条目不匹配时该怎么做。 | "heuristic" | 否 |
patterns
和 ignored_patterns
是具有特定标签的模式列表,这些标签允许对路径段进行分组(或忽略它们)。匹配器标签可以是 :name
或 {name}
格式。ignore_mode
属性是
all
丢弃与ignored_patterns
匹配的指标和跟踪。traces
仅丢弃与ignored_patterns
匹配的跟踪。不会忽略任何指标事件。metrics
仅丢弃与ignored_patterns
匹配的指标。不会忽略任何跟踪事件。unmatched
属性是unset
将http.route
属性保留为未设置状态。path
将http.route
字段属性复制到路径值。- 注意:此选项可能会导致摄取器侧的基数爆炸。
wildcard
将http.route
字段属性设置为基于星号的通用/**
值。heuristic
根据以下规则自动从路径值推导出http.route
字段属性- 任何具有数字或 ASCII 字母表之外的字符(或
-
和 _)的路径组件,都将被替换为星号*
。 - 任何看起来不像单词的字母组件都将被替换为星号
*
。
- 任何具有数字或 ASCII 字母表之外的字符(或
discovery 块
此块用于配置发现,以查找与给定标准匹配的可检测进程。
它包含以下块
services 块
在某些情况下,Beyla 将检测各种服务,例如检测节点中所有服务的 Kubernetes DaemonSet。此块允许您根据服务的元数据过滤要检测的服务。如果您在同一个 services 条目中指定其他选择器,则检测到的进程需要匹配所有选择器属性。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
name | string | 要匹配的服务的名称。 | "" | 否 |
namespace | string | 要匹配的服务的命名空间。 | "" | 否 |
open_ports | string | 用于 Beyla 自动使用 eBPF 进行检测的运行服务的端口。 | "" | 否 |
exe_path | string | 用于 Beyla 自动使用 eBPF 进行检测的运行服务的路径。 | "" | 否 |
name
为匹配的已检测服务定义一个名称。它用于填充导出的指标/跟踪中的 service.name
OTEL 属性和/或 service_name
Prometheus 属性。open_port
接受以逗号分隔的端口列表(例如,80,443
)和端口范围(例如,8000-8999
)。如果可执行文件仅匹配列表中的一个端口,则认为它匹配选择标准。exe_path
接受一个正则表达式,与完整的可执行文件命令行匹配,包括可执行文件在文件系统上的驻留目录。
kubernetes 服务块
此块允许您根据 Kubernetes 元数据过滤要检测的服务。如果您在同一个 services 条目中指定其他选择器,则检测到的进程需要匹配所有选择器属性。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
namespace | string | 要匹配的 Kubernetes 命名空间的正则表达式。 | "" | 否 |
pod_name | string | 要匹配的 Kubernetes Pod 的正则表达式。 | "" | 否 |
deployment_name | string | 要匹配的 Kubernetes 部署的正则表达式。 | "" | 否 |
statefulset_name | string | 要匹配的 Kubernetes StatefulSet 的正则表达式。 | "" | 否 |
replicaset_name | string | 要匹配的 Kubernetes ReplicaSets 的正则表达式。 | "" | 否 |
daemonset_name | string | 要匹配的 Kubernetes DaemonSets 的正则表达式。 | "" | 否 |
owner_name | string | 要匹配的运行 Pod 的 Kubernetes 所有者的正则表达式。 | "" | 否 |
pod_labels | map(string) | 标签的键值对,键与 Kubernetes Pods 匹配,值作为正则表达式提供。 | {} | 否 |
metrics 块
此块配置 Beyla 收集哪些指标。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
features | list(string) | 要为指标启用的功能列表。 | ["application"] | 否 |
instrumentations | list(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 的网络指标选项。
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
enabled | bool | 启用网络指标收集。 | false | 否 |
output 块
output
块配置一组组件,以将生成的遥测数据转发到这些组件。
支持以下参数
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
traces | list(otelcol.Consumer) | 要发送跟踪的消费者列表。 | [] | 否 |
必须指定 output
块,但其所有参数都是可选的。默认情况下,遥测数据将被丢弃。配置 traces
参数以将跟踪数据发送到其他组件。
导出字段
以下字段被导出,可以被其他组件引用。
名称 | 类型 | 描述 |
---|---|---|
targets | list(map(string)) | 可以使用这些目标使用 eBPF 收集已检测服务的指标。 |
例如,targets
可以传递到 discovery.relabel
组件以重写目标的标签集,也可以传递到收集公开指标的 prometheus.scrape
组件。
导出的目标使用由 运行命令 指定的配置的 内存中流量 地址。
组件健康状况
仅当给出无效配置时,beyla.ebpf
才会报告为不健康。
调试信息
beyla.ebpf
不公开任何特定于组件的调试信息。
示例
指标
此示例使用 prometheus.scrape
组件 收集指定端口的 beyla.ebpf
的指标
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
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
具有可以被以下组件使用的导出
- 使用 目标 的组件
注意
连接某些组件可能没有意义,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。