OBI 网络指标快速入门
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.namek8s.src.namespacek8s.dst.owner.namek8s.dst.namespacek8s.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"