配置 OBI 服务发现

配置 OBI 服务发现组件如何查找要检测的进程。

OTEL_EBPF_AUTO_TARGET_EXEOTEL_EBPF_OPEN_PORT 是环境变量,它们可以更轻松地配置 OBI 以检测单个服务或一组相关服务。

在某些场景下,OBI 会检测许多服务。例如,作为 Kubernetes DaemonSet 来检测节点上的所有服务。discovery YAML 部分允许您为 OBI 可以检测的服务指定更精细的选择标准。

YAML
环境变量
描述类型默认值
instrument为不同的服务指定不同的选择标准,并覆盖其报告的名称或命名空间。有关详细信息,请参阅 发现服务 部分。list of objects(未设置)
exclude_instrument指定排除服务进行检测的选择标准。适用于避免检测通常在可观察性环境中找到的服务。有关详细信息,请参阅 排除要进行检测的服务 部分。list of objects(未设置)
default_exclude_instrument禁用 OBI 本身(自检测)、OpenTelemetry Collector 和其他可观察性组件的检测。设置为 empty 以允许 OBI 检测自身和其他组件。有关详细信息,请参阅 默认排除要进行检测的服务 部分。list of objects路径:{*beyla,*alloy,*prometheus-config-reloader,*ebpf-instrument,*otelcol,*otelcol-contrib,*otelcol-contrib[!/]*} 以及某些 Kubernetes 系统命名空间
skip_go_specific_tracers
OTEL_EBPF_SKIP_GO_SPECIFIC_TRACERS
在 **eBPF** 追踪器检测要进行检测的可执行文件时,禁用对 Go 特定的检测。追踪器将回退到使用通用检测,这通常效率较低。有关详细信息,请参阅 跳过特定 Go 追踪器 部分。布尔值false
exclude_otel_instrumented_services
OTEL_EBPF_EXCLUDE_OTEL_INSTRUMENTED_SERVICES
禁用 OBI 对已使用 OpenTelemetry 进行检测的服务进行检测。有关详细信息,请参阅 排除已 OTel 检测的服务 部分。布尔值true
exclude_otel_instrumented_services_span_metrics
OTEL_EBPF_EXCLUDE_OTEL_INSTRUMENTED_SERVICES_SPAN_METRICS
禁用 OBI 对已使用 OpenTelemetry 进行检测的服务的 Span 指标/服务图指标生成。有关详细信息,请参阅 排除已 OTel 检测的服务 部分。布尔值false

发现服务

您可以为不同类型的服务覆盖服务名称、命名空间和其他配置。

YAML描述类型默认值
open_ports通过进程的开放端口(侦听端口)来选择要检测的进程。参阅 开放端口字符串(未设置)
exe_path通过进程的可执行文件名称路径来选择要检测的进程。参阅 可执行文件路径string (glob)(未设置)
containers_only选择在 OCI 容器中运行的进程进行检测。参阅 仅限容器布尔值false
k8s_namespace按 Kubernetes 命名空间过滤服务。参阅 K8s 命名空间string (glob)(未设置)
k8s_pod_name按 Kubernetes Pod 过滤服务。参阅 K8s Pod 名称string (glob)(未设置)
k8s_deployment_name按 Kubernetes Deployment 过滤服务。参阅 K8s Deployment 名称string (glob)(未设置)
k8s_replicaset_name按 Kubernetes ReplicaSet 过滤服务。参阅 K8s ReplicaSet 名称string (glob)(未设置)
k8s_statefulset_name按 Kubernetes StatefulSet 过滤服务。参阅 K8s StatefulSet 名称string (glob)(未设置)
k8s_daemonset_name按 Kubernetes DaemonSet 过滤服务。参阅 K8s DaemonSet 名称string (glob)(未设置)
k8s_owner_name按 Kubernetes Pod Owner(Deployment、ReplicaSet、DaemonSet 或 StatefulSet)过滤服务。参阅 K8s Owner 名称string (glob)(未设置)
k8s_pod_labels按 Kubernetes Pod 标签过滤服务。参阅 K8s Pod 标签map[string]string (glob)(未设置)
k8s_pod_annotations按 Kubernetes Pod 注解过滤服务。参阅 K8s Pod 注解map[string]string (glob)(未设置)

开放端口

通过进程的开放端口(侦听端口)来选择要检测的进程。此属性接受逗号分隔的端口列表,例如 80,以及端口范围,例如 8000-8999。如果可执行文件仅匹配列表中的一个端口,OBI 会认为它匹配。

例如,指定以下属性

discovery:
  instrument:
    - open_ports: 80,443,8000-8999

OBI 会选择任何开放端口 80、443 或 8000 到 8999 之间(含)任何端口的可执行文件。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

如果一个可执行文件开放了多个端口,您只需指定其中一个端口,OBI 就会检测到该可执行文件上的所有 HTTP/S 和 gRPC 请求。目前,您无法仅将检测限制在通过特定端口公开的方法上。

可执行文件路径

通过进程的可执行文件名称路径来选择要检测的进程。此属性接受一个 glob 模式,用于与完整可执行命令行进行匹配,包括可执行文件在文件系统上的位置目录。

OBI 会尝试检测可执行文件路径与此属性匹配的所有进程。例如,设置 exe_path: * 会让 OBI 尝试检测主机上的所有可执行文件。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

仅限容器

选择在 OCI 容器中运行的进程进行检测。为此检查,OBI 会检查进程的网络命名空间并将其与自身的网络命名空间进行匹配。如果 OBI 没有足够的权限执行网络命名空间检查,它将忽略此选项。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

K8s 命名空间

此选择器属性将检测限制在名称与提供的 glob 匹配的 Kubernetes 命名空间中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

K8s Pod 名称

此选择器属性将检测限制在名称与提供的 glob 匹配的 Kubernetes Pod 中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

K8s Deployment 名称

此选择器属性将检测限制在名称与提供的 glob 匹配的 Kubernetes Deployment 中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

K8s ReplicaSet 名称

此选择器属性将检测限制在名称与提供的 glob 匹配的 Kubernetes ReplicaSet 中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

K8s StatefulSet 名称

此选择器属性将检测限制在名称与提供的 glob 匹配的 Kubernetes StatefulSet 中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

K8s DaemonSet 名称

此选择器属性将检测限制在名称与提供的 glob 匹配的 Kubernetes DaemonSet 中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

K8s Owner 名称

此选择器属性将检测限制在由名称与提供的 glob 匹配的 DeploymentReplicaSetDaemonSetStatefulSet 拥有的 Pod 中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

K8s Pod 标签

此选择器属性将检测限制在标签与提供的 glob 值匹配的 Pod 中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

例如

discovery:
  instrument:
    - k8s_namespace: frontend
      k8s_pod_labels:
        instrument: obi

前面的示例会发现 frontend 命名空间中所有具有标签 instrument 且值与 glob obi 匹配的 Pod。

K8s Pod 注解

此选择器属性将检测限制在注解值与提供的 glob 匹配的 Pod 中运行的应用程序。

如果您在同一个 instrument 条目中指定了其他选择器,则进程必须匹配所有选择器属性。

例如

discovery:
  instrument:
    - k8s_namespace: backend
      k8s_pod_annotations:
        obi.instrument: 'true'

前面的示例会发现 backend 命名空间中所有具有注解 obi.instrument 且值与 glob true 匹配的 Pod。

排除要进行检测的服务

exclude_instrument 部分允许您指定排除服务进行检测的选择标准。它遵循与本文档 发现服务 部分相同的定义格式。

此选项可帮助您避免检测通常在可观察性环境中找到的服务。例如,可以使用此选项排除检测 Prometheus。

默认排除要进行检测的服务

default_exclude_instrument 部分禁用 OBI 本身(自检测)、OpenTelemetry Collector 和其他可观察性组件的检测。它还禁用各种 Kubernetes 系统命名空间的检测,以降低指标生成的总体成本。以下部分包含所有排除的组件

  • exe_path 排除的服务:*beyla, *alloy, *ebpf-instrument, *otelcol, *otelcol-contrib, *otelcol-contrib[!/]*
  • k8s_namespace 排除的服务:kube-system, kube-node-lease, local-path-storage, grafana-alloy, cert-manager, monitoring, gke-connect, gke-gmp-system, gke-managed-cim, gke-managed-filestorecsi, gke-managed-metrics-server, gke-managed-system, gke-system, gke-managed-volumepopulator, gatekeeper-system

更改此选项以允许 OBI 检测自身或其他一些已排除的组件。

注意:要启用此类自检测,您仍需要将其包含在 instrument 部分,或者这些组件需要包含在更广泛的包含标准中。

跳过特定 Go 追踪器

skip_go_specific_tracers 选项在 **eBPF** 追踪器检测要进行检测的可执行文件时,禁用对 Go 特定的检测。追踪器将回退到使用通用检测,这通常效率较低。

排除 OTel 检测的服务

exclude_otel_instrumented_services 选项禁用 OBI 对已使用 OpenTelemetry 进行检测的服务的检测。由于 OBI 通常被部署来监控 Kubernetes 集群中的所有服务,因此监控已检测的服务可能会导致重复的遥测数据,除非您仔细制定检测(或排除)标准。为避免不必要的配置开销,OBI 会监控 OpenTelemetry SDK 调用以发布指标和追踪,并自动关闭已发布自身遥测数据的服务的检测。如果您的应用程序生成的遥测数据与 OBI 生成的指标和追踪冲突,请关闭此选项。

覆盖服务名称和命名空间

如果您通过 OpenTelemetry 或 Prometheus 导出检测数据,OBI 会遵循 OpenTelemetry Operator 的服务名称约定,以提高与其他检测解决方案的互操作性。

OBI 按以下顺序使用以下标准自动设置服务名称和命名空间

  1. 通过被检测进程或容器的 OTEL_RESOURCE_ATTRIBUTESOTEL_SERVICE_NAME 环境变量设置的资源属性。
  2. 在 Kubernetes 中,通过以下 Pod 注解设置的资源属性
    • resource.opentelemetry.io/service.name
    • resource.opentelemetry.io/service.namespace
  3. 在 Kubernetes 中,通过以下 Pod 标签设置的资源属性
    • app.kubernetes.io/name 设置服务名称
    • app.kubernetes.io/part-of 设置服务命名空间
  4. 在 Kubernetes 中,根据 Pod Owner 的元数据计算资源属性,顺序如下(根据其可用性)
    • k8s.deployment.name
    • k8s.replicaset.name
    • k8s.statefulset.name
    • k8s.daemonset.name
    • k8s.cronjob.name
    • k8s.job.name
    • k8s.pod.name
    • k8s.container.name
  5. 被检测进程的可执行文件名称。

您可以通过配置覆盖前面第 3 点中的 Kubernetes 标签。

在 YAML 中

attributes:
  kubernetes:
    resource_labels:
      service.name:
        # gets service name from the first existing Pod label
        - override-svc-name
        - app.kubernetes.io/name
      service.namespace:
        # gets service namespace from the first existing Pod label
        - override-svc-ns
        - app.kubernetes.io/part-of

它们接受一个逗号分隔的注解和标签名称列表。


最后修改日期 2025 年 12 月 19 日:OBI: fix resource_labels documentation (#8680) (63f42428)