热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

阈值报警功能

所谓web,即使你我素未谋面,便知志趣相投;足不出户,亦知世界之大。​01–什么是阈值报警功能在我们前端监控系统中,虽然我们收集了用户实时访问应用数据信息,并提供可视化界面方便用户

所谓web,即使你我素未谋面,便知志趣相投;足不出户,亦知世界之大。


01 – 什么是阈值报警功能

在我们前端监控系统中,虽然我们收集了用户实时访问应用数据信息,并提供可视化界面方便用户查询,但是作为一款监控系统,却少了灵魂的东西,那就是自动报警功能,因为我们并不喜欢,也没人愿意时时刻刻查看监控系统。因此,我们需要自动报警。
那自动报警怎么做呢?自动报警意味着我们事先定义好一系列规则,当达到设定条件,系统将触发我们定义的行为。

那需要些什么呢?那我们就一步一步来搭建这个监控报警功能。

主要阶段:定义触发规则、任务调度框架、邮件通知服务。

定义触发规则:我们的前端监控,会主要追踪三种报警情况(js错误率达到设定阈值报警、api错误率达到阈值报警、访问速度慢报警)。

《阈值报警功能》

任务调度框架:任务框架有很多,并且都是开源的。由于我们的后台使用nodeJs,并且数据存储是mongo。所以选了agenda。下图是各种框架对比。

《阈值报警功能》

邮件通知服务:目前邮件通知服务也有很多,我们选的是阿里云的邮件推送。使用起来简单,每天有200的免费额度可以使用。

02 — 实现过程

界面上的事我就不多说了,大家可以上监控平台看一下。我们来看一下如何定义任务调度-邮件推送。

配置Agenda任务调度,创建agenda实例:
const mOngoConnectionString= ‘mongodb://127.0.0.1:27017/agendatask’;
const agenda = new Agenda({ db: { address: mongoConnectionString } });
agenda.processEvery(’30 seconds’);

配置阿里云邮件推送,这里使用STMP方式去发送邮件。
const transporter = nodemailer.createTransport({

"host": "smtpdm.aliyun.com",
"port": 25,
"secureConnection": true, // use SSL, the port is 465
"auth": {
"user": '*********',
"pass": '*********'
}

});
var mailOptiOns= {

from: '前端监控平台管理员', // sender address mailfrom must be same with the user
to: options.email, // list of receivers
subject: subject, // Subject line
replyTo: '****',//custom reply address
html: body, // html body

};
transporter.sendMail(mailOptions, function (error, info) {

if (error) {
console.log('Message sent: ' + error);
}
console.log('Message sent: ' + info.response);

});

在用户点击开启/关闭监控警报的时候,我们为用户在后台创建或取消相应的任务。

//创建/取消发送邮件任务
/*
options.email 邮件
options.alarmType 邮件类型(jsError,apiError,perfSpeed)
options.times 间隔时间(s)
options.state 任务状态(true/false)
options.limitValue
options.appKey
*/
function createTask(options) {

//取消任务
agenda.cancel({ name: `send alarm email`, "data.appKey": options.appKey, "data.alarmType": options.alarmType });
if (!options.state) {
return;
}
(async function () {
await agenda.start();
let job = agenda.create(`send alarm email`, options);
job.repeatEvery(`${options.times} minutes`, {
skipImmediate: true
});
await job.save();
})();

};
定义调度任务实现:

《阈值报警功能》

别忘了,在应用起来后我们会开启agenda任务调度,不然不会触发任务调度。
exports.startTask = function () {

//定义任务
agenda.define(`send alarm email`, (job, done) => {
sendEmail(job.attrs.data);
done();
});
//开启任务
(async function () {
await agenda.start();
})();

};

创建完任务后,agenda会在数据库中生成相应的任务,之后agenda回去调用相应的服务:

《阈值报警功能》

邮件接收详情:

《阈值报警功能》

好了,源码已经上传到github,也可以去监控平台使用了,此功能目前只对注册用户开放哦。

喜欢请点个赞呗

或者去https://github.com/kisslove/w… Star一下

或者打赏一下

再或者……

哈哈,想法有点多了。


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
author-avatar
vm经典全屏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有