文章目录
- 为什么需要故障策略中心?
- 故障策略中心是如何工作的
- 故障策略中心的典型应用场景
故障策略中心(Event Versus Action:EVA)是一种利用Python或JSON脚本对设备采集的数据进行分析、判断及故障处理的功能。设备支持EVA功能后,可以为客户提供更加高效、智能的故障判断和处理方案。
为什么需要故障策略中心?
近年来,网络设备陆续支持YANG能力后,网管系统可以通过Telemetry/Netconf/Restconf等通道订阅Xpath(Yang文件中的节点)获取数据,并通过对这些数据的实时分析,判断设备是否发生故障并及时处理。然而在实际网络应用中,没有配备网管系统的网络设备仍然存在故障定位耗时耗力以及集中式巡检间隔长、有效性低的问题。
针对这些问题,华为公司研发了EVA功能,通过对现有的开放可编程系统(Open Programmability System,OPS)Python库进行扩展,实现了面向Telemetry的KPI数据订阅,通过对KPI数据的编排,构建基于KPI事件和日志事件的策略应对方案,实现对新增故障的快速自愈。设备开启EVA功能后,在故障判断与处理方面,支持用户自定义订阅数据,由设备自主判断并执行对应策略;在巡检方面,支持设备自主采集,解耦采集时长和设备数量,支持双驱动分析数据。设备级故障下发设备自主分析,实时记录故障快照。
EVA可以向用户提供如下服务:
基于脚本的数据开放能力
EVA借助设备的可编程能力,支持用户在脚本中定义数据订阅接口,包括监控CPU利用率变化等事件。强大的数据处理能力
EVA提供了数据计算和数据判断两大类函数。其中,数据计算函数包括平均值,最大值,最小值等,用户可以在脚本中直接调用这些函数处理订阅的数据。自定义策略和开放的故障编排能力
EVA支持用户自定义策略,可以通过故障策略公式对一个或多个故障进行组合。自主动作执行能力
EVA提供自主的动作执行能力,在故障策略事件触发时,自动执行自定义策略中的动作对设备进行故障处理。
故障策略中心是如何工作的
EVA的工作流程如下图所示:
EVA工作流程
- 用户在自定义的脚本中引入EVA模块。
- 将编写好的JSON或Python格式脚本上传到设备。
- 对脚本进行安装和注册。
- EVA会自动解析脚本并运行用户在脚本中定义的内容。
- 设备通过分析订阅的数据来进行数据展示或故障判定。如果经判断发生故障,通过策略匹配来执行对应动作。
通过在EVA脚本中使用事件定义故障发生的现象,使用策略和任务/动作定义故障发生之后操作。当设备故障发生后,自动记录故障数据,无需运维人员再手动搜集现场数据。
自定义python脚本
defcondition():e1=eva.Event()kpi1=e1.addkpi()e1.ret=eva.avg()s1=eva.Strategy()s1.formula=e1 action1=eva.log()s1.addaction(action1)在上述脚本中:
- 事件(Event):用户描述对数据的订阅,处理和判断。
- 日志事件(LogEvent):用于描述向系统订阅日志。
- 策略(Strategy):用于描述事件的编排和执行动作。
- 动作(action):用于定义设备的行为,包括命令行的下发、对数据进行运算等。
自定义JSON脚本
- 单任务脚本样例如下:
{"ItemName":{"description":"","define":{},"events":{},"strategy":"","tasks":{}}}- 巡检脚本样例如下:
{"ItemName1":{"description":"","define":{},"events":{},"strategy":"","tasks":{}}}{"ItemName2":{"description":"","define":{},"events":{},"strategy":"","tasks":{}}}{"ItemName3":{"description":"","define":{},"events":{},"strategy":"","tasks":{}}}在上述脚本中:
- 描述(description):对脚本的简单描述。
- 全局变量(define):用来定义用于整个脚本的全局变量,最多支持15个全局变量,不支持引用其他变量。
- 事件(event):用于定义脚本运行的入口条件。
- 策略(strategy):用于定义任务(task)或动作(action)执行的事件或事件组合条件。
- 任务(task):用于定义由策略触发执行的动作(action)以及多个动作之间的关系,每个任务包含一个动作。对于业务逻辑比较复杂的情况,可以定义多个任务,并在任务中定义与其他任务的跳转关系。循环类的业务逻辑,也在任务中定义。
故障策略中心的典型应用场景
配置基于JSON巡检脚本的故障策略中心
在巡检场景中,用户自定义JSON脚本存放在SFTP服务器上,希望通过故障策略中心功能采集设备的路由信息、接口诊断信息和设备健康信息。JSON脚本为巡检脚本,脚本中定义了采集设备的路由信息、接口诊断信息和设备健康信息的命令。
通过故障策略中心巡检设备组网图
可以采用如下思路配置:
编写JSON脚本,在脚本中定义事件、策略和任务。
上传JSON脚本至设备。
安装并注册JSON脚本。
step1 编写JSON脚本,在脚本中定义事件、策略和任务。
{"inspection_1":{"description":"Collect IP routing information","events":{"e1":{"trigger":"eva.singleCollect()"}},"strategy":"e1","tasks":{"mainTask":{"parameters":{"IProute_cmdArray":["display bgp peer","display isis peer","display ospf peer"]},"action":"eva.cliArray(\"user\",${IProute_cmdArray})"}}}}//采集设备的路由信息{"inspection_2":{"description":"Collect statistics on error packets and diagnosis information on the interfaces","events":{"e1":{"trigger":"eva.singleCollect()"}},"strategy":"e1","tasks":{"mainTask":{"parameters":{"Interface_cmdArray":["display interface troubleshooting","display interface counters errors","display interface brief"]},"action":"eva.cliArray(\"user\",${Interface_cmdArray})"}}}}//采集设备的接口诊断信息{"inspection_3":{"description":"Collect system management information","events":{"e1":{"trigger":"eva.singleCollect()"}},"strategy":"e1","tasks":{"mainTask":{"parameters":{"Health_cmdArray":["display debugging","display device","display health"]},"action":"eva.cliArray(\"user\",${Health_cmdArray})"}}}}//采集设备健康信息step2 上传JSON脚本至设备。
[DeviceA]sftp client-transfilegethost-ip10.2.1.1username client001 password Helloworld@6789sourcefile CollectInformation.json//DeviceA作为SFTP客户端从SFTP服务器下载脚本文件CollectInformation.json(JSON脚本存放在SFTP服务器上)。step3 安装并注册JSON脚本。
<DeviceA>install eva script CollectInformation.json inspection配置基于Python脚本的故障策略中心
用户自定义Python脚本存放在SFTP服务器上,希望通过故障策略中心功能监控CPU利用率和内存利用率的变化。Python脚本中定义了当CPU利用率和内存利用率大于90%时,系统自动打印CPU和内存利用率高的告警日志,提示网络维护工程师及时进行设备维护。
通过故障策略中心监控CPU变化的设备组网图
可以采用如下思路配置:
编写Python脚本,自定义事件和故障处理策略。
上传Python脚本至设备。
安装并注册Python脚本。
step1 编写Python脚本,在脚本中自定义事件和故障处理策略。
importeva defcondition():e1=eva.Event()kpi1=e1.addkpi("huawei-cpu-memory:cpu-memory/board-cpu-infos/board-cpu-info/system-cpu-usage")e1.ret=eva.avg(kpi1,10)>90e2=eva.Event()kpi2=e2.addkpi("huawei-cpu-memory:cpu-memory/board-memory-infos/board-memory-info/os-memory-usage")e2.ret=eva.avg(kpi2,10)>90s1=eva.Strategy()s1.formula=e1&e2 s1.validTime=10action1=eva.log("board ${e1.slot-id}--${e1.cpu-id} cpu and memory simultaneously overload")s1.addaction(action1)//编写自定义用户脚本cpuMemHigh.py,用于订阅系统CPU利用率和内存利用率。计算最近10次的平均值,当CPU利用率和内存利用率的平均值都大于90%时,则打印告警日志。step2 上传Python脚本至设备。
[DeviceA]sftp client-transfilegethost-ip10.2.1.1username client001 password Helloworld@6789sourcefile cpuMemHigh.py//DeviceA作为SFTP客户端从SFTP服务器下载脚本文件cpuMemHigh.py(Python脚本存放在SFTP服务器上)。step3 安装并注册Python脚本。
<DeviceA>ops install file cpuMemHigh.py//安装Python脚本。<DeviceA>ops run python evamain.py install cpuMemHigh.p//注册Python脚本。