Skip to main content

Grafana Snapshots

Create Grafana snapshots including data(!).

The application uses the Grafana HTTP API and its Python client grafana-client.

The aim of this tool is to:

  1. Easily build snapshots from existing Grafana dashboard.
  2. Export the snapshots to a local storage in JSON format so it can be sent, imported an visualized to a remote Grafana.
  3. Import a snapshot in JSON format to a Grafana.

The development of this tool began when we discovered that there was no solution to automate the creation of snapshots from Grafana; only the functionality from the GUI was operational. That was a sticking point for us since it prevented us from being able to provide reports other than mannually build dashboards with statics screenshots. With this tool, we are able to build static dashboards, also called snapshots, that can be shared and visualized in grafana. It can be also used to store particular situation even if the data window is out of the scope of the retention of the datasource.

Install package

Install from PyPI.

pip3 install grafana-snapshots

Install from repository.

pip install git+https://github.com/grafana-toolbox/grafana-snapshots.git

Requirements:

  • bash
  • python >3.6
  • python modules:
    • python_dateutil
    • setuptools
    • PyYaml
    • jinja2
    • grafana-client 2.0.0 what will pull the dependencies
      • requests
      • idna
      • urllib3
      • certifi
      • chardet
  • Access to a Grafana API server.
  • A Token of an Admin role (grafana APIKey).

Configuration

The configuration is stored in a YAML file.

It contains 3 parts:

  • general: for script env.
    • debug: enable verbose (debug) trace (for dev only...)
    • snapshot_suffix: when generating or exporting a dashboard to snapshot, append that suffix to the snapshot name or file name. The suffix can contain plain text and pattern that is translated with strftime command.
    • output_path: where to store the exported snapshots.
  • grafana: for grafana access settings
    • label: a label to refer a grafana server. There must be at least 'default' label. It is used to reference several Grafana server so you can generate from one and to import to another using different 'label'.
      • protocol, host, port: use to build the access url
      • verify_ssl: to check ssl certificate or not
      • token: APIKEY with admin right from Grafana to access the REST API.
      • search_api_limit: the maximum element to retrieve on search over API.
  • context: to define default values for dashboards, time_from, time_to and values for variables that the data exposed in the dashboard are depending from. It is an object. Add a sub-object identified by the dashboard name, for each dashboard you want to add default value. Each object can contain:
    • time_from and time_to
    • an object called vars: the definitions of each variable with it's corresponding value.

Usages

build a directory structure:

  • grafana-snapshosts/
    • conf/grafana-snapshots.json where your main configuration file is
    • snapshots/ where your exported snapshots will be stored.

usage:

grafana-snapshots -h
usage: grafana-snapshots [-h] [-b BASE_PATH] [-c CONFIG_FILE]
                         [-d DASHBOARD_NAME] [-F GRAFANA_FOLDER]
                         [-f TIME_FROM] [-g GRAFANA_LABEL] [-i IMPORT_FILE]
                         [-o CONTEXT_NAME] [-p] [-s SNAPSHOT_NAME]
                         [-t TIME_TO] [-v] [-V]
                         [ACTION]

then enter into your directory and type in you commands.

Example:

  • generate a snapshot for the dashboard 'My dashboard' with default values for 'from' (now - 5 min) to 'now':
$ grafana-snapshots -d "My dashboard"
OK: new snapshot 'My_dashboard_202010241750.json' created.

then you can go into Grafana Gui and find the snapshot in dashboard/Manage/Snapshots part.

  • export the dashboard 'My dashboard' with data from: 'now-1d' to 'now':
$ grafana-snapshots -d "My dashboard" -f "now-1d" export
OK: snapshot exported to './snapshots/My_dashboard_202010241750.json' exported.

then you can find the created file in the "snapshots" dir.

  • import the file './snapshots/My_dashboard_202010241750.json' into Grafana
$ grafana-snapshots -f './snapshots/My_dashboard_202010241750.json' import
OK: snapshot './snapshots/My_dashboard_202010241750.json' imported.

then you can go into Grafana Gui and find the snapshot in dashboard/Manage/Snapshots part.

TODO - Known Limitations:

  • actual snapshots can only contain a single set of variables/values.
  • currently snapshots for Table doesn't work.
  • repeat is not supported
  • overrides are not used to modify values !
  • changes with new version of Grafana (>7.5) have several impacts on the rendering of panels; a code review is required to improve the result.

Release files for grafana-snapshots 0.3.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-snapshots 0.3.1
File Size Uploaded Provenance
grafana_snapshots-0.3.1.tar.gz 98.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for grafana-snapshots 0.3.1
File Interpreter ABI Platform
grafana_snapshots-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 146.7 kB

Release files / grafana_snapshots-0.3.1.tar.gz

Download URL grafana_snapshots-0.3.1.tar.gz
Size 98.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a771b4b241c336006450cee141b18033bc866360a68ebc024ab04816e21fb62d
BLAKE2b-256 checksum
How to use checksums
0642a3d7dfd70784063cb8018e71a15a87b8932a8203d9c8041f12fefabc7925
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.11

Release files / grafana_snapshots-0.3.1-py3-none-any.whl

Download URL grafana_snapshots-0.3.1-py3-none-any.whl
Size 48.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b3fb6f4fec4e6d4ae5738908448983a56b65d02cef0162a5b73ee1cff60e6f5c
BLAKE2b-256 checksum
How to use checksums
0a421435ee167705857f9f8b9299ab06db9e6cfb2fdea0479429bc3817ddf92b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.11

Security for grafana-snapshots 0.3.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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