Testing
Grafana LabsOfficialPublished by Grafana Labs
- Skill
- Tool integration
- Cloud and DevOps
- Apache-2.0
- Low risk
From the skill’s files
Taken from the skill’s own files (its description, section headings and stated usage). Not an AutoGineer summary, and not written by the author as one.
Probe, load-test, and instrument frontends from Grafana Cloud. Covers Synthetic Monitoring (HTTP / DNS / TCP / Ping / Traceroute / Multihttp / k6-browser scripted checks from 20+ global probes, alert on probe_success + TLS-cert expiry), Grafana Cloud k6 (distributed load tests across AWS load-zones, scenarios, http_req_duration thresholds, CI integration via grafana/k6-action), and Frontend Observability with Faro Web SDK (RUM, Core Web Vitals, custom events, pushError, distributed-trace correlation). Use when checking website / API uptime from multiple regions, gating a release on a load test, watching for TLS-cert renewal, instrumenting a React/Vue app, tracking Core Web Vitals, or correlating frontend errors to backend traces — even when the user says "is my login flow up?", "monitor my API", "ping our endpoint every minute", "release-gate load test", "browser performance…
What it does
- Prerequisites
- Common Workflows
- Troubleshooting
When to use it
- Use when checking website / API uptime from multiple regions, gating a release on a load test, watching for TLS-cert renewal, instrumenting a React/Vue app, tracking Core Web Vitals, or correlating…
Advantages
The skill’s files do not state this.
Usage examples
The skill’s files do not state this.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/grafana/testing/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip testing.zip -d .agents/skills
Documentation by Grafana Labs
Grafana Cloud Testing
Three pillars: external probing (Synthetic Monitoring), load testing (k6 Cloud), real-user monitoring (Faro).
Prerequisites
Grafana Cloud stack
Synthetic Monitoring: SM access token (
sm:write)k6 Cloud: a Grafana Cloud k6 token + projectID
Faro: a Faro app + write-token from Frontend Observability → Apps
Common Workflows
1. Create + verify a Synthetic HTTP check
# 1. Create the check (full payload in references/synthetic.md)
curl -X POST https://synthetic-monitoring-api.grafana.net/sm/checks \
-H "Authorization: Bearer <sm-token>" -H "Content-Type: application/json" \
-d '{"job":"website","target":"https://example.com","frequency":60000,"timeout":15000,
"enabled":true,"probes":[1,5,10],
"settings":{"http":{"method":"GET","validStatusCodes":[200]}}}'
# 2. List checks — confirm it exists and is enabled
curl -s https://synthetic-monitoring-api.grafana.net/sm/checks \
-H "Authorization: Bearer <sm-token>" | jq '.[] | select(.job=="website")'
# 3. Verify probe_success arrived (wait ~60s for the first run)
# In Grafana Explore on the synthetic metrics datasource:
# probe_success{job="website"}
# Expect 1 from each probe in `probes:[1,5,10]`.
#
# Rollback: DELETE /sm/checks/<id> or set `"enabled": false`.See references/synthetic.md for all check types, PromQL queries, and alert rules.
2. Run a k6 cloud load test
# 1. Authenticate once
k6 cloud login --token <grafana-cloud-k6-token>
# 2. Validate the script locally first (smoke run, no cloud cost)
k6 run --vus 1 --duration 30s script.js
# 3. Launch in cloud
k6 cloud script.js
# → URL of the run; thresholds (p95<500ms, error<1%) decide pass/fail.
# 4. Verify in CI — exit code 0 = thresholds passed, 99 = threshold failed.
echo $?Full script + scenarios + CI YAML: references/k6-and-faro.md.
3. Instrument a frontend with Faro
# 1. Install
npm install @grafana/faro-web-sdk @grafana/faro-web-tracing// 2. initializeFaro({ url, apiKey, app, instrumentations }) — see references/k6-and-faro.md
// 3. Push a test event so we have something to look for:
faro.api.pushEvent('faro_smoketest', { ts: Date.now().toString() });# 4. Verify the collector accepted it (browser DevTools → Network)
# POST to /collect should return 202. If 401 — apiKey mismatch.
# 5. Verify in Grafana
# - Frontend Observability → your app → Sessions: should show your session
# - Explore on Loki: `{kind="event"} |= "faro_smoketest"`
# - For traces: filter by `service.name="my-frontend"` in TempoTroubleshooting
Synthetic check stuck at
probe_success=0→ checkprobe_*_duration_secondsfor the failing stage; the probe-region label tells you which prober erroredk6 cloud run "ABORTED_THRESHOLD" → a threshold tripped; inspect the run page to see which one
Faro events not landing → check the browser network call to
/collectreturns 202; common cause is wrongapiKeyorurl(must match the FE Observability app)
References
For deep authoring of Synthetic Monitoring scripted (k6) and browser checks — execution model, assertions, secrets, API/Terraform payloads — see the
synthetic-monitoring-checksskillreferences/synthetic.md— Synthetic Monitoring essentials: check types, key PromQL metrics, alert rulesreferences/synthetic-monitoring.md— deep dive: full API for check CRUD, probe selection, scripted (k6) checks, multi-step browser checksreferences/k6-and-faro.md— k6 cloud script + Faro Web SDK init snippets for end-to-end testingreferences/k6-cloud.md— deep dive: k6 cloud config (project + load zones + thresholds), CI integration, run analysis
Resources
Files
- ATTRIBUTION.mdAdded by AutoGineer835 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md5.3 KiB
- references/k6-and-faro.md2.6 KiB
- references/k6-cloud.md4.8 KiB
- references/synthetic-monitoring.md4.6 KiB
- references/synthetic.md2.2 KiB
references/k6-cloud.md
k6 Cloud Reference
Authentication
# Via token
k6 cloud login --token <your-grafana-cloud-token>
# Via environment variable
export K6_CLOUD_TOKEN=<your-token>
# Verify
k6 cloud login --showRun Commands
# Run in cloud (full cloud execution)
k6 cloud script.js
# Run locally, stream results to cloud
k6 run --out cloud script.js
# Run with environment variables
k6 cloud -e API_URL=https://api.example.com script.js
# Run with specific project
k6 cloud --project-id 123456 script.js
# Local execution (run on cloud infra but with local VUs)
k6 cloud run --local-execution script.jsoptions.cloud Reference
export const options = {
cloud: {
// Required
projectID: 3456789,
// Optional
name: 'API Load Test - Release v2.0',
note: 'Testing new checkout flow',
// Load zone distribution
distribution: {
loadZone1: { loadZone: 'amazon:us:ashburn', percent: 40 },
loadZone2: { loadZone: 'amazon:us:portland', percent: 20 },
loadZone3: { loadZone: 'amazon:eu:dublin', percent: 20 },
loadZone4: { loadZone: 'amazon:ap:singapore', percent: 20 },
},
// Static IPs (Enterprise)
staticIPs: false,
},
};Load Zones
Americas
| Zone ID | Location |
|---|---|
amazon:us:ashburn | Ashburn, Virginia, USA |
amazon:us:columbus | Columbus, Ohio, USA |
amazon:us:portland | Portland, Oregon, USA |
amazon:us:montreal | Montréal, Canada |
amazon:sa:sao paulo | São Paulo, Brazil |
Europe
| Zone ID | Location |
|---|---|
amazon:eu:dublin | Dublin, Ireland |
amazon:eu:frankfurt | Frankfurt, Germany |
amazon:eu:london | London, UK |
amazon:eu:paris | Paris, France |
amazon:eu:stockholm | Stockholm, Sweden |
amazon:eu:milan | Milan, Italy |
Asia Pacific
| Zone ID | Location |
|---|---|
amazon:ap:singapore | Singapore |
amazon:ap:sydney | Sydney, Australia |
amazon:ap:tokyo | Tokyo, Japan |
amazon:ap:mumbai | Mumbai, India |
amazon:ap:seoul | Seoul, South Korea |
amazon:ap:hong kong | Hong Kong |
amazon:ap:osaka | Osaka, Japan |
amazon:ap:jakarta | Jakarta, Indonesia |
amazon:ap:cape town | Cape Town, South Africa |
amazon:me:bahrain | Bahrain |
CI/CD Integration
GitHub Actions
- name: Run k6 Cloud Test
uses: grafana/[email protected]
with:
filename: tests/load.js
cloud: true
token: ${{ secrets.K6_CLOUD_TOKEN }}GitLab CI
k6-cloud:
image: grafana/k6
script:
- k6 cloud login --token $K6_CLOUD_TOKEN
- k6 cloud tests/load.js
only:
- mainCircleCI
- run:
name: Run k6 Cloud Test
command: |
k6 cloud login --token $K6_CLOUD_TOKEN
k6 cloud tests/load.jsREST API
BASE=https://api.k6.io/v3
TOKEN=your-token
# List projects
curl $BASE/projects -H "Authorization: Token $TOKEN"
# List test runs for a project
curl "$BASE/projects/{projectId}/test-runs" -H "Authorization: Token $TOKEN"
# Get test run details + results
curl "$BASE/runs/{runId}" -H "Authorization: Token $TOKEN"
# Get metrics for a run
curl "$BASE/runs/{runId}/metrics" -H "Authorization: Token $TOKEN"
# Stop a running test
curl -X POST "$BASE/runs/{runId}/stop" -H "Authorization: Token $TOKEN"
# Create a scheduled test
curl -X POST "$BASE/projects/{projectId}/schedules" \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Nightly load test",
"script_id": 123,
"cron": "0 2 * * *",
"timezone": "UTC"
}'Test Authoring Tools
k6 Studio — desktop GUI for recording, building, and running k6 tests
Browser recorder — Chrome extension that records user journeys as k6 scripts
Test builder — drag-and-drop scenario builder in Grafana Cloud UI (no code required)
k6 TypeScript template — starter template with TypeScript support and type definitions
Result Analysis
# View results summary after cloud run
k6 cloud --results-id {runId}
# Export results as JSON
k6 cloud --results-export results.jsonIn the Cloud UI:
Performance Overview: VUs, request rate, error rate, response time over time
Checks tab: pass/fail rates per check, by time
Thresholds: pass/fail status for each threshold
Logs tab: console.log output from VUs
Comparison: overlay multiple test runs to spot regressions
When to Use Each Tool
| Scenario | Use |
|---|---|
| External uptime monitoring, always-on | Synthetic Monitoring |
| Scheduled lightweight API health checks | Synthetic Monitoring |
| Load testing before a release | k6 Cloud |
| Stress testing to find limits | k6 Cloud |
| Performance regression in CI/CD | k6 Cloud |
| Real user monitoring (browser) | Faro / Frontend Observability |
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs network access, Needs Node.js
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Grafana Labs
- Publisher
- Grafana Labs (Official)
- Source
- grafana/skills · skills/grafana-cloud/testing · commit 8fb72a5
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Grafana Labs.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download testing.zip