跳转至

通过 Func 自定义健康度函数


观测云支持通过 Func 平台 自定义健康度的计算逻辑。您可以编写自己的函数,通过 DQL、组成实体、事件等数据自由计算健康度,替代平台默认算法。


编写函数脚本

在 Func 中新建函数脚本,函数名称可自定义,但需满足以下输入输出约束。

输入参数:

字段 是否必填 说明
entity 是 当前要计算健康度的实体列表。每个实体对象包含完整 URN、实体名称、类型、标签等基础信息

输出格式:

遍历入参 entity,逐实体计算健康度。函数需返回一个对象:以每个实体的完整 URN 为 key,以包含以下字段的对象为 value。

字段 是否必填 说明
health_status 是 健康状态。固定值:healthy(正常)、warning(关注)、critical(严重)、unknown(未知)
health_score 是 0–100 分的健康分数。无法计算时返回 null
{
  "实体A的URN": {"health_status": "healthy", "health_score": 95},
  "实体B的URN": {"health_status": "warning", "health_score": 65}
}

函数示例:

'''
自定义健康度函数示例

说明:
1. 函数名称可自定义,输入参数必须包含 entity
2. entity 为当前要计算健康度的实体列表
3. 函数内部可通过 DQL、components、events 等自由查询数据并计算
4. 遍历 entity 逐实体计算,以实体的完整 URN 为 key 返回结果
5. 每个实体的结果必须包含 health_status 和 health_score
'''

@DFF.API('自定义系统健康度', category='dataPlatform.entityHealthFunc')
def myCustomHealth(entity):
    result = {}

    for item in entity:
        # 基于当前实体查询组成实体、关联告警等数据
        # 自定义计算逻辑...
        urn = item['urn']
        result[urn] = {
            'health_status': 'healthy',
            'health_score': 95
        }

    return result

添加函数分类

编写完成后,必须为函数添加分类标签,否则该函数不会出现在健康度配置的选择列表中。

分类标签固定为:

category='dataPlatform.entityHealthFunc'

发布函数

代码编写完成后,点击发布。未发布的函数不会在健康度配置中展示。


在健康度配置中使用

发布成功后,进入统一目录 > 管理实体类型,点击操作列的“健康度配置”,选择“自定义函数”。

此时下拉列表中将展示所有已发布且分类为 dataPlatform.entityHealthFunc 的函数,选择您创建的函数并保存即可生效。


常见问题

为什么我的函数没有出现在健康度配置的下拉列表中?

请检查以下三点:

  1. 函数是否已发布;
  2. 是否添加了 category='dataPlatform.entityHealthFunc' 分类;
  3. 函数是否通过 @DFF.API 装饰器正确注册。

函数执行失败会怎样?

平台会对函数输出进行校验。若输出格式不符合要求或执行异常,该系统的健康度将显示为“未知”。


函数内部可以使用哪些数据?

函数内部可通过 DQL 查询指标、日志、事件等数据,也可读取 entity 的组成实体信息。具体查询方式请参考 Func 平台文档。

文档评价

文档内容是否对您有帮助?