OBI 网络指标快速入门

利用 OpenTelemetry eBPF 遥测技术生成网络指标的快速入门指南

OBI 可以在任何环境中(物理主机、虚拟主机或容器)生成网络指标。推荐使用 Kubernetes 环境,因为 OBI 能够为每个指标添加源和目标 Kubernetes 实体的元数据。

本快速入门指南中的说明侧重于使用 kubectl 命令行实用工具直接部署到 Kubernetes。本教程介绍如何从头开始在 Kubernetes 中部署 OBI。要使用 Helm,请参阅 使用 Helm 在 Kubernetes 中部署 OBI 文档。

部署 OBI 并启用网络指标

要在 OBI 配置中启用网络指标,请设置以下选项

环境变量

export OTEL_EBPF_NETWORK_METRICS=true

网络指标要求使用 Kubernetes 元数据来装饰指标。要启用此功能,请在 OBI 配置中设置以下选项

环境变量

export OTEL_EBPF_KUBE_METADATA_ENABLE=true

有关更多配置选项,请参阅 OBI 配置选项

有关 OBI 配置的详细信息,请参阅 OBI 配置文档

简单设置

部署 OBI

以下 YAML 配置提供了一个用于网络指标的简单 OBI 部署

apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: obi
  name: obi
---
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: obi
  name: obi-config
data:
  obi-config.yml: |
    network:
      enable: true
    attributes:
      kubernetes:
        enable: true
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  namespace: obi
  name: obi
spec:
  selector:
    matchLabels:
      instrumentation: obi
  template:
    metadata:
      labels:
        instrumentation: obi
    spec:
      serviceAccountName: obi
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
        - name: obi-config
          configMap:
            name: obi-config
        - name: obi
          image: otel/ebpf-instrument:main
          securityContext:
            privileged: true
          volumeMounts:
            - mountPath: /config
              name: obi-config
          env:
            - name: OTEL_EBPF_CONFIG_PATH
              value: '/config/obi-config.yml'

关于此配置的一些说明

  • 容器镜像使用最新的开发中 otel/ebpf-instrument:main 镜像。
  • OBI 需要作为 DaemonSet 运行,因为它只需要每个节点一个 OBI 实例
  • 为了监听主机上的网络数据包,OBI 需要 hostNetwork: true 权限

验证网络指标生成

如果一切按预期工作,您的 OBI 实例应该能够捕获和处理网络流。要进行测试,请检查 OBI DaemonSet 的日志,查看一些正在打印的调试信息

kubectl logs daemonset/obi -n obi | head

输出应类似如下

network_flow: obi.ip=172.18.0.2 iface= direction=255 src.address=10.244.0.4 dst.address=10.96.0.1

将指标导出到 OpenTelemetry 端点

确认网络指标正在收集后,配置 OBI 将指标以 OpenTelemetry 格式导出到收集器端点。

请查看 数据导出文档 以配置 OpenTelemetry 导出器。

允许的属性

默认情况下,OBI 在 obi.network.flow.bytes 指标中包含以下 属性

  • k8s.src.owner.name
  • k8s.src.namespace
  • k8s.dst.owner.name
  • k8s.dst.namespace
  • k8s.cluster.name

OBI 仅包含一部分可用属性,以避免导致基数爆炸。

例如

network:
  allowed_attributes:
    - k8s.src.owner.name
    - k8s.src.owner.type
    - k8s.dst.owner.name
    - k8s.dst.owner.type

等效的 Prometheus 指标将是

obi.network.flow.bytes:
  k8s_src_owner_name="frontend"
  k8s_src_owner_type="deployment"
  k8s_dst_owner_name="backend"
  k8s_dst_owner_type="deployment"

前面的示例将根据源和目标 Kubernetes 的所有者名称和类型聚合 obi.network.flow.bytes 值,而不是单独的 Pod 名称。

CIDR 配置

您可以配置 OBI 以按 CIDR 范围分解指标。这对于跟踪到特定网络范围的流量非常有用,例如云提供商 IP 范围,或内部/外部流量。

network 中的 cidrs YAML 子节(或 OTEL_EBPF_NETWORK_CIDRS 环境变量)接受 CIDR 范围列表及其对应的名称。

例如,要通过预定义网络跟踪指标

network:
  cidrs:
    - cidr: 10.0.0.0/8
      name: 'cluster-internal'
    - cidr: 192.168.0.0/16
      name: 'private'
    - cidr: 172.16.0.0/12
      name: 'container-internal'

那么,等效的 Prometheus 指标将是

obi_network_flow_bytes:
  src_cidr="cluster-internal"
  dst_cidr="private"