3. 设备纳管与EOS集成

CloudVision(CV)对Arista EOS设备的价值,建立在“设备被正确纳管、状态被持续同步”这一前提之上。纳管不是把设备IP填进CV就结束,而是要让CV同时掌握三类信息:设备的身份与配置(由eAPI/配置会话提供)、设备的实时运行状态(由TerminAttr推送的流式Telemetry提供)、以及设备的基础可用性与告警(由SNMP补充采集)。本节围绕这三条通道,说明如何把一台EOS交换机从出厂状态接入CV,并验证状态同步是否真正完成。

一、纳管的三条数据通道与各自职责

理解纳管,先要分清三条通道的分工,避免把“能ping通”误认为“已纳管”。

  • ZTP(Zero Touch Provisioning):解决设备首次上电时的“引导”问题。设备通过DHCP获取管理地址与引导脚本位置,自动下载并执行启动脚本,完成主机名、管理口、CV目标地址、TerminAttr安装等初始配置。
  • eAPI:CV与EOS之间的配置与命令通道。CV通过HTTPS调用eAPI,读取running-config、下发配置、执行show命令。它决定了CV能否“改设备”和“读配置”。
  • TerminAttr:运行在EOS上的代理进程,负责把设备状态以流式Telemetry方式主动推送给CV。它决定了CV能否“实时看到设备状态”,是流式Telemetry的核心。
  • SNMP:补充采集通道。用于采集TerminAttr未覆盖的MIB对象、接口计数器、以及部分第三方监控系统对接场景。

三条通道中,eAPI偏“拉”、TerminAttr偏“推”、SNMP偏“补充”。只有三者都正常,CV上的设备才会呈现为绿色“Active”状态,且各项指标持续刷新。

EOS设备接入CloudVision的三通道数据流 Arista EOS 交换机 示例:DCS-7050X3 ZTP 引导脚本 flash:ztp-boot.cfg eAPI (HTTPS) management api http-commands TerminAttr 代理 daemon TerminAttr SNMP Agent snmp-server community CloudVision 集群 CVP / CVaaS 配置管理 Configlet / Change Control 状态数据库 Telemetry 时序存储 告警与事件 Alert / Event 设备清单 Inventory / Active 状态 ① 引导注册 ② 配置下发 / 读取 ③ 流式 Telemetry 推送 ④ SNMP 轮询补充 纳管判定:eAPI 可达 + TerminAttr 已连接 + Telemetry 有数据 + SNMP 可读 → CV 显示 Active 任一通道异常,设备可能显示 Inactive / Provisioned,需按通道逐一排查

二、ZTP:让设备第一次上电就“认识”CV

ZTP的前提是DHCP服务器已配置好Option 66/67或Option 67指向引导脚本。设备上电后,管理口发起DHCP请求,获得管理IP、网关、TFTP/HTTP服务器地址。随后设备下载启动脚本并执行。一个典型的ZTP脚本(示例)如下:

! ztp-boot.cfg 示例
hostname leaf-01
interface Management1
   ip address 10.10.10.21/24
   no shutdown
ip route 0.0.0.0/0 10.10.10.1
!
username cvp privilege 15 secret 0 Cvp@2024
!
management api http-commands
   protocol https
   no shutdown
!
daemon TerminAttr
   exec /usr/bin/TerminAttr -cvaddr=10.10.10.100:9910 \
        -cvauth=token,/tmp/token -cvvrf=Management1 \
        -smashexcludes=ale,flexCounter,hardware,kni,pulse,strata \
        -ingestexclude=/Sysdb/SyslogConfig \
        -taillogs
   no shutdown
!
snmp-server community cvpublic ro
snmp-server host 10.10.10.100 version 2c cvpublic
!
copy running-config startup-config

脚本执行完成后,设备已具备管理地址、eAPI、TerminAttr和SNMP四项基础能力。此时CV的ZTP服务会收到设备注册请求,设备进入“Provisioned”状态,等待CV下发正式配置。

三、eAPI:配置与命令通道的验证

eAPI是CV读写设备配置的通道。验证eAPI是否可用,最直接的方式是在CV服务器或管理终端上执行一次HTTPS调用:

curl -k https://10.10.10.21/command-api \
  -u cvp:Cvp@2024 \
  -d '{"jsonrpc":"2.0","method":"runCmds","params":{"version":1,"cmds":["show version"],"format":"json"},"id":1}'

若返回JSON中包含modelName、version、serialNumber等字段,说明eAPI通道正常。CV在纳管设备时会用类似调用读取running-config,并与CV上的配置基线做比对。若eAPI不可达,CV会显示设备“Inactive”,且无法下发Configlet。

四、TerminAttr与流式Telemetry

TerminAttr是流式Telemetry的核心。它通过gRPC与CV的Telemetry服务建立长连接,按订阅路径持续推送状态。默认情况下,TerminAttr会推送接口计数器、CPU/内存、BGP邻居、LLDP邻居、硬件传感器等。若需要更细粒度,可在CV上配置自定义订阅路径,例如:

! 在CV Telemetry订阅中增加
/Sysdb/interface/Counters/InOctets
/Sysdb/interface/Counters/OutOctets
/Sysdb/Bgp/NeighborStatus

验证TerminAttr是否正常,可在设备上执行:

show daemon TerminAttr
show terminattr status

输出中应看到“Connected to 10.10.10.100:9910”以及已订阅的路径列表。若显示“Disconnected”,需检查管理VRF路由、CV地址端口9910是否可达、token是否有效。

五、SNMP补充采集

SNMP用于采集TerminAttr未覆盖的MIB对象,例如部分接口错误计数、电源风扇状态、以及第三方监控系统对接。配置SNMP后,可在CV上添加SNMP采集任务,指定OID列表和轮询周期(示例:60秒)。验证方式:

show snmp
show snmp host
snmpwalk -v2c -c cvpublic 10.10.10.21 1.3.6.1.2.1.1.3

若snmpwalk能返回sysUpTime,说明SNMP通道正常。SNMP采集的数据会与Telemetry数据在CV上做关联展示,但需注意两者时间戳可能不同步,排查时以Telemetry为主、SNMP为辅。

六、状态同步验证与常见异常判断

纳管完成后,应在CV上逐项验证。以下是一份可直接使用的验证清单(示例):

检查项验证方法正常表现异常处理
设备状态CV Inventory 查看Active(绿色)Inactive 查eAPI;Provisioned 查ZTP
eAPIcurl 调用 show version返回JSON检查 management api http-commands 是否 no shutdown
TerminAttrshow daemon TerminAttrConnected检查9910端口、token、管理VRF路由
Telemetry数据CV Telemetry 查看接口计数器数值持续刷新检查订阅路径、smashexcludes
SNMPsnmpwalk sysUpTime返回数值检查community、ACL、host配置
配置同步CV Config 比对 running-config无差异或仅预期差异检查Configlet、Change Control
排障顺序建议:先确认管理面可达(ping、SSH),再查eAPI,再查TerminAttr,最后查SNMP。因为eAPI不通时,CV无法读取设备信息,后续Telemetry和SNMP的展示也会受影响。若设备显示“Provisioned”但一直不转“Active”,通常是TerminAttr未连接或token失效。
注意:TerminAttr的token有有效期。若使用token认证,需在CV上定期轮换并更新设备配置,否则设备会在token过期后断开Telemetry连接,表现为“数据停止刷新但设备仍显示Active”的假象。建议同时配置证书认证作为长期方案。