如何从导出的 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 仪表板(和数据源)?的主要内容,如果未能解决你的问题,请参考以下文章