OVS数据库和流量分析Skill OVSDatabaseandFlowAnalysis

这个技能用于分析和诊断 Open vSwitch (OVS) 数据库和流量数据,帮助网络工程师、云平台管理员和 DevOps 团队进行故障排除、性能优化、配置管理和云原生网络监控。关键词包括:OVS、Open vSwitch、流量分析、数据库分析、网络故障排除、云原生、Kubernetes、sosreport、OpenFlow、数据路径健康。

Docker/K8s 0 次安装 0 次浏览 更新于 3/14/2026

名称: OVS 数据库和流量分析 描述: 分析来自 sosreport 的 Open vSwitch 数据

OVS 数据库和流量分析

这个技能提供对通过 sosreport 收集的 Open vSwitch (OVS) 数据的详细分析。它运行在四种模式:

  1. 默认模式:完全分析 - conf.db + 所有文本文件(需要 ovsdb-tool,如果没有可用则回退到文本文件)
  2. 数据库模式 (--db):仅数据库 - 分析 conf.db(需要 ovsdb-tool)
  3. 文本文件模式 (--flows-only):仅文本文件 - 不需要 ovsdb-tool
  4. 查询模式 (--query):运行自定义 OVSDB JSON 查询(需要 ovsdb-tool)

何时使用此技能

在以下情况下使用此技能:

  • 故障排除数据包丢弃 - 查找命中丢弃的流
  • 分析流性能 - 查看按数据包计数的顶部流
  • 从 sosreport 分析 OVS 配置
  • 故障排除网桥、端口或接口问题
  • 调查 DPDK 与内核空间数据路径
  • 检查隧道配置(VXLAN、Geneve、GRE)
  • 检查端口统计信息(丢弃、错误、流量)
  • 映射 Kubernetes pods 到 OVS 接口

先决条件

默认模式(完全分析):

  • 必须安装 ovsdb-tool(来自 openvswitch 包)
  • 如果未找到 ovsdb-tool,则回退到 --flows-only
  • Sosreport 包含 sos_commands/openvswitch/ 目录和 conf.db

数据库模式 (--db):

  • 必须安装 ovsdb-tool(来自 openvswitch 包)
    • 检查: which ovsdb-tool
    • Fedora/RHEL: sudo dnf install openvswitch
    • Ubuntu/Debian: sudo apt install openvswitch-common
  • Sosreport 包含 conf.db 文件

文本文件模式 (--flows-only):

  • 无需特殊工具 - 开箱即用!
  • Sosreport 包含 sos_commands/openvswitch/ 目录

查询模式 (--query):

  • 必须安装 ovsdb-tool
  • --flows-only 不兼容

Sosreport 中的文件位置

sosreport 收集:

sosreport-主机名-日期/
├── etc/openvswitch/conf.db              (OVS 数据库 - 用于 --db 模式)
├── var/lib/openvswitch/conf.db          (备用位置)
└── sos_commands/openvswitch/            (默认模式使用这些)
    ├── ovs-vsctl_-t_5_show              (拓扑)
    ├── ovs-vsctl_-t_5_list_bridge       (网桥详情)
    ├── ovs-vsctl_-t_5_list_interface    (接口详情)
    ├── ovs-vsctl_-t_5_list_Open_vSwitch (系统信息)
    ├── ovs-ofctl_dump-flows_<bridge>    (OpenFlow 条目)
    ├── ovs-ofctl_dump-ports_<bridge>    (端口统计)
    ├── ovs-appctl_coverage.show         (内部统计)
    ├── ovs-appctl_upcall.show           (数据路径健康状态)
    ├── ovs-appctl_tnl.ports.show_-v     (隧道端口)
    └── ...

分析脚本

分析脚本位于:

<插件根目录>/skills/ovs-db-analysis/scripts/analyze_ovs_db.py

实施步骤

步骤 1:定位分析脚本

SCRIPT_PATH=$(find ~ -name "analyze_ovs_db.py" -path "*/sosreport/skills/ovs-db-analysis/scripts/*" 2>/dev/null | head -1)

if [ -z "$SCRIPT_PATH" ]; then
    echo "错误: 未找到 analyze_ovs_db.py 脚本。"
    exit 1
fi

步骤 2:运行分析

# 默认: 完全分析 - conf.db + 文本文件(需要 ovsdb-tool)
python3 "$SCRIPT_PATH" /路径/到/sosreport-主机名-日期/

# 从存档分析
python3 "$SCRIPT_PATH" /路径/到/sosreport-主机名-日期.tar.xz

# 仅数据库模式(需要 ovsdb-tool)
python3 "$SCRIPT_PATH" /路径/到/sosreport/ --db

# 仅文本文件模式(不需要 ovsdb-tool)
python3 "$SCRIPT_PATH" /路径/到/sosreport/ --flows-only

步骤 3:自定义查询(可选,需要 --db)

对于特定调查,使用原始 OVSDB 查询:

# 查询所有网桥
python3 "$SCRIPT_PATH" /路径/到/sosreport/ --query '["Open_vSwitch", {"op":"select", "table":"Bridge", "where":[], "columns":["name","datapath_type","fail_mode"]}]'

# 查询 VXLAN 接口
python3 "$SCRIPT_PATH" /路径/到/sosreport/ --query '["Open_vSwitch", {"op":"select", "table":"Interface", "where":[["type","==","vxlan"]], "columns":["name","options"]}]'

# 查询带有错误的接口
python3 "$SCRIPT_PATH" /路径/到/sosreport/ --query '["Open_vSwitch", {"op":"select", "table":"Interface", "where":[], "columns":["name","error"]}]'

分析输出

默认模式分析:

分析内容 源文件 描述
系统信息 ovs-vsctl_-t_5_list_Open_vSwitch OVS/DPDK 版本、系统类型、外部 ID
拓扑结构 ovs-vsctl_-t_5_show 网桥概览,按类型分组的端口
网桥详情 ovs-vsctl_-t_5_list_bridge 数据路径类型、故障模式、CT 区域
接口信息 ovs-vsctl_-t_5_list_interface 按类型,pod 接口与映射
OpenFlow ovs-ofctl_dump-flows_* 流计数、丢弃、顶部流
端口统计 ovs-ofctl_dump-ports_* RX/TX 丢弃和错误
隧道信息 ovs-appctl_tnl.ports.show_-v 配置的隧道端口
数据路径健康 ovs-appctl_upcall.show 流表使用情况 vs 限制
OVS 统计 ovs-appctl_coverage.show 内部计数器(netlink、OVSDB 等)

OpenFlow 分析功能

功能 描述
流计数 每个网桥的总流数(总数、丢弃、有命中)
丢弃检测 具有 actions=drop 且有数据包命中的流
顶部流 按 n_packets 排序的最活跃流
表分布 每个 OpenFlow 表的流计数
端口丢弃 每个端口的 RX/TX 丢弃计数器
端口错误 每个端口的 RX/TX 错误计数器
数据路径健康 流表使用情况 vs 限制(来自 upcall.show)
OVS 统计 内部统计信息(netlink、OpenFlow、OVSDB 事务)

OVN 内部表(忽略这些表中的丢弃)

分析 OVN 管理的网桥(br-int)中的丢弃流时,忽略表 44 和表 64-87 中的丢弃,因为这些是内部 OVN 机制,不是安全策略或真实的数据包丢弃。

⚠️ 注意: OVN 和 OVS 是复杂系统,表映射可能在版本之间更改。始终根据使用的特定 OVN 版本验证丢弃分析。如有疑问,请检查您的版本的 OVN 源代码。

名称 目的
44 CHK_LB_OUTPUT 环路防止 - 丢弃会回环的数据包(高流量,正常)
64 SAVE_INPORT 稍后保存入站端口
65 LOG_TO_PHY 逻辑到物理映射
66 MAC_BINDING MAC 绑定查找
67 MAC_LOOKUP MAC 地址表查找
68-69 CHK_LB_HAIRPIN 负载均衡器发夹检查
70 CT_SNAT_HAIRPIN 连接跟踪 SNAT 发夹
71-72 GET/LOOKUP_FDB FDB(转发数据库)查找
73-74 CHK_IN_PORT_SEC 入站端口安全
75 CHK_OUT_PORT_SEC 出站端口安全
76-77 ECMP_NH ECMP 下一跳处理
78 CHK_LB_AFFINITY 负载均衡器亲和性
79 MAC_CACHE_USE MAC 缓存未命中(高流量,正常)
80 CT_ZONE_LOOKUP 连接跟踪区域查找
81-83 CT_ORIG_*_LOAD 连接跟踪原始元组加载
84 FLOOD_REMOTE_CHASSIS 远程机箱洪泛
85 CT_STATE_SAVE 连接跟踪状态保存
86 CT_ORIG_PROTO_LOAD 连接跟踪协议加载
87 GET_REMOTE_FDB 远程 FDB 查找

用于故障排除的相关丢弃表:

  • 表 9:入站 ACL - 实际策略丢弃(查找 reg0=0x8000
  • 表 0:初始分类丢弃
  • 表 < 64:通常有意义的丢弃

常见分析场景

1. 故障排除数据包丢弃

# 快速分析(默认模式,无 ovsdb-tool)
python3 "$SCRIPT_PATH" /路径/到/sosreport/

查找:

  • 活跃丢弃流部分显示丢弃数据包的流
  • 端口统计显示有丢弃/错误的端口

2. 检查 DPDK 配置

# 默认模式从文本文件显示 DPDK 信息
python3 "$SCRIPT_PATH" /路径/到/sosreport/

# 或使用数据库模式进行自定义查询
python3 "$SCRIPT_PATH" /路径/到/sosreport/ --query '["Open_vSwitch", {"op":"select", "table":"Open_vSwitch", "where":[], "columns":["dpdk_initialized","other_config"]}]'

3. 调查 Pod 连接性

接口分析显示 pod 到 OVS 的映射:

  • 接口的 external_ids 包含 iface-id
  • 接口名称以 _h 结尾(veth 主机端)

4. 数据路径健康检查

upcall 统计显示:

数据路径流表健康状态
  当前流: 155 / 200,000 (0.1% 已用)
  平均值: 156,最大观察值: 215
  ✓ 流表健康

如果使用率 > 90%,流被过于积极地驱逐。

输出示例

================================================================================
OVS 分析 - sosreport-主机名-2024-01-15
================================================================================
模式: 文本文件分析(不需要 ovsdb-tool)

================================================================================
OVS 系统信息
================================================================================

  字段                     值
  ------------------------- --------------------------------------------------
  OVS 版本               "3.3.4-62.el9fdp"
  数据库版本                "8.5.0"
  系统类型               rhcos
  系统版本            "4.16"
  DPDK 初始化          false
  数据路径类型            [netdev, system]

  外部 ID:
    hostname: master2.example.com
    ovn-encap-ip: 10.32.110.5
    ovn-encap-type: geneve

================================================================================
OVS 拓扑结构
================================================================================

  系统 UUID: 7e9a3f70-86fa-4578-a849-4fd807a64a10
  总网桥: 2

  网桥: br-ex
    端口: 3
      内部: br-ex
      补丁: patch-br-ex-to-br-int
      系统: nm-bond

  网桥: br-int
    故障模式: secure
    数据路径类型: system
    端口: 12
      geneve: 9 个端口
      内部: ovn-k8s-mp0, br-int
      补丁: patch-br-int-to-br-ex

================================================================================
OPENFLOW 分析
================================================================================

  网桥: br-int
  ----------------------------------------------------------------------
  总流数: 2,017
  有命中的流: 318
  丢弃流: 150 (9 个活跃丢弃)

  ⚠️  活跃丢弃流 (9):
    table=40, priority=0, packets=8,105
    table=79, priority=100, packets=1,356
      匹配: ip,reg14=0x2,metadata=0x5,dl_src=00:62:0b:ea:b5:e0

--------------------------------------------------------------------------------
数据路径流表健康状态
--------------------------------------------------------------------------------

  当前流: 155 / 200,000 (0.1% 已用)
  平均值: 156,最大观察值: 215
  ✓ 流表健康

错误处理

错误 解决方案
未找到 ovsdb-tool 安装 openvswitch 包或使用默认模式(无 --db)
未找到 conf.db 使用默认模式(改为分析文本文件)
未找到 sos_commands/openvswitch 确保 sosreport 已收集 OVS 数据

参见