Daily Grafana dashboard change audit with Jira tickets
Every weekday at 9am, review dashboards edited in the last day, file Jira tickets for risky changes, and post a one-line Slack digest.
Every weekday at 9am in my org timezone, audit Grafana dashboards that were edited in the last 24 hours and surface risky changes for human review. This is an agent workflow because deciding what counts as "risky" requires judgement, not a fixed rule list.
Trigger: cron, weekdays Mon-Fri at 9:00 in the org's timezone.
Steps the agent should run:
1. Use Grafana Search Dashboards and Folders to list dashboards across the org, then for each non-skipped dashboard call List Dashboard Versions and keep the ones whose newest version was created in the last 24 hours. Skip any dashboard tagged "draft" and any dashboard that lives in a personal/user folder so noisy work-in-progress edits do not generate tickets. Also skip folders/tags the user adds to a configurable skip list.
2. For each remaining dashboard, call Compare Dashboard Versions between the newest version and the version that was current 24 hours ago (use Get Dashboard Version if you need to inspect the full JSON to disambiguate). Read the diff.
3. Apply judgement to classify the change as risky or routine. Treat as RISKY: alert thresholds modified, queries swapped or removed, panels deleted, units or time ranges changed on production SLI or revenue panels, data source swaps, variable/template changes that affect what production users see. Treat as ROUTINE: cosmetic edits (titles, descriptions, colors), panel reordering or resizing, new annotations, new non-production panels added at the bottom. When in doubt on a high-traffic production dashboard, lean toward risky.
4. For each risky change, use Jira Create Issue to file a review ticket in the configured Jira project. Assign it to the Grafana user who made the edit (match by email); if no Jira match exists, fall back to the owner indicated by the dashboard's owner tag, then to a configured default assignee. The issue summary should be "Review risky Grafana change: <dashboard name>". The description should include: what changed in plain language (one or two sentences per material change), why it warrants a second look, the editor's name, the version numbers compared, and a link back to the dashboard in Grafana. Use a configurable issue type (default Task) and label the issue "grafana-change-review".
5. After all tickets are filed, post one Slack digest via Slack Bot Send a Message to the designated channel. The digest should include: total dashboards changed in the window, count of risky vs routine, a short list of who changed what (one line per dashboard, name + editor + risky/routine), and links to the new Jira review tickets. If nothing risky was found, post a quiet single-line note: "Grafana dashboard audit ran. N dashboards edited, all routine." Never post per-ticket spam; always one consolidated message.
Configurable inputs the user should be able to edit: the Slack channel, the Jira project key and default assignee, the skip list of folders and tags (defaults: draft tag, personal folders), the run time and timezone, and an optional list of "always-flag" dashboards that should file a ticket even on small edits.
Anchor operations: grafana.search_dashboards_and_folders, grafana.list_dashboard_versions, grafana.compare_dashboard_versions, grafana.get_dashboard_version, jira.create_issue, slackbot.send_a_message.
Additional information
What does this prompt do?
- Each weekday morning, finds every Grafana dashboard that was edited in the last 24 hours.
- Reads the diff between the old and new version and uses judgement to separate risky changes (alert thresholds, swapped queries, deleted panels, data source swaps on SLI or revenue boards) from routine edits like panel reordering or cosmetics.
- Opens a Jira ticket for each risky change, assigned to the person who made the edit, with a short explanation of what changed and a link back to the dashboard.
- Posts one Slack digest to your designated channel with totals, who changed what, and links to the new review tickets, or a quiet "no risky changes today" note when everything looks routine.
What do I need to use this?
- A Grafana login that can search dashboards and read version history.
- A Jira project where review tickets should be filed, with permission to create issues and assign them.
- A Slack workspace with a bot installed in the channel where the daily digest should land.
How can I customize it?
- Change the schedule, for example move it to 8am or run it Monday only.
- Edit the list of dashboard folders or tags to skip, such as draft dashboards or personal sandboxes.
- Tune what counts as risky, for example add specific board names that should always file a ticket even on small edits.
- Pick the Slack channel for the digest and the Jira project, issue type, and default assignee for the review tickets.
Frequently asked questions
Will this generate a ticket every time someone tweaks a panel title?
How does it know who to assign the Jira ticket to?
How do I stop draft dashboards from creating noise?
What happens on a quiet day with no risky changes?
Can I send the digest to more than one Slack channel?
Related templates
Stop letting silent dashboard edits break your on-call response.
Connect Grafana, Jira, and Slack once, and Geni audits yesterday's dashboard changes every weekday at 9am.