告警源¶
除了 IoT Hub 的数据,在配置告警规则时,来自第三方系统的数据也可以做为触发器。若使用第三方系统的数据,必需配置告警源以定义第三方系统数据的来源,例如 Kafka 客户端,以及处理数据的方法以映射到做为触发器的所需指标。
管理告警源¶
创建告警源¶
登入 EnOS 管理控制台,点击 告警服务 > 告警源,即可看到已创建的告警源列表。
点击 新建告警源。
填写以下 接入源 信息并点击 下一步。
名称:输入告警源的名称。若需要输入不同语言环境的自定义名称,点击 国际化 图标 。
类型:选择源类型,当前支持 Kafka 客户端。
Topic:输入 Kafka topic,一个文本字段一个 topic。如需更多 topic,点击 + 添加。
描述:输入对告警源的描述。
填写以下 数据映射 信息并点击 保存。
方式:选择数据映射方式,当前支持 JAR,需指定 类名 并上传 JAR 包。更多信息,参见 JAR 方式。
新创建的告警源将显示在告警源列表中。
使用告警源之前必需点击 启用 开关,以启用告警源。
编辑告警源¶
进入 告警服务 > 通用告警源,从列表中寻找需要编辑的告警源,点击 编辑 图标 。
所有字段均可编辑。编辑完成后,点击 保存 以保存修改内容。
删除告警源¶
进入 告警服务 > 通用告警源,从列表中寻找需要删除的告警源。
如果告警源已启用,先将其禁用,然后点击 删除 图标 。
备注
在删除告警源之前,建议先确保没有告警规则正在使用该告警源。使用已删除告警源的告警规则将不会触发。
JAR 方式 ¶
在项目的 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>
创建一个解析类,并且实现
com.envisioniot.enos.alert_engine.core.share.datasource.dto.codec.StandardMetricResolver
。 参见示例代码>>.以 fat JAR 的形式进行打包,以在创建告警源时上传。
类名 则是解析类的全路径,例如 com.envisioniot.MySimpleCodec.
示例代码 ¶
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;
}