新闻详情

新闻详情

首页 / 资讯中心 / 详情

AWS SDK for Python(Boto3)CloudWatch 实战指南:自定义指标、告警与 OpenTelemetry/PromQL 集成

发布时间:2026/11/15 22:13:25来源:尧图网络
AWS SDK for Python(Boto3)CloudWatch 实战指南:自定义指标、告警与 OpenTelemetry/PromQL 集成
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读本文以 python/example_code/cloudwatch/README.md 为核心骨架系统讲解如何使用 AWS SDK for PythonBoto3操作 Amazon CloudWatch覆盖两大类实战场景一是用资源接口创建自定义指标与经典指标告警cloudwatch_basics.py二是接入 OpenTelemetry 指标并用 PromQL 告警、查看告警 contributors、通过 mute rule 实现维护窗口静默cloudwatch_otel.py。读完本文你将掌握 CloudWatch 指标写入、统计查询、告警生命周期管理以及 OTLP 采集器配置与 PromQL 告警的完整调用链并了解仓库配套测试的组织方式。Amazon CloudWatch 提供可靠、可扩展且灵活的监控解决方案你可以在几分钟内开始使用。本文示例代码位于仓库 python/example_code/cloudwatch 目录。⚠️ 注意运行这些代码可能产生 AWS 账户费用请先了解 AWS 定价 与 免费套餐。运行测试同样可能产生 AWS 账户费用。建议遵循最小权限原则仅授予完成任务所需的最低权限Grant least privilege。这些代码未在所有 AWS 区域逐一测试AWS Regional Services。代码示例总览该目录下的示例分为两类Single actions单个 API 调用展示如何调用 CloudWatch 的单个服务函数。Scenarios场景通过多次调用同一服务内的多个函数完成一个具体任务。目录结构如下cloudwatch_basics.py自定义指标与告警管理场景。cloudwatch_otel.pyOpenTelemetry 指标与 PromQL 告警场景。otlp_collector_config.yamlOpenTelemetry Collector 的 OTLP 指标导出配置。requirements.txt依赖清单。test/基于 botocore Stubber 的单元测试。前置条件示例运行前需要一个 AWS 账户并已按官方指南配置好默认凭证与默认区域详见 python 目录 README 的前置条件说明。Python 3.6 或更高版本。进入示例目录并创建虚拟环境python -m venv .venv激活虚拟环境Windows 使用.venv\Scripts\activateLinux/macOS/Unix 使用source .venv/bin/activate然后安装依赖python -m pip install -r requirements.txtrequirements.txt 中声明的依赖为boto31.26.79与pytest7.2.1。其中boto3提供 CloudWatch 客户端与资源接口pytest用于运行配套单元测试。Single actions单函数调用清单README 列出了以下可单独调用的 CloudWatch API 操作并给出在源码中的精确位置操作源码位置底层 APIDeleteAlarmMuteRulecloudwatch_otel.py#L328delete_alarm_mute_ruleDeleteAlarmscloudwatch_basics.py#L264metric.alarms.delete()DescribeAlarmContributorscloudwatch_otel.py#L180describe_alarm_contributorsDescribeAlarmsForMetriccloudwatch_basics.py#L216metric.alarms.all()DisableAlarmActionscloudwatch_basics.py#L232alarm.disable_actions()EnableAlarmActionscloudwatch_basics.py#L232alarm.enable_actions()GetAlarmMuteRulecloudwatch_otel.py#L270get_alarm_mute_ruleGetMetricStatisticscloudwatch_basics.py#L123metric.get_statisticsGetOTelEnrichmentcloudwatch_otel.py#L79get_o_tel_enrichmentListAlarmMuteRulescloudwatch_otel.py#L292list_alarm_mute_rulesListMetricscloudwatch_basics.py#L37metrics.filter(...)PutAlarmMuteRulecloudwatch_otel.py#L216put_alarm_mute_rulePutMetricAlarmcloudwatch_otel.py#L114put_metric_alarmPutMetricDatacloudwatch_basics.py#L64metric.put_dataStartOTelEnrichmentcloudwatch_otel.py#L57start_o_tel_enrichmentStopOTelEnrichmentcloudwatch_otel.py#L98stop_o_tel_enrichment实现细节StartOTelEnrichment操作在 Boto3 中会被转换为蛇形命名start_o_tel_enrichmentOTel 前缀被拆分这是 cloudwatch_otel.py#L69-L71 注释中特别说明的调用陷阱。场景一管理自定义指标与告警cloudwatch_basics.py该场景展示以下完整流程创建一个监控某个 CloudWatch 指标的告警。通过PutMetricData向指标写入数据触发告警。从告警获取数据。删除告警。运行方式python cloudwatch_basics.py实现原理CloudWatchWrapper 封装cloudwatch_basics.py 以CloudWatchWrapper类封装资源接口基于boto3.resource(cloudwatch)核心方法包括list_metrics(namespace, name, recent)在指定命名空间内按名称过滤指标。若指标无维度则返回单个指标否则返回所有维度组合的指标。recentTrue时只返回最近 3 小时内活跃的指标RecentlyActivePT3H见 L38-L60。put_metric_data(namespace, name, value, unit)向指标写入单个数据点时间戳取当前 UTC 时间见 L65-L85。put_metric_data_set(namespace, name, timestamp, unit, data_set)写入一组数据所有数据共享同一时间戳与单位data_set是包含values列表与counts列表的字典两者长度必须一致见 L89-L120。get_metric_statistics(namespace, name, start, end, period, stat_types)按时间跨度拉取统计值见 L124-L155。create_metric_alarm(...)为指标创建告警见 L159-L213。get_metric_alarms(namespace, name)获取当前监控该指标的所有告警见 L217-L228。enable_alarm_actions(alarm_name, enable)启用或禁用告警动作可用于发送通知或自动响应告警状态变化见 L233-L262。delete_metric_alarms(namespace, name)删除监控指定指标的所有告警见 L265-L284。场景运行流程详解usage_demo()L291-L392的执行步骤写入 20 分钟的历史数据命名空间为doc-example-metric指标名为page_views单位Count。对每分钟生成一组 10 个随机值及其计数通过put_metric_data_set写入。创建告警告警名high_page_views统计类型Maximum周期period60秒eval_periods2阈值100比较操作符GreaterThanThreshold。告警创建后打印其 ARN 与当前状态。触发告警持续写入 100–200 之间的随机值直至告警状态从INSUFFICIENT_DATA变化每轮等待一个周期60 秒再重新加载状态等待数据最终一致。获取统计值对从起始时间到当前 UTC 时间的时间段调用get_metric_statistics统计类型为Average、Minimum、Maximum并以时间戳排序后打印数据点。列出告警遍历监控page_views的告警打印名称与状态。清理删除该指标的所有告警。单元测试验证test/test_cloudwatch_basics.py 通过 botocore Stubber 对上述每个方法做了参数化测试每个方法均覆盖正常路径与ClientError异常路径例如test_list_metrics校验返回的指标迭代器内容与期望一致。test_put_metric_data/test_put_metric_data_set校验写入调用与值/单位参数。test_create_metric_alarm校验告警名称等属性。test_get_metric_alarms/test_delete_metric_alarms校验告警的列出与批量删除。test_enable_alarm_actions分别校验enableTrue与enableFalse两条路径。测试统一从conftest.pytest/conftest.py引入仓库 python/test_tools 的公共 fixtures。场景二发送 OpenTelemetry 指标并用 PromQL 告警cloudwatch_otel.py该场景展示以下完整流程通过 OpenTelemetry Collector 将 OTLP 指标发送到 CloudWatch 指标端点。开启 OpenTelemetry enrichment让 CloudWatch 将这些指标与你的资源关联。创建基于 PromQL 查询的告警告警会对查询返回的每个序列逐一评估。检查导致告警进入ALARM状态的各个序列称为 contributors。为维护窗口静默mute告警然后清理资源。运行方式python cloudwatch_otel.py⚠️ 重要前提OTLP 指标摄取本身不是 AWS SDK 操作。要发送 OpenTelemetry 指标到 CloudWatch需要把 OpenTelemetry Collector 或 AWS Distro for OpenTelemetryADOTSDK 指向 CloudWatch OTLP 指标端点https://monitoring.region.amazonaws.com/v1/metricscloudwatch_otel.py#L13-L18。本场景演示的是这些指标落地 CloudWatch 之后的 SDK 操作。实现原理CloudWatchOTelWrapper 封装cloudwatch_otel.py 以CloudWatchOTelWrapper类封装。与场景一不同这里使用的是client 接口boto3.client(cloudwatch)因为 OpenTelemetry 相关操作只在客户端接口上可用而非高层的资源接口见 L37-L43。通过from_client()工厂方法可直接创建默认客户端包装器。核心方法start_otel_enrichment()为账户开启 OTel enrichment。开启后携带资源标识维度如带InstanceId维度的EC2 CPUUtilization的 vended 指标会被附加资源 ARN 与资源标签标签并可用 PromQL 查询。调用前必须先为账户启用资源标签遥测L58-L75。get_otel_enrichment_status()查询当前 enrichment 状态返回Running或StoppedL80-L96。stop_otel_enrichment()关闭 enrichment。已有 PromQL 告警不会被删除但 vended 指标不再附加资源 ARN 与标签因此按这些标签选择的查询将不再命中L99-L112。create_promql_alarm(...)创建 PromQL 告警详见下文。describe_alarm_contributors(alarm_name)获取告警 contributors详见下文。put_alarm_mute_rule(...)/get_alarm_mute_rule(name)/list_alarm_mute_rules(...)/delete_alarm_mute_rule(name)mute rule 的增查列删L217-L342。delete_alarms(alarm_names)按名称批量删除告警L345-L357。创建 PromQL 告警的关键参数create_promql_alarmL115-L177与经典指标告警有明显差异查询可一次匹配多个序列每个匹配序列被单独跟踪为一个contributor。不再统计“违反周期数”而是指定时长contributor 连续违反pending_period秒后进入ALARM停止违反recovery_period秒后回到OK。PromQL 告警初始状态为OK而非经典告警的INSUFFICIENT_DATA。参数说明参数含义取值约束query要评估的 PromQL 查询如avg(cpu_utilization_percent) 80。比较条件必须写在查询里没有独立的阈值参数。无evaluation_interval查询评估频率秒有效值为 10、20、30 及任何 60 的倍数最大 3600pending_periodcontributor 连续违反多久后进入ALARM秒默认 300recovery_periodcontributor 停止违反多久后回到OK秒默认 120description告警描述可选alarm_actions告警触发时通知的 ARN 列表如 SNS 主题可选实现上PromQL 评估参数位于EvaluationCriteria联合类型中与经典参数MetricName、Metrics互斥。使用EvaluationCriteria时必须同时设置EvaluationInterval且不得设置Period、Statistic、Threshold、ComparisonOperator、EvaluationPeriods、DatapointsToAlarm或TreatMissingDataL135-L140。查看告警 contributorsdescribe_alarm_contributorsL181-L212用于定位“到底是哪个主机/服务/Pod 在违反”而非只知道“有东西违反了”。每个 contributor 包含ContributorIdcontributor 标识。ContributorAttributes标识该序列的标签映射。StateReason状态原因。最近一次状态变更时间。方法内部通过NextToken循环分页拉取直到服务不再返回 tokentest_cloudwatch_otel.py 中的test_describe_alarm_contributors_paginates专门验证了这一分页行为。用 mute rule 实现维护窗口静默put_alarm_mute_ruleL217-L267是在已知维护窗口内抑制告警通知的推荐方式——mute rule 生效期间目标告警继续评估、继续切换状态但配置的动作如通知不会触发。这比“关闭告警动作后忘记重新开启”要可靠得多。参数含义取值约束namemute rule 名称无expression规则激活时间。周期窗口用五字段cron 表达式cron(Minutes Hours Day-of-month Month Day-of-week)如cron(0 2 * * SUN)表示每周日凌晨 2:00。注意是 5 个字段不是 EventBridge 的 6 个字段。一次性窗口用at(yyyy-MM-ddThh:mm)如at(2026-09-05T02:00)无duration激活后静默窗口的持续时长ISO 8601 格式范围PT1M1 分钟到P15D15 天如PT2H2 小时、P2DT12H2 天 12 小时alarm_names要静默的告警名称最多 100 个省略则对账户内全部告警生效可选timezone表达式评估所用时区如America/Los_Angeles可选description规则描述可选get_alarm_mute_rule返回规则完整配置包括调度、目标告警及当前状态SCHEDULED、ACTIVE、EXPIREDlist_alarm_mute_rules支持按AlarmName与Statuses过滤汇总。场景运行流程详解usage_demo()L362-L452假设 OTLP 指标已通过 OpenTelemetry Collector、CloudWatch agent 或 ADOT SDK 流入账户执行步骤为检查并开启 enrichment查询状态若为Stopped则开启并记录“本场景开启的”标记结束时回滚。创建 PromQL 告警查询为avg by (host_name) (cpu_utilization_percent{service_namecheckout}) 80evaluation_interval30、pending_period300、recovery_period120描述为“checkout 服务各主机平均 CPU 超过 80%”。等待并列出 contributors等待 30 秒第一次评估后调用describe_alarm_contributors若没有 contributor说明查询未匹配到任何序列——通常是因为这些标签的 OTel 指标还没到达需要先通过 OTLP 端点发送指标再重跑。创建 mute rule用cron(0 2 * * SUN)PT2H 时区America/Los_Angeles为目标告警建立每周日两小时的维护窗口随后查询其状态。列出相关 mute rules按告警名过滤列出。清理删除 mute rule 与告警若本场景开启了 enrichment 则一并关闭。单元测试验证test/test_cloudwatch_otel.py 覆盖了上述每个操作的成功与异常路径并对describe_alarm_contributors的多页聚合、put_alarm_mute_rule的表达式/时长/时区/目标告警参数组合进行了校验。补充OTLP Collector 配置与端点限制将 OTLP 指标送进 CloudWatch 有三种方式otlp_collector_config.yaml 中按集成度从高到低列出CloudWatch agent推荐AWS 托管的 OpenTelemetry Collector内置 CloudWatch 组件支持实体关联、运行时指标与 Container Insights。上游 OpenTelemetry Collector即该 YAML 配置的对象。自定义 OpenTelemetry Collector 构建。ADOT SDK完全不需要 Collector。前置条件Collector 需包含sigv4authextensioncontrib 发行版包含凭证方面EC2 上给实例角色附加CloudWatchAgentServerPolicy托管策略EKS 上通过 IRSA 将该策略绑定到 Collector 的 service account本地环境则对具备相同策略的 IAM 用户执行aws configure。启动方式otelcol-contrib --config otlp_collector_config.yaml随后把被埋点应用指向http://localhost:4318。关键配置点receiver仅开启 HTTP 协议0.0.0.0:4318因为 CloudWatch OTLP 端点仅支持 HTTP 1.1、不支持 gRPC可以先用 gRPC 接收应用数据再由 Collector 转换但本示例保持与上游一致的 HTTP-only。processorbatch批量处理send_batch_size: 200、timeout: 10s以保持在端点单请求限制未压缩 1 MB、1000 个数据点内留出余量。exporterotlphttp指向https://monitoring.us-east-1.amazonaws.com/v1/metrics压缩方式仅支持gzip与none鉴权使用sigv4auth。extensionSigV4 是推荐鉴权方式service: monitoring对应 metrics 端点签名logs 端点为logstraces 端点为xray。pipelinemetrics流水线 otlp receiver → batch processor → otlphttp exporter。YAML 注释中还记录了按账户与区域计的端点限制设计时值得参考限制项上限最大 TPS500新序列创建速率每 10 分钟窗口 1,000,000最大请求大小1 MB未压缩每请求最大数据点数1,000每序列每数据点最大元数据大小40 KB 标签与值最大标签数150Resource、Scope、Datapoint 属性合计时间戳窗口未来最多 10 分钟过去最多 14 天超出 TPS 或新序列限制返回429超出大小、数量、元数据、标签与时间戳限制返回400部分数据无效的请求返回200并只摄取有效指标。运行测试⚠️ 集成测试会向 AWS 发起真实请求可能产生费用请谨慎操作。单元测试使用 botocore Stubber 模拟响应不发真实请求、不产生费用。在示例目录运行python -m pytest -m not integ集成测试会真实创建与销毁账户内资源运行方式python -m pytest -m integ各示例的测试位于其test目录更多测试约定参见 python 目录 README 的 Tests 小节。参考资料CloudWatch 相关官方文档CloudWatch User Guide、CloudWatch API Reference。SDK for PythonBoto3CloudWatch 参考。仓库内可继续深入阅读的源码 cloudwatch_basics.py、cloudwatch_otel.py、otlp_collector_config.yaml 及其配套测试 test_cloudwatch_basics.py 与 test_cloudwatch_otel.py。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐aws-doc-sdk-examples 中的 Amazon CloudWatch Java SDK 2.x 实战指南从 Hello CloudWatch 到 PromQL 告警aws doc sdk examples 中的 Amazon CloudWatch Java SDK 2.x 实战指南从 Hello CloudWatch 到示例工程教程后端AWS SDK for Python 实战CloudWatch 监控与告警全解析AWS SDK for Python 实战CloudWatch 监控与告警全解析 前言 在云计算环境中监控系统资源和服务状态是运维工作的核心。Amazon示例工程教程后端ffmpeg-android预编译二进制文件使用指南5分钟快速集成到Android项目ffmpeg android预编译二进制文件使用指南5分钟快速集成到Android项目 ffmpeg android是一个专为Android平台构建的FFmp音视频移动开发构建工具上一篇MartyPC WebAssembly版本在浏览器中体验复古PC模拟的终极指南 下一篇forever配置文件导入导出共享配置策略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉