MetoroDashboard custom resources. This approach lets you treat dashboards as code while still allowing teams to create and manage additional dashboards in the Metoro UI.
Kubernetes-managed dashboards are read-only in the UI. Changes must be applied through Kubernetes manifests.
How synchronization works
- Metoro checks for ConfigMaps with the
metoro.io/dashboard: "true"label andMetoroDashboardresources on all environments and namespaces once an hour and updates the dashboards with any changes it finds. - You can trigger an on-demand refresh by clicking Sync Dashboards in the UI whenever you do not want to wait for the automatic run.
- Kubernetes-managed dashboards display their source resource and the time of the last sync so you can confirm that changes were applied.
- If a sync cannot read a Kubernetes source or the dashboard definition is invalid, Metoro writes an error to your cluster logs.
Allow at least one minute after applying or updating a ConfigMap before triggering a manual sync so that Metoro can discover the new resource.
id’s provided in the dashboard definition will be prefixed with your organization UUID. For example, if you define a dashboard with id: my-dashboard in a ConfigMap, and your organization UUID is org-1234, the resulting dashboard ID in Metoro will be org-1234-my-dashboard.ConfigMap requirements
Metoro looks for specific labels and data keys to determine whether a ConfigMap should be treated as a dashboard source. Make sure each ConfigMap satisfies the following:- Include the label
metoro.io/dashboard: "true". ConfigMaps without this label are ignored. - Provide the dashboard definition inside
data.dashboard.yaml. Each ConfigMap can contain one or more dashboards under this key. - Conform to the public dashboard schema (metadata, content tree, and optional settings) described in the OpenAPI specification: Dashboard schema
- Use valid resource identifiers and folder paths. IDs must be filesystem-safe, and folder paths have to live under
/dashboards/. idvalues must be unique across all ConfigMap-managed and UI-managed dashboards. Conflicts cause sync errors.
MetoroDashboard CRD requirements
Use aMetoroDashboard custom resource when you want Kubernetes API validation and one Kubernetes object per dashboard:
- Use
apiVersion: observability.metoro.io/v1alpha1andkind: MetoroDashboard. - Provide a
spec.contentroot group.spec.titleis optional and defaults tometadata.name. - Do not set a dashboard ID or folder path. Metoro derives the ID as
kubernetes-managed.<cluster>.<namespace>.<name>and places the dashboard under/dashboards/kubernetes-managed/<cluster>/<namespace>/. - The root group can contain group widgets, but group widgets cannot contain other group widgets.
metadata.namespace, so the resource lands in whichever namespace you apply it to, and the dashboard ID and folder are derived when Metoro syncs the resource.
Example MetoroDashboard
Example ConfigMap with a single dashboard
This example ConfigMap defines a simple stat table dashboard showing CPU usage per environment. More example dashboards can be found in the metoro-examples GitHub repository.Deploying Kubernetes dashboards
- Apply the ConfigMap or
MetoroDashboardresource to any namespace within the Kubernetes cluster where Metoro runs. - Wait at least a minute for the resource inventory to ingest the new data (or the ingestion window described above to elapse).
- Either wait for the next scheduled hourly sync or click Sync Dashboards in the Metoro UI to trigger reconciliation immediately.
- After the workflow completes, reload the Dashboards page to see the imported definitions. Kubernetes-managed dashboards display a badge with the managing resource and show a toast explaining that edits must happen in Kubernetes.

Converting existing dashboards
You can convert any UI-managed dashboard into a Kubernetes-managed one by exporting it as YAML and applying the file as a ConfigMap:- Open the dashboard in Metoro and choose Edit.
- Click the Settings (gear) icon and select Export.
- Choose YAML (ConfigMap), which downloads a YAML file containing the dashboard definition that matches the ConfigMap schema.
- Wrap the exported YAML in a Kubernetes ConfigMap (adding the label and folder path adjustments you need) and deploy it to your cluster.
- Trigger a sync or wait for the hourly workflow. The resulting dashboard becomes read-only in the UI, and future edits should flow through the ConfigMap.


Deleting Kubernetes-managed dashboards
To delete a ConfigMap-managed dashboard, delete the corresponding ConfigMap from your Kubernetes cluster and then delete the dashboard from the Metoro UI. To delete aMetoroDashboard-managed dashboard, delete the MetoroDashboard resource. The dashboard will be removed during the next sync when Metoro sees the Kubernetes delete event.
If you delete only the dashboard from the Metoro UI without deleting the Kubernetes source, the dashboard will be recreated during the next sync.
Troubleshooting
If your Kubernetes-managed dashboards do not appear or behave as expected, you can check from your cluster logs for sync errors Make sure to filter the logs byservice.name: configmap-to-dashboard to see only relevant entries.

- Dashboard does not appear: For ConfigMaps, confirm the label and the
dashboard.yamlkey. For CRDs, confirm theMetoroDashboardresource exists in the cluster. Invalid or missing values are skipped during the next sync. - Validation errors: Review the sync error in your cluster logs, fix the YAML, and run a new sync. ConfigMap dashboard IDs and folder paths must match the OpenAPI schema.
MetoroDashboardresources derive the ID and folder path from the Kubernetes object. - UI edits rejected: Kubernetes-managed dashboards intentionally disable the Save action. Update the Kubernetes resource instead, then sync again to propagate the change.
