Splunk Observability Dashboard Builder
Prerequisites
| Tool or access |
Purpose |
Verify |
| Bash and Python 3 |
Run bundled setup and validation helpers |
bash --version && python3 --version |
| Required product/platform access |
Inspect or configure the selected target |
Complete the documented preflight |
| Credential files for live modes |
Keep secrets out of chat |
Verify paths only |
Workflow Overview
┌───────────┐ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐
│ Preflight │ → │ Render/review │ → │ Apply/handoff │ → │ Validate evidence │
└───────────┘ └───────────────┘ └───────────────┘ └─────────────────┘
When to Activate
- Creating, planning, rendering, validating, or applying Splunk Observability Cloud dashboards from natural-language
dashboard requests, JSON or YAML dashboard specs, SignalFlow chart definitions, or Observability dashboard-as-
code.
- Preview and review the splunk observability dashboard builder workflow before any live apply phase.
- Diagnose failed prerequisites, generated assets, configuration, or validation evidence.
Scope
Follow the documented read-only or render-first path whenever it is available.
This skill does not imply permission to mutate live systems. Require explicit
apply flags, protected credentials, and operator review for state changes.
Examples
Inspect the supported setup modes before selecting one:
bash skills/splunk-observability-dashboard-builder/scripts/setup.sh --help
Expected output: usage, supported modes, and required arguments are displayed
without changing the target environment.
Inspect validation modes before running completion checks:
bash skills/splunk-observability-dashboard-builder/scripts/validate.sh --help
Expected output: offline, live, and completion options are displayed when the
skill supports them; help exits without mutation.
Troubleshooting
| Issue |
Cause |
Resolution |
| Preflight fails |
A required tool or access path is missing |
Resolve it before rendering or applying |
| Rendered assets are incomplete |
Required non-secret inputs are absent |
Complete intake and render again |
| Apply is blocked |
Review, credentials, or explicit acceptance is missing |
Use the documented handoff |
| Validation is incomplete |
Live evidence is unavailable |
Record the gap and keep completion open |
Overview
Use this skill to turn a user's natural-language dashboard idea into a reviewed Splunk Observability Cloud dashboard specification, rendered API payloads, and optionally an applied native Observability dashboard.
The default path is classic-api: create custom dashboard groups, charts, and dashboards through the documented /v2/dashboardgroup, /v2/chart, and /v2/dashboard APIs. Modern dashboard features are documented as UI/advisory unless a public API is verified before use.
Safety Rules
- Never ask for Splunk Observability API tokens, org access tokens, session tokens, passwords, or client secrets in conversation.
- Never pass tokens on the command line or as environment-variable prefixes.
- Require
--token-file for live API operations.
- Reject direct token flags such as
--token, --access-token, --api-token, --o11y-token, and --sf-token.
- Prefer
SPLUNK_O11Y_REALM and SPLUNK_O11Y_TOKEN_FILE from the repo credentials file when present; these store only the realm and token-file path, not the token value.
- Render and validate before apply. Apply only when the user explicitly requests it.
- Create new custom dashboards by default. Use
--update-existing only when the user explicitly asks and the spec includes existing dashboard/chart IDs.
Primary Workflow
Interpret the request:
- Identify audience, decision workflow, services or infrastructure scope, time range, dashboard group, filters, and desired visuals.
- Ask only for missing non-secret values: realm, dashboard group name or ID, service/environment/cluster names, preferred dimensions, and target time range.
- For vague requests, produce a starter dashboard and mark assumptions in the spec comments or final explanation.
Ground the dashboard in live metadata when possible:
- Use
scripts/setup.sh --discover-metrics --realm <realm> --token-file <file> --query <term> to discover metric names. Omit realm/token flags when SPLUNK_O11Y_REALM and SPLUNK_O11Y_TOKEN_FILE are configured in credentials. Simple bare terms such as latency are converted to sf_metric:*latency*.
- Use metric and dimension names returned by the API instead of inventing names.
- If live metadata is unavailable, render a reviewable draft and clearly mark metric names as assumptions.
Write or update a JSON or YAML spec:
- Start from
templates/dashboard.example.json for a dependency-free example, or templates/dashboard.example.yaml when PyYAML is installed.
- Keep
mode: classic-api for renderable native Observability dashboards.
- Use
mode: modern-ui-advisory or mode: dashboard-studio-advisory only to document UI/manual work.
Validate and render:
bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \
--render \
--spec skills/splunk-observability-dashboard-builder/templates/dashboard.example.json \
--output-dir splunk-observability-dashboard-rendered
Review the rendered plan:
metadata.json summarizes coverage, assumptions, and warnings.
charts/*.json contains chart API payloads.
dashboard.json contains the dashboard API payload with chart placeholders.
apply-plan.json records the creation sequence without secrets.
Apply only when explicitly requested:
bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \
--apply \
--spec my-dashboard.json \
--realm us0 \
--token-file /tmp/splunk_o11y_api_token
By default, --apply creates new dashboard groups, charts, and
dashboards. Use --update-existing only with explicit existing object
IDs in the spec; the apply client fetches the current objects before PUT
so omitted writable fields are preserved where the API returns them.
--dry-run is non-destructive and skips both the API calls and the
readable-token-file requirement, so CI preview-only jobs do not need
a real token path on disk. Live --apply retries 429/502/503/504
automatically with exponential backoff (cap: 4 attempts; honors
Retry-After when present).
Clean up validation smoke dashboards when needed:
bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \
--cleanup \
--apply-result splunk-observability-dashboard-rendered/apply-result.json
Cleanup is intentionally guarded to rendered plans whose dashboard group and
dashboard names start with codex_live_validation. Use the Observability UI
or API directly for non-validation dashboards.
Coverage Rules
- Fully renderable through classic-api: custom dashboard groups, custom dashboards, TimeSeriesChart, SingleValue, List, TableChart, Heatmap, Text charts, event overlays, dashboard filters/variables, chart time ranges, units, legends, thresholds, and detector links represented by chart properties.
- Documented but not currently API-rendered by this skill: pie/donut charts and event feed charts. Current product docs list them, but this renderer needs a verified classic
/v2/chart schema before applying them. Use modern-ui-advisory or Text/link notes for now.
- Metric-derived coverage: Infrastructure Monitoring, Kubernetes/cloud infrastructure, Database Monitoring, APM service RED metrics, RUM Browser/Mobile metrics, Synthetic Monitoring metrics, Log Observer Connect metrics/log links, custom business metrics, AI Infrastructure Monitoring, and AI Agent/APM metrics when the required metrics are present.
- Advisory/link-only coverage: trace waterfalls, RUM sessions and session replay, synthetic waterfall detail, database explain plans, alerts/detector management, On-Call workflows, Observability Cloud for Mobile app workflows, product-native navigators, modern dashboard sections/subsections, service maps, and modern logs charts. Do not claim API rendering for these without verifying a public API first.
- Dashboard Studio: keep as a secondary path. It has Splunk platform version, realm, capability, trial, Unified Identity, and import limitations. Do not mix it into the native Observability apply path.
Read references/coverage.md for the full product coverage matrix and references/classic-api.md for API field guidance.
YAML specs require PyYAML in the Python interpreter used by scripts/setup.sh. Install repo dependencies with python3 -m pip install -r requirements-agent.txt, or use JSON specs.
Spec Guidance
- Prefer one dashboard per operational question. Put broad estate overviews and incident drilldowns in separate dashboards.
- Use dashboard variables for common drilldowns such as
sf_environment, service.name, k8s.cluster.name, k8s.namespace.name, host.name, cloud.region, and deployment.environment.
- Choose chart types intentionally:
- TimeSeriesChart for trends, rates, latency, throughput, saturation.
- SingleValue for current health, active alerts, SLO/error-budget snapshots, latest values.
- List or TableChart for top-N entities and inventory/status summaries.
- Heatmap for distributions and dense population comparisons.
- Text for operator notes, runbook links, and assumptions.
- Use
modern-ui-advisory for pie/donut, event feed, logs, service map, section/tab, or other modern-only visualizations until the public API schema is verified.
- Every non-text chart must include SignalFlow with at least one
publish() output.
- Keep layouts within a 12-column grid. The validator rejects collisions and out-of-range chart positions.
Update Existing Objects
For existing charts or dashboards, use --update-existing with fetch-modify-PUT semantics:
- Add
dashboard.id and each chart's chart_id to the spec.
- Render and review the plan.
- Apply with
--apply --update-existing.
Do not create partial PUT payloads. The Observability chart API can null or remove writable properties omitted from updates.
Scripts
scripts/setup.sh - shell entrypoint for render, validate, discover, apply, and guarded cleanup.
scripts/render_dashboard.py - validates specs and renders classic API payloads.
scripts/validate_dashboard.py - static validation for specs or rendered payloads.
scripts/o11y_dashboard_api.py - live API client using token files only.
Useful Commands
Validate a draft spec:
bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \
--validate \
--spec skills/splunk-observability-dashboard-builder/templates/dashboard.example.json
Render without applying:
bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \
--render \
--spec skills/splunk-observability-dashboard-builder/templates/dashboard.example.json \
--output-dir splunk-observability-dashboard-rendered
Discover metrics before writing SignalFlow:
bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \
--discover-metrics \
--query latency
1---2name: splunk-observability-dashboard-builder3description: Use when creating, planning, rendering, validating, or applying Splunk Observability Cloud dashboards from natural-language dashboard requests, JSON or YAML dashboard specs, SignalFlow chart definitions, or Observability dashboard-as-code workflows. Supports native classic Observability dashboard/chart APIs with render-first safety; treats modern dashboard sections, logs charts, service maps, and Dashboard Studio as advisory/secondary paths unless a verified API is available.4---56# Splunk Observability Dashboard Builder78## Prerequisites910| Tool or access | Purpose | Verify |11|---|---|---|12| Bash and Python 3 | Run bundled setup and validation helpers | `bash --version && python3 --version` |13| Required product/platform access | Inspect or configure the selected target | Complete the documented preflight |14| Credential files for live modes | Keep secrets out of chat | Verify paths only |1516## Workflow Overview1718```text19┌───────────┐ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐20│ Preflight │ → │ Render/review │ → │ Apply/handoff │ → │ Validate evidence │21└───────────┘ └───────────────┘ └───────────────┘ └─────────────────┘22```2324## When to Activate2526- Creating, planning, rendering, validating, or applying Splunk Observability Cloud dashboards from natural-language27 dashboard requests, JSON or YAML dashboard specs, SignalFlow chart definitions, or Observability dashboard-as-28 code.29- Preview and review the splunk observability dashboard builder workflow before any live apply phase.30- Diagnose failed prerequisites, generated assets, configuration, or validation evidence.3132## Scope3334Follow the documented read-only or render-first path whenever it is available.35This skill does not imply permission to mutate live systems. Require explicit36apply flags, protected credentials, and operator review for state changes.3738## Examples3940Inspect the supported setup modes before selecting one:4142```bash43bash skills/splunk-observability-dashboard-builder/scripts/setup.sh --help44```4546Expected output: usage, supported modes, and required arguments are displayed47without changing the target environment.4849Inspect validation modes before running completion checks:5051```bash52bash skills/splunk-observability-dashboard-builder/scripts/validate.sh --help53```5455Expected output: offline, live, and completion options are displayed when the56skill supports them; help exits without mutation.5758## Troubleshooting5960| Issue | Cause | Resolution |61|---|---|---|62| Preflight fails | A required tool or access path is missing | Resolve it before rendering or applying |63| Rendered assets are incomplete | Required non-secret inputs are absent | Complete intake and render again |64| Apply is blocked | Review, credentials, or explicit acceptance is missing | Use the documented handoff |65| Validation is incomplete | Live evidence is unavailable | Record the gap and keep completion open |6667## Overview6869Use this skill to turn a user's natural-language dashboard idea into a reviewed Splunk Observability Cloud dashboard specification, rendered API payloads, and optionally an applied native Observability dashboard.7071The default path is **classic-api**: create custom dashboard groups, charts, and dashboards through the documented `/v2/dashboardgroup`, `/v2/chart`, and `/v2/dashboard` APIs. Modern dashboard features are documented as UI/advisory unless a public API is verified before use.7273## Safety Rules7475- Never ask for Splunk Observability API tokens, org access tokens, session tokens, passwords, or client secrets in conversation.76- Never pass tokens on the command line or as environment-variable prefixes.77- Require `--token-file` for live API operations.78- Reject direct token flags such as `--token`, `--access-token`, `--api-token`, `--o11y-token`, and `--sf-token`.79- Prefer `SPLUNK_O11Y_REALM` and `SPLUNK_O11Y_TOKEN_FILE` from the repo `credentials` file when present; these store only the realm and token-file path, not the token value.80- Render and validate before apply. Apply only when the user explicitly requests it.81- Create new custom dashboards by default. Use `--update-existing` only when the user explicitly asks and the spec includes existing dashboard/chart IDs.8283## Primary Workflow84851. Interpret the request:86 - Identify audience, decision workflow, services or infrastructure scope, time range, dashboard group, filters, and desired visuals.87 - Ask only for missing non-secret values: realm, dashboard group name or ID, service/environment/cluster names, preferred dimensions, and target time range.88 - For vague requests, produce a starter dashboard and mark assumptions in the spec comments or final explanation.89902. Ground the dashboard in live metadata when possible:91 - Use `scripts/setup.sh --discover-metrics --realm <realm> --token-file <file> --query <term>` to discover metric names. Omit realm/token flags when `SPLUNK_O11Y_REALM` and `SPLUNK_O11Y_TOKEN_FILE` are configured in `credentials`. Simple bare terms such as `latency` are converted to `sf_metric:*latency*`.92 - Use metric and dimension names returned by the API instead of inventing names.93 - If live metadata is unavailable, render a reviewable draft and clearly mark metric names as assumptions.94953. Write or update a JSON or YAML spec:96 - Start from `templates/dashboard.example.json` for a dependency-free example, or `templates/dashboard.example.yaml` when PyYAML is installed.97 - Keep `mode: classic-api` for renderable native Observability dashboards.98 - Use `mode: modern-ui-advisory` or `mode: dashboard-studio-advisory` only to document UI/manual work.991004. Validate and render:101102 ```bash103 bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \104 --render \105 --spec skills/splunk-observability-dashboard-builder/templates/dashboard.example.json \106 --output-dir splunk-observability-dashboard-rendered107 ```1081095. Review the rendered plan:110 - `metadata.json` summarizes coverage, assumptions, and warnings.111 - `charts/*.json` contains chart API payloads.112 - `dashboard.json` contains the dashboard API payload with chart placeholders.113 - `apply-plan.json` records the creation sequence without secrets.1141156. Apply only when explicitly requested:116117 ```bash118 bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \119 --apply \120 --spec my-dashboard.json \121 --realm us0 \122 --token-file /tmp/splunk_o11y_api_token123 ```124125 > By default, `--apply` creates new dashboard groups, charts, and126 > dashboards. Use `--update-existing` only with explicit existing object127 > IDs in the spec; the apply client fetches the current objects before PUT128 > so omitted writable fields are preserved where the API returns them.129 >130 > `--dry-run` is non-destructive and skips both the API calls and the131 > readable-token-file requirement, so CI preview-only jobs do not need132 > a real token path on disk. Live `--apply` retries 429/502/503/504133 > automatically with exponential backoff (cap: 4 attempts; honors134 > `Retry-After` when present).1351367. Clean up validation smoke dashboards when needed:137138 ```bash139 bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \140 --cleanup \141 --apply-result splunk-observability-dashboard-rendered/apply-result.json142 ```143144 Cleanup is intentionally guarded to rendered plans whose dashboard group and145 dashboard names start with `codex_live_validation`. Use the Observability UI146 or API directly for non-validation dashboards.147148## Coverage Rules149150- **Fully renderable through classic-api**: custom dashboard groups, custom dashboards, TimeSeriesChart, SingleValue, List, TableChart, Heatmap, Text charts, event overlays, dashboard filters/variables, chart time ranges, units, legends, thresholds, and detector links represented by chart properties.151- **Documented but not currently API-rendered by this skill**: pie/donut charts and event feed charts. Current product docs list them, but this renderer needs a verified classic `/v2/chart` schema before applying them. Use `modern-ui-advisory` or Text/link notes for now.152- **Metric-derived coverage**: Infrastructure Monitoring, Kubernetes/cloud infrastructure, Database Monitoring, APM service RED metrics, RUM Browser/Mobile metrics, Synthetic Monitoring metrics, Log Observer Connect metrics/log links, custom business metrics, AI Infrastructure Monitoring, and AI Agent/APM metrics when the required metrics are present.153- **Advisory/link-only coverage**: trace waterfalls, RUM sessions and session replay, synthetic waterfall detail, database explain plans, alerts/detector management, On-Call workflows, Observability Cloud for Mobile app workflows, product-native navigators, modern dashboard sections/subsections, service maps, and modern logs charts. Do not claim API rendering for these without verifying a public API first.154- **Dashboard Studio**: keep as a secondary path. It has Splunk platform version, realm, capability, trial, Unified Identity, and import limitations. Do not mix it into the native Observability apply path.155156Read `references/coverage.md` for the full product coverage matrix and `references/classic-api.md` for API field guidance.157158YAML specs require PyYAML in the Python interpreter used by `scripts/setup.sh`. Install repo dependencies with `python3 -m pip install -r requirements-agent.txt`, or use JSON specs.159160## Spec Guidance161162- Prefer one dashboard per operational question. Put broad estate overviews and incident drilldowns in separate dashboards.163- Use dashboard variables for common drilldowns such as `sf_environment`, `service.name`, `k8s.cluster.name`, `k8s.namespace.name`, `host.name`, `cloud.region`, and `deployment.environment`.164- Choose chart types intentionally:165 - TimeSeriesChart for trends, rates, latency, throughput, saturation.166 - SingleValue for current health, active alerts, SLO/error-budget snapshots, latest values.167 - List or TableChart for top-N entities and inventory/status summaries.168 - Heatmap for distributions and dense population comparisons.169 - Text for operator notes, runbook links, and assumptions.170- Use `modern-ui-advisory` for pie/donut, event feed, logs, service map, section/tab, or other modern-only visualizations until the public API schema is verified.171- Every non-text chart must include SignalFlow with at least one `publish()` output.172- Keep layouts within a 12-column grid. The validator rejects collisions and out-of-range chart positions.173174## Update Existing Objects175176For existing charts or dashboards, use `--update-existing` with fetch-modify-PUT semantics:1771781. Add `dashboard.id` and each chart's `chart_id` to the spec.1792. Render and review the plan.1803. Apply with `--apply --update-existing`.181182Do not create partial PUT payloads. The Observability chart API can null or remove writable properties omitted from updates.183184## Scripts185186- `scripts/setup.sh` - shell entrypoint for render, validate, discover, apply, and guarded cleanup.187- `scripts/render_dashboard.py` - validates specs and renders classic API payloads.188- `scripts/validate_dashboard.py` - static validation for specs or rendered payloads.189- `scripts/o11y_dashboard_api.py` - live API client using token files only.190191## Useful Commands192193Validate a draft spec:194195```bash196bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \197 --validate \198 --spec skills/splunk-observability-dashboard-builder/templates/dashboard.example.json199```200201Render without applying:202203```bash204bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \205 --render \206 --spec skills/splunk-observability-dashboard-builder/templates/dashboard.example.json \207 --output-dir splunk-observability-dashboard-rendered208```209210Discover metrics before writing SignalFlow:211212 ```bash213 bash skills/splunk-observability-dashboard-builder/scripts/setup.sh \214 --discover-metrics \215 --query latency216 ```