Skip to main content

grafana-dashboard-python

Write Grafana dashboards in Python, without losing thousands of dashboards in the zoo

Introduction

Grafana's official best practice recommends using scripts to generate dashboards, instead of creating it in GUI manually. This avoids a lot of repetition, and also ensures consistency.

Grafanalib is a library for that purpose, and I have enjoyed it in my system. However, I also want to use (download and customize) the dashboards already built by other people (https://grafana.com/grafana/dashboards/). Therefore, I create this small tool.

Sample workflow 1: Customize an existing dashboard

Step 1: Convert standard Grafana dashboard into Python code

To begin with, get your dashboard from wherever you like, such as https://grafana.com/grafana/dashboards/, or your legacy dashboards. Then convert it to Python code:

grafana_dashboard json-to-python --json-path ... --python-path ...

Currently, you may need a bit of cleanup for the generated code, mostly add a few imports. (Should be automated in future releases.)

Step 2: Customize it in Python

Since it is nothing but normal Python code, you can customize it freely, and it can be easily made consistent with other dashboards written in Python.

For example, I personally have a few annotations that should be applied to every dashboard, then I can just add annotations=get_common_annotations() and that's all - no need to copy-and-paste dozens of lines.

Step 3: Deploy it

Same as Grafanalib, just convert Python into JSON, and use you favorite approach to send the JSON to Grafana. As for the arguments of the conversion command:

grafana_dashboard python-to-json --python-base-dir ... --python-base-package ... --json-dir ...

Sample workflow 2: Create a dashboard from scratch

Just throw away "step 1" in the sample above :)

Stability / bugs / tests

Firstly, it works well for my own cases, and I have ensured the parts that I use looks correct. However, there are definitely rough edges that I have not manually optimized, since Grafana's auto-generated schema will not solve everything.

As you know, my philosophy is that, if a tool that I use internally may also be useful for others, I will open source it to help people - that's why this tiny utility is on GitHub. However, I am too busy recently, and thus do not have that much time to cover every rough edge of Grafana features that I have not used.

If you see a bug, feel free to create an issue or PR, and I usually reply quickly (within minutes or hours, except sleeping). From my experience, it is very trivial to solve the hard edges. Anyway, this is nothing but a series of Pydantic models with almost no logic. How can it have hard-to-fix bugs? ;)

More importantly, you can always check the output JSON to see whether there is an unexpected output. For example, in my own workflow, I let Git track the JSON. Then, if anything changes, I have a clear diff.

Examples

Examples can be found at /examples.

Relation with Grafanalib

I do hope that I can simply PR to Grafanalib and add the "convert any JSON into Python" feature. However, in my humble opinion it is quite hard: Grafanalib's API differs a lot from Grafana's JSON API. Therefore, though I can easily convert JSON to Python dict or object constructor, it is time-consuming and error-prone to further convert it into valid Grafanalib code.

How it works

Pretty simple. When using it, it is nothing but a series of Pydantic models, with almost no logic except that. So you are indeed using the serialization and deserialization feature of Pydantic.

As for how the Pydantic code is created: It is generated automatically from Grafana's official schema, and then manually tweaked for a better developer experience (e.g. provide more sensible defaults, make types looser). All changes are recorded in a patch file, so the package can be easily upgraded when Grafana upgrades, and always keep the definition accurate.

Tips

  • You can (auto) migrate the JSON to latest schemaVersion by importing the JSON into Grafana and download/save JSON from the imported dashboard. Doing so may make your code a bit cleaner.
  • If the Python generated from JSON gives weird results, it is trivial to debug: Just compare the newly generated JSON with the original JSON, and fix any noticeable differences.

Metadata

Release files for grafana-dashboard 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for grafana-dashboard 0.1.1
File Size Uploaded
grafana_dashboard-0.1.1.tar.gz 38.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for grafana-dashboard 0.1.1
File Interpreter ABI Platform
grafana_dashboard-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 101.9 kB

Release files / grafana_dashboard-0.1.1.tar.gz

Download URL grafana_dashboard-0.1.1.tar.gz
Size 38.9 kB
Tags Source
SHA-256 checksum
How to use checksums
57a2e62c89f3a300c8165d20637095a90d9a9027b0a6d2ffcbc4fbeafbb19a37
BLAKE2b-256 checksum
How to use checksums
3dece148aad8c18e38f932abd0c152f4c0a8dec5a7f26bb4050a1ee6e4e94776
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.12

Release files / grafana_dashboard-0.1.1-py3-none-any.whl

Download URL grafana_dashboard-0.1.1-py3-none-any.whl
Size 63.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eb0065cebc5cb82fc54f9f983259eca446a01837cae22bd93b9d504de6034991
BLAKE2b-256 checksum
How to use checksums
bee7debbed2d7a576025610ef70349b2268bdddb05f7dc75e9359b347b4b077c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.12

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page