/investigate-alert
Investigate Grafana alerts to determine why they are firing, their scope, and impact. Use when the user asks about a specific alert, wants to understand alert behavior, or needs to diagnose why an alert is in a firing or pending state. Trigger on phrases like "why is this alert
$ npx -y skills add grafana/gcx --skill investigate-alert --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/investigate-alert
Context preview
The summary Claude sees to decide when to auto-load this skill.
Investigate Grafana alerts to determine why they are firing, their scope, and impact. Use when the user asks about a specific alert, wants to understand alert behavior, or needs to diagnose why an alert is in a firing or pending state. Trigger on phrases like "why is this alert
SKILL.md
investigate-alert.SKILL.mdname: investigate-alert
description: Investigate Grafana alerts to determine why they are firing, their scope, and impact. Use when the user asks about a specific alert, wants to understand alert behavior, or needs to diagnose why an alert is in a firing or pending state. Trigger on phrases like "why is this alert firing", "investigate this alert", "what is this alert rule doing", or a named alert rule. For triaging what is actively paging in OnCall (alert groups, ack/silence/resolve) use oncall-triage instead.
Grafana Alert Investigator
Investigate Grafana alerts by analyzing state, querying datasources, and identifying next steps. Be concise and direct - these are experienced operators who need actionable information, not hand-holding.
Core Principles
1. Stop early for non-actionable scenarios (recording rules, healthy inactive alerts) 2. Be concise - no fluff, no excessive formatting, no obvious advice 3. Trust the user's expertise - no timelines, no patronizing suggestions 4. Focus on actionable information
Prerequisites
User needs gcx installed with configured context and appropriate permissions. If gcx is not configured, use the setup-gcx skill first.
Investigation Workflow
Step 1: Verify Context and Locate Alert
Check context if needed (`gcx config view`). If multiple contexts exist and none specified, ask which to use.
Step 2: Get Alert Details and Check for Early Exit
Fetch the alert by listing all alerts and filtering by name. Replace `<AlertName>` with the actual alert name:
gcx alert rules list -o json | jq -r '.[] | .rules[]? | select(.name == "<AlertName>")'
Server-side filters (use instead of downloading all rules and filtering with jq):
- `--state firing|pending|inactive` — filter by rule state
- `--group <name>` — filter by group name
- `--folder <uid>` — filter by folder UID
Filter by name, state, cluster/environment as relevant. If multiple matches, list them and ask which to investigate. Inform the user which context you're using.
Check the `type` field:
- If `type: recording`: This is a recording rule, not an alerting rule. Report: "This is a recording rule (pre-calculates metrics), not an alerting rule. It doesn't fire alerts. Current state: [state]. Want details on what it's recording?" Stop here unless they ask for more.
Check the `state` field:
- If `state: inactive` AND the alert's query looks healthy: Report: "Alert is inactive. [Brief what it monitors]. Health: [health]. Last evaluated: [time]. Want to see historical trends?" Stop here unless they ask for more.
- If `state: firing` or `state: pending`: Continue with full investigation below.
Step 3: Full Investigation (Firing/Pending Alerts Only)
You should use the datasourceUID from the alert when you can.
If you need to query a different datasource (e.g., Loki for log correlation), resolve its UID first:
gcx datasources list --type loki
Annotation URLs often reference datasources by name — always resolve to UID before querying.
Query the datasource. Use -o json to get the data for yourself. Use with a graph visualization for showing a summary to the user:
# Prometheus
gcx metrics query -d <datasource-uid> '<query>' --from now-1h --to now --step 1m -o json
gcx metrics query -d <datasource-uid> '<query>' --from now-1h --to now --step 1m -o graph
# Loki
gcx logs query -d <datasource-uid> '<query>' --from now-1h --to now -o json
gcx logs query -d <datasource-uid> '<query>' --from now-1h --to now -o graph
Analyze the results: What's the current value? Spike or gradual? When did it start?
Step 4: Surface Resources and Provide Analysis
Extract from annotations:
- Runbook URLs (if the URL is a GitHub URL and `gh` is available, fetch with `gh api`)
- Dashboard links
- Descriptions
Provide concise analysis:
- Where: cluster/environment from labels
- What: affected system/service
- Trend: new spike vs ongoing
- Likely causes: code changes, infrastructure, resource exhaustion
- Customer impact: if relevant
Based on the error class, suggest follow-up queries to the user:
- **Connection errors**: Check endpoint availability (`up{job="..."}`) and pod restart counts
- **Latency spikes**: Check upstream service latency, database query duration metrics
- **Error rate increase**: Break down by endpoint/handler, correlate with recent deployments
- **Resource exhaustion**: Check container CPU/memory metrics and node capacity
Recommend incident creation if there's customer impact.
List specific next actions - queries to run, deployments to check, metrics to examine. If there are queries for logs or metrics you can run, then ask the user if they want you to run them. If infrastructure changes are a suspected cause, suggest to the user that you could investigate any infra-as-code repos, if they point you to them.
If the next suggested actions include looking at logs in any way, use gcx to do it.
Output Format
For recording rules or healthy inactive alerts (early exit):
This is a [recording rule / inactive alert]. [One sentence what it monitors]. State: [state]. Health: [health].
Want to see more details?
For firing/pending alerts (full investigation):
Alert: <name>
State: firing [in <cluster/env>]
Monitors: <brief what it checks>
[Show graph visualization]
Current value: <value>
Trend: <spike/gradual/sustained>
Likely causes:
- <cause 1>
- <cause 2>
Impact: <who/what affected>
Runbook: <link>
Dashboard: <link>
Next actions:
- <action 1>
- <action 2>
[If customer impact:] Recommend creating an incident - <why>.
Use minimal formatting. Avoid excessive bold text. No timelines like "within 24 hours". Trust the user to prioritize.
Error Handling
- If gcx fails, explain the error
- If no alerts match, show similar names and ask for clarification
- If datasource queries fail, note it and move on
- Multiple alerts with same name: list them all with UIDs and states, ask which to investigate
Tips
- Grap
Read more
name: investigate-alert description: Investigate Grafana alerts to determine why they are firing, their scope, and impact. Use when the user asks about a specific alert, wants to understand alert behavior, or needs to diagnose why an alert is in a firing or pending state. Trigger on phrases like "why is this alert firing", "investigate this alert", "what is this alert rule doing", or a named alert rule. For triaging what is actively paging in OnCall (alert groups, ack/silence/resolve) use oncall-triage instead.
Grafana Alert Investigator
Investigate Grafana alerts by analyzing state, querying datasources, and identifying next steps. Be concise and direct - these are experienced operators who need actionable information, not hand-holding.
Core Principles
1. Stop early for non-actionable scenarios (recording rules, healthy inactive alerts) 2. Be concise - no fluff, no excessive formatting, no obvious advice 3. Trust the user's expertise - no timelines, no patronizing suggestions 4. Focus on actionable information
Prerequisites
User needs gcx installed with configured context and appropriate permissions. If gcx is not configured, use the setup-gcx skill first.
Investigation Workflow
Step 1: Verify Context and Locate Alert
Check context if needed (`gcx config view`). If multiple contexts exist and none specified, ask which to use.
Step 2: Get Alert Details and Check for Early Exit
Fetch the alert by listing all alerts and filtering by name. Replace `<AlertName>` with the actual alert name:
gcx alert rules list -o json | jq -r '.[] | .rules[]? | select(.name == "<AlertName>")'
Server-side filters (use instead of downloading all rules and filtering with jq):
- `--state firing|pending|inactive` — filter by rule state
- `--group <name>` — filter by group name
- `--folder <uid>` — filter by folder UID
Filter by name, state, cluster/environment as relevant. If multiple matches, list them and ask which to investigate. Inform the user which context you're using.
Check the `type` field:
- If `type: recording`: This is a recording rule, not an alerting rule. Report: "This is a recording rule (pre-calculates metrics), not an alerting rule. It doesn't fire alerts. Current state: [state]. Want details on what it's recording?" Stop here unless they ask for more.
Check the `state` field:
- If `state: inactive` AND the alert's query looks healthy: Report: "Alert is inactive. [Brief what it monitors]. Health: [health]. Last evaluated: [time]. Want to see historical trends?" Stop here unless they ask for more.
- If `state: firing` or `state: pending`: Continue with full investigation below.
Step 3: Full Investigation (Firing/Pending Alerts Only)
You should use the datasourceUID from the alert when you can.
If you need to query a different datasource (e.g., Loki for log correlation), resolve its UID first:
gcx datasources list --type loki
Annotation URLs often reference datasources by name — always resolve to UID before querying.
Query the datasource. Use -o json to get the data for yourself. Use with a graph visualization for showing a summary to the user:
# Prometheus gcx metrics query -d <datasource-uid> '<query>' --from now-1h --to now --step 1m -o json gcx metrics query -d <datasource-uid> '<query>' --from now-1h --to now --step 1m -o graph # Loki gcx logs query -d <datasource-uid> '<query>' --from now-1h --to now -o json gcx logs query -d <datasource-uid> '<query>' --from now-1h --to now -o graph
Analyze the results: What's the current value? Spike or gradual? When did it start?
Step 4: Surface Resources and Provide Analysis
Extract from annotations:
- Runbook URLs (if the URL is a GitHub URL and `gh` is available, fetch with `gh api`)
- Dashboard links
- Descriptions
Provide concise analysis:
- Where: cluster/environment from labels
- What: affected system/service
- Trend: new spike vs ongoing
- Likely causes: code changes, infrastructure, resource exhaustion
- Customer impact: if relevant
Based on the error class, suggest follow-up queries to the user:
- **Connection errors**: Check endpoint availability (`up{job="..."}`) and pod restart counts
- **Latency spikes**: Check upstream service latency, database query duration metrics
- **Error rate increase**: Break down by endpoint/handler, correlate with recent deployments
- **Resource exhaustion**: Check container CPU/memory metrics and node capacity
Recommend incident creation if there's customer impact.
List specific next actions - queries to run, deployments to check, metrics to examine. If there are queries for logs or metrics you can run, then ask the user if they want you to run them. If infrastructure changes are a suspected cause, suggest to the user that you could investigate any infra-as-code repos, if they point you to them.
If the next suggested actions include looking at logs in any way, use gcx to do it.
Output Format
For recording rules or healthy inactive alerts (early exit):
This is a [recording rule / inactive alert]. [One sentence what it monitors]. State: [state]. Health: [health]. Want to see more details?
For firing/pending alerts (full investigation):
Alert: <name> State: firing [in <cluster/env>] Monitors: <brief what it checks> [Show graph visualization] Current value: <value> Trend: <spike/gradual/sustained> Likely causes: - <cause 1> - <cause 2> Impact: <who/what affected> Runbook: <link> Dashboard: <link> Next actions: - <action 1> - <action 2> [If customer impact:] Recommend creating an incident - <why>.
Use minimal formatting. Avoid excessive bold text. No timelines like "within 24 hours". Trust the user to prioritize.
Error Handling
- If gcx fails, explain the error
- If no alerts match, show similar names and ask for clarification
- If datasource queries fail, note it and move on
- Multiple alerts with same name: list them all with UIDs and states, ask which to investigate
Tips
- Grap
Grafana — in your terminal and your agentic coding environment. gcx works with Grafana Cloud, Enterprise, and OSS (Grafana 12+). See the compatibility matrix for details. Query production. Investigate alerts. Let the Assistant root-cause issues.
Repo: grafana/gcx
Other skills on gcx.
- /add-datasource
Use when adding a new datasource type to gcx (e.g., Elasticsearch, CloudWatch, InfluxDB), or when the user says "add datasource", "new datasource type", or "integrate [datasource]".
Open skill - /add-provider
Use when adding a new Grafana Cloud product provider to gcx (SLO, OnCall, Synthetic Monitoring, k6, ML, etc.), or when the user says "add provider", "new provider", or "integrate [product]".
Open skill - /generate-slide
Regenerate the gcx marketing bento-box slide (slide.html) with verified commands from the current codebase. Builds a fresh binary and reflects against the actual command tree. Use when the user says "regenerate slide", "update slide", "generate slide", or "/generate-slide".
Open skill - /migrate-provider
Use when porting a Grafana Cloud product from grafana-cloud-cli (gcx) to gcx, when a bead task references gcx provider migration, or when user says "migrate provider", "port from gcx", "port oncall", "port k6". Not for building providers from scratch — use /add-provider for that.
Open skill - /release
Tag and release a new gcx version. Use when the user wants to cut a release, tag a version, run the release process, or says "release patch/minor/major".
Open skill - /agento11y-instrument
Sets up and instruments a developer's own LLM app or agent to send generations and agentic workflow to Grafana Agent Observability (the Agent Observability SDKs) — greenfield setup, fixing broken instrumentation, or filling gaps in existing instrumentation. Uses gcx for the
Open skill

