PluginBench
Skill
Pass
Audit score 90

dt-app-dashboards

dynatrace/dynatrace-for-ai

Create, modify, and analyze Dynatrace dashboards with JSON tiles, layouts, DQL queries, and variables.

What is dt-app-dashboards?

This skill enables you to work with Dynatrace dashboards stored as JSON documents. Use it when you need to create new dashboards, modify existing ones, query dashboard structure, or analyze dashboard configurations including tiles, layouts, DQL queries, variables, and visualizations.

  • Create dashboards with tiles (markdown and data visualizations) and grid layouts
  • Modify existing dashboards by reading current state, editing JSON, and deploying changes
  • Define dashboard variables (query-based, CSV, or text) for dynamic filtering and parameterization
  • Work with DQL queries embedded in data tiles and validate them before deployment
  • Configure visualization types (time-series, categorical, single-value, tabular, maps, heatmaps) with appropriate field mappings
  • Analyze dashboard structure to discover properties, extract queries, and assess dashboard health

How to install dt-app-dashboards

npx skills add https://github.com/dynatrace/dynatrace-for-ai --skill dt-app-dashboards
Prerequisites
  • Dynatrace environment with Document Store access
  • dtctl CLI tool installed and authenticated to your Dynatrace tenant
  • Basic understanding of DQL (Dynatrace Query Language) for data tiles
Claude Code
Cursor
Windsurf
Cline

How to use dt-app-dashboards

  1. 1.Load domain skills (e.g., metric or log domain) before generating any DQL queries to avoid inventing unsupported queries
  2. 2.For new dashboards: design the structure (tiles, layout grid, variables) and validate all DQL queries using the domain skills
  3. 3.For existing dashboards: fetch the current JSON with `dtctl get dashboard <id> -o json`, save it locally, make your modifications, then deploy with `dtctl apply`
  4. 4.Define variables using query, CSV, or text types; use `$VariableName` syntax in DQL filters (single-select with `==`, multi-select with `in()`)
  5. 5.Choose the correct visualization type based on your data shape (time-series for trends, categorical for summaries, table for raw records, maps for geographic data)
  6. 6.Deploy and validate: `dtctl apply` runs automatic validation; fix all reported errors before re-applying

Use cases

Good for
  • Build a performance monitoring dashboard with time-series charts for application metrics and service health
  • Create a multi-variable dashboard that filters data by service, environment, and time range using dynamic query variables
  • Modify an existing dashboard to add new tiles or change visualization types without losing user-made UI edits
  • Extract and validate all DQL queries from a dashboard to audit data sources and query logic
  • Set up a categorical dashboard with pie charts and bar charts summarizing data by business dimensions
Who it's for
  • Dynatrace platform administrators building and maintaining dashboards
  • DevOps engineers creating monitoring and observability dashboards
  • Site reliability engineers (SREs) designing dashboards for incident response and alerting
  • Data analysts building analytical dashboards with Dynatrace data
  • Teams automating dashboard creation and updates via CI/CD pipelines

dt-app-dashboards FAQ

What's the difference between `dtctl get dashboard` and `dtctl describe dashboard`?

`dtctl get dashboard <id> -o json` returns the full JSON content including tiles, layouts, and variables. `dtctl describe` returns metadata only. Always use `get` when you need to read or modify dashboard structure.

Can I manually add an `id` field to a new dashboard JSON before deploying?

No. Never inject an `id` manually or reconstruct JSON from scratch. For updates, always read the current state first with `dtctl get`, modify that file, then deploy. Manual ID injection silently overwrites user-made UI edits.

How do I use variables to filter dashboard queries?

Define a variable with type `query`, `csv`, or `text`. In your DQL query, use `$VariableName`. For single-select filters use `filter service.name == $Service`; for multi-select use `filter in(service.name, array($Service))`.

What grid dimensions should I use for tile layouts?

The grid is 24 units wide. Common widths: 24 (full width), 12 (half width), 6 (quarter width). Set `x`, `y`, `w` (width), and `h` (height) in the layouts section to position tiles.

Do I need to include time-range filters in dashboard queries?

No. Omit time-range filters unless explicitly requested by the user. Dynatrace dashboards handle time selection at the dashboard level, not in individual queries.

Full instructions (SKILL.md)

Source of truth, from dynatrace/dynatrace-for-ai.


name: dt-app-dashboards description: Work with Dynatrace dashboards - create, modify, query, and analyze dashboard JSON including tiles, layouts, DQL queries, variables, and visualizations. license: Apache-2.0

Dynatrace Dashboard Skill

Overview

Dynatrace dashboards are JSON documents stored in the Document Store containing tiles (content/visualizations), layouts (grid positioning), and variables (dynamic query parameters).

When to use: Creating, modifying, querying, or analyzing dashboards.

Dashboard JSON Structure

{
  "name": "My Dashboard",
  "type": "dashboard",
  "content": {
    "version": 21,
    "variables": [],
    "tiles": { "<id>": { "type": "data|markdown", ... } },
    "layouts": { "<id>": { "x": 0, "y": 0, "w": 24, "h": 8 } }
  }
}
  • Tile IDs in tiles must match IDs in layouts
  • Grid is 24 units wide. Common widths: 24 (full), 12 (half), 6 (quarter)
  • Two tile types: markdown (text content) and data (DQL query + visualization)

Optional content properties: settings, refreshRate, annotations

Reading & Analyzing

Fetch full content with dtctl get dashboard <id> -o json (describe returns metadata only), then inspect the JSON to discover its available properties. Carefully read references/analyzing.md before analyzing.

Create/Update Workflow (Mandatory Order)

Carefully follow the workflow described in references/create-update.md.

Key rules:

  • Load domain skills BEFORE generating queries — do not invent DQL
  • Validate ALL queries before adding to dashboard
  • No time-range filters in queries unless explicitly requested by user
  • Set name before deploying
  • Updating — ALWAYS read the current state first: dtctl get dashboard <id> -o json, save it as dashboard.json, modify that file, then deploy it. Never reconstruct JSON from scratch or inject an id manually — both silently overwrite any UI edits the user made since last deployment.
  • Deploy with dtctl apply — validation runs automatically. If it fails, fix all reported errors before re-applying.

Visualization Types

  • Time-series (require timeseries/makeTimeseries): lineChart, areaChart, barChart, bandChart
  • Categorical (summarize ... by:{field}): categoricalBarChart, pieChart, donutChart
  • Single value/gauge (single numeric record): singleValue, meterBar, gauge
  • Tabular (any data shape): table, raw, recordList
  • Distribution/status: histogram, honeycomb
  • Maps: choroplethMap, dotMap, connectionMap, bubbleMap
  • Matrix: heatmap, scatterplot

Required field types per visualization: references/tiles.md

Variables Quick Reference

{ "version": 2, "key": "Service", "type": "query", "visible": true,
  "editable": true, "input": "smartscapeNodes SERVICE | fields name",
  "multiple": false }
  • Single-select: filter service.name == $Service
  • Multi-select: filter in(service.name, array($Service))
  • Types: query (DQL-populated), csv (static list), text (free-form)

Full variable reference: references/variables.md

References

FileWhen to Load
create-update.mdCreating/updating dashboards
tiles.mdTile types, visualization field requirements, settings
variables.mdVariable types, replacement strategies, patterns
analyzing.mdReading dashboards, extracting queries, health assessment