简介:NCE-T网管操作系统概述PDF是华为面向网络运维与规划人员的进阶学习资料,重点讲解从传统U2000向融合管理、控制、分析能力的NCE-T演进路径,并对比了两者在架构、高可用部署、软硬件配置及北向开放API方面的差异。资源为单个PDF文件,压缩包约7.31MB,内容以官方技术讲解为主,适合从事传输网、微波网管运维或关注网络自动化与智能化的工程师参考。已有3987人浏览学习。文档由华为官方材料整理而成,覆盖On-Premises、私有云等多种部署场景,也说明了SUSE/EulerOS、GaussDB等软硬件配置变化,以及B/S浏览器访问模式,能帮助读者快速建立NCE-T整体认知并理解其相比U2000的核心优势。
1. NCE-T网管操作系统到底是什么:一张图看懂它和传统网管的差别
做传送网运维的人应该都体会过传统网管那种“一台设备一个窗口”的别扭:网管把每一台设备的板卡、端口、告警都摆在你面前,但网络业务长什么样、从哪里穿到哪里、中间经过哪些路径,得靠自己在脑子里拼。而NCE-T网管操作系统这类传送网控制器要解决的核心问题,就是把“管理设备”变成“管理网络”——它不再只回答“这台设备怎么样”,而是直接回答“这条业务能不能开、为什么不给开、怎么开最安全”。如果你手头正在读《NCE-T网管操作系统概述.pdf》,那这份文档真正值得关注的不只是功能列表,而是它对传统传送网运维模型的几处结构性改变。这篇文章就顺着“它是什么、怎么部署、怎么用、坑在哪”这条线,把概述里没展开的落地细节补齐。适合正在做传输网管选型、准备从传统网管切换过来的运维和开发同学;只打算把PDF当背景资料翻一遍的,看完第1章就可以合上了。
2. 部署NCE-T之前先读懂架构:组件拆解、部署形态与最小环境准备
2.1 传送网控制器的组件拆解:管理面、控制面、采集面和数据面的分工
NCE-T不是一个单一进程,而是一套按面划分的分布式系统。这和传统网管“一个大进程把所有设备都管起来”的做法有本质区别。我第一次接触这类控制器时习惯性去找“那个管设备的服务”,结果发现它被拆成了好几个角色。理解这套分工,后面所有的部署、排障、性能调优才能对得上号。
常见组件模型大致是这样:
| 组件面 | 核心职责 | 对应能力 | 类比 |
|---|---|---|---|
| 管理面 | 运维入口、权限、系统配置、北向服务 | GUI/CLI、北向RESTful API、审计日志 | 操作系统的shell |
| 控制面 | 业务发放、路径计算、策略管理、资源调度 | 业务生命周期管理、算路、路由恢复 | 操作系统的进程调度器 |
| 采集面 | 南向协议适配、设备状态采集、配置下发 | NETCONF/YANG、TL1、SNMP等协议栈 | 操作系统的驱动层 |
| 数据面 | 数据存储、消息传递、文件持久化 | 分布式数据库、消息队列、对象存储 | 操作系统上的文件系统+数据库 |
控制面是NCE-T最核心的部分。传统网管收到一条建链需求时,本质上做的是“把配置往设备上推”,至于路径怎么选、资源够不够,是设备自己算的。NCE-T则把路径计算和资源调度收回到控制面统一做:它维护全网拓扑和资源池,你告诉它A端和Z端,它算出路径后转化为设备配置下发给各个节点。采集面则负责把这些设备状态实时同步回来,让控制面手里的拓扑和真实网络保持一致。
这套架构带来的直接好处是:只要控制面数据准确,业务配置就不需要在每台设备上单独检查。代价是对部署环境的整洁度要求高得多。各面之间通过消息总线通信,任何一个面的状态不正常,都可能表现为“业务创建一半挂起”“拓扑发现了但路径计算不刷新”这类诡异问题。
2.2 部署形态怎么选:单机、主备和集群的分界线在哪
NCE-T的部署形态一般在安装向导里就让你选,选错了后期迁移成本不低。常见形态有三种,适用场景差异很清晰:
| 部署形态 | 节点规模 | 适用场景 | 关键约束 |
|---|---|---|---|
| 单机 | 1个节点 | 实验验证、演示、学习 | 控制面和数据库同机,性能有限 |
| 双机主备 | 2个节点 | 中小规模生产网络 | 管理面和控制面做浮动IP切换 |
| 集群 | 3节点及以上 | 大规模网络、多区域管控 | 数据面分布式部署,容量可扩展 |
我的建议是:如果你所在机房设备规模在几百台以内、业务变更频率不高,双机主备就够了,没必要为了“上集群”而上集群。集群的部署和运维复杂度是成倍上升的,尤其在数据库、消息队列这些基础组件出现抖动时,定位问题的难度远超单机形态。反过来说,如果你规划纳管的设备上万台、每秒要处理的告警和性能数据量很大,那从第一天就应该按集群形态规划,后期从主备迁到集群的改造比重新部署还麻烦。
选型上还有一个容易被忽略的点:存储。NCE-T的数据面组件很依赖磁盘性能,尤其是数据库和文件存储两个目录。生产环境至少要把这两个目录放到独立的挂载盘上,优先级高于加CPU核数。我见过不少部署案例,CPU给得很足,但把数据目录放在系统盘上,跑三到六个月后数据库膨胀,整个系统变卡,查了半天才发现是磁盘IO瓶颈。
2.3 从零初始化一个最小测试环境:关键步骤与参数设置
搭建一个最小环境,目的是先把系统跑起来、把南北向链路打通。准备工作按三步走:硬件检查、部署配置、启动验证。
硬件检查我一般会先跑下面几个命令,低于推荐值就不要硬上,否则后面全是泪:
# 查看CPU核数,推荐16核以上 lscpu | grep "^CPU(s):" # 查看内存大小,推荐64GB以上 free -g # 查看数据目录所在磁盘剩余空间,推荐200GB以上 df -h /data这三个命令对应NCE-T最基础的三个资源诉求。CPU核数不够,控制面的路径计算并发会明显变慢;内存不足,数据库和消息队列会在业务量上来后频繁触发GC甚至OOM;磁盘空间不够最危险,数据库写入失败通常不会立刻报错,而是过一段时间后出现数据不一致。日志里出现“disk full”的时候,往往已经影响业务了。
硬件确认后,准备部署配置文件。以双机主备形态为例,我会重点关注下面几个参数:
cluster: mode: dual-node # 双主备模式 node1_ip: 10.10.20.11 # 节点1管理IP node2_ip: 10.10.20.12 # 节点2管理IP virtual_ip: 10.10.20.100 # 管理面浮动IP,供界面和北向调用 database: data_path: /data/db # 数据库数据目录,必须独立挂盘 backup_path: /backup/db # 备份目录,建议和data_path不同物理盘 storage: file_path: /data/file # 文件存储目录,存配置文件、日志、报表配置里的virtual_ip是双机切换时对外暴露的统一入口,所有客户端调用都走它,不直接访问节点真实IP。data_path和backup_path分开物理盘这一点,是很多部署文档一句话带过但实际非常重要的细节——数据库备份如果写到同一块盘上,盘挂了备份也跟着没,那备份就失去了意义。
部署文件准备好后,运行安装程序。具体命令各版本有差异,但流程一致:先做预检查,再装基础软件,再初始化数据面,最后拉起服务。预检查阶段会让你填写节点角色、IP、密码等。这里有一个经验:预检查报的“warning”级别问题,也尽量逐一处理,不要心存侥幸。比如时间同步没配好,预检查只警告不拦截,部署完业务后设备重启,时间偏移导致告警风暴,排查起来非常崩溃。
启动完成后,验证系统状态:
# 查看关键服务运行状态,期望都是 active nce-cli service status # 查看控制面日志是否有异常栈 tail -f /var/log/nce/control/control.log服务状态全部active只是开始,接下来要做一次真正的连通性测试:从管理面界面登录、用北向接口拉一次资源列表、南向连一台真实设备做拓扑发现。这三件事都通了,这个最小环境才算真正能用。
3. 用NCE-T完成端到端业务发放:拓扑发现、业务创建与割接回滚
3.1 资源发现:让控制器先看到你的网
NCE-T的所有能力都建立在“它知道网络长什么样”这个前提上。资源发现就是干这件事的。在界面上一般叫“网络拓扑发现”或“资源自动发现”,入口通常在资源管理模块下。配置一个发现任务,核心是四件事:选南向协议、填设备IP范围、填登录凭据、设调度策略。
南向协议的选择直接决定发现质量。常见三种协议各有适用场景:
| 南向协议 | 适用设备/场景 | 优势 | 短板 |
|---|---|---|---|
| NETCONF/YANG | 新版本IP/OTN设备 | 采集信息结构化,支持配置回读 | 老设备不支持 |
| TL1 | 传统传输设备 | 兼容性极好,几乎所有传输设备都支持 | 报文解析繁琐,性能一般 |
| SNMP | 第三方异构设备 | 通用性强 | 只读能力为主,配置下发弱 |
常见做法是:同厂商主力设备优先用NETCONF,老设备用TL1兜底,第三方设备用SNMP先拿下拓扑。我一般会把不同网段的设备分别建发现任务,而不是一个大任务扫全部IP。原因是:发现任务一旦出问题,拆小后定位快;而且不同网段的设备登录凭据往往不一样,分开任务本身就是一种工程习惯。
发现任务执行完后,不要急着开业务。先在界面上看“差异报告”——新增了哪些网元、哪些端口属性变化、哪些链路状态不一致。这一步是资源发现最容易出问题的地方:报告显示发现成功,但实际拓扑里有些设备没进来,有些链路只有一端。原因是设备侧的DCN(数据通信网络)配置不通,或者子网掩码划分导致控制器无法通过南向协议访问部分设备。所以资源发现做完后,我习惯做一次“抽验”:随机挑5到10台设备,手工核对拓扑里的端口信息和设备实际板卡是否一致。抽验通过,再进入业务配置阶段。
3.2 创建一条OTN业务:接口报文字段与参数说明
资源发现完成后,业务发放就是NCE-T最日常的操作。你可以在界面里一步步点,也可以调北向接口批量下发。这里把一条OTN业务的创建逻辑拆开看,以理解控制器在背后做了什么。
一条标准业务创建请求的核心字段大致如下:
{ "serviceName": "A站-B站-10G-001", "serviceType": "OTN_SERVICE", "aEnd": { "neId": "NE001", "portName": "1-1-1", "vctreeId": 10 }, "zEnd": { "neId": "NE002", "portName": "2-2-3", "vctreeId": 10 }, "route": { "mode": "AUTO", "constraints": { "maxLatencyMs": 8, "avoidNodeIds": ["NE003"] } }, "protection": { "type": "1PLUS1_SNCP", "revertive": true } }逐项说明。serviceName是业务标识,命名规范建议包含A站、Z站、带宽、序号,后期检索会省很多事。aEnd和zEnd分别代表业务的源端和宿端,neId是控制器内部的网元标识,portName是端口名,格式与设备实际板卡命名有关,vctreeId是中间的传送容器或虚拟级联通道标识。
route里的mode有AUTO和EXPLICIT两种。AUTO表示由控制面自动计算路径,constraints里的maxLatencyMs是端到端时延上限,avoidNodeIds是绕开的节点列表。这里有个经验:时延约束不要设得过于激进,比如时延上限设得比真实物理距离还小,控制面算不出路,业务会一直卡在“路径计算失败”。避免节点列表也要克制,列得太多会显著增加算路失败率。
protection字段控制保护策略,1PLUS1_SNCP是传输网最常见的分布式1+1保护,revertive表示故障恢复后是否回到原路径。生产业务一般建议开revertive,否则信号会一直走在保护路径上,原路径的隐患永远发现不了。
报文提交后,控制面内部会依次做资源预占、路径计算、配置转换、逐设备下发、结果确认。整个过程在全自动模式下是原子的,任何一步失败都会触发自动回滚。所以业务创建成功后看到的状态是active,而不仅仅是“配置已下发”。
3.3 变更与割接:预检查、下发和回滚的落地节奏
业务建好了不代表后续没事了。网络调整、扩容、光缆割接,都需要在NCE-T上做业务变更。割接这个场景最考验系统的可靠性,NCE-T的批处理能力在这里派上用场。
一个标准的割接流程,我一般分四步走:
- 预检查:在界面或北向接口发起预检查,系统会模拟执行一遍变更,检查资源冲突、端口占用、时隙重叠。
- 快照保存:变更前必须保存一份业务快照,包含所有受影响业务的路径、保护方式和参数配置。这是回滚的后悔药,没有快照的割接是在赌运气。
- 分批下发:按割接方案把变更拆成多个小批次,逐批下发并确认业务状态。不要在一条割接里同时变更多条骨干业务。
- 失败回滚:下发失败时,系统根据快照自动回滚;回滚本身也失败时,立即切换到人工处置,优先恢复原路径配置。
预检查这一步的逻辑值得多说一句。它不只是校验参数合法性,而是会在当前的网络资源模型上做一次“模拟下发”。比如一条业务要经过某台设备的中继端口,预检查会确认该端口是否有足够容量、是否被其他保护组占用。如果预检查报“时隙冲突”,不要去硬改业务参数,先查这个时隙被谁占用了——常见原因是历史残留配置或另一条业务隐藏的依赖关系。
回滚策略的设置在界面上通常有“自动回滚”和“手动回滚”两个选项。我的建议是:常规小变更开自动回滚,大型割接开手动回滚。原因是大型割接往往涉及跨域或跨系统联动,自动回滚只回滚NCE-T侧配置,外部系统的联动没回滚,反而会造成更大不一致。手动回滚至少给你一个观察和协调外部系统的窗口。
4. 路径计算与资源参数调优:让网络利用率和安全都不翻车
4.1 路径计算的核心约束:时延、距离、代价和排除条件
NCE-T控制面最值钱的能力就是路径计算。但这个能力的输出质量高度依赖约束参数怎么配。路径计算的本质是在一个带权图上找一条满足所有硬约束且软约束代价最小的路。硬约束不满足,算路直接失败;软约束之间互相权衡,则是调优的入口。
常见硬约束有四类:
| 约束类型 | 作用 | 典型设置 |
|---|---|---|
| 容量约束 | 路径经过的每条链路剩余带宽必须足够 | 按业务带宽+额外余量 |
| 时延约束 | 端到端单向时延不超过设定值 | 按业务SLA设定 |
| 排除约束 | 避开特定节点、链路或区域 | 故障区域、维护窗口 |
| 必经约束 | 必须经过指定节点或链路 | 合规要求、管控要求 |
软约束则通过链路代价来体现。每一步都算代价,总代价最小的一条路就是结果。代价模型里每一项的权重,直接决定控制器“偏好”什么样的路径。
实际落地中最常见的路由策略冲突是“最短路径vs.负载均衡”。如果代价模型只看距离,控制器会把所有新业务都往最短路径上塞,导致那条路利用率飙升,而绕行路径闲置。反之,如果只看利用率,可能会出现业务绕了几百公里只为避开一段半载链路,时延SLA反而不达标。合理做法是代价模型同时包含距离和利用率两个因子,并且让利用率影响的权重略高于距离。
4.2 代价模型参数设置:业务等级和链路权重的映射
NCE-T的路径计算模板里,通常有一组可配置的权重系数,对应不同业务等级。我见过不少部署环境直接用默认模板,这其实是路径调优的第一个坑:默认模板一般按“最少跳数”设计,对业务等级差异不敏感。
一个实用的做法是建立三档业务模板:
| 业务等级 | 时延敏感度 | 带宽占用 | 代价模型建议 |
|---|---|---|---|
| 重要业务 | 高 | 高 | 时延权重最高,优先走直连最短路径 |
| 普通业务 | 中 | 中 | 距离和利用率均衡 |
| 填充业务 | 低 | 低 | 利用率权重最高,绕行优先 |
参数设置上,链路综合代价的计算常见公式是:C = α × 距离代价 + β × 时延代价 + γ × 利用率代价。三个系数的取值范围为0到1,且三者之和为1。α=0.2、β=0.3、γ=0.5这套参数比较适合“以负载均衡为主、兼顾时延”的城域网络;如果是跨省骨干,时延敏感度高,建议α=0.2、β=0.6、γ=0.2。
设置权重时注意:不要让任何一个因子趋近于1,否则其他两个因子形同虚设,就会出现“绕路保时延”或“直连堵死”的极端结果。调参后一定要回到业务列表里抽查几条现有业务,看控制器是否按预期调整了新业务的路径,老业务不会自动重路由,只有发生重优化或新业务才会生效。
4.3 资源分配参数:预留比例、扩容阈值和带宽边界
路径计算依赖的资源数据来自于资源发现,但资源数据不能直接用原始值,需要设一些保护性参数。这就像操作系统不会把磁盘100%用满一样,NCE-T的资源管理也需要留余量。
三个关键参数值得写进你的部署规范:
| 参数 | 建议值 | 说明 |
|---|---|---|
| 链路预留带宽比例 | 20%-30% | 为割接、恢复预留临时通道 |
| 端口利用率预警阈值 | 70%-80% | 达到阈值即产生预警,不阻塞新业务 |
| 链路可用带宽边界 | 本端和远端取小值 | 防止两端容量不一致导致计算错误 |
预留带宽比例是这里面最需要权衡的。留太多,网络资源利用率低,老板觉得花钱没用到;留太少,一旦发生故障需要临时转接,发现没有可用通道,业务恢复时间被无限拉长。我一般会按网络层级区分:核心骨干链路预留25%以上,接入层预留15%。核心层的业务一旦故障影响面大,多一点预留是值得的。
带宽边界这里有个容易踩的坑:一条链路两端的容量可能不一致,比如本端是100G端口,远端是40G端口,控制器使用这条链路时必须取小值40G作为可用容量。有些版本在资源发现时不会自动纠正这种不一致,需要运维在链路属性里手工修正。路径计算如果用了本端值,算出来的路在远端设备上下发时会失败,业务卡在校验阶段。提前在资源核查中把这些不一致找出来改掉,比等故障来处理省心得多。
5. NCE-T落地避坑指南:四个高频问题现象、原因与解决办法
5.1 拓扑不完整:发现任务显示成功,但业务就是穿不过去
现象:资源发现任务执行完成,报告显示新增网元和链路数量都在预期范围内,但创建业务时,路径计算报“找不到可达路径”,打开拓扑一看,部分网元只有设备节点、没有链路相连,像一个个“黑洞”。
原因:最常见的是设备侧的DCN配置问题。控制器通过南向协议能ping通设备管理IP,但设备内部的DCN网段没有完整打通,导致控制器只能看到设备本身,拿不到设备端口和光模块的邻居信息,链路自然建不起来。还有一种情况是子网划分不一致,控制器按一个子网段去探测,实际设备分散在几个段里。
解决:先对照“资源发现-失败列表”逐台看失败原因,如果是DCN不通,到设备侧检查DCN隧道配置。如果是子网段问题,把发现任务的IP范围拆成多个小段分别执行。拓扑修正后,不要只点“重新发现”,先删除异常链路再重建,否则旧链路数据会和新数据冲突。我就是在这里吃过亏,重新发现后链路重复,路径计算反而变慢。
5.2 业务创建一直校验失败:参数看着没问题,就是报错
现象:创建业务时,报“参数校验失败”,但界面上显示的A端、Z端、带宽、保护方式看起来都正常。反复检查几次都找不到问题,有一种“玄学”的味道。
原因:参数校验是在控制器自己的资源模型上做的,不是只看你填的参数合法。最典型的情况是端口被隐形占用——端口在拓扑里显示“空闲”,但实际上该端口所属的vctree或线路时隙已经被一条隐藏业务占用,资源数据没刷新。另一个高频原因是A端和Z端的端口类型不匹配,比如一端是OTU3端口,另一端是OTU2端口,带宽相同但速率等级不同,控制器拒绝下发。界面只提示参数错误,不会告诉你背后的资源冲突。
解决:先查资源占用,不猜参数。用资源管理里的“端口详情”查该端口的占用状态和所属业务,确认占用关系后再填。端口类型不匹配的话,把两端端口统一到相同的速率等级。如果资源占用显示正确但还是报错,去采集面日志看南向协议返回的原始错误码——很多真正的拒绝原因是设备端返回的,而不是控制器自身判断的。
5.3 跨域业务保护倒换失败:倒换后业务中断,比不倒换还糟
现象:一条跨两个控制域的业务,配置了1+1保护,日常状态正常。一次真实故障发生后,保护倒换触发,但业务反而中断了,两端同时看到告警。
原因:跨域业务的两端保护组成员由各自的域管理,保护倒换的协调通过域间接口完成。常见问题是两端的保护类型配置不一致:一端是SNCP,另一端是线性保护,倒换时两端动作不同步,导致业务在短时间内被同时切断。还有一种情况是两端的倒换等待恢复时间(WTR)设置不同,一端已经恢复,另一端还在等待,触发二次倒换。
解决:跨域业务的保护参数必须在全局策略里统一,不能各自为政。以主用侧的保护类型为准,两端保持一致;WTR时间两端必须配成相同的值,一般建议5分钟到10分钟。配置完成后做一次强制倒换测试,确认两端动作一致后再放业务。跨域业务配置保护前先确认两侧控制器的协议版本兼容性,这个在联调阶段就应该完成。
5.4 北向接口拉不到数据:监控平台拿到的资源列表和界面不一样
现象:自研监控平台通过北向接口查询资源列表,返回的数据和界面显示不一致,有的网元查不到,有的带宽数据和界面对不上。接口调用本身成功,不报错。
原因:北向接口的数据来自控制面的资源模型,而界面显示的数据来自管理面的实时查询。两者之间有一个数据同步的时延。尤其是资源发现刚完成后,控制面资源模型刷新可能还没完成,此时北向接口查到的就是旧数据。另一个原因是分页参数设置不对,默认分页大小可能只有几十条,监控平台只取了第一页,看起来就是“缺数据”。
解决:在监控平台的拉取逻辑里加一个“资源版本号”参数——控制面每次资源变更都会递增版本号,拉取时带上上次成功拉取的版本号,只有版本号变化时才重新拉全量,否则按增量处理。分页查询时不要用默认值,显式调大每页条数,并循环取完所有页。这样处理后数据一致性问题基本能消除。北向接口联调前,先在文档里确认当前版本的分页上限和资源版本控制机制,不同版本行为有差异。
6. 把NCE-T嵌进运维自动化:北向API两种集成模式与最小脚本
6.1 只读集成和读写集成怎么选
北向API是NCE-T真正值钱的地方。传统网管也有接口,但大多是“查询为主,配置靠脚本往上灌”;NCE-T的北向接口把业务发放、策略配置、资源管理都暴露成了标准RESTful服务,理论上你可以用它构建一套自己的网络服务化平台。集成模式一般分两种。
只读模式:从控制器拉取资源、拓扑、告警、性能数据,对接自研的监控大屏和报表平台。这是最推荐的起步模式,风险低、见效快。读写模式:通过接口创建业务、修改策略、触发重优化,把控制器变成自动化平台的能力底座。读写模式价值大,但需要投入联调成本,且必须建立变更审批和审计机制。
我的建议是先做只读。把告警、资源、性能三类数据的拉取和一致性调通,让监控平台的准确率达到100%了,再考虑开放写接口。一上来就做业务自动下发,出了问题影响面会非常大。
6.2 告警拉取脚本的最小实现
下面这个脚本是只读集成里最常用的操作:拉取当前未清除的严重告警。接口路径和认证方式以你手上版本文档为准,我这里展示的是通用结构:
import requests TOKEN_URL = "https://10.10.20.100:26335/rest/v1/auth/token" QUERY_URL = "https://10.10.20.100:26335/rest/v1/network-alarm/query" # 获取x-token,实际认证字段名参考版本文档 resp = requests.post(TOKEN_URL, json={"username": "api_user", "password": "xxxxxx"}, verify=False) token = resp.json()["data"]["token"] headers = { "X-Auth-Token": token, "Content-Type": "application/json" } query_body = { "condition": { "clearStatus": "uncleared", # 只看未清除告警 "severity": "CRITICAL" # 只看严重告警 }, "page": { "size": 100, # 每页100条,显式调大 "start": 0 } } r = requests.post(QUERY_URL, headers=headers, json=query_body, verify=False) alarms = r.json()["data"]["alarms"] for alarm in alarms: print(alarm["alarmName"], alarm["neName"], alarm["raiseTime"])脚本里的URL是示例写法,不要直接照抄,不同版本的北向接口路径差异很大。核心要理解三点:认证先换token,查询条件里severity和clearStatus控制了数据范围,分页参数必须显式设置。把这三件事拉通,往后接性能数据、资源数据都是同一套思路。
我最早做集成时只拉告警,忽略了对告警清除事件的订阅,结果监控平台上全是“未恢复”的旧告警,真正的新告警反而被淹没。后来改成按“告警ID+设备ID”做增量去重,每次拉取时记录告警的首次出现时间和最后上报时间,只有发生过状态变化的告警才推送。这个习惯沿用至今,也希望帮到你。
本文还有配套的精品资源,点击获取