随着研发的进展,我们线上系统逐步上线,如何确保我们线上服务的稳定运转,监控告警是非常重要的环节。监控告警是一个很大的话题,有多种模型来描述。本文仅讲述通过系统外部以黑盒的方式探测系统正常与否。腾讯云对于通用的问题,是能监控到并且通过邮件、电话的方式及时提醒。但我们系统内部业务和技术逻辑层面的问题,腾讯云是无法做到良好支持的。(比如,腾讯云可以很好的监控HTTP状态码非200的问题并报警,但我们基础设施正常,HTTP返回200,但HTTP响应的body中code不等于0,这种问题腾讯云是很难解决的)。
因此了解业务逻辑的探针服务是有必要建设的。
探针服务主要目标是监控HTTP API接口是否运转良好,如果出现故障及时通知到研发工程师解决问题。
整个系统分为 定时器、探测逻辑模块、报警模块。通过腾讯云-云函数构建。
定时器通过腾讯云云函数的定时器触发器完成,目前设定时1分钟运行一次。
探测逻辑模块通过封装request发送HTTP请求,并检查HTTP响应头是否为200,检查HTTP响应body体中code是否为0、必要的其他内容检测来完成探测。
报警模块通过企业微信的机器人发送告警消息。
因为是入门文章,这里选择从头开始;函数类型选择事件函数;
示例代码:
'use strict';
const request = require('request');
exports.main_handler = async (event, context) => {
const probe = new Promise((resolve, reject) => {
request({
url: 'https://buzzfrog.cn/path?queryString=queryStringValue',
method: 'GET',
}, function(err, res) {
if (!err && res.statusCode == 200) {
console.log(res);
resolve('success');
} else {
console.log(err);
reject(err);
}
});
});
const probeRes = await probe;
console.log('probeRes===>', probeRes);
if(probeRes !== 'success') {
const postData = {
"msgtype": "text",
"text": {
"content": "[测试消息,请忽略]XXX服务的接口XXX响应不正常,请关注",
"mentioned_list":["@all"]
}
}
request({
url: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=很重要的Key',
method: 'POST',
headers: {
"content-type": "application/json",
},
body: JSON.stringify(postData)
}, function(err, res) {
if (!err && res.statusCode == 200) {
resolve('success')
} else {
reject(err)
}
});
}
return event
};
这里的腾讯云云函数的触发器的配置,即 系统概要设计 中的定时器。
企业微信机器人创建完成后,可以获得一个webhook地址。
const request = require('request');
function send2Robot(robotKey, content) {
const postData = {
msgtype: 'text',
text: {
content,
mentioned_list: ['@all'],
},
};
request({
url: `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${robotKey}`,
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify(postData),
});
}
机器人配置说明: 企业微信机器人配置说明
request文档: https://www.npmjs.com/package/request
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。