插件 〉Grafana 图像渲染器
Grafana 图像渲染器
一个 Grafana 后端插件,使用无头浏览器 (Chromium) 将面板和仪表盘渲染为 PNG。
要求
支持的操作系统
- Linux (x64)
- Windows (x64)
- Mac OS X (x64)
依赖项
此插件打包在一个可执行文件中,其中包含 Node.js 运行时和 Chromium 浏览器。这意味着您无需在系统中安装 Node.js 和 Chromium 即可使插件正常运行。
但是,Chromium 浏览器 依赖于某些库。如果您的系统中未安装所有这些库,则在尝试渲染图像时可能会看到一些错误。有关更多信息(包括故障排除帮助),请参阅 Grafana 图像渲染文档。
内存要求
渲染图像需要大量内存,这主要是由于 Grafana 在后台创建浏览器实例以进行实际渲染。我们建议在渲染图像的系统上至少有 16GB 的可用内存。
并行渲染多个图像需要更大的内存占用空间。您可以使用远程渲染服务在远程系统上渲染图像,以便您的本地系统资源不受影响。
插件安装
您可以使用 Grafana CLI(推荐方法)或 Grafana Docker 镜像安装插件。
Grafana CLI(推荐)
grafana-cli plugins install grafana-image-renderer
Grafana Docker 镜像
此插件与当前的 Grafana Docker 镜像不兼容,并且需要其他系统级依赖项。我们建议为渲染设置另一个 Docker 容器,并改用远程渲染。有关说明,请参阅 在 Docker 中运行。
如果您仍然希望使用 Grafana Docker 镜像安装插件,请参阅 Grafana Docker 文档 中有关构建自定义 Grafana 镜像的说明。
远程渲染服务安装
注意:需要互联网连接。
您可以将此插件作为远程 HTTP 渲染服务运行。在此设置中,Grafana 通过向远程渲染服务发出 HTTP 请求来渲染图像,远程渲染服务依次渲染图像并将其返回到 Grafana 的 HTTP 响应中。
您可以使用 Docker 或作为独立的 Node.js 应用程序运行远程 HTTP 渲染服务。
在 Docker 中运行
Grafana Docker 镜像发布在 Docker Hub。
以下示例演示了如何使用 Docker Compose 在两个单独的 Docker 容器中运行 Grafana 和远程 HTTP 渲染服务。
创建一个包含以下内容的
docker-compose.yml
文件version: '2'
services: grafana: image: grafana/grafana:latest ports: - ‘3000:3000’ environment: GF_RENDERING_SERVER_URL: http://renderer:8081/render GF_RENDERING_CALLBACK_URL: http://grafana:3000/ GF_LOG_FILTERS: rendering:debug renderer: image: grafana/grafana-image-renderer:latest ports: - 8081
接下来,运行 docker compose。
docker-compose up
作为独立的 Node.js 应用程序运行
以下示例描述了如何构建和运行远程 HTTP 渲染服务作为独立的 Node.js 应用程序,以及如何相应地配置 Grafana。
克隆 Grafana 图像渲染插件 Git 存储库。
安装依赖项并构建
yarn install --pure-lockfile yarn run build
运行服务器
node build/app.js server --port=8081
更新 Grafana 配置
[rendering] server_url = https://127.0.0.1:8081/render callback_url = https://127.0.0.1:3000/
重启 Grafana。
安全性
对渲染端点的访问仅限于提供身份验证令牌的请求。此令牌应在 Grafana 配置文件和渲染器配置文件中配置。当您在远程渲染模式下运行插件时,此令牌非常重要,以避免未经授权的文件泄露(请参阅 CVE-2022-31176)。
请参阅 Grafana 图像渲染文档 以配置此密钥令牌。当您开始使用时,Grafana 和图像渲染器上都会配置默认值 -
,但我们强烈建议您将其更新为更安全的值。
配置
有关可用的配置设置,请参阅 Grafana 图像渲染文档。
故障排除
有关故障排除帮助,请参阅 Grafana 图像渲染故障排除文档。
测试
为了运行图像渲染自动化测试套件,您需要从根文件夹运行以下命令
yarn test
这将在 Docker 中启动 Grafana 实例,然后运行测试套件。
备注
如果参考图像文件(位于 /tests/testdata
中)有一些预期的更改,请运行 yarn test-update
并推送更新的参考。
如果测试失败并且您想查看获取的图像和参考图像之间的差异,请运行 yarn test-diff
。这将在 /tests/testdata
文件夹中生成包含差异的图像(称为 diff_<test case>.png
)。
修复 Drone 问题
如果测试在您的本地环境中成功但在 Drone 中失败。您可以按照以下步骤在类似于 Drone 管道的环境中运行测试。这将在 Docker 镜像中挂载 grafana-image-renderer
存储库的本地文件,因此 Docker 镜像中发生的任何更改都将在您的本地环境中可用。这允许您在 Docker 中运行 yarn test-diff
和 yarn test-update
并查看本地结果。
- 在 Docker 中运行 Drone 环境
cd ./devenv/docker/drone
docker-compose up
- 在
drone-docker-puppeteer
容器中打开一个终端并运行以下命令
cd /drone/src
PUPPETEER_CACHE_DIR=/drone/src/cache yarn install --frozen-lockfile --no-progress
PUPPETEER_CACHE_DIR=/drone/src/cache CI=true yarn test-ci
备注:测试在 Docker 容器中可能需要更长时间。如果您遇到超时问题,可以使用 --testTimeout 选项
运行测试命令
PUPPETEER_CACHE_DIR=/drone/src/cache CI=true yarn test-ci --testTimeout=10000
在 Grafana Cloud 上安装 Grafana Image Renderer
在 Grafana Cloud 实例上安装插件只需一键即可安装;更新也是如此。很酷,对吧?
请注意,插件可能需要长达 1 分钟才能在您的 Grafana 中显示。
在 Grafana Cloud 实例上安装插件只需一键即可安装;更新也是如此。很酷,对吧?
请注意,插件可能需要长达 1 分钟才能在您的 Grafana 中显示。
在 Grafana Cloud 实例上安装插件只需一键即可安装;更新也是如此。很酷,对吧?
请注意,插件可能需要长达 1 分钟才能在您的 Grafana 中显示。
在 Grafana Cloud 实例上安装插件只需一键即可安装;更新也是如此。很酷,对吧?
请注意,插件可能需要长达 1 分钟才能在您的 Grafana 中显示。
在 Grafana Cloud 实例上安装插件只需一键即可安装;更新也是如此。很酷,对吧?
请注意,插件可能需要长达 1 分钟才能在您的 Grafana 中显示。
在 Grafana Cloud 实例上安装插件只需一键即可安装;更新也是如此。很酷,对吧?
请注意,插件可能需要长达 1 分钟才能在您的 Grafana 中显示。
在 Grafana Cloud 实例上安装插件只需一键即可安装;更新也是如此。很酷,对吧?
请注意,插件可能需要长达 1 分钟才能在您的 Grafana 中显示。
有关更多信息,请访问有关 插件安装 的文档。
在本地 Grafana 上安装
对于本地实例,插件通过简单的 CLI 命令安装和更新。但是,插件不会自动更新,您将在 Grafana 中收到有关可用更新的通知。
1. 安装渲染器
使用 grafana-cli 工具从命令行安装 Grafana Image Renderer
grafana-cli plugins install
插件将安装到您的 grafana 插件目录中;默认目录为 /var/lib/grafana/plugins。有关 cli 工具的更多信息。
3.11.5 (2024-09-12)
- 将 express 升级到 4.21.0 #567,evictorero
- 将 micromatch 从 4.0.7 升级到 4.0.8 #561,dependabot[bot]
3.11.4 (2024-08-30)
- Puppeteer:升级到 v22 #556,evictorero
3.11.3 (2024-08-13)
- 全页面图像:修复启用场景时空白页面截图 #554,juanicabanas
3.11.2 (2024-08-08)
- 正确支持可滚动元素为文档的仪表板 #552,ashharrison90
3.11.1 (2024-07-15)
- 全页面图像:修复包含行的仪表板的等待条件 #542,AgnesToulet
- 杂项:升级 Jimp 依赖项 541,AgnesToulet
3.11.0 (2024-06-13)
- 杂项:升级 chokidar 和 jest 依赖项 #532,AgnesToulet
- 将 @grpc/grpc-js 从 1.8.20 升级到 1.8.22 #531,dependabot[bot]
- 服务器:修复 CSV 删除 #530,AgnesToulet
- 服务器:支持 HTTPS 配置 #527,AgnesToulet
3.10.5 (2024-05-23)
- 软件包:发布无 Chromium 的 Alpine 软件包 #525,AgnesToulet
- 全页面图像:修复使用新的原生滚动进行滚动 #524,AgnesToulet
3.10.4 (2024-05-06)
- 杂项:删除未使用的依赖项 #517,evictorero
3.10.3 (2024-04-16)
- 将 protobufjs 从 7.2.4 升级到 7.2.6 #515,dependabot[bot]
3.10.2 (2024-04-08)
- 将 express 从 4.18.2 升级到 4.19.2 #510,dependabot[bot]
- 将 follow-redirects 从 1.15.5 升级到 1.15.6 #508,dependabot[bot]
3.10.1 (2024-03-07)
- 将 axios 从 1.6.0 升级到 1.6.7 #503,evictorero
- 将 ip 从 1.1.8 升级到 1.1.9 #500,dependabot[bot]
- PDF:修复放大时的分辨率 #502,AgnesToulet
3.10.0 (2024-02-20)
3.9.1 (2024-01-29)
- 杂项:升级 jimp 和 node #492,AgnesToulet
- 将 follow-redirects 从 1.15.3 升级到 1.15.4 #489,dependabot[bot]
3.9.0 (2023-12-04)
- 配置:改进插件和服务器模式之间的一致性 #477,AgnesToulet
- 杂项:将 axios 从 0.27.2 升级到 1.6.0 #480,dependabot[bot]
3.8.4 (2023-10-17)
- 将 xml2js 升级到 0.6.2 #473,AgnesToulet
- 浏览器:修复面板渲染等待条件 #472,AgnesToulet
- Docker:添加 arm64 的构建 #468,michbeck100
- 修复时区配置始终被覆盖 #463,zhichli
3.8.3 (2023-09-29)
- 杂项:升级到 Node 18 #448,Clarity-89
3.8.2 (2023-09-21)
- 浏览器:恢复到旧的无头模式以修复与 Kubernetes 的使用 #459,AgnesToulet
3.8.1 (2023-09-18)
- 修复检查条件以避免无效面板中的超时 #299,spinillos
- 插件:修复 Chrome 路径 #451,AgnesToulet
3.8.0 (2023-08-22)
- Puppeteer:升级到 v21 #433,Clarity-89
- 修复全页面 waitFor 条件 #446,AgnesToulet
3.7.2 (2023-07-27)
- 杂项:更新所有依赖项 #443,AgnesToulet
- 将 protobufjs 从 7.1.1 升级到 7.2.4 #438,dependabot[bot]
- 将 tough-cookie 从 4.1.2 升级到 4.1.3 #439,dependabot[bot]
- 将 semver 从 6.3.0 升级到 6.3.1 #440,dependabot[bot]
- 将 word-wrap 从 1.2.3 升级到 1.2.4 #441,dependabot[bot]
3.7.1 (2023-05-15)
- Docker:删除 alpine edge 存储库 #413,sozercan
- 将 yaml 从 2.1.1 升级到 2.2.2 #421,dependabot[bot]
3.7.0 (2023-04-17)
- 安全:可以设置认证令牌数组 #417, AgnesToulet
- 将 pkg 从 5.8.0 升级到 5.8.1 #415, AgnesToulet
- 将 jimp 从 0.16.1 升级到 0.16.13 #406, AgnesToulet
3.6.4 (2023-02-10)
- 添加 Snyk 工作流 #402, SadFaceSmith
- 修复空值错误 #403, spinillos
3.6.3 (2023-01-11)
3.6.2 (2022-10-22)
- 将与 JSHandle@object 相关的错误记录为调试信息 #376, spinillos
- 杂项:更新 Puppeteer 已弃用的函数 #375, spinillos
- 修复:更新 _client 为 _client() 以避免在创建 CSV 时失败 #372, spinillos
- 杂项:更新所有依赖项 #369, DanCech
3.6.1 (2022-08-30)
- 杂项:更新到 Node 16 #365, Clarity-89
- 更新完整页面截图的等待条件 #362, spinillos
- 修复无效的 Content-Disposition #357, spinillos
3.6.0 (2022-08-16)
3.5.0 (2022-07-18)
- 添加了文件清理 API,使用 DOMPurify 作为后端。 #349, ArturWierzbicki
- 安全:升级依赖项 #356, #348, #347, AgnesToulet
3.4.2 (2022-03-23)
- 安全:升级依赖项 #337, AgnesToulet
- 修复:默认将 captureBeyondViewport 设置为 false 以修复渲染旧面板的问题 #335, AgnesToulet
3.4.1 (2022-02-23)
- 修复:将
sharp
替换为jimp
以解决安装原生依赖项的问题 #325, ArturWierzbicki
3.4.0 (2022-02-17)
- 支持新的并发模式:contextPerRenderKey #314, ArturWierzbicki
- 支持全高仪表盘和缩放的缩略图 #312, ryantxu
3.3.0 (2021-11-18)
- 杂项:将 pkg 从 5.3.3 升级到 5.4.1 #305, AgnesToulet
- 配置:为集群模式添加超时设置 #303, AgnesToulet
3.2.1 (2021-10-07)
- 杂项:升级开发依赖项 #294, AgnesToulet
- 杂项:修复 eslint 用法 #293, AgnesToulet
- 文档:修复 README.md 中的链接 #290, simonc6372
- 安全:将 semver-regex 从 3.1.2 升级到 3.1.3 #289, dependabot[bot]
3.2.0 (2021-09-17)
- 文档:更新文档以提高可见性并避免与 Grafana 文档重复 #277, AgnesToulet
- 仪器仪表:更新 grafana_image_renderer_step_duration_seconds 桶 #287, AgnesToulet
- 安全:将 chokidar 从 3.5.1 升级到 3.5.2 #284, AgnesToulet
- 仪器仪表:添加正在进行的总请求数的指标 #281, AgnesToulet
- 安全:将 axios 从 0.21.1 升级到 0.21.4 #283, dependabot[bot]
- 杂项:为负载测试添加自包含的设置 #275, pianohacker
3.1.0 (2021-09-01)
- 设置:将最大设备缩放因子默认为 4 #276, AgnesToulet
- 指标:添加浏览器计时指标 #263, AgnesToulet
- 设置:在默认的 Chromium 参数中添加 --disable-gpu #262, AgnesToulet
- 安全:将 path-parse 更新到 v1.0.7 #268, joanlopez
- 杂项:升级依赖项 #246, Clarity-89
- Docker:在非 root Grafana 用户下运行图像渲染器 #144, wardbekker
重要更改
默认的 Chromium 标志已更新,包括--disable-gpu
,因为它修复了在使用default
渲染模式时的内存泄漏问题。如果您不想使用此标志,则需要更新您的服务配置,可以通过 服务配置文件、 环境变量 或 Grafana 配置文件(如果您使用的是插件模式)进行更新。
3.0.1 (2021-06-10)
3.0.0 (2021-06-07)
- 安全:将 path-parse 从 1.0.6 升级到 1.0.7 #244, AgnesToulet
- HTTP 服务器:添加版本端点以获取当前版本 #239, AgnesToulet
- 安全:将 ws 从 7.4.5 升级到 7.4.6 #238, dependabot[bot]
- 删除对插件 V1 协议的支持 #233, AgnesToulet
- 浏览器:修复当 tmp 文件夹与目标文件路径不在同一设备上时移动 CSV 文件的问题 #232, AgnesToulet
- 杂项:升级 grabpl 版本 #231, AgnesToulet
- 添加 CSV 渲染功能 #217, AgnesToulet
3.0.0-beta2 (2021-05-26)
- 删除对插件 V1 协议的支持 #233, AgnesToulet
- 浏览器:修复当 tmp 文件夹与目标文件路径不在同一设备上时移动 CSV 文件的问题 #232, AgnesToulet
- 杂项:升级 grabpl 版本 #231, AgnesToulet
3.0.0-beta1 (2021-05-19)
- 添加 CSV 渲染功能 #217, AgnesToulet
2.1.1 (2021-05-18)
- 杂项:在包文件中添加变更日志 #226, AgnesToulet
2.1.0 (2021-05-11)
- 杂项/安全:升级依赖项并将 Node 升级到 LTS (14.16.1) #218, AgnesToulet
2.0.1 (2021-01-26)
- 浏览器:对初始导航到正在渲染的仪表盘使用超时参数 #171,
2.0.0 (2020-05-16)
- 插件:迁移到 @grpc/grpc-js 以解决禁用 IPv6 时的问题 #135, aknuds1
- 添加对新的 Grafana 后端插件系统支持 #128, marefr
- 浏览器:添加对设置视口设备缩放因子的支持 #128, marefr
- 浏览器:添加对将 Accept-Language 标头附加的支持,以支持根据 Grafana 用户的名称语言环境进行渲染 #128, marefr
- 浏览器:如果 URL 具有套接字协议,则渲染失败 #127, aknuds1
- 杂项:升级 typescript 依赖项 #129, marefr
2.0.0-beta1 (2020-04-22)
- 添加对新的 Grafana 后端插件系统支持 #128, marefr
- 浏览器:添加对设置视口设备缩放因子的支持 #128, marefr
- 浏览器:添加对将 Accept-Language 标头附加的支持,以支持根据 Grafana 用户的名称语言环境进行渲染 #128, marefr
- 浏览器:如果 URL 具有套接字协议,则渲染失败 #127, aknuds1
- 杂项:升级 typescript 依赖项 #129, marefr
1.0.12 (2020-03-31)
1.0.12-beta1 (2020-03-30)
1.0.11 (2020-03-20)
- 渲染:添加对使用环境变量启用详细日志记录的支持 #105, marefr
- 渲染:修复渲染时面板标题不应该获得焦点 #114, AgnesToulet
- 安全:将 minimist 依赖项升级到 v1.2.5 #118, marefr
1.0.10 (2020-02-18)
1.0.9 (2020-01-30)
- 远程渲染:改进错误处理、日志记录和指标 #92, marefr
- 服务:不要吞并异常并修复参数的日志记录
- 指标:当客户端关闭连接时使用状态 499
- Docker:设置 NODE_ENV=production
- 将请求日志记录更改为,如果状态 < 400 则使用调试级别,如果 >= 400 则使用错误级别
- 插件:添加图标 #95, marefr
1.0.8 (2020-01-20)
- 构建:将 Node.js 要求升级到 LTS (v12) #57, marefr
- Docker:添加 unifont 字体以支持渲染其他语言,例如中文/日文 #75, okhowang
- 订阅页面事件以捕获来自浏览器的错误 #88, marefr
- 插件:默认自动分配 gRPC 端口 #87,marefr
- 插件:支持通过环境变量配置默认时区 #86,marefr
- 远程渲染:支持通过配置文件和环境变量配置默认时区 #86,marefr
- 远程渲染:支持通过配置文件和环境变量配置 HTTP 主机和端口 #40,marefr
- 远程渲染:支持从文件读取配置 #73,marefr
- 远程渲染:收集并公开 Prometheus 指标 #71,marefr
重大变更
- 插件现在会自动分配未使用的 gRPC 端口。之前使用端口 `50059`。您可以使用 `GF_RENDERER_PLUGIN_GRPC_PORT` 环境变量更改此端口。
1.0.8-beta1 (2019-12-17)
1.0.7 (2019-12-03)
- 在覆盖时使用环境变量 `GF_RENDERER_PLUGIN_IGNORE_HTTPS_ERRORS` 和/或 `IGNORE_HTTPS_ERRORS` 向 Chromium 提供正确命名的配置参数以跳过 https 错误 #62,marefr
1.0.6 (2019-11-25)
- 在渲染前等待所有网络连接空闲 #24,d1ff
- 支持使用环境变量忽略 https 错误 #59,marefr
- Docker:更新依赖项以消除漏洞 #53,marefr
- 修复日志语句中的错别字 #39,ankon
- 更新了文档
1.0.5 (2019-09-11)
- 在发布工件中包含 md5 校验和
1.0.4 (2019-09-11)
- 更新自述文件和文档
1.0.3 (2019-09-10)
- 自动化 Docker 发布
1.0.2 (2019-09-10)
- 不要在归档 (zip) 文件中包含 dist 目录
1.0.1 (2019-09-09)
- 将 Docker 基础镜像从 node:10 切换到 node:alpine-10 #36,marefr
- 更新了面板渲染等待函数以适应 Grafana 6 版本 #26,bmichaelis
- 更新了依赖项
1.0.0 (2019-08-16)
初始版本包含可下载的预构建二进制文件。目前,二进制文件本身应被视为 alpha 版本,因为它们需要更多测试。