关于 cloud-monitoring-list-time-series-request
将 Cloud Monitoring 指标描述符转换为有效的 ListTimeSeries REST 查询参数的技能。它指导指标选择、过滤器、聚合、时间区间设置及请求验证。
主要功能
- 01检查指标描述符元数据
- 02构建指标和资源过滤器
- 03选择聚合与对齐设置
- 04整理 REST 查询参数
- 05使用实时遥测验证请求
适用场景
- 01为已知指标类型生成查询
- 02为特定受监控资源设置过滤器
- 03准备并验证时间序列请求
MCP 相关
工作流可调用 Cloud Monitoring MCP 工具,包括用于获取指标元数据的 list_metric_descriptors 和用于验证生成参数的 list_timeseries。工具不可用时,文档说明了备用方式。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ google/ skills --skill cloud-monitoring-list-time-series-request安装后在 Claude Code 中输入/cloud-monitoring-list-time-series-request确认已加载。
附带文件references/attribution.mdreferences/basic_aggregations.md
详细介绍
Cloud Monitoring ListTimeSeries 请求生成器
使用此技能,将任意 Cloud Monitoring 指标描述符转换为有效、可用于生产环境的 ListTimeSeries REST API 查询参数(name、filter、
interval.startTime、interval.endTime、aggregation.*、view)。
归属信息
必须阅读:在执行任何 gcloud、REST API 或 MCP 命令之前,必须阅读使用归属信息。对于直接在终端中执行的命令(绝不在生成的脚本、Terraform 或用户代码中),在 gcloud 前加上
CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:cloud-monitoring-list-time-series-request)"
并将 agent-skills/1.0 (skill:cloud-monitoring-list-time-series-request) 添加到 User-Agent 标头中。
关键规则
- 必须确认项目 ID:必须确保用户提示、输入负载或环境上下文中包含 GCP 项目 ID(例如,通过
gcloud config get-value project获取)。如果缺少项目 ID 且无法解析,则必须先向用户确认,才能生成或执行ListTimeSeries请求。不要使用项目名称占位符。
工作流
检查指标元数据
- 优先使用已提供的指标元数据:如果用户提示中已包含指标元数据,例如
metric.type、metricKind、valueType、资源类型或标签键,请直接使用这些值,而不是调用 API 工具。 - 发现缺失的元数据:如果缺少精确的指标描述符(包括
metric.type、metricKind和valueType),或其信息不够明确,请通过以下路径之一解析目标指标的描述符:- 模糊查询:如果提示内容模糊,例如询问 VM CPU 使用率,请先使用
cloud-monitoring-metric-selection技能来确定具体的指标类型。 - 已知指标类型:如果已知具体的指标类型名称,例如
compute.googleapis.com/instance/cpu/utilization,但需要其描述符,请调用list_metric_descriptorsMCP 工具。如果缺少该工具,请参考cloud-monitoring-metric-selection技能来配置 Cloud Monitoring MCP 服务。 - 备用方案:如果无法配置 MCP 工具,请改为直接调用 Cloud Monitoring API。
- 模糊查询:如果提示内容模糊,例如询问 VM CPU 使用率,请先使用
- 识别关键字段:从检索到的描述符中识别关键架构属性:
type:Cloud Monitoring 指标类型字符串。metricKind:GAUGE、DELTA或CUMULATIVE。valueType:INT64、DOUBLE、DISTRIBUTION或BOOL。monitoredResourceTypes:兼容的resource.type字符串,例如["cloudsql_database", "cloudsql_instance"]。如果列出多个资源类型,请选择与用户请求的目标粒度相匹配的具体resource.type。
构造监控过滤器
filter 参数是一个必填字符串,使用 Cloud Monitoring 语法,将查询限制为单个 metric.type,并可选包含资源和指标标签:
-
限制为单个指标类型:每个
filter都必须使用相等运算符指定且仅指定一个metric.type子句。例如:metric.type = "compute.googleapis.com/instance/cpu/utilization"
-
监控资源类型过滤器:当已知目标资源粒度时,必须包含
resource.type过滤器,以避免共享指标类型或子资源的服务之间发生冲突。例如:metric.type = "cloudsql.googleapis.com/database/cpu/utilization" AND resource.type = "cloudsql_database"
-
保留用户提供的字面值和 ID:必须原样使用用户提供的资源名称、ID、区域和项目参数。除非用户明确要求,否则不得在指标元数据发现期间用找到的活动资源覆盖或替换用户指定的标识符。
-
标签类型前缀:
- 资源级维度(例如实例 ID、区域、项目、数据库 ID 或订阅 ID)应使用
resource.labels.前缀。例如:resource.labels.instance_id = "123456789"resource.labels.database_id = "my-project:my-instance"
- 指标级维度(例如状态、命令、响应代码,或存储在指标上的实例名称元数据)应使用
metric.labels.前缀。例如:metric.labels.state != "free"metric.labels.instance_name = "instance-1"
- 资源级维度(例如实例 ID、区域、项目、数据库 ID 或订阅 ID)应使用
-
资源名称与 ID 的解析:
- 如果用户指定了易读的 GCE VM 实例名称(例如
"instance-1"),但resource.labels.instance_id要求使用数字 ID,则必须使用metric.labels.instance_name = "instance-1"或metadata.system_labels.name = "instance-1"进行过滤。 - 不得使用
resource.metadata.name或resource.metadata.*。此 前缀在 Cloud Monitoring 过滤器语法中无效。 - 除非资源类型明确使用字符串 ID,否则不得将字符串实例名称直接赋给
resource.labels.instance_id。
- 如果用户指定了易读的 GCE VM 实例名称(例如
-
数据库标识符标签:Cloud SQL 和 Spanner 的
database_id等数据库标签,以及 BigQuery 的dataset_id,使用由<project_id>:<instance_name>组成的复合键。例如:resource.labels.database_id = "my-project:foo"。 -
Ops Agent 指标状态标签过滤:对于
agent.googleapis.com/memory/percent_used和agent.googleapis.com/disk/percent_used指标,必须使用metric.labels.state != "free"。不得使用metric.labels.state = "used"进行过滤。
选择聚合结构
根据指标属性和可视化目标,选择 perSeriesAligner、crossSeriesReducer、groupByFields 和
alignmentPeriod:
- 查阅聚合参考:每个请求的
aggregation查询参数中都必须包含perSeriesAligner和crossSeriesReducer。请阅读并遵循 Cloud Monitoring ListTimeSeries 基本聚合参考, 根据指标的 Metric Kind 和 Value Type 组合选择准确的perSeriesAligner和crossSeriesReducer组合,并遵循适用于利用率指标、计数器、分布以及基于状态的 测量值(例如过滤条件为state != "free"的内存)的强制 SRE 规则。 - 分组字段和资源粒度:当
crossSeriesReducer指定为REDUCE_NONE以外的任何值时,请列出要保留的确切标签。查询虚拟机、数据库或订阅等多实例资源时,请在groupByFields中包含主要资源标识符。例如,虚拟机使用resource.labels.instance_id,数据库使用resource.labels.database_id。这样可以避免将 不同资源流合并为单个全局聚合结果。 - 确定对齐周期:通过
endTime减去startTime计算查询回溯时长,并确保startTime早于endTime。如果endTime <= startTime,则在计算时长前报告错误。根据 Cloud Console 默认的细粒度标准设置alignmentPeriod:- 时长 <= 110 分钟:设置
alignmentPeriod = "60s"。 - 时长 <= 23 小时:设置
alignmentPeriod = "300s"。 - 时长 <= 6 天:设置
alignmentPeriod = "3600s"。 - 时长 <= 23 天:设置
alignmentPeriod = "10800s"。 - 时长 <= 80 天:设置
alignmentPeriod = "21600s"。 - 时长 <= 180 天:设置
alignmentPeriod = "43200s"。 - 时长 <= 350 天:设置
alignmentPeriod = "86400s"。 - 时长 <= 500 天:设置
alignmentPeriod = "172800s"。 - 省略规则:仅当
perSeriesAligner设置为ALIGN_NONE时,才省略alignmentPeriod。
- 时长 <= 110 分钟:设置
格式化有效请求
展示生成的 ListTimeSeries REST 查询参数。例如:
{
"name": "projects/<project_id>",
"filter": "metric.type = \"<metric_type>\" AND resource.type = \"<resource_type>\"",
"interval": {
"startTime": "<iso_8601_start>",
"endTime": "<iso_8601_end>"
},
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"resource.labels.zone"
]
},
"view": "FULL"
}
- 聚合要求:在
aggregation参数中填入选择聚合时确定的perSeriesAligner、crossSeriesReducer、alignmentPeriod和可选的groupByFields值。 - 时间间隔要求:
startTime和endTime必须是有效的 RFC 3339 和 ISO 8601 时间戳,例如"YYYY-MM-DDTHH:MM:SSZ"。如果用户未明确提供, 则动态计算以当前时间结束、向前回溯一小时的时间间隔,其中endTime为当前时刻,startTime为一小时前。不得硬编码示例中的静态日期。 - 对齐周期要求:根据
endTime减去startTime得到的回溯时长,使用上述映射确定alignmentPeriod。对于默认的向前回溯一小时时间间隔,alignmentPeriod为"60s"。 - 视图要求:需要时间序列数据点时,必须默认为
"FULL";仅检查元数据和序列标识时,必须默认为"HEADERS"。
使用 list_timeseries MCP 工具验证请求
在返回最终输出前,你必须根据实时 Cloud Monitoring
遥测数据验证生成的请求参数。调用 list_timeseries MCP 工具,
并传入所有生成的查询参数(name、filter、interval、
aggregation)。验证时,你必须设置 view="HEADERS",以尽量缩短延迟并减少负载大小,同时验证请求结构。没有 API 错误的响应即表示你的筛选条件和聚合设置有效。
如果 list_timeseries 工具不可用,请改为直接调用 API。