Grafana Alerts Lab Playground
Explore metrics from five services across multiple VMs, trigger a Grafana alert, and watch its webhook appear in the lab.

- eth0
- /
- docker
- eth0
- /
- ubuntu-24-04
Trigger the alert
- Open Grafana on the left and Alert inbox on the right. The dashboard shows five services spread across the VMs.
- Click Trigger checkout fault in Alert inbox. Checkout's error ratio rises to 75%, Grafana fires its provisioned alert, and a popup appears in the inbox.
- Click Restore checkout to receive the resolved notification.
Grafana login for exploring the alert rule and contact point: admin / lab-demo.
Create your own alert and webhook in Grafana
- Sign in to the Grafana tab as
admin/lab-demo. Open Alerts & IRM → Alerting → Notification configuration → Contact points, click New contact point, choose Webhook, enter your URL, and save. - Open Alerts & IRM → Alert rules → New alert rule. Query Prometheus with
lab_service_error_ratio{service="checkout"}and set the condition to is above 0.2. - Choose the Lab folder and create a new evaluation group, such as
my-alerts, with a 10 second interval. Set the pending period to None or0s. - Under notifications, choose Select contact point and select your new webhook contact point. Save the rule, then click Trigger checkout fault in Alert inbox to test it.
The supplied checkout rule is file-provisioned and read-only in Grafana. Your new rule can send directly to your webhook; it does not need a notification policy change. Both checkout rules may notify you for the same fault. The Lab alerts contact point and default policy are editable in the UI.
Send the alert to your own destination
Grafana's Lab alerts contact point always notifies Alert inbox. Under Your destinations in Alert inbox, you can add one webhook URL and one PagerDuty integration key, and Grafana notifies them too. Grafana picks up a saved destination within about 10 seconds.
Add your destination before you click Trigger checkout fault. An alert that is already firing is not resent to a replacement webhook URL until it resolves.
Your phone, with ntfy
- Install the ntfy app and subscribe to a hard to guess topic name, such as
grafana-lab-7f3k9q. Anyone who knows the topic name can read its messages. - Paste
https://ntfy.sh/<your-topic>into Webhook URL and click Save webhook. Alert inbox adds ntfy'stemplate=grafanaoption, so the push notification reads as an alert instead of raw JSON.
Discord
- In a Discord server where you can manage webhooks, open the channel's Edit Channel → Integrations → Webhooks, create a webhook, and click Copy Webhook URL.
- Paste it into Webhook URL and click Save webhook. Grafana sends it through its Discord integration.
Slack incoming webhook URLs (https://hooks.slack.com/...) work the same way. Any other URL, such as one from webhook.site, receives Grafana's webhook JSON unchanged.
PagerDuty
- On a PagerDuty service, add an Events API v2 integration and copy its 32 character Integration Key.
- Paste it into PagerDuty integration key and click Save PagerDuty key. A firing alert opens an incident and the resolved notification closes it.
Click Remove to stop sending to a destination. Destinations last for this session only. Grafana masks Discord, Slack, and PagerDuty secrets, but anyone who can open this session's Grafana can read a plain webhook URL such as an ntfy topic. Links inside the notifications point to Grafana's address inside the VM (localhost:3000), so open Grafana from its tab instead.
A real VM, not a container
Get root on a VM with its own kernel, so Docker, Kubernetes, and systemd just work.
Read the docs →
SSH from browser or CLI
Use the built-in web terminal, or connect with labctl ssh, plain ssh, scp, or rsync.
Read the docs →
Drive it with AI
Let Claude, Codex, or any MCP client start this playground and run commands in it.
Read the docs →
Expose HTTP(S) ports
Give any web app running inside the VM a public URL - for yourself or to share with others.
Read the docs →
Share terminals
Invite others into your terminal session, or open it yourself from another device.
Read the docs →
Customize with init scripts
Add shell scripts that run at boot to install packages, clone repos, or seed test data.
Read the docs →
Private networking
VMs reach the internet via NAT with no public IP; several VMs share bridge networks.
Read the docs →
Ephemeral or persistent
By default, VMs are destroyed when the session ends; enable persistence to keep the disks for next time.
Read the docs →
Built-in container registry
A private registry.iximiuz.com for every playground to share images across services and VMs.
Read the docs →