前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于腾讯云云函数和企业微信机器人实现探针监控系统

基于腾讯云云函数和企业微信机器人实现探针监控系统

原创
作者头像
buzzfrog
发布2023-04-17 12:22:47
4930
发布2023-04-17 12:22:47
举报
文章被收录于专栏:云上修行云上修行

背景

随着研发的进展,我们线上系统逐步上线,如何确保我们线上服务的稳定运转,监控告警是非常重要的环节。监控告警是一个很大的话题,有多种模型来描述。本文仅讲述通过系统外部以黑盒的方式探测系统正常与否。腾讯云对于通用的问题,是能监控到并且通过邮件、电话的方式及时提醒。但我们系统内部业务和技术逻辑层面的问题,腾讯云是无法做到良好支持的。(比如,腾讯云可以很好的监控HTTP状态码非200的问题并报警,但我们基础设施正常,HTTP返回200,但HTTP响应的body中code不等于0,这种问题腾讯云是很难解决的)。

因此了解业务逻辑的探针服务是有必要建设的。

系统概要设计

探针服务主要目标是监控HTTP API接口是否运转良好,如果出现故障及时通知到研发工程师解决问题。

整个系统分为 定时器、探测逻辑模块、报警模块。通过腾讯云-云函数构建。

定时器通过腾讯云云函数的定时器触发器完成,目前设定时1分钟运行一次。

探测逻辑模块通过封装request发送HTTP请求,并检查HTTP响应头是否为200,检查HTTP响应body体中code是否为0、必要的其他内容检测来完成探测。

报警模块通过企业微信的机器人发送告警消息。

探测逻辑模块

新建腾讯云云函数
新建腾讯云云函数

因为是入门文章,这里选择从头开始;函数类型选择事件函数;

示例代码:

代码语言:javascript
复制
'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
};

定时器模块

触发器的配置
触发器的配置

这里的腾讯云云函数的触发器的配置,即 系统概要设计 中的定时器。

报警模块

  1. 添加企业微信机器人(Mac环境) 右键点击企业微信群,在弹出菜单中选择“管理聊天信息”(或点击右上角的三个点)
如何进入添加群机器人页面
如何进入添加群机器人页面
群机器人列表
群机器人列表
添加群机器人
添加群机器人

企业微信机器人创建完成后,可以获得一个webhook地址。

  1. 构建发送企业微信信息的模块 机器人支持发送text和markdown两种类型的消息,这里仅展示发送text消息的示例代码。
代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 系统概要设计
  • 探测逻辑模块
  • 定时器模块
  • 报警模块
  • 参考文档
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档