单元 4:配置告警


为监测设备的性能,你可以为任何设备异常自定义告警级别,告警类型,告警内容和告警规则。本单元展示如何启用告警以监控水表的数据。详细步骤如下。

步骤 1:创建告警源

由于水表的数据为非 EnOS 标准数据格式,本步骤将创建告警源以监控 Kafka 消息,并自定义转换方式,使用数据映射 JAR 包构建告警指标。

数据映射 JAR 包

JAR 包将实现 StandardMetricResolver 方法,该方法将在创建告警源时定义,以取出 Kafka 消息中的 flow 值并将其转换为告警数据。


更多信息,参见 告警源

  1. 添加以下依赖。

    <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. 使用以下示例代码创建一个实现 StandardMetricResolver 的解析类。

    package com.example.alertsource;
    
    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 com.google.gson.reflect.TypeToken;
    import lombok.extern.slf4j.Slf4j;
    
    import java.util.Map;
    
    @Slf4j
    public class CodecAlertData implements StandardMetricResolver {
     private static final String METRIC = "flow";
    
     private static final String ORG_ID = "yourOrgId";
     private static final String INSTANCE = "XolflP2C";
     private static final String TIMEZONE = "+08:00";
    
     private static final Gson GSON = new Gson();
    
     @Override
     public void init() {
       // do nothing
     }
    
     @Override
     public Metric decode(String msg, Map<String, String> context) {
       log.info("consume msg: {}, context: {}", msg, context);
    
       Metric metric = new Metric();
    
       try {
         Map<String, Object> inputData = GSON.fromJson(msg, new TypeToken<Map<String, Object>>() {}.getType());
    
         final long timestamp = System.currentTimeMillis();
    
         metric.setMetric(METRIC);
         metric.setOrgId(ORG_ID);
         metric.setInstance(INSTANCE);
         metric.setTimezone(TIMEZONE);
         metric.setTimestamp(timestamp);
         metric.setValue(String.valueOf(inputData.get(METRIC)));
    
         log.info("output metric: {}", metric);
    
         return metric;
       } catch (Throwable t) {
         log.error("process data error, ", t);
    
         return metric;
       }
     }
    }
    


  3. 创建一个 JAR 文件。

告警源

  1. EnOS 管理控制台 中选择 告警管理 > 告警源

  2. 点击 新建告警源,在 接入源 页面配置下列信息。

    • 名称:水表告警源
    • 类型:Kafka 客户端
    • Topic:输入在 单元 3Kafka Pub 节点中的 topic。


    ../../_images/alert_source_source.png


  3. 点击 下一步,在 数据映射 页面配置下列信息。

    • 方式:JAR
    • 类名:com.example.alertsource.CodecAlertData
    • 文件:上传以上创建的 JAR 文件。


    ../../_images/alert_source_data_mapping.png


  4. 点击 确认 创建该告警源。

  5. 告警源 页面中启用告警源。


    ../../_images/alert_source_enable.png

步骤 2:创建告警级别

  1. EnOS 管理控制台 中选择 告警管理 > 告警级别

  2. 点击 新增级别,在 添加级别 页面配置下列信息。

    • 级别编号:WaterMeterWarning
    • 级别描述:警告


  3. 点击 确认 创建该告警级别。


    ../../_images/alert_severity2.png


更多信息,参见 告警级别

步骤 3:创建告警类型

  1. EnOS 管理控制台 中选择 告警管理 > 告警类型

  2. 点击 新建类型,在 添加类型 页面配置下列信息。

    • 类型编号:FlowOverThreshold
    • 类型描述:流量超过阈值


  3. 点击 确认 创建该告警类型。


    ../../_images/alert_type2.png


更多信息,参见 告警类型

步骤 3:创建告警规则

  1. EnOS 管理控制台 中选择 告警管理 > 告警规则
  2. 点击 新建规则,并在 添加告警规则 页面配置下列信息后点击 确认


更多信息,参见 告警规则

基本信息

  • 规则名称:水表规则
  • 规则编号:RuleForWaterMeter


../../_images/alert_rule_basic.png

触发器

指定触发指标。

  • 触发器源:其他
    • Alert Source:选择步骤 1 中创建的告警源(水表告警源)
    • 指标:flow
    • 数据类型:Number


../../_images/alert_rule_trigger.png

告警条件

设置告警条件,当 flow 值等于或超过 10000 时触发告警。

  • 告警条件:阈值
    • 触发器:flow
    • 运算符:>=
    • 类型:Value
    • :10000


../../_images/alert_rule_condition.png

告警详情

  • 告警内容:流量超过 10000
  • 告警级别:选择步骤 2 中创建的告警级别(警告)。
  • 告警类型:选择步骤 3 中创建的告警类型(流量超过阈值)。


../../_images/alert_rule_details.png

下一单元

模拟水表数据