后端与接口
需要生成 Cloud Monitoring…
把 Cloud Monitoring 指标描述符翻译成可直接调用的 ListTimeSeries REST 查询参数(name、filter、interval、aggregation、view)。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
需要生成 Cloud Monitorin特定
解决思路
- 强制确认 GCP Project ID:必须从用户提示、输入载荷或环境上下文(如 `gcloud config get-value project`)中获取 Project ID;若缺失且无法解析,必须先向用户澄清,禁止使用占位符。
- 优先使用用户已提供的指标元数据(`metric.type`、`metricKind`、`valueType`、资源类型、标签键),不要再去调用 API。
- 元数据缺失时按路径补全:查询模糊时先用 `cloud-monitoring-metric-selection` 技能确定具体 metric type;已知 metric type 但缺描述符时调用 `list_metric_descriptors` MCP 工具;工具无法配置时回退到直接调用 Cloud Monitoring API。
- 从描述符中提取关键字段:`type`、`metricKind`(GAUGE/DELTA/CUMULATIVE)、`valueType`(INT64/DOUBLE/DISTRIBUTION/BOOL)、`monitoredResourceTypes`;若有多个资源类型,选择与用户请求粒度匹配的 `resource.type`。
- 构造 filter 时必须且只能包含一个 `metric.type` 等值子句,例如 `metric.type = "compute.googleapis.com/instance/cpu/utilization"`。
- 当目标资源粒度已知时,filter 必须包含 `resource.type` 过滤,例如 `metric.type = "cloudsql.googleapis.com/database/cpu/utilization" AND resource.type = "cloudsql_database"`。
- 保留用户提供的字面资源名、ID、zone、project 参数,不得用元数据发现中查到的活跃资源替换,除非用户明确要求。
- 资源级维度(instance ID、zone、project、database ID、subscription ID)加 `resource.labels.` 前缀,例如 `resource.labels.instance_id = "123456789"`、`resource.labels.database_id = "my-project:my-instance"`。
- 指标级维度(state、command、response code、instance name 等)加 `metric.labels.` 前缀,例如 `metric.labels.state != "free"`、`metric.labels.instance_name = "instance-1"`。
- 当用户给出人类可读的 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 filter 语法中无效);也不要把字符串实例名直接赋给 `resource.labels.instance_id`,除非该资源类型明确使用字符串 ID。
- 数据库标识标签(Cloud SQL/Spanner 的 `database_id`、BigQuery 的 `dataset_id`)使用 `<project_id>:<instance_name>` 复合键,例如 `resource.labels.database_id = "my-project:foo"`。
- 对 `agent.googleapis.com/memory/percent_used` 和 `agent.googleapis.com/disk/percent_used`,必须用 `metric.labels.state != "free"`,不要用 `metric.labels.state = "used"`。
- 每个请求的 aggregation 中必须同时包含 `perSeriesAligner` 和 `crossSeriesReducer`,并参照 `references/basic_aggregations.md` 按 Metric Kind 与 Value Type 组合选择,同时应用针对利用率指标、计数器、分布和状态型 gauge 的 SRE 规则。
- 当 `crossSeriesReducer` 不是 `REDUCE_NONE` 时,在 `groupByFields` 中列出要保留的标签;多实例资源(VM、数据库、订阅)必须包含主资源标识(如 VM 用 `resource.labels.instance_id`,数据库用 `resource.labels.database_id`),避免把不同资源流合并成单一全局聚合。
- 由 `endTime - startTime` 计算回看时长,确保 `startTime` 早于 `endTime`;若 `endTime <= startTime` 先报错。按 Cloud Console 默认细粒度设置 `alignmentPeriod`:≤110 分钟用 `60s`;≤23 小时用 `300s`;≤6 天用 `3600s`;≤23 天用 `10800s`;≤80 天用 `21600s`;≤180 天用 `43200s`;≤350 天用 `86400s`;≤500 天用 `172800s`;仅当 `perSeriesAligner` 为 `ALIGN_NONE` 时才省略 `alignmentPeriod`。
- 输出 ListTimeSeries REST 查询参数:`name` 为 `projects/<project_id>`,`filter` 为上述表达式,`interval` 含 `startTime`/`endTime`,`aggregation` 含 `alignmentPeriod`/`perSeriesAligner`/`crossSeriesReducer`/可选 `groupByFields`,`view` 默认 `FULL`。
- `startTime` 和 `endTime` 必须是合法 RFC 3339 / ISO 8601 时间戳(如 `"YYYY-MM-DDTHH:MM:SSZ"`);用户未提供时动态计算以当前时刻为 `endTime`、向前一小时为 `startTime` 的回看区间,不要硬编码示例中的静态日期。
- `view` 在需要时间序列数据点时默认 `"FULL"`,仅检查元数据和序列身份时用 `"HEADERS"`。
- 返回最终结果前必须用 `list_timeseries` MCP 工具验证生成的参数(传入 `name`、`filter`、`interval`、`aggregation`),验证时设 `view="HEADERS"` 以降低延迟和载荷;无 API 错误即表示 filter 与聚合设置有效。
- 若 `list_timeseries` 工具不可用,回退到直接调用 API 进行验证。
适用边界 · 注意事项
- 不要用于指标发现或指标选择(metric discovery / metric selection)。
- 缺少且无法解析 GCP Project ID 时不要生成或执行请求,必须先向用户澄清。
- 不要用占位符代替 project 名称,也不要用元数据发现中的活跃资源覆盖用户指定的标识符。