设置图像渲染
Grafana 支持将面板自动渲染为 PNG 图像。这使得 Grafana 可以自动生成面板图像,以便包含在告警通知中,PDF 导出以及报告中。PDF 导出和报告仅在Grafana Enterprise和Grafana Cloud中可用。
图像渲染时,PNG 图像会临时写入文件系统。图像渲染完成后,PNG 图像会临时写入 Grafana data
文件夹中的 png
文件夹。
每隔 10 分钟运行一次后台作业,清除临时图像。您可以通过配置temp_data_lifetime设置来配置图像在被清除之前应存储多长时间。
您还可以通过将鼠标悬停在面板上以显示右上角的操作菜单,然后点击分享 > 分享链接来渲染 PNG。在链接设置中会显示渲染图像选项。
告警和渲染限制
告警通知可以包含图像,但同时渲染大量图像可能会使运行渲染器的服务器过载。有关如何配置此项的说明,请参阅max_concurrent_screenshots。
安装 Grafana Image Renderer 插件
注意
所有 PhantomJS 支持均已移除。请改为使用 Grafana Image Renderer 插件或远程渲染服务。
要安装插件,请参阅Grafana Image Renderer 安装说明。
内存要求
渲染图像需要大量内存,这主要是因为 Grafana 在后台创建浏览器实例以进行实际渲染。Grafana 建议用于渲染图像的系统至少具有 16GB 的空闲内存。
并行渲染多个图像需要更大的内存占用。您可以使用远程渲染服务在远程系统上渲染图像,这样就不会影响本地系统资源。
配置
Grafana Image Renderer 插件有许多配置选项,可用于插件或远程渲染模式。
在插件模式下,您可以直接在Grafana 配置文件中指定这些选项。
在远程渲染模式下,您可以在 .json
配置文件中指定这些选项,或者对于其中一些选项,您可以使用环境变量覆盖默认配置。
配置文件
您可以使用配置文件更新设置,详情请参阅default.json以获取默认设置。请注意,任何配置的环境变量都将优先于配置文件设置。
启动 docker 容器时,您可以挂载自定义配置文件卷
docker run -d --name=renderer --network=host -v /some/path/config.json:/usr/src/app/config.json grafana/grafana-image-renderer:latest
您可以在此处看到一个使用自定义配置文件的 docker-compose 示例。
安全
注意
此功能在 Image Renderer v3.6.1 及更高版本中可用。
您可以通过指定密钥令牌来限制对渲染端点的访问。该令牌应在 Grafana 配置文件和渲染器配置文件中进行配置。当您以远程渲染模式运行插件时,此令牌非常重要。
Renderer v3.6.1 或更高版本需要支持此功能的 Grafana 版本。这些版本包括
- Grafana v9.1.2 或更高版本
- Grafana v9.0.8 或更高补丁版本
- Grafana v8.5.11 或更高补丁版本
- Grafana v8.4.11 或更高补丁版本
- Grafana v8.3.11 或更高补丁版本
AUTH_TOKEN=-
{
"service": {
"security": {
"authToken": "-"
}
}
}
请参阅Grafana 配置了解如何在 Grafana 中配置令牌。
渲染模式
您可以通过配置渲染模式来指示如何创建无头浏览器实例。默认为 default
,其他支持的值包括 clustered
和 reusable
。
Default
Default 模式将在每次请求时创建一个新的浏览器实例。处理多个并发请求时,此模式会增加内存使用量,因为它将同时启动多个浏览器。如果您想设置打开的最大浏览器数量,则需要使用clustered 模式。
注意
使用
default
模式时,建议不要移除默认的 Chromium 标志--disable-gpu
。接收大量并发请求时,不使用此标志可能会导致 Puppeteer 的newPage
函数冻结,从而导致请求超时并留下浏览器未关闭。
RENDERING_MODE=default
{
"rendering": {
"mode": "default"
}
}
Clustered
使用 clustered
模式,您可以配置可以同时执行的浏览器实例或无痕页面的数量。默认为 browser
,将确保最大数量的浏览器实例可以并发执行。context
模式将确保最大数量的无痕页面可以并发执行。您还可以配置允许的最大并发数,默认为 5
,以及渲染请求的最大持续时间,默认为 30
秒。
与浏览器集群相比,使用无痕页面集群性能更高,并且消耗的 CPU 和内存更少。但是,如果其中一个页面崩溃,可能会导致整个浏览器崩溃(使所有同时进行的渲染请求失败)。此外,每个页面不一定完全干净(cookie 和存储可能会发生泄露,如此处所示)。
RENDERING_MODE=clustered
RENDERING_CLUSTERING_MODE=browser
RENDERING_CLUSTERING_MAX_CONCURRENCY=5
RENDERING_CLUSTERING_TIMEOUT=30
{
"rendering": {
"mode": "clustered",
"clustering": {
"mode": "browser",
"maxConcurrency": 5,
"timeout": 30
}
}
}
Reusable (实验性)
使用 reusable
渲染模式时,将创建一个浏览器实例并重复使用。每次请求都会打开一个新的无痕页面。此模式为实验性模式,因为如果浏览器实例崩溃,它不会自动重启。您可以使用 clustered
模式并设置较高的 maxConcurrency
来实现类似的行为。
RENDERING_MODE=reusable
{
"rendering": {
"mode": "reusable"
}
}
优化图像渲染器的性能、CPU 和内存使用
不同模式的性能和资源消耗很大程度上取决于您的服务正在处理的并发请求数量。要了解您的服务正在处理多少并发请求,请监控您的图像渲染器服务。
在没有并发请求的情况下,不同模式的性能和 CPU / 内存使用情况非常相似。
处理并发请求时,我们发现以下趋势
- 为了提高性能并减少 CPU 和内存消耗,请使用clustered模式,并将
RENDERING_CLUSTERING_MODE
设置为context
。这将并行处理无痕页面而不是浏览器。 - 如果您使用clustered模式,并且
maxConcurrency
设置低于您的平均并发请求数量,性能将会下降,因为渲染请求需要等待其他请求完成后才能访问无痕页面/浏览器。
为了获得更好的性能,请监控您的服务运行所在的机器。如果您没有足够的内存和/或 CPU,每个渲染步骤都会比平时慢,从而增加每个渲染请求的持续时间。
其他可用设置
注意
请注意,并非所有设置都可以通过环境变量进行配置。如果以下没有使用环境变量的示例,则表示您需要更新配置文件。
HTTP 主机
更改 HTTP 服务器的监听主机。默认未设置,将使用本地主机。
HTTP_HOST=localhost
{
"service": {
"host": "localhost"
}
}
HTTP 端口
更改 HTTP 服务器的监听端口。默认为 8081
。设置为 0
将自动分配一个未使用的端口。
HTTP_PORT=0
{
"service": {
"port": 0
}
}
HTTP 协议
注意
Image renderer v3.11.0 及更高版本支持 HTTPS 协议。
更改服务器的协议,可以是 http
或 https
。默认为 http
。
HTTP_PROTOCOL=https
{
"service": {
"protocol": "https"
}
}
HTTPS 证书和密钥文件
用于启动 HTTPS 服务器的图像渲染器证书和密钥文件的路径。
HTTP_CERT_FILE=./path/to/cert
HTTP_CERT_KEY=./path/to/key
{
"service": {
"certFile": "./path/to/cert",
"certKey": "./path/to/key"
}
}
HTTPS 最低 TLS 版本
允许的最低 TLS 版本。可接受的值包括:TLSv1.2
, TLSv1.3
。默认为 TLSv1.2
。
HTTP_MIN_TLS_VERSION=TLSv1.2
{
"service": {
"minTLSVersion": "TLSv1.2"
}
}
启用 Prometheus 指标
您可以通过设置环境变量 ENABLE_METRICS
来启用Prometheus指标端点 /metrics
。包含 Node.js 和渲染请求持续时间指标,详情请参阅启用 Prometheus 指标端点了解详情。
默认为 false
。
ENABLE_METRICS=true
{
"service": {
"metrics": {
"enabled": true,
"collectDefaultMetrics": true,
"requestDurationBuckets": [1, 5, 7, 9, 11, 13, 15, 20, 30]
}
}
}
启用详细计时指标
通过启用 Prometheus 指标,您还可以启用详细指标,以获取每个渲染步骤的持续时间。
默认为 false
。
# Available from v3.9.0+
RENDERING_TIMING_METRICS=true
{
"rendering": {
"timingMetrics": true
}
}
日志级别
更改日志级别。默认为 info
,将包含级别为 error
、warning
和 info
的日志消息。
LOG_LEVEL=debug
{
"service": {
"logging": {
"level": "debug",
"console": {
"json": false,
"colorize": true
}
}
}
}
详细日志记录
指示无头浏览器实例在渲染图像时是否捕获和记录详细信息。默认为 false
,仅捕获和记录错误消息。启用时 (true
),也会捕获和记录调试消息。
请注意,您需要将日志级别更改为 debug
(如上所述),以便在日志中包含详细信息。
RENDERING_VERBOSE_LOGGING=true
{
"rendering": {
"verboseLogging": true
}
}
捕获浏览器输出
指示无头浏览器实例是否将其调试和错误消息输出到远程渲染服务的运行进程中。默认为 false
。在故障排除时启用此项 (true
) 可能很有用。
RENDERING_DUMPIO=true
{
"rendering": {
"dumpio": true
}
}
自定义 Chrome/Chromium
如果您已经在系统上安装了Chrome或Chromium,则可以使用已安装的版本,而不是预打包的 Chromium 版本。
注意
请注意,不建议这样做,因为如果已安装的 Chrome/Chromium 版本与Grafana Image renderer 插件不兼容,可能会遇到问题。
您需要确保 Grafana/图像渲染服务进程可以访问 Chrome/Chromium 可执行文件。
CHROME_BIN="/usr/bin/chromium-browser"
{
"rendering": {
"chromeBin": "/usr/bin/chromium-browser"
}
}
使用附加参数启动浏览器
传递给无头浏览器实例的附加参数。默认为 --no-sandbox,--disable-gpu
。Chromium 标志列表可在此处找到,Puppeteer 默认使用的标志列表可在此处找到。多个参数之间用逗号分隔。
RENDERING_ARGS=--no-sandbox,--disable-setuid-sandbox,--disable-dev-shm-usage,--disable-accelerated-2d-canvas,--disable-gpu,--window-size=1280x758
{
"rendering": {
"args": [
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-dev-shm-usage",
"--disable-accelerated-2d-canvas",
"--disable-gpu",
"--window-size=1280x758"
]
}
}
忽略 HTTPS 错误
指示无头浏览器实例在导航期间是否忽略 HTTPS 错误。默认情况下不忽略 HTTPS 错误。出于安全风险考虑,不建议忽略 HTTPS 错误。
IGNORE_HTTPS_ERRORS=true
{
"rendering": {
"ignoresHttpsErrors": true
}
}
默认时区
指示无头浏览器实例在 Grafana 未提供时区时使用默认时区,例如渲染告警面板图像时。请参阅ICU 的 metaZones.txt以获取支持的时区 ID 列表。如果未设置,则回退到 TZ
环境变量。
BROWSER_TZ=Europe/Stockholm
{
"rendering": {
"timezone": "Europe/Stockholm"
}
}
默认语言
指示无头浏览器实例在 Grafana 未提供语言时使用默认语言,例如渲染告警面板图像时。请参考 HTTP 头 Accept-Language 以了解如何格式化此值。
# Available from v3.9.0+
RENDERING_LANGUAGE="fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"
{
"rendering": {
"acceptLanguage": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"
}
}
视口宽度
渲染请求中未指定宽度时的默认视口宽度。默认为 1000
。
# Available from v3.9.0+
RENDERING_VIEWPORT_WIDTH=1000
{
"rendering": {
"width": 1000
}
}
视口高度
渲染请求中未指定高度时的默认视口高度。默认为 500
。
# Available from v3.9.0+
RENDERING_VIEWPORT_HEIGHT=500
{
"rendering": {
"height": 500
}
}
视口最大宽度
限制可请求的最大视口宽度。默认为 3000
。
# Available from v3.9.0+
RENDERING_VIEWPORT_MAX_WIDTH=1000
{
"rendering": {
"maxWidth": 1000
}
}
视口最大高度
限制可请求的最大视口高度。默认为 3000
。
# Available from v3.9.0+
RENDERING_VIEWPORT_MAX_HEIGHT=500
{
"rendering": {
"maxHeight": 500
}
}
设备缩放因子
指定渲染图像的默认设备缩放因子。对于显示器分辨率,2
就足够了,对于打印材料,4
会更好。设置更高的值会影响性能和内存。默认为 1
。这可以在渲染请求中被覆盖。
# Available from v3.9.0+
RENDERING_VIEWPORT_DEVICE_SCALE_FACTOR=2
{
"rendering": {
"deviceScaleFactor": 2
}
}
最大设备缩放因子
限制可请求的最大设备缩放因子。默认为 4
。
# Available from v3.9.0+
RENDERING_VIEWPORT_MAX_DEVICE_SCALE_FACTOR=4
{
"rendering": {
"maxDeviceScaleFactor": 4
}
}
页面缩放级别
以下命令设置页面缩放级别。默认值为 1
。值为 1.5
等于 150% 缩放。
RENDERING_VIEWPORT_PAGE_ZOOM_LEVEL=1
{
"rendering": {
"pageZoomLevel": 1
}
}
追踪
通过设置追踪 URL 启用 OpenTelemetry 追踪。默认为空(禁用)。
RENDERING_TRACING_URL="https://:4318/v1/traces"
{
"rendering": {
"tracing": {
"url": "https://:4318/v1/traces"
}
}
}