告警源


除了 IoT Hub 的数据,在配置告警规则时,来自第三方系统的数据也可以做为触发器。若使用第三方系统的数据,必需配置告警源以定义第三方系统数据的来源,例如 Kafka 客户端,以及处理数据的方法以映射到做为触发器的所需指标。

管理告警源

创建告警源

  1. 登入 EnOS 管理控制台,点击 告警服务 > 告警源,即可看到已创建的告警源列表。

  2. 点击 新建告警源

  3. 填写以下 接入源 信息并点击 下一步

    • 名称:输入告警源的名称。若需要输入不同语言环境的自定义名称,点击 国际化 图标 btn_internationalization
    • 类型:选择源类型,当前支持 Kafka 客户端
    • Topic:输入 Kafka topic,一个文本字段一个 topic。如需更多 topic,点击 + 添加
    • 描述:输入对告警源的描述。


  4. 填写以下 数据映射 信息并点击 保存

    • 方式:选择数据映射方式,当前支持 JAR,需指定 类名 并上传 JAR 包。更多信息,参见 JAR 方式


  5. 新创建的告警源将显示在告警源列表中。

  6. 使用告警源之前必需点击 启用 开关,以启用告警源。

编辑告警源

  1. 进入 告警服务 > 通用告警源,从列表中寻找需要编辑的告警源,点击 编辑 图标 btn_edit
  2. 所有字段均可编辑。编辑完成后,点击 保存 以保存修改内容。

删除告警源

  1. 进入 告警服务 > 通用告警源,从列表中寻找需要删除的告警源。
  2. 如果告警源已启用,先将其禁用,然后点击 删除 图标 btn_delete


注解

在删除告警源之前,建议先确保没有告警规则正在使用该告警源。使用已删除告警源的告警规则将不会触发。

JAR 方式

  1. 在项目的 pom.xml 文件中添加以下依赖。

    <dependency>
     <groupId>com.envisioniot.enos</groupId>
     <artifactId>alert-engine-share</artifactId>
     <version>0.1.10-SNAPSHOT</version>
     <exclusions>
         <exclusion>
             <groupId>*</groupId>
             <artifactId>*</artifactId>
         </exclusion>
     </exclusions>
    </dependency>
    


  2. 创建一个解析类,并且实现 com.envisioniot.enos.alert_engine.core.share.datasource.dto.codec.StandardMetricResolver参见示例代码>>.

  3. 以 fat JAR 的形式进行打包,以在创建告警源时上传。

  4. 类名 则是解析类的全路径,例如 com.envisioniot.MySimpleCodec.


../_images/alert_source_data_mapping.png

示例代码

MySimpleCodec 解析类

package com.envisioniot;

import com.envisioniot.custom.CustomMetric;
import com.envisioniot.enos.alert_engine.core.share.datasource.dto.codec.StandardMetricResolver;
import com.envisioniot.enos.alert_engine.core.share.metric.dto.Metric;
import com.google.gson.Gson;

import java.util.HashMap;
import java.util.Map;

public class MySimpleCodec implements StandardMetricResolver {
  public void init() {
    System.out.println("init my codec");
  }

  public Metric decode(String msg, Map<String, String> context) {
    final CustomMetric customMetric = new Gson().fromJson(msg, CustomMetric.class);

    Metric metric = new Metric();
    metric.setMetric(customMetric.getPayload().getMeasurepoints().getPointId());
    metric.setDataSource("20210729d96b9a770671d71b105e6671237da762");
    metric.setInstance(customMetric.getPayload().getAssetId());
    Map<String, String> labels = new HashMap<String, String>() {{
      put("key", customMetric.getOrgId());
    }};
    metric.setLabels(labels);
    metric.setOrgId(customMetric.getOrgId());
    metric.setTimestamp(customMetric.getPayload().getTime());
    metric.setTimezone(customMetric.getPayload().getTimezone());
    metric.setValue(customMetric.getPayload().getMeasurepoints().getValue() + "");
    return metric;
  }
}


CustomMetric 类

package com.envisioniot.custom;

import lombok.Data;

@Data
public class CustomMetric {
  private String orgId;
  private String modelId;
  private String modelIdPath;
  private Payload payload;
}


Payload 类

package com.envisioniot.custom;

import lombok.Data;

@Data
public class Payload {
  private MeasurePoint measurepoints;
  private String timezone;
  private String assetId;
  private long time;
}


MeasurePoint 类

package com.envisioniot.custom;

import lombok.Data;

@Data
public class MeasurePoint {
  private String pointId;
  private long value;
}