tencent cloud

文档反馈

云服务器异常自动备份与重启

最后更新时间:2024-01-22 20:52:28

    操作背景

    对于企业的生产环境而言,监控与报警不可或缺的,完善的监控与及时的报警和自动化处理,可以帮助企业快速定位并解决问题,从而减少经济损失。
    腾讯云事件总线(EventBridge,EB)是一款安全、稳定、高效的无服务器事件管理平台。事件中心的事件总线可以接收来自您自己的应用程序、软件即服务(SaaS)和腾讯云服务的实时事件及相关数据流,通过集成消息推送和 SCF 云函数,实现告警信息的事实通知和自动化处理。
    本文以服务器异常为例,为您介绍当云服务器产生告警事件后,如何基于事件总线 EventBridge 和云函数 SCF,实现告警消息的事实推送和硬盘快照的自动回滚,完成自动化运维架构的快速搭建。

    架构设计

    整体架构设计如下图所示。当云服务器某台机器出现异常告警,CVM 会自动产生告警事件并主动推送给 EB,经过 EB 绑定的告警规则筛选后,完成到通知渠道的消息触达及时通知到用户,同时触发云函数,以调用 API 的方式完成硬盘快照的快速回滚,保证业务及时恢复。
    
    
    基本流程如下:实例产生告警事件 > EB 规则筛选过滤 > 投递至消息推送 & 云函数 > 云函数通过调用接口完成硬盘数据的备份及实例重启 > 重启完成后推送用户.

    操作步骤

    步骤1:创建函数并实现创建快照和重启逻辑

    1. 登录 云函数控制台
    2. 创建新函数,操作详情见 使用控制台创建一个事件函数
    3. 完成调用 API 接口的代码逻辑编写,代码示例如下:
    exports.main_handler = async (event, context) => {
    // Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
    const tencentcloud = require("tencentcloud-sdk-nodejs");
    
    const CvmClient = tencentcloud.cvm.v20170312.Client;
    const CbsClient = tencentcloud.cbs.v20170312.Client;
    var secretId = process.env.secretId //环境变量注入您账号的 secretId
    var secretKey = process.env.secretKey //环境变量注入您账号的 secretKey
    var insID = event.subject
    
    const clientConfig1 = {
    credential: {
    secretId: secretId,
    secretKey: secretKey,
    },
    region: "ap-guangzhou",
    profile: {
    httpProfile: {
    endpoint: "cvm.tencentcloudapi.com",
    },
    },
    };
    
    const client1 = new CvmClient(clientConfig1);
    const params1 = {
    "InstanceIds": [
    ${替换成需要重启的实例ID}
    ],
    "StopType": "SOFT"
    };
    client1.RebootInstances(params1).then(
    (data) => {
    console.log(data);
    },
    (err) => {
    console.error("error", err);
    }
    );
    
    const clientConfig2 = {
    credential: {
    secretId: secretId,
    secretKey: secretKey,
    },
    region: "ap-guangzhou",
    profile: {
    httpProfile: {
    endpoint: "cbs.tencentcloudapi.com",
    },
    },
    };
    
    const client2 = new CbsClient(clientConfig2);
    const params2 = {
    "DiskId": ${替换成需要备份的的硬盘ID}
    };
    client2.CreateSnapshot(params2).then(
    (data) => {
    console.log(data);
    },
    (err) => {
    console.error("error", err);
    }
    );
    };
    
    您也可以通过 API Explorer 快速生成示例代码。

    步骤2:创建事件规则并完成告警事件的筛选过滤

    2. 事件集中,选择云服务事件集 > default
    3. default事件集详情中,单击管理事件规则
    4. 事件规则中,单击新建事件规则。创建规则用于过滤和转换事件。
    4.1 云服务器磁盘只读事件为例,创建规则如下:
    规则1:接收磁盘只读异常事件
    
    
    规则2:接收实例重启事件
    
    
    4.2 事件规则也支持自定义编辑,您可根据实际需求,自定义您的事件规则信息。示例如下:
    筛选所有来自广州地域的云服务器事件。
    {
    "source":"cvm.cloud.tencent",
    "region":"ap-guangzhou"
    }
    筛选指定实例 ID 的云服务器事件。
    {
    "source":"cvm.cloud.tencent",
    "subject":[
    "ins-xxxxxx",
    "ins-xxxxxx"
    ]
    }

    步骤3:绑定事件目标并完成后端处理逻辑的绑定 和推送目标的设置

    创建好规则信息后,根据指引,为规则绑定投递目标,以上述 demo 为例:
    对于规则1,需要同时绑定消息推送云函数两类型目标。
    消息推送
    云函数
    选择指定方式接收告警信息。
    
    
    绑定 步骤1 创建的云函数,实现告警事件自动化处理。
    
    
    对于规则2,只需绑定消息推送目标。
    
    

    步骤4:测试使用流程,发送模拟事件,检验流程是否通过

    完成配置后,便已完成告警自动处理链路的搭建,您BN 可通过模拟告警事件,测试流程是否可以正常运行:
    函数成功调用:
    
    
    实例重启:
    
    
    创建快照:
    
    
    告警信息接收:
    
    
    重启邮件接收:
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持