OBI 网络指标配置选项
网络指标在 OBI 配置 YAML 文件的 network 属性下配置,或者通过一组以 OTEL_EBPF_NETWORK_ 为前缀的环境变量进行配置。
YAML 示例
network:
enable: true
cidrs:
- 10.10.0.0/24
- 10.0.0.0/8
- 10.30.0.0/16
attributes:
kubernetes:
enable: true
select:
obi_network_flow_bytes:
include:
- k8s.src.owner.name
- k8s.src.namespace
- k8s.dst.owner.name
- k8s.dst.namespace
- src.cidr
- dst.cidr
otel_metrics_export:
endpoint: https://:4318
除了 network YAML 部分之外,OBI 配置还需要一个用于导出网络指标的端点(在前例中是 otel_metrics_export,但它也接受一个 Prometheus 端点)。
网络指标配置属性
要启用网络指标,请在 otel_metrics_export)或 prometheus_export)配置属性中添加以下 features 之一:
network启用obi_network_flow_bytes指标:集群中两个端点之间的字节数network_inter_zone启用obi_network_inter_zone_bytes指标:云集群中不同可用区域之间的字节数
obi_network_inter_zone_bytes 规范目前处于实验阶段,仅适用于 Kubernetes 集群。该规范尚未最终确定,OBI 的未来版本可能会引入破坏性更改。| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
源代码 | OTEL_EBPF_NETWORK_SOURCE | 字符串 | socket_filter |
指定用于获取 OBI 报告的网络事件的 Linux 内核功能。
可用选项包括:tc 和 socket_filter。
当 tc 用作事件源时,OBI 使用 Linux Traffic Control 的入站和出站过滤器以直接操作模式捕获网络事件。此事件源模式假定没有其他 eBPF 程序以直接操作模式附加到同一个 Linux Traffic Control 接口。例如,Cilium Kubernetes CNI 使用相同的方法,因此如果您在 Kubernetes 集群中安装了 Cilium CNI,请将 OBI 配置为使用 socket_filter 模式捕获网络事件。
当 socket_filter 用作事件源时,OBI 安装 eBPF Linux 套接字过滤器来捕获网络事件。此模式不会与 Cilium CNI 或其他使用 Linux Traffic Control 出入站过滤器的 eBPF 程序冲突。
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
cidrs | OTEL_EBPF_NETWORK_CIDRS | []string | (empty) |
CIDRs 列表,将设置为 src.cidr 和 dst.cidr 属性,其中条目分别匹配 src.address 和 dst.address。
属性是源和目标 IP 地址的函数。如果 IP 地址不匹配任何此处定义的地址,则不会设置属性。如果 IP 地址匹配多个 CIDR 定义,则流将使用最窄的 CIDR 进行装饰。因此,您可以安全地添加一个 0.0.0.0/0 条目来对所有不匹配其他 CIDR 的流量进行分组。
如果通过环境变量设置此属性,则必须用逗号分隔每个条目,例如
OTEL_EBPF_NETWORK_CIDRS=10.0.0.0/8,192.168.0.0/16
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
agent_ip | OTEL_EBPF_NETWORK_AGENT_IP | 字符串 | (not set) |
允许覆盖每个指标上报告的 obi.ip 属性。如果未设置,OBI 会自动从指定的网络接口检测其自身的 IP 地址(请参阅下一个属性)。
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
agent_ip_iface | OTEL_EBPF_NETWORK_AGENT_IP_IFACE | 字符串 | external |
指定 OBI 应使用哪个接口来获取其自身的 IP 地址以设置 obi.ip 属性的值。接受的值为:external(默认)、local 或 name:<interface name>(例如 name:eth0)。
如果设置了 agent_ip 配置属性,则此属性无效。
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
agent_ip_type | OTEL_EBPF | 字符串 | any |
指定 OBI 应在每个流的 obi.ip 字段中报告的 IP 地址类型(IPv4 或 IPv6 或两者)。接受的值为:any(默认)、ipv4、ipv6。如果设置了 agent_ip 配置属性,则此属性无效。
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
interfaces | OTEL_EBPF_NETWORK_INTERFACES | []string | (empty) |
从中收集流的接口名称。如果为空,OBI 将获取系统中的所有接口,但不包括 excluded_interfaces(见下文)中列出的接口。如果条目被斜杠包围(例如 /br-/),则将其作为正则表达式匹配,否则将其作为区分大小写的字符串匹配。
如果通过环境变量设置此属性,则必须用逗号分隔每个条目,例如
OTEL_EBPF_NETWORK_INTERFACES=eth0,eth1,/^veth/
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
exclude_interfaces | OTEL_EBPF_NETWORK_EXCLUDE_INTERFACES | []string | lo |
要从网络流跟踪中排除的接口名称。默认值:lo(环回)。如果条目被斜杠包围(例如 /br-/),则将其作为正则表达式匹配,否则将其作为区分大小写的字符串匹配。
如果通过环境变量设置此属性,则必须用逗号分隔每个条目,例如
OTEL_BPF_NETWORK_EXCLUDE_INTERFACES=lo,/^veth/
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
protocols | OTEL_EBPF_NETWORK_PROTOCOLS | []string | (empty) |
如果设置,OBI 将丢弃报告的 Internet 协议不在此列表中的任何网络流。
接受的值在 Linux 的 标准 IP 协议枚举中定义,可以是:TCP、UDP、IP、ICMP、IGMP、IPIP、EGP、PUP、IDP、TP、DCCP、IPV6、RSVP、GRE、ESP、AH、MTP、BEETPH、ENCAP、PIM、COMP、L2TP、SCTP、UDPLITE、MPLS、ETHERNET、RAW
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
exclude_protocols | OTEL_EBPF_NETWORK_EXCLUDE_PROTOCOLS | []string | (empty) |
如果设置,OBI 将丢弃报告的 Internet 协议在此列表中的任何网络流。
如果已设置 protocols/OTEL_EBPF_NETWORK_PROTOCOLS 列表,则忽略此属性。
接受的值在 Linux 的 标准 IP 协议枚举中定义,可以是:TCP、UDP、IP、ICMP、IGMP、IPIP、EGP、PUP、IDP、TP、DCCP、IPV6、RSVP、GRE、ESP、AH、MTP、BEETPH、ENCAP、PIM、COMP、L2TP、SCTP、UDPLITE、MPLS、ETHERNET、RAW
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
cache_max_flows | OTEL_EBPF_NETWORK_CACHE_MAX_FLOWS | integer | 5000 |
指定在刷新以供后续导出之前,可以累积多少个流在计数缓存中。默认值为 5000。如果看到 OBI 日志中的“received message larger than max”错误,请减少此值。
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
cache_active_timeout | OTEL_EBPF_NETWORK_CACHE_ACTIVE_TIMEOUT | duration | 5s |
指定流在刷新以供后续导出之前在计数缓存中保留的最长时间。
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
direction | OTEL_EBPF_NETWORK_DIRECTION | 字符串 | both |
允许根据流在捕获它们的接口上的方向来选择要跟踪的流。接受的值为 ingress、egress 或 both(默认)。
在此上下文中,ingress 或 egress 与节点或集群外部的入站/出站流量无关,而是与网络接口相关。这意味着同一个网络数据包可以在虚拟网络设备中被视为“ingress”,在后备物理网络接口中被视为“egress”。
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
sampling | OTEL_EBPF_NETWORK_SAMPLING | integer | 0 (disabled) |
应采样并发送到目标收集器的数据包的速率。例如,如果设置为 100,平均而言,每 100 个数据包中有一个会发送到目标收集器。
| YAML | 环境变量 | 类型 | 默认值 |
|---|---|---|---|
print_flows | OTEL_EBPF_NETWORK_PRINT_FLOWS | 布尔值 | false |
如果设置为 true,OBI 会将每个网络流打印到标准输出。注意,这可能会产生大量输出。