所谓网,即使你我素不相识,也知道志趣相投;足不出户,你就会知道世界的大小。01-什么是阈值报警功能在我们的前端监控系统中,虽然我们实时采集了用户访问的应用数据信息,并提供了可视化的界面供用户查询,但是作为一个监控系统,缺少的是灵魂,那就是自动报警功能,因为我们不喜欢它,也没有人愿意一直查看监控系统。因此,我们需要自动报警。那自动报警呢?自动报警是指我们事先定义了一系列的规则,当满足设定的条件时,系统就会触发我们定义的行为。你需要什么?接下来我们就一步步搭建这个监控告警功能。主要阶段:定义触发规则、任务调度框架、邮件通知服务。定义触发规则:我们前端监控主要会跟踪三种告警(js错误率达到设定阈值告警、api错误率达到阈值告警、访问速度慢告警)。任务调度框架:任务框架有很多,而且都是开源的。由于我们的后台使用的是nodeJs,而数据存储是mongo。所以我选择了议程。下图是各种框架的对比。邮件通知服务:目前有很多邮件通知服务,我们选择阿里云的邮件推送服务。它易于使用,每天有200个免费积分可用。02——实现过程界面就不多说了,大家可以去监控平台看看。我们来看看如何定义任务调度——邮件推送。配置Agenda任务调度,创建agenda实例:constmongoConnectionString='mongodb://127.0.0.1:27017/agendatask';constagenda=newAgenda({db:{地址:mongoConnectionString}});agenda.processEvery('30seconds');配置阿里云邮件推送,这里使用STMP发送邮件。consttransporter=nodemailer.createTransport({"host":"smtpdm.aliyun.com","port":25,"secureConnection":true,//使用SSL,端口为465"auth":{"user":'*********',"pass":'************'}});varmailOptions={from:'前端监控平台管理员',//发件人地址mailfrom必须与userto:options.email,//收件人列表subject:subject,//主题linereplyTo:'****',//自定义回复地址html:body,//htmlbody};transporter.sendMail(mailOptions,function(error,info){if(error){console.log('Messagesent:'+error);}console.log('Messagesent:'+info.response);});当用户点击开启/关闭监控告警时,我们在后台为用户创建或取消相应的任务。//创建/取消发送邮件任务/*options.emailemailoptions.alarmType邮件类型(jsError,apiError,perfSpeed)options.times间隔时间(s)options.state任务状态(true/false)options.limitValueoptions.appKey*/functioncreateTask(options){//取消任务agenda.cancel({name:`sendalarmemail`,"data.appKey":options.appKey,"data.alarmType":options.alarmType});if(!options.state){return;}(asyncfunction(){awaitagenda.start();letjob=agenda.create(`sendalarmemail`,options);job.repeatEvery(`${options.times}minutes`,{skipImmediate:true});awaitjob.save();})();};定义调度任务实现:别忘了,我们会在申请后开启agenda任务调度,否则不会触发任务调度。exports.startTask=function(){//定义任务agenda.define(`sendalarmemail`,(job,done)=>{sendEmail(job.attrs.data);done();});//开始任务(asyncfunction(){awaitagenda.start();})();};任务创建完成后,agenda会在数据库中生成相应的任务,然后agenda会返回并调用相应的服务:监控平台。该功能目前只对注册用户开放。喜欢的话请点个赞或者上https://github.com/kisslove/w...Star或者打赏或者...哈哈,我的想法很多。