AWS | CloudWatch告警通知接入飞书&企业微信

架构图

创建飞书告警机器人

飞书机器人的创建方法此处不表,企业微信方案与此相同

记录机器人webhook地址

创建Lambda

https://us-east-1.console.aws.amazon.com/lambda/home?region=us-east-1#/discover

创建函数

  1. 命名函数名称

  2. 选择运行时,脚本语言

  3. 选择架构

编辑函数内容

代码:lambda_funcation.py

import requests
import json
import os
from datetime import datetime
import pytz
 
def lambda_handler(event,context):
    message = event['Records'][0]['Sns']
    date_time_str = message['Timestamp']
    Subject = message['Subject']
    sns_message = json.loads(message['Message'])
    region = message['TopicArn'].split(':')[-3]
    new_state_reason = sns_message['NewStateReason']
    # 事件中获取到UTC美国东部时区的时间,因此做时间转换
    date_time_format = '%Y-%m-%dT%H:%M:%S.%fZ'
    us_dt = datetime.strptime(date_time_str, date_time_format).replace(tzinfo=pytz.utc)
    cn_timezone = pytz.timezone('Asia/Shanghai')
    cn_dt = us_dt.astimezone(cn_timezone)
    cn_dt_str = cn_dt.strftime('%Y-%m-%d %H:%M:%S.%f %Z%z')
 
    if "ALARM" in Subject:
        title = '[AWS CDN] 警报!!'
    elif "OK" in Subject:
        title = '[AWS CDN] 故障恢复!'
    else:
        title = '[AWS CDN] 警报状态异常'
    content = "**【详情信息】**\n" \
              + "**时间**: " + cn_dt_str + "\n" \
              + "**内容**: " + Subject + "\n" \
              + "**状态**: <font color=\"comment\">{old}</font> => <font color=\"warning\">{new}</font>".format(old=sns_message['OldStateValue'],
                                                  new=sns_message['NewStateValue']) + "\n" \
              + "\n" \
              + "**AWS区域**: " + sns_message['Region'] + "\n" \
              + "**监控资源对象**: " + sns_message['Trigger']['Namespace'] + "\n" \
              + "**监控指标**: " + sns_message['Trigger']['MetricName'] + "\n" \
              + "\n" \
              + "**报警名称**: " + sns_message['AlarmName'] + "\n" \
              + "**报警创建方式**: " + sns_message['AlarmDescription'] + "\n" \
              + "**报警细节**: " + new_state_reason + "\n" \
              + "\n" \
              + "详情请点击:[Alarm](https://{region}.console.aws.amazon.com/cloudwatch/home?region={region}#s=Alarms&alarm={alarm})".format(region=region, alarm=sns_message['AlarmName'])
    data_alert = {
        "msg_type": 'interactive',
        "card": {
            "config": {
                "wide_screen_mode": True
            },
            "header": {
                "template": "red",
                "title": {
                    "tag": "plain_text",
                    "content": title
                }
            },
            "elements": [
                {
                    "tag": "div",
                    "text": {
                        "tag": "lark_md",
                        "content": content
                    }
                },
            ]
        }
    }
    data_recover = {
        "msg_type": 'interactive',
        "card": {
            "config": {
                "wide_screen_mode": True
            },
            "header": {
                "template": "green",
                "title": {
                    "tag": "plain_text",
                    "content": title
                }
            },
            "elements": [
                {
                    "tag": "div",
                    "text": {
                        "tag": "lark_md",
                        "content": content
                    }
                },
            ]
        }
    }
    WEBHOOK_KEY = os.getenv('WEBHOOK_KEY')
    try:
        if "OK" in Subject:
            response = requests.post(
                WEBHOOK_KEY,
                json=data_recover)
        else:
            response = requests.post(
                WEBHOOK_KEY,
                json=data_alert)
        print(response)
        print(response.json())
    except Exception as e:
        print("err=" + str(e))
        return {"error": e}

配置环境变量

脚本引用变量WEBHOOK_KEY,在脚本配置中添加

根据代码中引用的模块添加层

如何创建层文件

参考链接:https://repost.aws/zh-Hans/knowledge-center/lambda-import-module-error-python

# 本地服务器打包
mkdir python
pip3 install --target ./python requests
zip -r requests.zip python

上传后在lanbda中添加层

创建SNS

效果如下,主题将信息发送到多个订阅

创建主题

选择"标准"类型,填写主体名称即可

创建订阅

可以选择多种协议,比如AWS Lambda、电子邮件

选择上一节创建的lambda

创建告警CloudWatch

查询指标创建告警

条件配置

通知配置

选择上一节创建的SNS主题,仅配置“确定”和“告警中”两种状态。

通知示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值