使用 AWS CLI 查询 CloudWatch Metric Stream 配置:get-metric-stream 命令实战
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
aws cloudwatch get-metric-stream是 AWS CLI 中用于获取单个指标流(Metric Stream)完整配置信息的核心命令,适用于审计、排障和自动化脚本中读取指标流的当前状态。本指南以仓库中的官方示例 get-metric-stream.rst 为骨架,结合 service-2.json 中定义的 API 模型,逐字段解读命令的输入参数与输出结构,并串联put-metric-stream、list-metric-streams、start/stop-metric-streams、delete-metric-stream等配套命令,帮助你完整掌握 CloudWatch Metric Stream 生命周期管理。
什么是 CloudWatch Metric Stream
CloudWatch Metric Stream 是一种持续、近乎实时地将 CloudWatch 指标数据传输到目标端点的机制。它会把指标数据推送到 Amazon Kinesis Data Firehose 投递流,再由 Firehose 将数据写入 S3、OpenSearch 等目的地,供下游监控与分析系统消费。与通过GetMetricData轮询拉取不同,指标流采用"推"模式,指标一旦产生即可被流式转发。
每个指标流在创建时都需要绑定:
- FirehoseArn:接收指标数据的 Kinesis Data Firehose 投递流 ARN;
- RoleArn:CloudWatch 用于向 Firehose 写入数据所扮演的 IAM 角色 ARN;
- OutputFormat:输出格式,支持
json、opentelemetry0.7、opentelemetry1.0; - 可选的 IncludeFilters / ExcludeFilters:按命名空间和指标名精确控制哪些指标被流转发。
在 AWS CLI 仓库中,指标流相关的全部命令示例集中在 awscli/examples/cloudwatch/ 目录,get-metric-stream正是其中负责"读配置"的一环。
get-metric-stream 命令用法
基本语法与参数
按官方示例 get-metric-stream.rst,查询指标流信息的命令如下:
aws cloudwatch get-metric-stream \ --name QuickFull-GuaFbs该命令只有一个必需参数:
| 参数 | 必填 | 说明 |
|---|---|---|
--name | 是 | 要查询的指标流名称,字符串长度为 1 至 255 个字符 |
在底层 API 模型中,GetMetricStreamInput结构(见 service-2.json)将Name标记为唯一required成员,形状为MetricStreamName(最大长度 255、最小长度 1)。也就是说,CLI 侧除--name外没有任何可选参数,这是一个轻量、幂等的只读查询操作。
完整输出示例
执行上述命令后,返回的 JSON 输出如下(取自仓库官方示例):
{ "Arn": "arn:aws:cloudwatch:us-east-1:123456789012:metric-stream/QuickFull-GuaFbs", "Name": "QuickFull-GuaFbs", "FirehoseArn": "arn:aws:firehose:us-east-1:123456789012:deliverystream/MetricStreams-QuickFull-GuaFbs-WnySbECG", "RoleArn": "arn:aws:iam::123456789012:role/service-role/MetricStreams-FirehosePutRecords-JN10W9B3", "State": "running", "CreationDate": "2024-10-11T18:48:59.187000+00:00", "LastUpdateDate": "2024-10-11T18:48:59.187000+00:00", "OutputFormat": "json", "IncludeLinkedAccountsMetrics": false }输出字段逐一解读
GetMetricStreamOutput结构在 service-2.json 中定义了完整字段,结合示例输出可做如下解读:
| 字段 | 类型 | 含义 |
|---|---|---|
Arn | 字符串 | 指标流的 Amazon 资源名称(ARN),形如arn:aws:cloudwatch:<region>:<account>:metric-stream/<name> |
Name | 字符串 | 指标流名称,即查询时传入的--name值 |
FirehoseArn | 字符串 | 接收该指标流数据的 Kinesis Data Firehose 投递流 ARN |
RoleArn | 字符串 | CloudWatch 向 Firehose 写入数据所使用的 IAM 角色 ARN |
State | 字符串 | 指标流状态,可能值为running(运行中)与stopped(已停止) |
CreationDate | 时间戳 | 指标流的创建时间 |
LastUpdateDate | 时间戳 | 指标流配置最近一次更新的时间 |
OutputFormat | 字符串 | 输出格式,有效值为json、opentelemetry0.7、opentelemetry1.0 |
IncludeLinkedAccountsMetrics | 布尔 | 若为true且该指标流位于监控账户(monitoring account),则流中包含监控账户所关联源账户的指标 |
IncludeFilters | 数组 | 存在时表示仅这些命名空间/指标被流式传输(白名单语义) |
ExcludeFilters | 数组 | 存在时表示仅这些命名空间/指标不被流式传输,其余账户内指标全部转发(黑名单语义) |
StatisticsConfigurations | 数组 | 描述哪些指标额外携带附加统计量(additional statistics)的配置 |
其中OutputFormat的枚举值在 service-2.json 的MetricStreamOutputFormat形状中定义,共三个合法取值:json、opentelemetry0.7、opentelemetry1.0(后两者对应 OpenTelemetry 协议的不同版本,便于直接对接 OTLP 生态的采集器与分析平台)。
输出中未展示字段的触发条件
官方示例输出之所以没有IncludeFilters、ExcludeFilters与StatisticsConfigurations字段,是因为该示例指标流创建时未使用过滤器和附加统计配置(见 put-metric-stream.rst 中仅设置--name、--firehose-arn、--role-arn、--output-format json和--no-include-linked-accounts-metrics)。如果指标流配置了这些项,get-metric-stream会如实返回它们。
以过滤器为例,MetricStreamFilter结构(见 service-2.json)包含两个成员:
Namespace:指标命名空间,仅可含 ASCII 可打印字符(32 至 126),且至少包含一个非空白字符;MetricNames:要包含或排除的具体指标名列表;省略时表示整个命名空间全部包含/排除;每个指标名同样只允许 ASCII 可打印字符且含至少一个非空白字符。
同时模型明确指出:一个指标流的过滤器总计最多允许 1000 个名称(命名空间名与指标名之和),例如可以是 10 个命名空间过滤器各带 99 个指标,或 20 个命名空间过滤器各带 49 个指标。这一配额在通过get-metric-stream核对配置规模时值得注意。
结合输出字段判断指标流健康状态
get-metric-stream最典型的运维用途就是确认指标流是否在正常运行:
- 检查
State:running表示指标流正在流转数据;stopped表示已被停止(可通过start-metric-streams恢复)。 - 核对
FirehoseArn与RoleArn:确认投递流和 IAM 角色是否仍指向预期资源;若 Firehose 或角色被误删、权限被修改,即使State为running,数据投递也可能失败。 - 比对
CreationDate与LastUpdateDate:两者不一致说明配置曾发生过变更,可用于追溯"何时被改过"。 - 确认
OutputFormat:下游消费端(如解析 json 或 OpenTelemetry 格式的工具)必须与流的输出格式匹配。
与 Metric Stream 生命周期命令的配合使用
get-metric-stream是查询单条配置的入口,实际工作中通常与仓库中其他示例命令配合完成完整生命周期管理:
| 阶段 | 命令 | 仓库示例 | 要点 |
|---|---|---|---|
| 创建 | put-metric-stream | put-metric-stream.rst | 指定--name、--firehose-arn、--role-arn、--output-format,返回新流的Arn |
| 列表 | list-metric-streams | list-metric-streams.rst | 列出账户内全部指标流的概要条目(Arn、Name、State、OutputFormat 等) |
| 查询单条 | get-metric-stream | get-metric-stream.rst | 返回指定指标流的完整配置细节,本篇文章主题 |
| 启动 | start-metric-streams | start-metric-streams.rst | 通过--names(可传多个)启动已停止的指标流,无输出 |
| 停止 | stop-metric-streams | stop-metric-streams.rst | 通过--names停止指标流,无输出 |
| 删除 | delete-metric-stream | delete-metric-stream.rst | 通过--name删除指定指标流,无输出 |
一个典型的自动化巡检脚本流程是:先用list-metric-streams拿到全部指标流名称,再对每条调用get-metric-stream检查State是否全部为running;若发现stopped的流且确认应恢复,则用start-metric-streams重新拉起。这样既覆盖了全量,又保留了单条配置的完整细节。
常见错误与排障思路
GetMetricStream操作在 service-2.json 中声明了五类可能的错误响应,据此可快速定位问题:
- ResourceNotFoundException:指定的指标流名称不存在(可能已被
delete-metric-stream删除,或名称拼写有误、所在区域不对)。核对--name与实际资源,并可用list-metric-streams确认现有流的准确名称。 - InvalidParameterValueException:
--name参数取值非法(例如超过 255 字符或为空)。回顾上文约束:名称长度 1 至 255。 - MissingRequiredParameterException:遗漏了必填的
Name参数。 - InvalidParameterCombinationException:参数组合不合法。由于
get-metric-stream仅有单一参数,此错误通常在底层调用异常时出现。 - InternalServiceFault:服务端内部错误,属临时性故障,可稍后重试。
权限方面,调用该命令需要具备相应的cloudwatch:GetMetricStream权限;若 IAM 策略缺失,会收到权限拒绝错误,此时应检查执行者身份(用户/角色)的策略配置。
从源码模型看 CLI 与 API 的对应关系
作为 AWS CLI 的官方数据模型,GetMetricStream操作在 service-2.json 中定义为一个POST到根路径的查询协议操作,输入形状为GetMetricStreamInput、输出形状为GetMetricStreamOutput。CLI 层aws cloudwatch get-metric-stream命令完全由该模型驱动生成:--name直接映射到GetMetricStreamInput.Name,返回的 JSON 字段则对应GetMetricStreamOutput中的各成员。这意味着:
- 文档中出现的每个字段名都可以在该模型的
GetMetricStreamOutput定义处找到精确的类型与描述(如State的可能值为running/stopped); - 当你需要以编程方式(如 Python boto3)实现等价查询时,只需调用
cloudwatch.get_metric_stream(Name="...")即可获得与 CLI 输出结构一致的结果; - 该模型文件是仓库中"单一事实来源",任何字段语义的疑问都应以此为准。
小结
aws cloudwatch get-metric-stream是查看单个 CloudWatch 指标流配置最直接的工具:一条命令、一个--name参数,即可拿到流的 ARN、Firehose 目标、IAM 角色、运行状态、输出格式、过滤器与附加统计等全部配置。配合put-metric-stream、list-metric-streams、start/stop-metric-streams与delete-metric-stream,即可完整覆盖指标流"创建—查询—启停—删除"的整个生命周期。在 service-2.json 中核对字段定义,可以确保你对每个返回值的语义与约束都理解准确。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考