使用Grafana HTTP API导出和导入Grafana仪表板。
项目描述
Grafana导入工具
使用 Grafana HTTP API 和 grafana-client 导出和导入 Grafana 仪表盘。
功能
- 将仪表盘导出为 JSON 格式。
- 将仪表盘导入 Grafana,支持原生 JSON 格式或仪表盘构建器生成的格式,支持仪表盘代码工作流程。
- 支持的构建器包括 Grafonnet、grafana-dashboard、grafanalib 以及任何其他在标准输出上生成 Grafana 仪表盘 JSON 的可执行程序。
- 导入操作保留仪表盘的版本历史。
- 看门狗:为了最大程度地提高编写和编辑效率,看门狗监控磁盘上输入仪表盘的变化,并在发生变化时将其重新上传到 Grafana API。
- 删除仪表盘。
安装
pip install --upgrade 'grafana-import[builder] @ git+https://github.com/grafana-toolbox/grafana-import.git'
目前,PyPI 上没有最新版本,因此我们建议直接从仓库安装。上面概述的命令描述了 grafana-import
的完整安装,包括对仪表盘构建器的支持,即仪表盘代码。
即席使用
您可以在没有配置文件的情况下以即席模式使用 grafana-import
。
入门
为了进行一些方向飞行,请使用 Podman 或 Docker 启动一个 Grafana 实例。
docker run --rm -it --name=grafana --publish=3000:3000 \
--env='GF_SECURITY_ADMIN_PASSWORD=admin' grafana/grafana:latest
如果您没有 Grafana 仪表盘表示,可以从 grafana-import
仓库中的 examples
目录获取一些,如下所示。
wget https://github.com/grafana-toolbox/grafana-snippets/raw/main/dashboard/native-play-influxdb.json
wget https://github.com/grafana-toolbox/grafana-snippets/raw/main/dashboard/gd-prometheus.py
定义 Grafana 端点。
export GRAFANA_URL=http://admin:admin@localhost:3000
从 JSON 导入
从 JSON 文件导入仪表盘。
grafana-import import -i native-play-influxdb.json
使用构建器导入
导入由仪表盘构建器生成的仪表盘,如果同一文件夹中已存在同名仪表盘,则将其覆盖。
grafana-import import --overwrite -i gd-prometheus.py
使用重新加载导入
监控输入仪表盘在磁盘上的变化,并在发生变化时重新上传。
grafana-import import --overwrite --reload -i gd-prometheus.py
导出
将名为 my-first-dashboard
的仪表盘导出到默认导出目录。
grafana-import export --pretty -d "my-first-dashboard"
删除
从 Applications
文件夹中删除名为 my-first-dashboard
的仪表盘。
grafana-import remove -f Applications -d "my-first-dashboard"
使用配置文件使用
您还可以使用配置文件使用 grafana-import
。这样,您可以管理并使用不同的 Grafana 连接配置文件,还可以使用预置来应用全局配置设置。
配置存储在 YAML 文件中。为了最佳使用,构建如下目录结构
grafana-import/
- conf/grafana-import.yml
Path to your main configuration file.
- exports/
Path where exported dashboards will be stored.
- imports/
Path where dashboards are imported from.
然后,进入您的目录,并输入您的命令。
配置文件使用两个部分,general
和 grafana
。
general
部分
配置程序目录。
- debug:启用详细(调试)跟踪(仅限开发使用...)
- export_suffix:导出仪表盘时,将后缀附加到文件名。后缀可以包含纯文本和由 strftime 命令翻译的模式。
- export_path:存储导出仪表盘的位置。
- import_path:在将仪表盘导入到 Grafana 服务器之前,加载仪表盘的位置。
grafana
部分
Grafana 认证设置。您可以使用不同的 api_key
或 Grafana 服务器 URL 设置定义多个 Grafana 访问配置部分。
- label:引用此 Grafana 服务器的一个标签,例如
default
- protocol、host、port:用于构建访问 URL
- verify_ssl:检查 SSL 证书或不检查
- token:Grafana 的具有管理员权限的 APIKEY 以访问 REST API。
- search_api_limit:在 API 搜索中检索的最大元素数。
示例
---
general:
debug: false
import_folder: test_import
grafana:
default:
protocol: http
host: localhost
port: 3000
token: "____APIKEY____"
search_api_limit: 5000
verify_ssl: true
身份验证
为了连接到Grafana,您可以使用纯凭据(用户名/密码)或认证令牌。因为 grafana-import
使用 grafana-client
,所以可以使用相同的认证设置功能。请参阅grafana-client认证变体。
纯凭据可以嵌入到Grafana URL中,通过--grafana_url
命令行参数或GRAFANA_URL
环境变量提供。要指定Grafana认证令牌而无需使用配置文件,请使用GRAFANA_TOKEN
环境变量。
构建器
grafana-import支持dashboard-as-code构建器。
为了获得灵感,请阅读更多示例,也请访问grafonnet示例、grafana-dashboard示例和grafanalib示例。
Grafonnet
Grafonnet是一个用于生成Grafana仪表板的Jsonnet库。
该库由Grok生成的JSON Schema生成。反过来,这些Schema直接从Grafana仓库生成,以确保Grafonnet始终与Grafana的开发同步,且摩擦最小。
安装
安装Jsonnet及其jsonnet-bundler包管理器。
brew install go-jsonnet jsonnet-bundler
将Grafonnet安装到Jsonnet项目中。
git clone https://github.com/grafana-toolbox/grafana-snippets
cd grafana-snippets/dashboard/grafonnet-simple
jb install github.com/grafana/grafonnet/gen/grafonnet-latest@main
用法
grafana-import import --overwrite -i /path/to/faro.jsonnet
grafana-dashboard
使用grafana-dashboard渲染仪表板。
grafana-import import --overwrite -i /path/to/gd-dashboard.py
grafanalib
使用grafanalib渲染仪表板。
grafana-import import --overwrite -i /path/to/gl-dashboard.py
帮助
grafana-import --help
usage: grafana-import [-h] [-a] [-b BASE_PATH] [-c CONFIG_FILE]
[-d DASHBOARD_NAME] [-g GRAFANA_LABEL]
[-f GRAFANA_FOLDER] [-i DASHBOARD_FILE] [-o] [-p] [-v]
[-V]
[ACTION]
play with grafana dashboards json files.
positional arguments:
ACTION action to perform. Is one of 'export', 'import'
(default), or 'remove'.
export: lookup for dashboard name in Grafana and dump
it to local file.
import: import a local dashboard file (previously
exported) to Grafana.
remove: lookup for dashboard name in Grafana and remove
it from Grafana server.
optional arguments:
-h, --help show this help message and exit
-a, --allow_new if a dashboard with same name exists in an another
folder, allow to create a new dashboard with same name
it that folder.
-b BASE_PATH, --base_path BASE_PATH
set base directory to find default files.
-c CONFIG_FILE, --config_file CONFIG_FILE
path to config files.
-d DASHBOARD_NAME, --dashboard_name DASHBOARD_NAME
name of dashboard to export.
-u GRAFANA_URL, --grafana_url GRAFANA_URL
Grafana URL to connect to.
-g GRAFANA_LABEL, --grafana_label GRAFANA_LABEL
label in the config file that represents the grafana to
connect to.
-f GRAFANA_FOLDER, --grafana_folder GRAFANA_FOLDER
the folder name where to import into Grafana.
-i DASHBOARD_FILE, --dashboard_file DASHBOARD_FILE
path to the dashboard file to import into Grafana.
-o, --overwrite if a dashboard with same name exists in folder,
overwrite it with this new one.
-r, --reload Watch the input dashboard for changes on disk, and
re-upload it, when changed.
-p, --pretty use JSON indentation when exporting or extraction of
dashboards.
-v, --verbose verbose mode; display log message to stdout.
-V, --version display program version and exit.
现有技术
- https://grafana.org.cn/blog/2020/02/26/how-to-configure-grafana-as-code/
- https://grafana.org.cn/blog/2022/12/06/a-complete-guide-to-managing-grafana-as-code-tools-tips-and-tricks/
- https://grafana.github.io/grizzly/ https://grafana.github.io/grizzly/what-is-grizzly/
- https://docs.ansible.org.cn/ansible/latest/collections/grafana/grafana/dashboard_module.html#ansible-collections-grafana-grafana-dashboard-module
- https://blog.kevingomez.fr/2023/03/07/three-years-of-grafana-dashboards-as-code/
- https://github.com/K-Phoen/grabana
- https://github.com/K-Phoen/dark
- https://github.com/grafana/scenes
贡献
欢迎贡献,并且非常感谢。您可以通过许多方式做出贡献,并且将始终给予认可。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。