当前位置: 首页 > article >正文

CloudWatch 告警实战:CPU 飙了自动扩容,账单超了 Slack 通知

上周五晚上 11 点手机响了——线上服务 CPU 飙到 95%用户开始投诉卡顿。 等我打开电脑登上服务器已经过去 15 分钟了。手动扩了一台实例又花了 5 分钟。整个故障影响了将近 20 分钟。 后来我花了一个下午搭了一套 CloudWatch 告警 自动响应系统。现在 CPU 超过 80% 自动扩容账单超预算自动 Slack 通知。零人工干预睡觉都踏实了。 这篇记录下具体怎么搞的。 ## 先搞清楚 CloudWatch 的基本套路 CloudWatch 是亚马逊云科技的监控服务核心就三件事 1. **收指标**Metrics— EC2 的 CPU、内存、磁盘Lambda 的调用次数、错误率RDS 的连接数 2. **设告警**Alarms— 指标超阈值就触发 3. **做动作**Actions— 触发后干嘛发通知、自动扩容、跑 Lambda 画个图就是这样 指标超阈值 → CloudWatch Alarm → SNS Topic → Lambda/Email/Slack ↓ Auto Scaling Action ## 场景一CPU 超 80% 自动扩容 ### 前提 假设你有一个 Auto Scaling GroupASG里面跑着 2-6 台 EC2 实例。 ### 第一步创建扩容策略 python import boto3 autoscaling boto3.client(autoscaling, region_nameap-northeast-1) # 创建扩容策略加 1 台实例 response autoscaling.put_scaling_policy( AutoScalingGroupNamemy-web-asg, PolicyNamescale-out-on-high-cpu, PolicyTypeSimpleScaling, AdjustmentTypeChangeInCapacity, ScalingAdjustment1, Cooldown300 # 扩容后 5 分钟内不重复扩 ) scale_out_arn response[PolicyARN] print(f扩容策略 ARN: {scale_out_arn}) ### 第二步创建 CloudWatch 告警 python cloudwatch boto3.client(cloudwatch, region_nameap-northeast-1) cloudwatch.put_metric_alarm( AlarmNamehigh-cpu-alarm, AlarmDescriptionCPU 超过 80% 持续 3 分钟自动扩容, MetricNameCPUUtilization, NamespaceAWS/EC2, StatisticAverage, Period60, # 每 60 秒采样一次 EvaluationPeriods3, # 连续 3 个周期都超阈值才触发 Threshold80.0, ComparisonOperatorGreaterThanThreshold, Dimensions[ { Name: AutoScalingGroupName, Value: my-web-asg } ], AlarmActions[scale_out_arn], # 触发扩容策略 UnitPercent ) print(告警创建完成) 关键参数解释 - Period60 EvaluationPeriods3连续 3 分钟 CPU 80% 才触发。避免瞬时毛刺误触发。 - Cooldown300扩容后 5 分钟内不会再次扩容。新实例需要时间启动和加入负载均衡。 ### 缩容也别忘了 流量下来后要自动缩容不然一直跑着白花钱 python # 缩容策略 response autoscaling.put_scaling_policy( AutoScalingGroupNamemy-web-asg, PolicyNamescale-in-on-low-cpu, PolicyTypeSimpleScaling, AdjustmentTypeChangeInCapacity, ScalingAdjustment-1, Cooldown300 ) scale_in_arn response[PolicyARN] # CPU 低于 30% 持续 10 分钟缩容 cloudwatch.put_metric_alarm( AlarmNamelow-cpu-alarm, AlarmDescriptionCPU 低于 30% 持续 10 分钟自动缩容, MetricNameCPUUtilization, NamespaceAWS/EC2, StatisticAverage, Period60, EvaluationPeriods10, Threshold30.0, ComparisonOperatorLessThanThreshold, Dimensions[ { Name: AutoScalingGroupName, Value: my-web-asg } ], AlarmActions[scale_in_arn], UnitPercent ) 缩容的判定条件比扩容松——10 分钟而不是 3 分钟。因为缩容比扩容风险大误缩容会导致服务抖动。 ## 场景二账单超预算 Slack 通知 这个更实用。每个月云上花了多少钱超预算了马上通知。 ### 第一步创建 SNS 主题 python sns boto3.client(sns, region_nameus-east-1) # 账单指标只在 us-east-1 # 创建通知主题 topic sns.create_topic(Namebilling-alerts) topic_arn topic[TopicArn] # 订阅邮件先用邮件测试后面换 Slack sns.subscribe( TopicArntopic_arn, Protocolemail, Endpointyour-emailexample.com ) print(fTopic ARN: {topic_arn}) # 注意邮件订阅需要厷邮箱点确认链接 ### 第二步设置账单告警 python cloudwatch_billing boto3.client(cloudwatch, region_nameus-east-1) cloudwatch_billing.put_metric_alarm( AlarmNamemonthly-bill-over-100, AlarmDescription当月账单超过 $100 告警, MetricNameEstimatedCharges, NamespaceAWS/Billing, StatisticMaximum, Period21600, # 6 小时检查一次 EvaluationPeriods1, Threshold100.0, ComparisonOperatorGreaterThanThreshold, Dimensions[ { Name: Currency, Value: USD } ], AlarmActions[topic_arn], UnitNone ) print(账单告警设置完成) 踩坑提醒 - 账单指标只存在 us-east-1 区域不管你的资源在哪个区。 - 需要先在控制台开启账单告警Billing → Billing Preferences → Receive Billing Alerts。 - EstimatedCharges 是当月累讱预估值不是每天的增量。 ### 第三步接入 Slack 邮件通知太容易漏看了。接 Slack 更实时。 用一个 Lambda 函数做转发 python # lambda_function.py — 部署到 Lambda import json import urllib.request SLACK_WEBHOOK_URL https://hooks.slack.com/services/YOUR/WEBHOOK/URL def lambda_handler(event, context): # 从 SNS 消息中提取告警信息 message event[Records][0][Sns][Message] # 解析 CloudWatch 告警详情 try: alarm json.loads(message) alarm_name alarm.get(AlarmName, Unknown) new_state alarm.get(NewStateValue, Unknown) reason alarm.get(NewStateReason, ) text f *CloudWatch Alert*\n text f*告警名称:* {alarm_name}\n text f*状态:* {new_state}\n text f*原因:* {reason[:200]} except: text f⚠️ CloudWatch 告警:\n{message[:500]} # 发送到 Slack payload json.dumps({text: text}).encode(utf-8) req urllib.request.Request( SLACK_WEBHOOK_URL, datapayload, headers{Content-Type: application/json} ) urllib.request.urlopen(req) return {statusCode: 200} 然后让 SNS 触发这个 Lambda python # 订阅 Lambda 到 SNS 主题 sns.subscribe( TopicArntopic_arn, Protocollambda, Endpointarn:aws:lambda:us-east-1:123456789012:function:slack-notifier ) ## 场景三自定义指标蝑控 CloudWatch 不只能监控亚马逊云科技自带的指标。你的业务指标也能推上去 枯如监控 API 响应时间 python cloudwatch.put_metric_data( NamespaceMyApp/API, MetricData[ { MetricName: ResponseTime, Value: 235.5, Unit: Milliseconds, Dimensions: [ { Name: Endpoint, Value: /api/v1/users } ] } ] ) 在你的 API 代码里每次请求结束后推一个数据点然后对这个自定义指标论告警/ python cloudwatch.put_metric_alarm( AlarmNameapi-slow-response, AlarmDescriptionAPI 响应时间趇凇 1 秒, MetricNameResponseTime, NamespaceMyApp/API, StatisticAverage, Period60, EvaluationPeriods5, Threshold1000.0, ComparisonOperatorGreaterThanThreshold, Dimensions[ { Name: Endpoint, Value: /api/v1/users } ], AlarmActions[topic_arn], UnitMilliseconds ) ## 成本 CloudWatch 的定价其实挲便宜 | 项目 | 免费额度 | 超出价格 | |------|----------|-----------| | 基础监控5 分钟间隔| 所有 EC2 免费 | — | | 详细盟掤1 分钟间隔| — | $0.30/实例/月 | | 告警 前 10 个免费 | $0.10/告警/月 | |0自定义指标 | — | $0.30/指标/月 | | API 调用 | 前 100 万次免费 | $0.01/千次 | 一般中小项目10 个告警 几个自定义指标每月不到 $5。 ## 我的告警清单 跑了一段时间后总结出这些告警是必须有的 | 告警 | 阈值 | 为什么 | |------|------|--------| | CPU 80% | 连续 3 分钟 | 扩容信号 | | CPU 30% | 连续 10 分钟 | 缩容省钱 | | 磁盘 85% | 连续 5 分钟 | 磁盘满了服务会挂 | | 内存 90% | 连续 5 分钟 | OOM 前告警 | | 5xx 错误 1% | 连续 2 分钟 | 服务异常 | | API P99 2s | 连续 5 分钟 | 用户体验恶化 | | 月账单 预算 80% | 6 小时检查 | 避免月底惊喜 | | Lambda 错误率 5% | 连续 3 分钟 | 函数异常 | ## 踩坑总结 1. **账单指标只在 us-east-1** — 这个坑很多人都踩过在其他区域创建账单告警会发现没有指标数据。 2. **告警状态有三种** — OK、ALARM、INSUFFICIENT_DATA。新建的告警初始状态是 INSUFFICIENT_DATA不代表有问题。 3. **内存指标需要 CloudWatch Agent** — EC2 默认不推送内存使用率需要安装 CloudWatch Agent。 4. **告警名称全局唯一** — 同一个账号同一个区域内不能重名。建议用 {环境}-{服务}-{指标} 的命名规范。 5. **SNS 邮件订阅要确认** — 创建订阅后必须去邮箱点确认链接否则收不到通知。 以上代码基于亚马逊云科技 CloudWatch Auto Scaling SNS LambdaPython boto3 验证通过。 --- CloudWatch 免费套餐包含 10 个告警、100 万次 API 调用和所有 EC2 基础监控5 分钟间隔入门阶段完全够用。 CloudWatch 文档https://docs.aws.amazon.com/cloudwatch/

相关文章:

CloudWatch 告警实战:CPU 飙了自动扩容,账单超了 Slack 通知

上周五晚上 11 点,手机响了——线上服务 CPU 飙到 95%,用户开始投诉卡顿。等我打开电脑登上服务器,已经过去 15 分钟了。手动扩了一台实例,又花了 5 分钟。整个故障影响了将近 20 分钟。后来我花了一个下午搭了一套 CloudWatch 告…...

AirMusic 音乐视频推送手机变音响变电视 支持 AirPlay DLNA、Google Cast、Sonos、Denon HEOS 支持iPhone安卓电脑

AirMusic 一款可以将 Android 上正在播放的音频流推送到局域网 AirPlay 音箱的小工具 ​下载地址: 链接:​​https://pan.quark.cn/s/84ac7a6831ee​​ 链接:​​https://pan.xunlei.com/s/VOLKmmcSbOOmeiPqXp-wM0pIA1?pwdzvs8#​​ 简单…...

从对讲机到手机通话:图解单工、半双工、全双工,选错通信方式有多坑?

从对讲机到手机通话:图解单工、半双工、全双工,选错通信方式有多坑? 想象一下,你正在用对讲机组织一场户外活动。每次按下通话键时,你无法听到队友的回应;而当你松开按键准备接收时,对方又可能正…...

Qwen-Image-2512企业级部署方案:高可用架构设计

Qwen-Image-2512企业级部署方案:高可用架构设计 1. 企业级部署需求分析 现在越来越多的企业开始将AI图像生成能力集成到自己的业务系统中,但真正要在生产环境稳定运行,可不是简单装个软件就能解决的。特别是像Qwen-Image-2512这样的高质量文…...

终极免费NCM格式解密工具:ncmppGui完整使用指南

终极免费NCM格式解密工具:ncmppGui完整使用指南 【免费下载链接】ncmppGui 一个使用C编写的转换ncm文件的GUI工具 项目地址: https://gitcode.com/gh_mirrors/nc/ncmppGui 你是否曾经遇到过这样的困扰?在网易云音乐下载的歌曲只能在官方客户端播放…...

【C++面经】轻舟智航自动驾驶应用软件开发实习岗位

一面: 1、项目相关 (1)介绍一下你的多线程模型以及线程之间是怎麽通信的; (2)“消息风暴”是什么怎麽造成的 (3)关于机器人项目的串口协议是怎么自定义的 2、智能指针讲一下 3、Malloc和new的区别(底层实现也说一下) 能不能对mall…...

6.1.1 软件->PEP标准(PSF基金会):Python 标准库标准(Python Standard Library Specification)

详解 一句话定位:由 Python 软件基金会(PSF)制定并维护的官方规范,定义了 Python 标准库的核心组件、接口、行为准则及跨平台兼容性要求,是 multiprocessing、os、sys 等内置库的开发与使用依据 基本信息 特性说明制…...

DeepSpeed多卡通信避坑指南:all_to_all_single的5个常见错误及解决方法

DeepSpeed多卡通信实战:all_to_all_single高频问题排查手册 在分布式训练中,高效的数据交换是性能优化的关键环节。DeepSpeed作为当前最流行的深度学习优化库之一,其all_to_all_single方法被广泛应用于多GPU间的张量交换场景。然而在实际工程…...

scGPT环境配置:从零搭建深度学习研究平台

1. 深度学习环境搭建入门指南 刚接触scGPT时,我被复杂的依赖关系搞得晕头转向。后来才发现,搭建深度学习环境就像组装乐高积木,只要按步骤来其实并不难。这里分享我在NVIDIA A6000显卡上成功配置scGPT环境的完整过程,特别适合刚入…...

别再手动跳纤了!用MEMS光开关搭建智能光配线架(iODF)实战指南

MEMS光开关构建智能光配线架(iODF)的工程实践 凌晨三点的数据中心,运维工程师小王面对密密麻麻的ODF配线架,手中的光纤跳线在昏暗的灯光下泛着微光。业务部门紧急要求的链路调整,意味着他又要在这个狭小空间里完成数十…...

论文写作新利器:书匠策AI,让数据分析变得像呼吸一样自然!

在学术探索的征途中,每一位研究者都像是手持地图的探险家,而数据,则是那张藏满宝藏的神秘地图。然而,面对浩如烟海的数据,如何高效、准确地挖掘出其中的价值,成为了许多研究者心中的难题。别担心&#xff0…...

线性分类器:从基础概念到逻辑运算的实战解析

1. 线性分类器入门:从二维空间到超平面 想象你面前有一张白纸,上面随机散落着红色和蓝色的圆点。如果能够用一支笔直接画条直线把两种颜色的点分开,这就是线性分类器最直观的体现。在机器学习领域,这种能通过直线(或高…...

XSS攻防实战笔记:从反射、存储到DOM型的漏洞原理与靶场复现

1. XSS漏洞初探&#xff1a;当输入框变成攻击入口 第一次接触XSS漏洞时&#xff0c;我盯着那个普通的搜索框看了很久——谁能想到这个每天都要打交道的网页元素&#xff0c;竟然能成为黑客的攻击入口&#xff1f;记得当时我在一个测试网站上随手输入<script>alert(嘿&…...

文墨共鸣新手指南:如何构造高质量测试文本以验证‘异曲同工’判别力

文墨共鸣新手指南&#xff1a;如何构造高质量测试文本以验证‘异曲同工’判别力 1. 认识文墨共鸣系统 文墨共鸣是一个将深度学习技术与传统水墨美学相结合的语义相似度分析系统。它基于阿里达摩院开源的StructBERT大模型&#xff0c;专门针对中文语义优化设计。 这个系统的核…...

AIVideo赋能电商带货:自动生成产品介绍视频,节省拍摄剪辑成本

AIVideo赋能电商带货&#xff1a;自动生成产品介绍视频&#xff0c;节省拍摄剪辑成本 1. 电商视频制作的痛点与解决方案 在电商行业&#xff0c;产品介绍视频已经成为提升转化率的关键因素。然而传统视频制作面临三大难题&#xff1a; 成本高昂&#xff1a;专业拍摄团队日薪…...

单链表经典例题:相交链表 你一看就会

力扣的题目链接原题 https://leetcode.cn/problems/intersection-of-two-linked-lists/ 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交…...

Cosmos-Reason1-7B多场景落地:覆盖机器人、自动驾驶、工业质检等6大领域

Cosmos-Reason1-7B多场景落地&#xff1a;覆盖机器人、自动驾驶、工业质检等6大领域 1. 项目概述 Cosmos-Reason1-7B是NVIDIA推出的7B参数规模的多模态视觉语言模型&#xff0c;专注于物理常识理解和思维链推理能力。作为Cosmos世界基础模型平台的核心组件&#xff0c;它能够…...

我试了试用 SQL查 Linux日志,好用到飞起

最近发现点好玩的工具&#xff0c;迫不及待的想跟大家分享一下。大家平时都怎么查Linux日志呢&#xff1f;像我平时会用tail、head、cat、sed、more、less这些经典系统命令&#xff0c;或者awk这类三方数据过滤工具&#xff0c;配合起来查询效率很高。但在使用过程中有一点让我…...

别再纠结React拖拽库了!2025年实战对比:dnd-kit vs react-dnd vs antd Table

2025年React拖拽库深度选型指南&#xff1a;从垂直列表到复杂交互的全场景决策 在React生态系统中&#xff0c;拖拽功能实现一直是开发者面临的技术选型难题之一。随着2025年React 19的稳定发布和各类库的迭代演进&#xff0c;dnd-kit、react-dnd和antd Table等解决方案各自形成…...

别再为STM32F407+LAN8720以太网通信发愁了,这份CubeMX+FreeRTOS+LWIP的避坑配置指南请收好

STM32F407LAN8720以太网通信实战避坑指南&#xff1a;从CubeMX配置到FreeRTOSLWIP调优 实验室的灯光下&#xff0c;你盯着屏幕上闪烁的Ping请求超时提示&#xff0c;第17次尝试让STM32F407通过LAN8720与主机通信。作为嵌入式开发者&#xff0c;以太网通信本该是基础技能&#x…...

OpenClaw学习总结_II_频道系统_1:WhatsApp集成详解

II. 频道系统 - 1. WhatsApp &#x1f4cd; 课程位置 阶段&#xff1a;II. 频道系统 课序&#xff1a;第 1 课 前置知识&#xff1a;I. 核心架构&#xff08;Gateway/Session/Tools&#xff09; 后续课程&#xff1a;II-2. Telegram&#x1f3af; 本课核心问题&#xff08;你不…...

Java笔记2(修改)

一、Java变量1、定义&#xff1a;变量是程序中最基础的存储单元&#xff0c;运行时值是可以改变的,本质上就是在内衬纸开辟的一块空间使用变量访问这块空间2、数据类型&#xff1a;变量名值public static void main(String[ ] args){int age 20;}System.out.println("age…...

失信被执行人查询小工具 | 在线快速查询入口

&#x1f4cc; 工具介绍 本失信被执行人查询小工具&#xff0c;无需下载 APP、无需注册、无需付费&#xff0c;打开就能用&#xff0c;实时查询全国失信名单、限制消费人员、被执行人信息。 适合&#xff1a; ・合作做生意前查对方信用 ・交友、相亲、招聘背调 ・查自己是否被误…...

【VLM】HopChain视觉语言推理多跳数据合成框架

note 【数据合成方案进展】讲得是多跳视觉语言推理数据合成框架&#xff0c;用于应对视觉语言模型&#xff08;VLMs&#xff09;在长思维链&#xff08;CoT&#xff09;推理中的错误累积以及大多数 RLVR 视觉语言训练数据缺乏全程依赖视觉证据的复杂推理链的问题。工作在《Hop…...

Vibe Coding实战:如何用AI生成你的第一个React天气应用(附完整Prompt模板)

Vibe Coding实战&#xff1a;用AI构建React天气应用的完整指南 从零开始的AI编程体验 去年夏天&#xff0c;我尝试用传统方式开发一个天气应用&#xff0c;花了整整三周时间调试API接口和React组件状态管理。而今年&#xff0c;借助Vibe Coding技术&#xff0c;同样的项目我只用…...

【前端知识】React生态你了解多少?

React生态你了解多少&#xff1f; React 常见生态组件**一、React 生态系统整体结构图示****二、核心生态组件详解 可执行示例****1. React Router&#xff08;路由管理&#xff09;****2. Ant Design&#xff08;UI 组件库&#xff09;****3. Zustand&#xff08;轻量状态管理…...

CSS3文字闪烁效果实战:3种方法让你的网页标题更吸睛(附完整代码)

CSS3文字闪烁效果实战&#xff1a;3种方法让你的网页标题更吸睛 在电商促销页面或活动公告栏中&#xff0c;一个醒目的标题往往能瞬间抓住用户的注意力。文字闪烁效果作为一种经典的视觉设计手法&#xff0c;通过动态变化的光影和色彩&#xff0c;能够有效提升关键信息的传达效…...

避坑指南:Windows搭建Turn服务器常见问题及解决方案

Windows平台Turn服务器部署避坑实战手册 在实时音视频通信领域&#xff0c;Turn服务器扮演着关键的中继角色&#xff0c;特别是在NAT穿透场景中。Windows平台因其广泛的用户基础&#xff0c;成为不少开发团队的首选部署环境。然而&#xff0c;从源码编译到服务配置的每一步都可…...

vxe-table列头合并避坑指南:从基础配置到高级动态调整

vxe-table列头合并实战指南&#xff1a;从基础配置到动态策略优化 在企业级前端开发中&#xff0c;数据表格的展示需求往往超出基础功能范畴。当我们需要将多个逻辑相关的列头合并为一个视觉单元时&#xff0c;vxe-table的merge-header-cells功能便成为解决这一痛点的利器。本文…...

避坑指南:从EXT151安装包解压到QRC成功集成Cadence的全流程复盘

避坑指南&#xff1a;从EXT151安装包解压到QRC成功集成Cadence的全流程复盘 在集成电路设计领域&#xff0c;寄生参数提取是确保芯片性能准确模拟的关键环节。Cadence的QRC工具作为行业标准解决方案&#xff0c;其安装配置过程却常常成为工程师的"拦路虎"。本文将基于…...