cloud-monitoring-list-time-series-request — Claude Code skill
This skill builds Cloud Monitoring ListTimeSeries requests and aggregations. Use it when you need a filter, JSON payload, or chart query parameters.
npx skills add google/skills --skill cloud-monitoring-list-time-series-request -a claude-codeWhat cloud-monitoring-list-time-series-request does
The skill turns a metric descriptor and resource parameters into a Cloud Monitoring ListTimeSeries request. It builds name, filter, time interval, aggregation.*, and view parameters, plus REST API JSON. Filters can include the metric type, monitored resource type, and the right prefixes for resource and metric labels.
Its workflow covers perSeriesAligner, crossSeriesReducer, groupByFields, and alignmentPeriod. A Project ID is required before a request is created or executed. Existing metric metadata is used first; missing descriptors can be resolved with list_metric_descriptors or a direct Cloud Monitoring API call.
Install it when you regularly prepare Cloud Monitoring queries or chart data in Claude Code, Gemini CLI, or Codex. It does not select or discover metrics, so metric selection belongs to a separate skill.
What it helps with
- build a ListTimeSeries request for a metric
- write a Cloud Monitoring filter expression
- choose aligner and reducer settings
- prepare a REST API JSON payload
- map resource and metric labels correctly
Example prompts for the agent
- Build a ListTimeSeries request for this metric and resource.
- Create the JSON payload with `filter` and `aggregation.*`.
- Check which `perSeriesAligner` and `crossSeriesReducer` fit this chart.
How to install cloud-monitoring-list-time-series-request
1Skills CLI (Vercel)
npx skills add google/skills --skill cloud-monitoring-list-time-series-request -a claude-code2Manually: put the files in place
~/.claude/skills/cloud-monitoring-list-time-series-request/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/cloud-monitoring-list-time-series-request/
1Skills CLI (Vercel)
npx skills add google/skills --skill cloud-monitoring-list-time-series-request -a codex2Manually: put the files in place
.agents/skills/cloud-monitoring-list-time-series-request/SKILL.mdFor all projects use ~/.agents/skills/
Manually: put the files in place
.cursor/skills/cloud-monitoring-list-time-series-request/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install google/skills cloud-monitoring-list-time-series-request2Manually: put the files in place
.github/skills/cloud-monitoring-list-time-series-request/SKILL.md1Skills CLI (Vercel)
npx skills add google/skills --skill cloud-monitoring-list-time-series-request -a gemini-cli2Platform CLI
gemini skills install https://github.com/google/skills --path skills/cloud/cloud-monitoring-list-time-series-requestManually: put the files in place
.devin/skills/cloud-monitoring-list-time-series-request/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set172
The whole set →Similar
Questions about cloud-monitoring-list-time-series-request
How do I install cloud-monitoring-list-time-series-request in Claude Code?
Run npx skills add google/skills --skill cloud-monitoring-list-time-series-request -a claude-code. The skill file is placed at ~/.claude/skills/cloud-monitoring-list-time-series-request/SKILL.md.
What does cloud-monitoring-list-time-series-request do?
It creates Cloud Monitoring ListTimeSeries parameters and JSON, including filters, intervals, aggregations, and views. The skill uses metric descriptors and resource parameters.
Does the skill require a Project ID?
Yes. The Project ID must come from the task, payload, or environment, such as gcloud configuration. The skill asks for it before creating or executing a request when it cannot resolve the value.
Source text
SKILL.md · Apache-2.0
---
name: cloud-monitoring-list-time-series-request
metadata:
version: "1.0.1"
category: CloudObservabilityAndMonitoring
description: >-
Generates valid Cloud Monitoring ListTimeSeries requests and aggregation
specifications from metric descriptors and resource parameters. Use when asked
to create, generate, format, or build ListTimeSeries requests, JSON payloads,
filter expressions, or aligner/reducer aggregations for Cloud Monitoring
metrics and charts. Don't use for metric discovery or metric selection.
---
# Cloud Monitoring ListTimeSeries Request Generator
Use this skill to translate any Cloud Monitoring metric descriptor into valid,
production-ready `ListTimeSeries` REST API query parameters (`name`, `filter`,
`interval.startTime`, `interval.endTime`, `aggregation.*`, `view`).
## Attribution
**MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you
MUST read [Usage Attribution](references/attribution.md). For commands executed
directly in the terminal (never in generated scripts, Terraform, or user code),
prefix `gcloud` with
`CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:cloud-monitoring-list-time-series-request)"`
and append `agent-skills/1.0 (skill:cloud-monitoring-list-time-series-request)` to `User-Agent` headers.
## CRITICAL RULES
* **Mandatory Project ID Clarification**: You MUST ensure the GCP Project ID
is present in the user prompt, input payload, or environment context (such
as via `gcloud config get-value project`). If the Project ID is missing and
cannot be resolved, you MUST ask the user to clarify it before generating or
executing `ListTimeSeries` requests. Do NOT use placeholders for project
names.
## Workflow
### Inspect Metric Metadata
1. **Use Provided Metric Metadata First**: If the user's prompt already
includes metric metadata such as `metric.type`, `metricKind`, `valueType`,
resource types, or label keys, use those values directly instead of calling
API tools.
2. **Discover Missing Metadata**: If exact metric descriptors including
`metric.type`, `metricKind`, and `valueType` are missing or underspecified,
resolve the target metric's descriptor using one of these paths:
* **Vague Query**: If the prompt is vague, such as asking for VM CPU
usage, use the `cloud-monitoring-metric-selection` skill first to
identify the specific metric type.
* **Known Metric Type**: If you already have the specific metric type name
such as `compute.googleapis.com/instance/cpu/utilization`, but need its
descriptor, call the `list_metric_descriptors` MCP tool. If the tool is
missing, refer to the `cloud-monitoring-metric-selection` skill to
configure the Cloud Monitoring MCP server.
* **Fallback**: If the MCP tool cannot be configured, fall back to making
a direct Cloud Monitoring API call.
3. **Identify Key Fields**: From the retrieved descriptor, identify key schema
attributes:
* **`type`**: The Cloud Monitoring metric type string.
* **`metricKind`**: `GAUGE`, `DELTA`, or `CUMULATIVE`.
* **`valueType`**: `INT64`, `DOUBLE`, `DISTRIBUTION`, or `BOOL`.
* **`monitoredResourceTypes`**: Compatible `resource.type` strings, for
example `["cloudsql_database", "cloudsql_instance"]`. If multiple
resource types are listed, select the specific `resource.type` that
matches the target granularity of the user's request.
--------------------------------------------------------------------------------
### Construct Monitoring Filter
The `filter` parameter is a mandatory string in Cloud Monitoring syntax that
restricts the query to a single `metric.type` and optional resource and metric
labels:
1. **Single Metric Type Restriction**: Every `filter` MUST specify exactly one
`metric.type` clause using an equality operator. For example:
* `metric.type = "compute.googleapis.com/instance/cpu/utilization"`
2. **Monitored Resource Type Filter**: MUST include the `resource.type` filter
when the target resource granularity is known, preventing collisions across
services that share metric types or sub-resources. For example:
* `metric.type = "cloudsql.googleapis.com/database/cpu/utilization" AND
resource.type = "cloudsql_database"`
3. **Preserve User Literals and IDs**: You MUST use literal resource names,
IDs, zones, and project parameters provided by the user without alteration.
Do NOT override or replace user-specified identifiers with active resources
found during metric metadata discovery unless explicitly requested.
4. **Label Type Prefixing**:
* Prefix resource-level dimensions, such as instance ID, zone, project,
database ID, or subscription ID, with the `resource.labels.` prefix. For
example:
* `resource.labels.instance_id = "123456789"`
* `resource.labels.database_id = "my-project:my-instance"`
* Prefix metric-level dimensions, such as state, command, response code,
or instance name metadata when stored on the metric, with the
`metric.labels.` prefix. For example:
* `metric.labels.state != "free"`
* `metric.labels.instance_name = "instance-1"`
5. **Resource Name versus ID Resolution**:
* If the user specifies a human-readable GCE VM instance name such as
`"instance-1"`, but `resource.labels.instance_id` expects a numeric ID,
you MUST filter using either `metric.labels.instance_name =
"instance-1"` or `metadata.system_labels.name = "instance-1"`.
* Do NOT use `resource.metadata.name` or `resource.metadata.*`. This
prefix is invalid in Cloud Monitoring filter syntax.
* Do NOT assign a string instance name directly to
`resource.labels.instance_id` unless the resource type explicitly uses
string IDs.
6. **Database Identifier Labels**: Database labels such as `database_id` for
Cloud SQL and Spanner, or `dataset_id` for BigQuery, use composite keys
formatted as `<project_id>:<instance_name>`. For example:
`resource.labels.database_id = "my-project:foo"`.
7. **Ops Agent Metrics State Label Filtering**: For
`agent.googleapis.com/memory/percent_used` and
`agent.googleapis.com/disk/percent_used` metrics, you MUST use
`metric.labels.state != "free"`. Do NOT filter by `metric.labels.state =
"used"`.
--------------------------------------------------------------------------------
### Choose Aggregation Structure
Select the `perSeriesAligner`, `crossSeriesReducer`, `groupByFields`, and
`alignmentPeriod` according to the metric properties and visualization goal:
1. **Consult the Aggregations Reference**: You MUST include both
`perSeriesAligner` and `crossSeriesReducer` in the `aggregation` query
parameters of every request. Read and follow the
[Cloud Monitoring ListTimeSeries Basic Aggregations Reference](references/basic_aggregations.md)
to select the exact `perSeriesAligner` and `crossSeriesReducer` combinations
for your metric's Metric Kind and Value Type pairing, and to apply mandatory
SRE rules for utilization metrics, counters, distributions, and state-based
gauges such as memory filtered by `state != "free"`.
2. **Grouping Fields and Resource Granularity**: When `crossSeriesReducer` is
specified as anything other than `REDUCE_NONE`, list the exact labels to
preserve. When querying multi-instance resources like VMs, databases, or
subscriptions, include the primary resource identifier in `groupByFields`.
For example, use `resource.labels.instance_id` for VMs or
`resource.labels.database_id` for databases. This prevents collapsing
separate resource streams into a single global aggregate.
3. **Alignment Period Determination**: Calculate the query lookback duration
from `endTime` minus `startTime`, ensuring `startTime` precedes `endTime`.
If `endTime <= startTime`, flag an error before computing duration. Set
`alignmentPeriod` according to Cloud Console default fine granularity
standards:
* **Duration <= 110 minutes**: Set `alignmentPeriod = "60s"`.
* **Duration <= 23 hours**: Set `alignmentPeriod = "300s"`.
* **Duration <= 6 days**: Set `alignmentPeriod = "3600s"`.
* **Duration <= 23 days**: Set `alignmentPeriod = "10800s"`.
* **Duration <= 80 days**: Set `alignmentPeriod = "21600s"`.
* **Duration <= 180 days**: Set `alignmentPeriod = "43200s"`.
* **Duration <= 350 days**: Set `alignmentPeriod = "86400s"`.
* **Duration <= 500 days**: Set `alignmentPeriod = "172800s"`.
* **Omission Rule**: `alignmentPeriod` is omitted only when
`perSeriesAligner` is set to `ALIGN_NONE`.
--------------------------------------------------------------------------------
### Format Valid Request
Present the generated `ListTimeSeries` REST query parameters. For example:
```json
{
"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 Requirements**: Populate the `aggregation` parameters with the
`perSeriesAligner`, `crossSeriesReducer`, `alignmentPeriod`, and optional
`groupByFields` values determined during aggregation selection.
* **Interval Requirements**: `startTime` and `endTime` MUST be valid RFC 3339
and ISO 8601 timestamps such as `"YYYY-MM-DDTHH:MM:SSZ"`. If not explicitly
provided by the user, dynamically compute a one-hour lookback interval
ending at the current time, where `endTime` is the present moment and
`startTime` is one hour prior. Do NOT hardcode static dates from examples.
* **Alignment Period Requirement**: Determine `alignmentPeriod` from the
lookback duration of `endTime` minus `startTime` using the mapping above.
For the default one-hour lookback interval, `alignmentPeriod` is `"60s"`.
* **View Requirement**: MUST default to `"FULL"` when time series data points
are needed, or `"HEADERS"` when inspecting metadata and series identities
only.
--------------------------------------------------------------------------------
### Validate Request via list_timeseries MCP Tool
You MUST validate the generated request parameters against live Cloud Monitoring
telemetry before returning the final output. Call the `list_timeseries` MCP tool
passing all generated query parameters (`name`, `filter`, `interval`,
`aggregation`). When validating you MUST set `view="HEADERS"` to minimize
latency and payload size while verifying request structure. A response without
API errors confirms that your filter and aggregation settings are valid.
If the `list_timeseries` tool is unavailable, fall back to a direct API call.
--------------------------------------------------------------------------------
## References
* [Cloud Monitoring ListTimeSeries Basic Aggregations Reference](references/basic_aggregations.md)
* [Cloud Monitoring Monitored Resource Types Reference](https://docs.cloud.google.com/monitoring/api/resources.md.txt)
* [Cloud Monitoring Filter Syntax](https://docs.cloud.google.com/monitoring/api/v3/filters.md.txt)
* [Cloud Monitoring REST API Reference: projects.timeSeries.list](https://docs.cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list.md.txt)
© google · Apache-2.0 · google/skills