Creating and updating dashboards automated workflow

Dear all,

We are deploying a new platform under the thought that everything should be deployed and operated as code, and i have been working on the Grafana part. Automating the installation and setting up datasources went very smooth, but i’m having a hard time in updating a dashboard after initial deployment.

We have our dashboard JSON-definitions sitting in a git-repo, and in these definitions the UID and ID equals null. So the http_api will create the dashboards and threat them as new ones. So far so good.

However, let’s now assume I want to update existing dashboards. E.g. I update a version from version 1 to 2, I now want to deploy this over multiple clusters. I don’t see how I can achieve this. Below are the methods that i’ve tried:

Method 1: Deleting dashboards
One approach would be to delete the current dashboard, and deploy the updated dashboard again. However when I want to delete the dashboard I don’t know the UID of the exact dashboard. So i’d have to manually look and update my scripts each time I want to do this.

I can’t define an UID or ID in the .json files of the GIT, because if I do this, a deployment will fail if the dashboards are not present.

Method 2: Updating dashboards
I know I can update a dashboard, but again, I don’t know the UID of a dashboard and there’s no easy way to obtain an API based on a name.

Method 3: Ignoring old dashboards
An alternative approach would be to ignore old dashboards, just deploy a newer one, and leave the old ones where they are. I would just keep deploying dashboards with a UID and ID of null.
The few resources wasted in doing this approach is something I can live with. However, I found out that not only the UID and ID need to be unique but the name too.

E.g. This means that if I have a dashboard called ‘Infrastructure metrics’ with uid ‘abcdef123’, I can not add a dashboard called ‘infrastructure metrics’ with uid null. I could hardcode a timestamp in the dashboard titles, but not a pretty approach either.

Method 4: Using deprecated slug"
The only reliable way I found to manage dashboards is to fall back to the good ol’ slug. I can hardcode a slug in a dashboard, and use the slug value to update the dashboard.
However I am not very comfortable in doing this as using a ‘slug’ is a deprecated feature which will eventually be removed.

Looking at all what i’ve tried above I am running out of ideas. Am I doing something completely wrong or overlooking something simple? I’d like to know how the community manages updating their dashboards.

Hi @viince1,

You don’t have to let UID be null to create a dashboard. Define the UID in your version-controlled JSON in Git (invent a maximum 40 character string). Your Grafana instances will accept the UID instead of generating a random one. It will be your uniform identifier across all your Grafana instances.

http://docs.grafana.org/http_api/dashboard/#identifier-id-vs-unique-identifier-uid