1 Star 0 Fork 2

毛明华 / xiniu-cloud-iot-trigger

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

框架图

组件功能

  • 设备数据满足触发条件时,向平台发出消息。

依赖关系

组件在运行时,依赖ETCD服务端、kafka服务端运行

  • 组建需从ETCD服务端中拉取和观察key前缀为 /registry/triggers/project/ 的所以数据——value。value中的数据是触发事件的规则。
  • 组建需从ETCD服务端中拉取和观察key前缀为 iot-trigger/template/ 的所以数据——value。value中的数据是消息模板,根据消息模板生成消息内容(暂未实现)。
  • 组件需要从kafka中的 topic devicedata-clean 中拉取设备数据;生成了消息,会放进kafka中的对应的topic中。

开发

  • 开发环境需要安装maven 3.2或以上版本
  • oracle JDK 1.8或以上版本。

快速部署

  1. 环境配置
[trigger]$ cd src/main/resources/  
[resources]$ vim application.properties  

在配置项的说明如下

key 类型 说明 举例
etcd_endpoints string etcd服务端的链接地址 http://172.168.1.240:2379
trigger.thread.pool.size int 触发器线程池的大小 20
kafka_consumer_bootstrap_servers string kafka消费者的ip和端口 172.168.1.233:9092或者172.168.1.233:9092,172.168.1.233:9093,172.168.1.233:9094
kafka_producer_bootstrap_servers string kafka生产者的ip和端口 172.168.1.233:9092或者172.168.1.233:9092,172.168.1.233:9093,172.168.1.233:9094
kafka.consumer.topic string kafka消费者topic devicedata-clean
kafka.consumer.topic string kafka生产者topic devicedata-alert
  1. 打包 (跳过项目中的测试代码),具体情况请根据maven命令进行操作
[trigger]$  mvn package -Dmaven.test.skip=true  
  1. 运行
[trigger]$  nohup java -jar target/iot-trigger-0.0.1-SNAPSHOT.jar > log.log &  
  1. 查看日志
[trigger]$  tail -f target/log.log  

触发规则

进入etcd客户端进行命令操作

  • 查看所有的触发规则

    $  etcdctl get /registry/triggers/project/ --prefix
  • 消息发送至数据总线,需要准许ETCD中的消息规则,如下的ETCD中的某个key

    /registry/messages/project/{project_id}/{topic}/{partition}/<rule_name>
    • 以上的key说明:将项目ID为project_id下设备产生的消息,发送到kafka中的topic中,选择的partition{partition}
  • 触发规则key设置:

    /registry/triggers/project/{project_id}/{rule_name}
  • 触发规则字段表达式,etcd中拉取的数据格式

    {
        "expr": {
            "uncap": {
                "sins":[{"gt": 0},{"leq":3}],
                "rp":"0 AND 1"
            },
            "xValue":{
                "sins":[{"gt": 0},{"leq":3}],
                "rp":"0 AND 1"
            }
        },
        "rp":"OR",
        "modelId":"9e9cc553-f4d3-48d7-9926-041284309339",
        "includeIds":[],
        "excludeIds":[],
        "serverity":  "Warning",
        "templateId": "templateId-1",
        "msg": "xxxx{{uncap}}xxxx",
        "name":"trigger3",
        "multi_alert":1
    }
  • 规则说明

    • expr中定义了需要进行判断的字段,有两个部分key分别是 sinsrp
      • sins该字段的多种判断方式的数组,比如 [{"gt":0},{"leq":3}],索引0对象表达大于于0,索引1的对象表达小于或等于3
        • gt代表大于
        • lt代表小于
        • eq代表相等
        • neq代表不相等
        • geq代表大于或则等于
        • leq代表小于或则等于
        • lt-deltagt-delta代表变化超过的范围时,就会触发。
          • 当数值向上变化超过设定的值时gt-delta会触发DeviceAlert,当变化范围恢复时,会触发DeviceRecovery
          • 当数值向下变化超过设定的值时lt-delta会触发DeviceAlert,当变化范围恢复时,会触发DeviceRecovery
        • (已废除)sigma
        • (已废除)nsigmapsigma
      • rp表示了每个表达式之间的关系比如0 AND 1,结合sins一起理解,表达的意思是:该字段如果值是大于0且小于等于3时,计算该字段的表达式结果为true
    • rp表示字段与字段之间的关系OR是或的关系,AND是与的关系,并且支持简单的表达式,比如: field1 AND (field2 OR field3)
    • templateId中定义了,条件满足出发后生生的消息提内容模板。(暂未实现模板定制消息内容的功能)
    • msg中则是消息体中的 msg 字段中的内容,其中双花括号{{}}中可以填写需要显示的字段的值,比如msg的值是我想看看uncap的值,值为:{{uncap}},那么出发告警后,得到的msg中的内容为我想看看uncap的值,值为:1
    • serverity 告警级别,包括Private Information Warnning Averag High Critical Disaster
    • includeIds需要准守这条规则的设备ID
    • excludeIds该组件,展示还不检查该字段
    • multi_alert 表示是否需要重复发送告警消息,0---不需要重复发送告警 非0---需要重复发送告警
  • 举例

    • key设置:如下设置了projectID10000项目中的所有设备都遵循rule_name_1中的处罚规则
    /registry/triggers/project/10000/rule_name_1
    • value设置:如下的json数据表示。
    规则内容如上述的json,表示当 uncap 的值 或则 xValue的值 大于0且小于等于3,时会触发该条规则,并发送事件消息。
  • 操作规则

    • 下面的命令则是修改或者添加规则的命令。
    $  etcdctl put /registry/triggers/project/10000/rule_name_1 '{}'
    • 删除规则
    $  etcdctl del /registry/triggers/project/10000/rule_name_1
  • 消息模板(暂未实现)

    • 消息中数据字段(data)的模板,etcd中拉取的数据格式
     iot-trigger/template/templateId-1 = "field-1,field-2,fielt3"
  • 发送到kafka中的消息

    • 发送到kafka的消息内容,data字段是根据模板Id中的内容而定。可以通过日志中查看,数据格式如下:
    {
        "rule": <PlateformBuild>/<ruleName>,
        "type": "DeviceAlert/DeviceRecovery",
        "time": 1578965231254,
        "serverity": "",
        "expersion": '{}',
        "producer": "iot-trigger",
        "data": '{"device": "", status": ""}',
        "msg":"xxxxxxxxxxxx"
    }

空文件

简介

告警触发器,根据告警规则,检查设备上报的数据是否需要发出高级消息。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/maominghua/xiniu-cloud-iot-trigger.git
git@gitee.com:maominghua/xiniu-cloud-iot-trigger.git
maominghua
xiniu-cloud-iot-trigger
xiniu-cloud-iot-trigger
master

搜索帮助