4. EOS命令行与API基础

在数据中心可观测性工程中,采集设备状态是构建遥测数据管道的第一步。Arista EOS 提供了四种主要的访问通道:CLI、eAPI、RESTCONF 和 gNMI。它们面向不同的使用场景,理解各自的协议特征、数据格式与适用边界,是设计采集方案的基础。本节围绕设备清单、接口计数器、硬件传感器与版本信息四类典型采集任务,说明如何通过这四种通道获取数据,并给出可执行的命令与请求示例。

四种访问通道的定位与差异

CLI 是最直接的交互方式,通过 SSH 登录后执行 show 命令,输出为人类可读的文本。它适合人工排查和一次性检查,但输出格式随 EOS 版本变化,解析成本高,不适合大规模自动化采集。eAPI 是 EOS 内置的 HTTP/HTTPS JSON-RPC 接口,将 show 命令封装为结构化 JSON 返回,支持批量命令和配置操作,是传统自动化脚本最常用的通道。RESTCONF 基于 YANG 模型,使用 HTTP 方法和 JSON/XML 编码,面向模型驱动的配置与状态读取,适合与支持 YANG 的编排系统集成。gNMI 是 gRPC 上的网络管理接口,支持订阅模式,可以持续推送状态变化,是流式遥测的核心通道。

EOS 四种访问通道与采集任务映射 采集任务 设备清单 show lldp neighbors 接口计数器 show interfaces counters 硬件传感器 show system environment 版本信息 show version 采集频率 清单/版本:低频 计数器/传感器:高频 CLI SSH / 文本输出 人工排查 一次性检查 解析成本高 不适合大规模 eAPI HTTP JSON-RPC 结构化 JSON 批量命令 脚本自动化 轮询采集 RESTCONF HTTP + YANG 模型驱动 JSON/XML 编排系统集成 配置+状态 gNMI gRPC 流式订阅 持续推送 遥测核心 低延迟 箭头表示该通道可覆盖的采集任务;实际选型需结合频率、规模与集成方式综合判断

CLI 采集:快速验证与人工排查

CLI 是验证设备状态最直接的方式。通过 SSH 登录 EOS 后,执行以下命令可以获取四类基础数据:

show version
show lldp neighbors
show interfaces counters
show system environment

其中 show version 返回型号、序列号、EOS 版本、启动时间等;show lldp neighbors 返回邻居设备、本地接口、远端接口和系统描述,可用于构建设备拓扑清单;show interfaces counters 返回每个接口的入/出字节数、单播/组播/广播包数、错误计数等;show system environment 返回温度、风扇转速、电源状态等硬件传感器数据。CLI 输出的文本格式在 EOS 版本间可能微调,因此自动化脚本应避免直接解析文本,而应优先使用结构化通道。

eAPI:结构化轮询采集的主力

eAPI 通过 HTTP POST 发送 JSON-RPC 请求,默认路径为 /command-api。启用方式为在配置模式下执行 management api http-commands 并 no shutdown。以下示例通过 curl 获取接口计数器:

curl -s -k -u admin:password \
  https://10.0.0.1/command-api \
  -d '{
    "jsonrpc": "2.0",
    "method": "runCmds",
    "params": {
      "version": 1,
      "cmds": ["show interfaces counters"],
      "format": "json"
    },
    "id": 1
  }'

返回的 JSON 中,result 数组包含每个命令的输出对象,接口计数器位于 interfaces 字段下,每个接口有 inBytes、outBytes、inErrors 等键。eAPI 支持一次请求执行多条命令,适合将设备清单、版本、计数器合并为一次采集,减少连接开销。需要注意的是,eAPI 的 format 参数应设为 json,否则返回文本,失去结构化优势。

RESTCONF:模型驱动的状态读取

RESTCONF 使用 HTTP GET 访问 YANG 模型路径。EOS 的 YANG 模型可通过 show management api restconf 查看状态。以读取接口状态为例:

curl -s -k -u admin:password \
  -H "Accept: application/yang-data+json" \
  https://10.0.0.1/restconf/data/openconfig-interfaces:interfaces

RESTCONF 的优势在于路径与模型绑定,返回结构稳定,适合与支持 OpenConfig 的编排平台对接。但 EOS 对 OpenConfig 模型的覆盖范围随版本变化,部分私有数据仍需通过 eAPI 或 CLI 获取。实际工程中,RESTCONF 常用于配置下发和标准化状态读取,而高频计数器采集仍以 eAPI 或 gNMI 为主。

gNMI:流式遥测的入口

gNMI 基于 gRPC,支持 Get、Set、Subscribe 三种操作。Subscribe 模式可以按指定采样间隔持续推送数据,是构建流式遥测管道的基础。以下为使用 gnmic 工具订阅接口计数器的示例:

gnmic -a 10.0.0.1:6030 --insecure \
  -u admin -p password \
  subscribe \
  --path "/interfaces/interface/state/counters" \
  --mode sample \
  --sample-interval 10s

该命令每 10 秒获取一次接口计数器并输出。gNMI 的路径基于 OpenConfig 模型,与 RESTCONF 共享模型体系,但传输效率更高,适合大规模、高频采集。EOS 需启用 management api gnmi 并配置 gRPC 端口(默认 6030)。

采集任务与通道选型建议

采集任务 推荐通道 采集频率 关键命令/路径
设备清单 eAPI / RESTCONF 低频(小时级) show lldp neighbors
接口计数器 gNMI / eAPI 高频(10s~60s) /interfaces/interface/state/counters
硬件传感器 eAPI / gNMI 中频(1~5min) show system environment
版本信息 eAPI / RESTCONF 低频(天级) show version
在自动化脚本中,建议将 eAPI 作为兜底通道:当 gNMI 订阅中断或 RESTCONF 模型路径不可用时,通过 eAPI 轮询获取相同数据,保证采集连续性。同时,所有通道的认证信息应通过环境变量或密钥管理服务注入,避免硬编码在脚本中。

采集结果验证与常见问题

采集完成后,需要验证数据完整性。对于接口计数器,应检查返回的接口数量是否与设备实际接口数一致,并确认 inBytes 与 outBytes 随时间递增。对于传感器数据,应检查温度值是否在设备规格范围内,风扇转速是否非零。若 eAPI 返回 error 字段,常见原因包括命令拼写错误、权限不足或 API 未启用。gNMI 订阅失败时,应检查 gRPC 端口是否可达、证书是否匹配、路径是否被设备支持。

通过本节四种通道的配合使用,可以完成从设备清单到高频计数器的完整采集任务。实际工程中,建议先以 CLI 验证命令输出,再用 eAPI 构建结构化采集脚本,最后在需要流式数据时引入 gNMI 订阅,形成分层、可扩展的采集体系。