简介
本文档介绍如何正确阅读和理解NSO NED跟踪的各个阶段。
背景
Cisco® Crosswork Network Service Orchestrator(NSO)可以生成NSO与NSO的网络元素驱动程序(NED)管理的设备之间的详细通信轨迹。 对于基于Java的NED,这些包含跟踪文件是根据共享框架构建的。本文档可帮助您了解此共享框架以及这些日志中的详细信息。
先决条件
使用的组件
- NSO 6.4
- NED cisco-iosxr-cli
- NED cisco-ios-cli
- NED cisco-nx-cli
- NED ZTE-zxros-cli
- NED ALU-sr-cli
- NED juniper-junos_nc-gen
免责声明
本文档假定您使用的是思科开发的Java NED。其中包括CLI、通用和3PY NED。本文档中介绍的阶段和框架适用于Netconf NED,但为Netconf NED生成的跟踪日志并不以本文档中所示的方式标示它们。
尽管本文档中描述的阶段在所有Java NED之间共享,但作为该阶段一部分运行的特定操作因各个NED的个别设备需求而异。
数据类型
NED跟踪文件中的数据可以按3种不同类别查看。
核心NSO和NED之间的通信
NSO指示NED开始特定阶段。NSO中的每个操作都会产生相同的阶段序列,但每个NED对网络设备运行唯一的指令。NED跟踪文件不会记录NSO和NED之间传输的确切数据,但会记录启动阶段的指令,以及指示阶段已完成的NED响应。以>>开头的行表示开始阶段的说明。以<<开头的行表示NED通知NSO阶段已完成。
>> 20-Mar-2025::23:23:17.277 user: admin/56 thandle 86091 hostname ncs device xr-netsim0 trace-id=1ee09d76-4415-4bb8-bd39-05f99072bd54 CLI CONNECT to xr-netsim0-127.0.0.1:10025 as admin (Trace=raw)<< CONNECTED
<< 20-Mar-2025::23:23:17.623 user: admin/56 thandle 86091 hostname ncs device xr-netsim0 trace-id=1ee09d76-4415-4bb8-bd39-05f99072bd54 CONNECTED 0
>> 20-Mar-2025::23:24:41.703 user: admin/56 thandle 86213 hostname ncs device xr-netsim0 trace-id=1ee09d76-4415-4bb8-bd39-05f99072bd54 SHOW 0:
<< 20-Mar-2025::23:24:41.879 user: admin/56 thandle 86213 hostname ncs device xr-netsim0 trace-id=1ee09d76-4415-4bb8-bd39-05f99072bd54 SHOW
NED与南向设备之间的通信
在每个阶段中,NED会对网络设备运行命令,以实现每个阶段的目标。从NED到设备的通信被标记为*** output
,从NED从设备接收的通信被标记为*** input
的。
*** output 20-Mar-2025::13:08:31.955 user: admin/316551 thandle 18978916 hostname ncs device xr-netsim0 trace-id=- ***
show running-config
*** input 20-Mar-2025::13:08:31.987 user: admin/316551 thandle 18978916 hostname ncs device xr-netsim0 trace-id=- ***
show running-config
Thu Jan 5 13:08:37.274 BRT
Building configuration...
!! IOS XR Configuration 7.2.1
...
在CLI NED中,输入包含设备CLI上显示的所有信息,包括NSO发送的命令。
NED本身的内部日志记录
NED记录一定数量的信息,但这些信息不会中继到设备或NSO。其中包括终端设置、数据处理和NSO数据库(CDB)中的预期更改。
此类信息通常以开头--
,但并不适用于此类型的所有信息。
*** output 20-Mar-2025::13:08:31.955 user: admin/316551 thandle 18978916 hostname ncs device xr-netsim0 trace-id=- ***
-- BEGIN SHOW
-- [20-Mar-2025::13:08:31.956] progress: show: reading config...
-- Reading running config...
show running-config
按工序排序
本部分介绍常见操作的列表,并记录每项操作的NSO启动阶段的预期顺序。有关每个阶段的更多详细信息,请参阅本文档的“阶段”部分。
注意:IS_ALIVE、SET_TIMEOUT和CLOSE阶段从每个序列中省略,因为它们几乎没有故障排除值
连接
>> CLI CONNECT
<< CONNECTED
或者
>> GENERIC CONNECT
<< CONNECTED
尽管在功能上,CLI和通用连接阶段几乎相同,但CLI和通用类型NED使用不同的CONNECT阶段。
检查同步
>> CLI CONNECT
<< CONNECTED
>> GET_TRANS_ID
<< TRANS_ID
Sync-From
>> CLI CONNECT
<< CONNECTED
>> SHOW
<< SHOW
>> GET_TRANS_ID
<< TRANS_ID
或者
>> CLI CONNECT
<< CONNECTED
>> SHOW
<< SHOW
<< PROVISIONAL TRANS_ID
某些NED已优化为使用PROVISIONAL TRANS_ID
而不是GET_TRANS_ID
使用。
Compare-Config
>> CLI CONNECT
<< CONNECTED
>> SHOW
<< SHOW
compare-config操作与sync-from操作非常相似,但它不会更新CDB。当compare-config检测到配置差异时,它不会调用GET_TRANS_ID来更新校验和。当没有配置差异时,它会调用GET_TRANS_ID并更新校验和。
提交
>> CLI CONNECT
<< CONNECTED
>> INITIALIZE
<< INITIALIZED
>> PREPARE
<< PREPARE OK
>> COMMIT
<< COMMIT OK
>> PERSIST
<< PERSIST OK
>> GET_TRANS_ID
<< TRANS_ID
确认试运行和确认无网络
这些操作不会涉及NED逻辑,也不会导致在NED跟踪文件中生成任何日志。
提交本地干运行格式外部化
此操作不会向网络设备发送任何数据,但会使用NED逻辑。
>> CLI CONNECT
<< CONNECTED
>> PREPARE DRY
<< PREPARE DRY
提交不覆盖
>> CLI CONNECT
<< CONNECTED
>> INITIALIZE
<< INITIALIZED
>> SHOW_PARTIAL
<< SHOW
>> PREPARE
<< PREPARE OK
>> COMMIT
<< COMMIT OK
>> PERSIST
<< PERSIST OK
>> GET_TRANS_ID
<< TRANS_ID
这一顺序具有误导性。它声称包括INITIALIZE阶段,但NED在此阶段不会触发任何命令并有效地跳过它。这是因为无覆盖标志不检查校验和,而是使用SHOW_PARTIAL检查配置。
提交时出错
>> CLI CONNECT
<< CONNECTED
>> INITIALIZE
<< INITIALIZED
>> PREPARE
>> CLOSE
<< CLOSED
>> CLI CONNECT
<< CONNECTED
>> SHOW_PARTIAL
<< SHOW
>> ABORT
<< ABORT OK
>> GET_TRANS_ID
<< TRANS_ID
提交过程中出现问题时,NSO会终止连接、重新连接并尝试还原系统。NSO使用SHOW_PARTIAL检查设备的配置,并在ABORT阶段开始提交之前发送一系列命令将当前配置恢复到配置。具有候选配置的设备有备用方法来恢复哪个NSO可以利用的,具体取决于错误发生的时间。
实时状态
>> CLI CONNECT
<< CONNECTED
>> COMMAND
<< COMMAND
阶段
所有基于Java的NED使用相同的阶段,但每个NED都根据它处理的特定设备调整该阶段的精确执行。
CLI连接、通用连接和重新连接
在CONNECT阶段,NED会打印有关自身的信息,建立连接,禁用分页(对于CLI NED),并收集设备信息。其中包括NSO和NED版本、NED设置、SSH算法以及设备型号和版本。它不会记录密码交换。
当遇到NSO无法连接到设备时,此阶段的任何部分都可能负责。可能是NSO能够建立SSH会话,但无法检索设备型号和版本。
NED在操作完成后与设备保持会话数秒钟。如果在该时间范围内需要对同一设备执行其他操作,则NED将记录RECONNECT阶段(而不是CLI/GENERIC CONNECT)并重新使用该信息。
GET_TRANS_ID
GET_TRANS_ID阶段收集信息以计算校验和。可以验证此校验和,以确定设备在提交或检查同步操作期间是否不同步,或者可以存储它以供将来检查。Cisco为每个设备选择最轻的选项。Cisco-ios-cli NED收集完整的设备配置以生成校验和。cisco-iosxr NED使用提交列表并验证自上次同步以来是否更改了commit-id。
NED会打印在GET_TRANS_ID阶段结束时计算的校验和。
>> 15-Mar-2025::10:29:41.410 user: admin/205 thandle 1559 hostname ncs device alu0 GET_TRANS_ID
*** output 15-Mar-2025::10:29:41.411 user: admin/205 thandle 1559 hostname ncs device alu0 ***
-- get config method: cli dump
admin display-config
*** input 15-Mar-2025::10:29:41.415 user: admin/205 thandle 1559 hostname ncs device alu0 ***
admin display-config
...
<< 15-Mar-2025::10:29:42.045 user: admin/205 thandle 1559 hostname ncs device alu0 TRANS_ID 8f42fe893c448f47c155710bb909800b
GET_TRANS_ID在check-sync、sync-from结束时、提交结束时或比较配置结束时(如果未检测到差异)调用。只有在check-sync期间,校验和不作为GET_TRANS_ID的一部分进行更新。提交操作开始时,NSO还会验证校验和,但使用INITIALIZE而不是GET_TRANS_ID。
显示
在SHOW阶段,NED会收集设备上的当前配置并对其进行分析,以便可以更新该配置或将其与CDB进行比较。SHOW阶段可包含一个或多个用于收集相关数据的命令。某些NED会针对配置的不同部分提示多个SHOW阶段。
<< 15-Mar-2025::14:17:07.190 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c CONNECTED 0
>> 15-Mar-2025::14:17:07.210 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW 0:
<< 15-Mar-2025::14:17:07.211 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW
>> 15-Mar-2025::14:17:07.211 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW 0:
<< 15-Mar-2025::14:17:07.212 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW
>> 15-Mar-2025::14:17:07.212 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW 0:
<< 15-Mar-2025::14:17:07.212 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW
>> 15-Mar-2025::14:17:07.213 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW 0:
<< 15-Mar-2025::14:17:07.213 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW
>> 15-Mar-2025::14:17:07.214 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW 0: <'vlan-configuration'>
<< 15-Mar-2025::14:17:07.214 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW
>> 15-Mar-2025::14:17:07.214 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW 0: <'switchvlan-configuration'>
<< 15-Mar-2025::14:17:07.215 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW
>> 15-Mar-2025::14:17:07.215 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW 0:
<< 15-Mar-2025::14:17:08.672 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c SHOW
<< 15-Mar-2025::14:17:08.672 user: admin/17279 thandle 7896374 hostname ncs device zte0 trace-id=438b8c PROVISIONAL TRANS_ID 8bb56df1e125549b62f96e8007866
收集数据后,NED会进行解析并为NSO做好准备。在CLI NED中,此过程由turbo-parser标记。任何数据NSO无法理解且无法映射到当前yang模型都将记录为跳过的行。
-- turbo-mode parsing (setvalues) :: performance numbers :
-- --------------------------------------------------------------------------------
-- number of lines parsed : 469
-- number of lines skipped : 2
-- time to parse config (ms) : 20
-- time to transfer xml to nso (ms) : 531
-- --------------------------------------------------------------------------------
-- skipped 2 lines in context '/' :
-- (line 16) : 'platform sslvpn use-pd'
-- (line 74) : 'pae'
-- --------------------------------------------------------------------------------
-- [15-Mar-2025::17:00:07.906] progress: show: populating cdb ok [531 ms]
-- transformed >= sorted 8 'neighbor ' lines for hash checksum
-- show trans_id = 12b6f28a48520ca4b5c6ebdfe3d333ee
-- done show [5055 ms]
<< 15-Mar-2025::17:00:07.912 user: nsoadmin/23219 thandle 3068964 hostname ncs device ios0 SHOW
临时TRANS_ID
临时TRANS_ID是在某些NED中实施的优化,用于在同步源操作结束时替换GET_TRANS_ID。如果没有这种优化NED,收集设备的完整配置以计算校验和所需的优化NED会在同步源期间收集两次此数据。在SHOW阶段和GET_TRANS_ID阶段各执行一次。在这些情况下,临时TRANS_ID替换GET_TRANS_ID以重复使用SHOW操作中的数据。
cisco-iosxr-cli NED中存在此优化的特殊实施。此NED不需要完整配置,但配置可能很大,以至于GET_TRANS_ID启动时SSH会话超时所需的解析时间足够长。为避免这种情况,NED将收集必要信息作为SHOW的一部分,并使用临时TRANS_ID。
初始化
INITIALIZE阶段类似于GET_TRANS_ID。它收集相同的数据并计算校验和,但仅在提交操作开始时用于验证设备是否同步。如果发现设备不同步,INITIALIZE阶段后跟一个UNINITIALIZE阶段,并向NSO返回一个错误。INITIALIZE从不更新校验和。
注意:Commit no-overwrite确实具有INITIALIZE阶段,但由于不同步不相关,因此在该阶段中不会运行任何命令。
准备
PREPARE阶段是提交操作的最重要阶段。在准备阶段,NED会将NSO CDB中的预期更改转换为设备可以理解的命令。然后,它会将这些命令发送到设备,包括任何用于导航UI的命令,例如进入配置模式。
对于没有候选配置的设备,发送命令会立即影响网络的运行配置和运行。
提交
在COMMIT阶段,NED将配置应用到设备。对于没有候选配置的设备(例如cisco-ios-cli NED管理的设备),COMMIT阶段为空。如果设备具有确认确认的功能,NSO会在此阶段使用这些功能。
>> 8-Mar-2025::14:06:54.238 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a COMMIT 1: (Timeout 30)
*** output 8-Mar-2025::14:06:54.239 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a ***
-- BEGIN COMMIT
-- [08-Mar-2025::14:06:54.239] progress: commit: committing config...
-- Committing (confirmed) [num-commit 0 0a delayed=0]
commit confirmed 30 show-error
*** input 8-Mar-2025::14:06:54.268 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a ***
commit confirmed 30 show-error
Wed Mar 8 14:06:54.354 BRT
RP/0/RP0/CPU0:RNCOBSA0101(config)#
*** output 8-Mar-2025::14:06:58.377 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a ***
commit show-error
*** input 8-Mar-2025::14:06:58.404 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a ***
commit show-error
Wed Mar 8 14:06:58.493 BRT
% Confirming commit for trial session.
RP/0/RP0/CPU0:RNCOBSA0101(config)#
*** output 8-Mar-2025::14:06:58.734 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a ***
end
*** input 8-Mar-2025::14:06:58.763 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a ***
end
RP/0/RP0/CPU0:RNCOBSA0101#
*** output 8-Mar-2025::14:06:58.832 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a ***
-- [08-Mar-2025::14:06:58.832] progress: commit: committing config ok [4593 ms]
-- DONE COMMIT [4594 ms]
<< 8-Mar-2025::14:06:58.832 user: admin/397910 thandle 18935883 hostname ncs device xr0 trace-id=c9c7a91b-dfd2-45bd-bbe4-71a0ddb1039a COMMIT OK
持续
某些设备需要其他说明才能确保即使在设备重新启动时也能保持配置。这些命令在PERSIST阶段发送。
准备干燥
PREPARE DRY阶段是操作所独有的commit dry-run outformat native
阶段。与PREPARE阶段类似,它将NSO意图转换为设备命令,但不将这些命令发送到设备。
SHOW_PARTIAL
SHOW_PARTIAL阶段可以由maapi指令调用,也可以在和期间使commit no-overwite
用rollback during commit error
。
此阶段与SHOW阶段类似,因为它从设备收集配置数据并对其进行分析。它收集与当前提交操作相关的一组更具体的数据,而不是整个配置。并非所有设备都支持收集较小的数据集。
ABORT
ABORT阶段类似于PREPARE阶段,但专门用于回滚恢复。NSO发送命令,将设备配置恢复到提交前的状态。
恢复
REVERT阶段用于提交遇到错误,但NSO可以告诉设备恢复到之前的配置的情况。在这种情况下,不需要SHOW_PARTIAL和ABORT阶段。
命令
COMMAND阶段对于实时状态操作是唯一的。在命令阶段,NSO将指令传递到典型提交操作范围之外的设备。
IS_ALIVE
IS_ALIVE阶段是一个运行状况检查,用于验证NED、设备和NSO之间的会话是否仍然正常。如果遇到IS_ALIVE false,则可能在一个会话中遇到超时。
关闭
在CLOSE阶段,NED关闭与终端设备的SSH会话。
SET_TIMEOUT
SET_TIMEOUT阶段表示NSO和NED管理的各种超时的刷新。
跟踪中的其他信息
修改
在SHOW阶段之后,NED会打印将在NSO CDB中进行的预期更改的列表。
created /ios:line/vty[first='5'][last='15']/login
created /ios:line/vty[first='5'][last='15']/login/local
modified /ios:interface/Loopback[name='2']
created /ios:interface/Loopback[name='2']/shutdown
created /ios:username[name='cisco']
value_set /ios:username[name='cisco']/privilege 15