如何从导出的 JSON 自动更新 Docker 映像中的 Grafana 仪表板(和数据源)?

Posted

技术标签:

【中文标题】如何从导出的 JSON 自动更新 Docker 映像中的 Grafana 仪表板(和数据源)?【英文标题】:How do I automatically update Grafana dashboards (and datasources) in the Docker Image from the exported JSON? 【发布时间】:2019-10-18 12:49:25 【问题描述】:

我正在尝试使用存储(并定期更新)在 Github/Bitbucket 中的导出的相关 JSON 在 Grafana Docker 映像中自动更新 Grafana 仪表板/数据源。

例如:

    运行 Grafana 的 Docker 镜像 Dockerfile 添加了一个从 Git 源中提取的 Bash 脚本, 然后该脚本将 JSON 文件复制到相关目录(/etc/grafana/provisioning/datasource + /dashboards)。 图形和数据源的更新无需人工干预(更新存储在 Github 或 Bitbucket 中的 JSON 除外)。

我已经执行到 Grafana docker 映像中,并且 Grafana 在一个非常基本的 linux 系统上运行,因此实际上不能使用任何命令,即 git、wget、apt。

如果我认为我应该从基本的 Debian 映像创建一个 Dockerfile,运行一个 apt 更新并在其中安装 git,我会不会很傻。然后以某种方式运行 Grafana 和该图像中的脚本?

请随时询问更多信息。

【问题讨论】:

no commands can be used i.e., git, wget, apt ?所以安装它们?它在Debian上运行。 apt-get update && apt-get install git wgetapt update and installing git inside - 这很正常。 Then somehow - 创建一个 dockerfile,添加一个 RUN apt-get update && apt-get install && apt-get autoremove 并构建该 dockerfile。如果 ENTRYPOINT 保持不变,您仍将运行 grafana。顺便提一句。 grafana dockerfile. 如果您有 git cloned/pulled 对配置文件夹的最新更新,重新创建容器将获得按指定配置的 Grafana 的新副本。但是,您可能希望保留任何现有设置、用户等(在重新创建时丢失),在这种情况下,您需要使用 docker 卷将相应的 Grafana 文件夹从容器映射到主机上的文件夹,如 Kamil 所述库克。然后您可以直接在那里更新文件,然后重新启动而不是重新创建。或ssh 进入容器并使用 Grafana CLI grafana.com/docs/administration/cli 【参考方案1】:

考虑使用 docker 卷的更简单方法:

grafana 容器为 /etc/grafana/provisioning/datasource + /dashboards 使用 docker 卷 这些 docker 卷与您创建的其他 docker 容器共享。 您的 docker 容器运行传入的 webhook 服务器,公开可用。 如果该 webhook 被触发,那么您的脚本就会运行。 该脚本git pulls 来自您的回购和copies the JSON files into the relevant directories 的更改。 “相关目录”是您的 docker 和 grafana docker 之间共享的 docker 卷。 您注册一个 webhook 以在每次推送到 master 时在 github 存储库中执行。

整个过程是自动化的,看起来像这样:

您使用相关来源将 master 推送到您的 github 存储库 你的带有传入 webhook 服务器的 docker 被 github 坑了 您的 docker 执行脚本 该脚本 git 拉取 github 存储库并将 JSON 文件复制到共享文件夹中 如果你需要前。要从该脚本重新启动 grafana 容器,您可以挂载 docker socket -v /var/run/docker.sock 并从容器内部执行 docker 命令。

【讨论】:

所以运行 hook 的 docker 容器与 Grafana 容器不同?我有点明白这种方法,但有点不清楚 tbh 是的,没错,这就是重点。 Docker 就是为此而构建的——因此您可以分离系统的不同部分。几乎不需要对 grafana 容器进行更改。 当然!但与此同时,docker 也是为了重用和扩展基础镜像而构建的,所以制作一个自更新的 Grafana 容器没有任何问题。

以上是关于如何从导出的 JSON 自动更新 Docker 映像中的 Grafana 仪表板(和数据源)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用对象映射器从响应 JSON 映射子数组?

如何使用杰克逊映射器自动识别不同的类型

如何在使用自动映射器时将属性名称的 jsonproperty 设置为 dto?

带有数据映射器 ORM 的 CodeIgniter

可以自动更新数据库模式的 O/R 映射器?

运行 Sqoop 导入和导出时如何找到最佳映射器数量?