在此页面上
修改 UDA、UDF 和工作流引擎
概述
创建规则时,Paragon Insights(以前称为 HealthBot)包括运行用户定义的操作 (UDA) 作为触发器的一部分的功能。UDA 本质上是可由 Paragon Insights 规则执行的 Python 脚本。例如,您可以配置一个带有触发器的规则,该触发器对某些关闭的关键接口做出反应,并通过调用函数发送 SMS 警报来响应事件。您可以编写逻辑以在 UDA python 脚本中发送短信。
从 Paragon Insights 4.1.0 版开始,您可以安排 UDA 和通知。当您在不同位置部署 Paragon Insights 的多个并行实例时,此功能非常有用。您可以从位于不同区域的 UDA 调度程序安排 UDA 交替运行。如果节点发生故障,在并行实例中运行的 UDA 调度程序将继续执行您的 UDA 和通知。有关详细信息,请参阅 在触发器操作中启用 UDA 调度程序。
Paragon Insights 还包括运行用户定义函数 (UDF) 的功能。UDF 创建为 Python 脚本,能够处理来自设备的传入遥测数据,并将处理后的值存储在该设备/设备组的时间序列数据库中。例如,设备可能正在以摄氏度为单位发送 FPC 温度,但您希望对其进行处理以将其作为华氏度值存储在数据库中。
从 HealthBot 3.2.0 版开始,UDF/UDA 字段的处理已移至名为 UDF 场的微服务。这种方法允许 Paragon Insights 同时处理来自多个设备和字段的多个数据点(并行处理)。结果是 UDA/UDF 的处理性能提高了 4 到 5 倍。
虽然 UDA 和 UDF 为 Paragon Insights 提供了出色的附加功能,但在某些情况下,脚本可能会导入默认 Paragon Insights 安装中未包含的 Python 模块。鉴于此,您需要能够根据需要将模块添加到运行这些脚本的引擎中。Paragon Insights 2.1.0 及更高版本解决了这一挑战,允许您使用 bash 脚本修改 UDA、UDF 和工作流引擎,其中包含安装任何依赖项的说明。
Python 脚本中的全局变量
TAND 执行使用全局变量的 Python 脚本。全局变量在多个 UDF 中保留一个值。
以下是计算累积总和并将值存储在全局变量 sum中的示例函数。
sum = 0 def cumulative_sum (a, b): global sum sum = sum + a + b return sum
在 UDF 中使用全局变量可能会阻止您利用 UDF 场保证的处理性能增益。
您可以使用 Python 构造 **kwargs
来捕获必须在不同函数中保留的值,而不是全局变量。当 Paragon Insights 调用函数(在 UDF 中定义)时,它会发送使用该构造 **kwargs
捕获的主题名称、规则名称、设备组、点时间和设备 ID。对于 UDA,Paragon Insights 会在执行 Python 脚本时发送主题名称和规则名称。
除了基础架构值,Paragon Insights 还会发送一个名为 in 的hb_store**kwargs
参数,用于获取变量的最后一个计算值。
要说明hb_store在累积加法示例中的工作原理,请执行以下操作:
def sum(a, b, **kwargs): if ’sum’ not in kwargs[hb_store]: kwargs[hb_store][’sum’] = 0 #if ’sum’ is not present in kwargs, declare the initial ’sum’ value as 0. kwargs[hb_store][’sum’] = kwargs[hb_store][’sum’] + a + b #Store cumulative addition value in ’sum’ return kwargs[hb_store][’sum’]
每次调用具有上述代码的函数时,它都会在 'sum' 中执行最后存储值的加法,其值为 和 a 。 b加法运算的新值将显示并存储在“sum”中。
工作原理
您可以使用 Paragon Insights CLI 修改 UDA、UDF 或工作流引擎,如下所示。
user@HB-server:~$ healthbot modify-uda-engine --help usage: healthbot modify-uda-engine [-h] (-s SCRIPT | --rollback) [--simulate] optional arguments: -h, --help show this help message and exit -s SCRIPT, --script SCRIPT Run script in UDA engine --rollback, -r Rollback UDA engine to original state --simulate Run script in simulated UDA engine and show output user@HB-server:~$ healthbot modify-udf-engine --help usage: healthbot modify-udf-engine [-h] (-s SCRIPT | --rollback) [--simulate] [--service SERVICE] optional arguments: -h, --help show this help message and exit -s SCRIPT, --script SCRIPT Run script in UDF engine --rollback, -r Rollback UDF engine to original state --simulate Run script in simulated UDF engine and show output --service SERVICE Modify specific service UDF root@davinci-master:/var/local/healthbot# healthbot modify-workflow-engine --help usage: healthbot.py modify-workflow-engine [-h] (-s SCRIPT | --rollback) [--simulate] optional arguments: -h, --help show this help message and exit -s SCRIPT, --script SCRIPT Run script in WORKFLOW engine --rollback, -r Rollback WORKFLOW engine to original state --simulate Run script in simulated WORKFLOW engine and show output
这些命令有三个主要选项:
模拟 — 在模拟的 UDA/UDF/工作流引擎环境中测试脚本(并查看其输出),而不会影响正在运行的 Paragon Insights 系统
修改 - 使用脚本修改实际的 UDA/UDF/工作流引擎
回滚 - 恢复到 UDA/UDF/工作流引擎的原始版本
使用说明
bash 脚本将在运行 Ubuntu OS 版本 16.04 或 18.04 的容器中运行;相应地编写脚本。
脚本必须是非交互式的;任何问题必须预先回答。例如,使用 apt-get 安装软件包时使用 '-y' 选项。
如果您希望将依赖项模块的源包复制到 Paragon Insights 服务器上,以便引擎可以手动安装它们,而不是从 Internet 下载它们,请将所需的源包放在 /var/local/healthbot/input 目录中。然后在 bash 脚本中,指向 /input 目录。例如,要使用放置在 /var/local/healthbot/input/myfile.txt 中的文件,请将 bash 脚本设置为在 /input/myfile.txt 处访问它。
多次修改 UDA/UDF/工作流引擎 不是一个增量 过程;使用同时包含原始指令和新指令的新 bash 脚本,然后使用新脚本重新运行修改过程。
UDA/UDF/工作流修改在升级过程中保持不变。
配置
作为最佳实践,我们建议您使用以下工作流:
此最佳实践方法可确保在修改实际引擎之前,首先在模拟环境中验证脚本。
以下示例使用 UDA 引擎;这些过程同样适用于 UDF 和工作流引擎。
以下过程假定您的 Paragon Insights 服务器已安装,包括运行 sudo healthbot setup
命令。
模拟
使用模拟功能在模拟环境中测试 bash 脚本,而不会影响正在运行的 Paragon Insights 系统。
要模拟修改 UDA 引擎,请执行以下操作:
输入命令
healthbot modify-uda-engine -s /<path>/<script-file> --simulate
。脚本将运行,输出显示在屏幕上,就像您自己输入脚本命令一样。
user@HB-server:~$ healthbot modify-uda-engine -s /var/tmp/test-script.sh --simulate Running /var/tmp/test-script.sh in simulated alerta engine.. Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB] ... Fetched 4296 kB in 15s (278 kB/s) Reading package lists... Building dependency tree... Reading state information… ...
修改
如果您对模拟结果感到满意,请继续执行实际的修改过程。
要修改 UDA 引擎:
将所需的 bash 脚本加载到 Paragon Insights 服务器上。
如果您的 Paragon Insights 服务器已完全启动并正在运行,请发出命令
healthbot stop -s alerta
以停止正在运行的服务。运行命令
healthbot modify-uda-engine -s /<path>/<script-file>
。user@HB-server:~$ healthbot modify-uda-engine -s /var/tmp/test-script.sh Running /var/tmp/test-script.sh in simulated alerta engine.. Success! See /tmp/.alerta_modification.log for logs Please restart alerta by issuing 'healthbot start --device-group healthbot -s alerta'
(可选)如输出中所述,您可以检查日志文件以进一步验证脚本是否已成功加载。
使用命令
healthbot start -s alerta
重新启动警报服务 。完成后,使用命令
healthbot status
验证 alerta 服务是否已启动并正在运行。要验证 UDA 引擎是否已更新,请使用命令
healthbot version -s alerta
并检查 healthot_alerta 容器是否正在使用<version>-custom
标记。user@HB-server:~$ healthbot version -s alerta {'alerta': 'healthbot_alerta:2.1.0-custom'}
UDA 引擎现在根据 bash 脚本使用已安装的依赖项运行。
回 滚
如果需要或希望删除对引擎的更改,可以将引擎恢复到其原始状态。
要回滚 UDA 引擎,请执行以下操作:
输入命令
healthbot modify-uda-engine --rollback
。user@HB-server:~$ healthbot modify-uda-engine --rollback Rolling back alerta engine to original state.. Successfully rolled back alerta engine Please restart alerta by issuing 'healthbot start --device-group healthbot -s alerta'
请注意,此时没有必要重新启动 alerta 服务。
完成后,使用命令
healthbot status
验证 alerta 服务是否已启动并正在运行。要验证 UDA 引擎是否已恢复,请使用命令
healthbot version -s alerta
并检查healthot_alerta容器是否正在使用<version>
标记。user@HB-server:~$ healthbot version -s alerta {'alerta': 'healthbot_alerta:2.1.0'}
UDA 引擎现在以其原始状态运行,没有安装其他依赖项。
在触发器操作中启用 UDA 调度程序
在 Paragon Insights 4.1.0 版中,您可以安排在设定的时间间隔内执行 UDA 和通知。要调度 UDA,必须先创建一个离散调度程序,然后在“触发器操作”页中链接该调度程序。
您只能将一个触发器操作计划程序链接到 Paragon Insights 实例。
要了解有关创建调度程序的详细信息,请参阅 生成报告。
触发器操作中设置的调度程序适用于所有设备组和网络组。您可以在设备组或网络组配置中禁用 UDA 调度。若要了解详细信息,请参阅 管理设备、设备组和网络组。
要启用调度程序:
转到 系统>设置。
单击触发操作选项卡。
此时将显示“触发器操作”页。
选择要与触发器操作关联的调度程序配置文件。
执行下列操作之一:
单击 保存 以保存调度程序配置文件。
配置文件不适用于设备或网络组。此选项使您能够提交或回滚平台中的配置更改。
单击 保存并部署, 在 Paragon Insights 实例中部署配置。
UDA 和通知是根据调度器中为应用实例配置的时间段和时间间隔生成的。
您无法回滚通过 “保存并部署”应用的配置更改。然而。您可以移除调度程序配置文件并重复保存并部署选项以取消 UDA 调度。