Grafana Plugin
Without this plugin, Grafana dashboards are a separate tab the developer has to remember to open — and without the service entity as context, they're dashboards, not "the dashboard for this service." Enable the plugin, add grafana/dashboard-selector to the entity with a tag expression matching that service's dashboards, and an observability card appears in the entity overview. Metrics are now anchored to the service, not floating in a separate tool.
The Grafana plugin embeds Grafana dashboards and alert panels in entity pages, giving developers direct observability access from the catalog.
The @roadiehq/backstage-plugin-grafana package exists upstream (Roadie community plugins) but is not in any active workspace in devportal-plugin-export-overlays — the entry is commented out in the roadie-backstage-plugins workspace, which means VeeCode is not currently publishing an OCI image for it.
Your options:
- Reference the npm package directly — if upstream Roadie publishes a dynamic build of this plugin, you can use
package: '@roadiehq/backstage-plugin-grafana'indynamic-plugins.yaml. Confirm upstream has a-dynamicartifact before relying on this. - Fork
devportal-plugin-export-overlaysand add the plugin to a workspace yourself, then publish your own OCI artifact. - Use an alternative — for ready-to-use observability/quality plugins that VeeCode publishes today, see Tech Insights, SonarQube, or the
kialiworkspace for service-mesh observability.
The configuration below shows the composition contract (annotation + backend config) regardless of which installation path you choose.
Adding the plugin
Via Marketplace
If the Marketplace shows a Grafana plugin entry (the catalog is updated continuously), click Enable and skip the manual steps below.
Via dynamic-plugins.yaml
If the OCI artifact is not available, you can still reference the upstream npm package or your own build. The illustrative OCI entry below uses placeholder workspace/tag — see the caution box above for the current publishing status.
plugins:
- package: oci://quay.io/veecode/<workspace>:<tag>!roadiehq-backstage-plugin-grafana
disabled: false
pluginConfig:
dynamicPlugins:
frontend:
roadiehq.backstage-plugin-grafana:
mountPoints:
- mountPoint: entity.page.overview/cards
importName: EntityGrafanaDashboardsCard
config:
layout:
gridColumn: "1 / -1"
if:
allOf:
- isGrafanaAvailable
Replace <workspace> and <tag> with the values that match your instance. See Adding Plugins for details on the OCI artifact format.
App configuration
grafana:
# The base URL of your Grafana instance
domain: ${GRAFANA_URL}
# Optional: Grafana API key for fetching dashboards programmatically
# unifiedAlerting: true # set to true if using Grafana Unified Alerting
Required annotation
Add the following annotation to the component's catalog-info.yaml:
metadata:
annotations:
grafana/dashboard-selector: "tags @> 'my-service'"
grafana/alert-label-selector: "service=my-service"
grafana/dashboard-selector— a Grafana tag expression that filters dashboards to showgrafana/alert-label-selector— a label selector for Grafana alerts