报警系统QuickAlarm使用手册

简介: 本片将主要说明QuickAlarm该如何使用,以及使用时需要注意事项

本片将主要说明QuickAlarm该如何使用,以及使用时需要注意事项


1. 基本使用姿势



首先我们不做任何的自定义操作,全部依靠系统默认的实现,我们的使用步骤如下


1. 添加注册文件


首先在项目的资源目录下,添加注册文件 alarm.properties,文件内容如下

## 应用名,必填
appName=test
## 报警规则文件所在的路径,如果采用系统默认加载方式,必填
## / 开头,表示存的是绝对路径
## 非/开头,表示存的是系统相对路径,一般是放在资源目录下
alarmConfPath=/tmp/alarmConfig
## 最大的报警类型,非必填
maxAlarmType=1000
## 默认报警用户,必填
defaultAlarmUsers=yihui
复制代码


具体存放的位置,可以参考下图,放在resources目录下(源码中,是放在测试资源目录下的)

image.png


2. 添加报警规则


根据注册文件中指定的路径,设置报警规则文件,如我们的报警规则文件

内容为json串格式,支持格式化的json串解析,为了节省篇幅,下面压缩成一行,点击获取json格式化小工具


/tmp/alarmConig:

{"default":{"level":"LOG","autoIncEmergency":true,"max":30,"min":3,"threshold":[{"level":"SMS","threshold":20,"users":["345345345345","123123123123"]},{"level":"WEIXIN","threshold":10,"users":["yihui","erhui"]},{"level":"LOG","threshold":5,"users":["yihui","erhui"]}],"users":["yihui"]},"NPE":{"level":"WEIXIN","autoIncEmergency":false,"max":30,"min":0,"threshold":[{"level":"SMS","threshold":20,"users":["345345345345","123123123123"]},{"level":"WEIXIN","threshold":10,"users":["3h    ui","4hui"]}],"users":["yihui"]},"XXX,YYY":{"level":"EMAIL","autoIncEmergency":true,"max":30,"min":3,"threshold":[{"level":"SMS","threshold":20,"users":["345345345345","123123123123"]},{"level":"WEIXIN","threshold":10,"users":["yihui","erhui"]},{"level":"EMAIL","threshold":5,"users":["yihui@xxx.com","erhui@xxx.com"]}],"users":["yihui@xxx.com"]}}
复制代码


3. 测试类


一个简单的使用测试

@Test
public void sendMsg() throws InterruptedException {
    String key = "NPE";
    String title = "NPE异常";
    String msg = "出现NPE异常了!!!";
    AlarmWrapper.getInstance().sendMsg(key, title, msg);  // 微信报警
    // 不存在异常配置类型, 采用默认报警, 次数较小, 则直接部署出
    AlarmWrapper.getInstance().sendMsg("zzz", "不存在xxx异常配置", "报警嗒嗒嗒嗒");
    Thread.sleep(1000);
}
复制代码


II. 报警执行机器扩展



前面的报警规则配置中,有WEIXIN, SMS, EMAIL的报警,但是系统只提供了两个NONE和LOG,所以我们可以看下如何自定义实现上面的三个


1. 实现IExecute接口


邮件报警

public class EmailExecute extends LogExecute {
    @Override
    public void sendMsg(List<String> users, String title, String msg) {
        super.sendMsg(users, title, msg);
    }
}
复制代码


短信报警

/**
 * Created by yihui on 2018/2/7.
 */
public class SmsExecute extends LogExecute {
    @Override
    public void sendMsg(List<String> users, String title, String msg) {
        super.sendMsg(users, title, msg);
    }
}
复制代码


微信报警

/**
 * Created by yihui on 2018/2/7.
 */
public class WeiXinExecute extends LogExecute {
    @Override
    public void sendMsg(List<String> users, String title, String msg) {
        super.sendMsg(users, title, msg);
    }
}
复制代码


说明,因为没有具体的实现,所以我们直接用日志输出来模拟,所以就都继承了LogExecute, 实际使用中,可以在上面补上相应的实现代码


2. 添加SPI定义


在 resources 目录下,新增


  • 目录:META-INF/services/
  • 文件:com.hust.hui.alarm.core.execut.api.IExecute


文件内容为上面几个实现类的全路径

com.hust.hui.alarm.core.test.execute.EmailExecute
com.hust.hui.alarm.core.test.execute.SmsExecute
com.hust.hui.alarm.core.test.execute.WeiXinExecute
复制代码


目录结构如:

image.png


3. 测试


public static void main(String[] args) throws InterruptedException {
    // 测试异常升级的case
    // 计数 [1 - 2] 默认报警(即无日志) (其中 < 3 的是因为未达到下限, 采用的默认报警)
    // 计数 [3 - 4] 默认邮件报警(其中 < 5 采用的默认报警, 与下面的区别是报警用户)
    // 计数 [5 - 9] 邮件报警 (大于5小于10根据上升规则,还是选择邮件报警)
    // 计数 [10 - 19] 微信报警
    // 计数 [20 - 30] 短信报警
    // 计数 [31 -] 默认报警 (超过上限, 不报警)
    for (int i = 0; i < 40; i++) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                AlarmWrapper.getInstance().sendMsg("YYY", "异常报警升级测试");
            }
        }).start();
    }
    Thread.sleep(1000 * 600);
}
复制代码


实测输出结果如下:

18:36:28.997 [Thread-12] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 26 >>> 异常报警升级测试
18:36:28.998 [Thread-24] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 16 >>> 异常报警升级测试
18:36:28.998 [Thread-33] INFO  alarm - Do send msg by EMAIL to user:[yihui@xxx.com, erhui@xxx.com], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 6 >>> 异常报警升级测试
18:36:28.998 [Thread-22] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 18 >>> 异常报警升级测试
18:36:28.998 [Thread-26] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 14 >>> 异常报警升级测试
18:36:28.998 [Thread-23] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 17 >>> 异常报警升级测试
18:36:28.998 [Thread-35] INFO  alarm - Do send msg by EMAIL to user:[yihui@xxx.com], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 4 >>> 异常报警升级测试
18:36:28.997 [sms-sender1-thread-4] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 10 >>> 异常报警升级测试
18:36:28.997 [sms-sender1-thread-3] INFO  alarm - Do send msg by EMAIL to user:[yihui@xxx.com, erhui@xxx.com], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 5 >>> 异常报警升级测试
18:36:28.997 [Thread-18] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 27 >>> 异常报警升级测试
18:36:28.997 [Thread-11] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 28 >>> 异常报警升级测试
18:36:28.998 [Thread-21] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 19 >>> 异常报警升级测试
18:36:28.997 [sms-sender1-thread-2] INFO  alarm - Do send msg by EMAIL to user:[yihui@xxx.com, erhui@xxx.com], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 9 >>> 异常报警升级测试
18:36:28.998 [Thread-14] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 24 >>> 异常报警升级测试
18:36:28.997 [Thread-10] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 29 >>> 异常报警升级测试
18:36:28.998 [Thread-15] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 22 >>> 异常报警升级测试
18:36:28.998 [Thread-16] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 23 >>> 异常报警升级测试
18:36:28.998 [sms-sender1-thread-5] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 15 >>> 异常报警升级测试
18:36:28.998 [Thread-9] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 30 >>> 异常报警升级测试
18:36:28.998 [sms-sender1-thread-1] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 11 >>> 异常报警升级测试
18:36:28.998 [Thread-13] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 25 >>> 异常报警升级测试
18:36:28.998 [Thread-19] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 21 >>> 异常报警升级测试
18:36:28.998 [Thread-34] INFO  alarm - Do send msg by EMAIL to user:[yihui@xxx.com], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 3 >>> 异常报警升级测试
18:36:29.010 [sms-sender1-thread-4] INFO  alarm - Do send msg by EMAIL to user:[yihui@xxx.com, erhui@xxx.com], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 7 >>> 异常报警升级测试
18:36:29.010 [sms-sender1-thread-3] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 12 >>> 异常报警升级测试
18:36:29.011 [sms-sender1-thread-2] INFO  alarm - Do send msg by WEIXIN to user:[yihui, erhui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 13 >>> 异常报警升级测试
18:36:29.014 [sms-sender1-thread-5] INFO  alarm - Do send msg by EMAIL to user:[yihui@xxx.com, erhui@xxx.com], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 8 >>> 异常报警升级测试
18:36:29.014 [sms-sender1-thread-1] INFO  alarm - Do send msg by SMS to user:[345345345345, 123123123123], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 20 >>> 异常报警升级测试
复制代码


III. 报警规则加载自定义



1. 实现IConfLoader接口


自定义加载器,给了一个最基本的


public class SelfAlarmConfLoader implements IConfLoader {
    @Override
    public RegisterInfo getRegisterInfo() {
        RegisterInfo registerInfo = new RegisterInfo();
        registerInfo.setMaxAlarmType(100);
        registerInfo.setDefaultAlarmUsers("yihui");
        registerInfo.setAppName("test");
        return registerInfo;
    }
    @Override
    public boolean alarmEnable() {
        return true;
    }
    @Override
    public int order() {
        return 0;
    }
    @Override
    public AlarmConfig getAlarmConfig(String alarmKey) {
        //db 查询,获取对应的配置信息
        // 下面是模拟,返回一个固定的配置
        AlarmConfig alarmConfig = new AlarmConfig();
        alarmConfig.setAlarmLevel("WEIXIN");
        alarmConfig.setAutoIncEmergency(false);
        alarmConfig.setMinLimit(10);
        alarmConfig.setMaxLimit(14);
        alarmConfig.setUsers(Arrays.asList("yihui"));
        alarmConfig.setAlarmThreshold(Collections.emptyList());
        return alarmConfig;
    }
}
复制代码


2. 添加SPI配置


在resources目录下新增


  • 目录: META-INF/services
  • 文件: com.hust.hui.alarm.core.loader.api.IConfLoader


文件内容

com.hust.hui.alarm.core.test.loader.SelfAlarmConfLoader
复制代码


3. 测试


同样是上面的代码,输出结果

18:43:04.275 [sms-sender1-thread-2] INFO  alarm - Do send msg by WEIXIN to user:[yihui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 10 >>> 异常报警升级测试
18:43:04.275 [sms-sender1-thread-4] INFO  alarm - Do send msg by WEIXIN to user:[yihui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 12 >>> 异常报警升级测试
18:43:04.276 [sms-sender1-thread-1] INFO  alarm - Do send msg by WEIXIN to user:[yihui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 11 >>> 异常报警升级测试
18:43:04.275 [sms-sender1-thread-5] INFO  alarm - Do send msg by WEIXIN to user:[yihui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 14 >>> 异常报警升级测试
18:43:04.275 [sms-sender1-thread-3] INFO  alarm - Do send msg by WEIXIN to user:[yihui], title: [test], msg:  ip:172.17.13.18 >>> key:YYY >>> 异常数: 13 >>> 异常报警升级测试
复制代码


4. 说明


系统默认的order是10,所以如果在测试上面的第二步时,不妨把com.hust.hui.alarm.core.test.loader.SelfAlarmConfLoader#order返回值,改成大于10,这样就会走到默认的配置加载类


采用 SelfAlarmConfLoader 时,前面说的两个基础配置文件,是可以没有的,完全不会有任何影响,因为对应的注册类和报警规则,都是右这个类内部提供了



相关文章
|
监控 开发者
告警功能| 学习笔记
快速学习告警功能
告警功能| 学习笔记
|
3月前
|
监控 Unix Shell
Nightingale——夜莺监控系统部署邮件告警系统【三】
Nightingale——夜莺监控系统部署邮件告警系统【三】
44 1
Nightingale——夜莺监控系统部署邮件告警系统【三】
|
3月前
|
监控 关系型数据库 Linux
肝了这么多夜,总结一下:Linux各项指标监控及问题排查。
肝了这么多夜,总结一下:Linux各项指标监控及问题排查。
|
6月前
|
监控 安全 C#
开发公司电脑监控软件的报警系统:一个C#示例
在当今数字化时代,企业对其计算机网络和系统的安全性和稳定性越来越重视。为了确保员工遵守公司政策、保护机密信息以及监控系统的正常运行,开发一种可靠的公司电脑监控软件变得至关重要。本文将介绍如何使用C#编写一个简单而有效的报警系统,以便监控关键数据并在必要时发出警报。
178 0
|
监控 机器人 开发工具
python监控脚本外发钉钉告警
python监控脚本外发钉钉告警
187 1
|
运维 监控
WGCLOUD的巡检报告功能体验说明
作为一款专业的开源运维软件,巡检报告是必不可少的功能了,WGCLOUD也有巡检报告的
|
存储 监控 Cloud Native
【笔记】用户指南—监控与告警—配置告警
您可以在控制台上配置计算资源监控指标和存储资源监控指标的告警规则。本文将介绍如何配置实例的告警规则。
131 0
【笔记】用户指南—监控与告警—配置告警
|
云安全 监控 关系型数据库
日志审计常见问题排查手册
日志审计常见问题排查手册
1831 1
日志审计常见问题排查手册
|
监控 网络协议 Linux
还在用命令行查问题吗?云监控提供30余种服务器监控指标,等你来用!
云监控主机监控上线啦,支持控制台一键安装和命令行手工安装,提供30余种监控指标、秒级频率、进程级粒度。
35664 0
|
监控 NoSQL Redis
RedisManager使用手册(六)-- 监控功能介绍
RedisManager Monitor功能和query功能介绍,Monitor模块对Redis 集群的重要指标进行监控,如平均内存占用、客户端连接数、cache命中率,节点内存碎片等,Monitor 模块中支持查看 Config、Info、Slowlog 和查询数据功能。
2166 0