閾值報警功能

所謂web,即便你我素未謀面,便知志趣相投;足不出戶,亦知世界之大。html


01 - 什麼是閾值報警功能前端

在咱們前端監控系統中,雖然咱們收集了用戶實時訪問應用數據信息,並提供可視化界面方便用戶查詢,可是做爲一款監控系統,卻少了靈魂的東西,那就是自動報警功能,由於咱們並不喜歡,也沒人願意時時刻刻查看監控系統。所以,咱們須要自動報警。
那自動報警怎麼作呢?自動報警意味着咱們事先定義好一系列規則,當達到設定條件,系統將觸發咱們定義的行爲。node

那須要些什麼呢?那咱們就一步一步來搭建這個監控報警功能。git

主要階段:定義觸發規則、任務調度框架、郵件通知服務。github

定義觸發規則:咱們的前端監控,會主要追蹤三種報警狀況(js錯誤率達到設定閾值報警、api錯誤率達到閾值報警、訪問速度慢報警)。web

圖片描述

任務調度框架:任務框架有不少,而且都是開源的。因爲咱們的後臺使用nodeJs,而且數據存儲是mongo。因此選了agenda。下圖是各類框架對比。mongodb

圖片描述

郵件通知服務:目前郵件通知服務也有不少,咱們選的是阿里雲的郵件推送。使用起來簡單,天天有200的免費額度可使用。數據庫

02 — 實現過程api

界面上的事我就很少說了,你們能夠上監控平臺看一下。咱們來看一下如何定義任務調度-郵件推送。app

配置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: '前端監控平臺管理員<admin@hubing.online>', // 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一下

或者打賞一下

再或者……

哈哈,想法有點多了。

相關文章
相關標籤/搜索