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 上的网络管理接口,支持订阅模式,可以持续推送状态变化,是流式遥测的核心通道。
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 |
采集结果验证与常见问题
采集完成后,需要验证数据完整性。对于接口计数器,应检查返回的接口数量是否与设备实际接口数一致,并确认 inBytes 与 outBytes 随时间递增。对于传感器数据,应检查温度值是否在设备规格范围内,风扇转速是否非零。若 eAPI 返回 error 字段,常见原因包括命令拼写错误、权限不足或 API 未启用。gNMI 订阅失败时,应检查 gRPC 端口是否可达、证书是否匹配、路径是否被设备支持。
通过本节四种通道的配合使用,可以完成从设备清单到高频计数器的完整采集任务。实际工程中,建议先以 CLI 验证命令输出,再用 eAPI 构建结构化采集脚本,最后在需要流式数据时引入 gNMI 订阅,形成分层、可扩展的采集体系。