菜单
文档breadcrumb arrow Grafana 文档breadcrumb arrow 设置breadcrumb arrow 设置图像渲染
Enterprise 开源 RSS

设置图像渲染

Grafana 支持将面板自动渲染为 PNG 图像。这使得 Grafana 可以自动生成面板图像,以便包含在告警通知中,PDF 导出以及报告中。PDF 导出和报告仅在Grafana EnterpriseGrafana 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 容器时,您可以挂载自定义配置文件卷

bash
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 或更高补丁版本
bash
AUTH_TOKEN=-
json
{
  "service": {
    "security": {
      "authToken": "-"
    }
  }
}

请参阅Grafana 配置了解如何在 Grafana 中配置令牌。

渲染模式

您可以通过配置渲染模式来指示如何创建无头浏览器实例。默认为 default,其他支持的值包括 clusteredreusable

Default

Default 模式将在每次请求时创建一个新的浏览器实例。处理多个并发请求时,此模式会增加内存使用量,因为它将同时启动多个浏览器。如果您想设置打开的最大浏览器数量,则需要使用clustered 模式

注意

使用 default 模式时,建议不要移除默认的 Chromium 标志 --disable-gpu。接收大量并发请求时,不使用此标志可能会导致 Puppeteer 的 newPage 函数冻结,从而导致请求超时并留下浏览器未关闭。

bash
RENDERING_MODE=default
json
{
  "rendering": {
    "mode": "default"
  }
}

Clustered

使用 clustered 模式,您可以配置可以同时执行的浏览器实例或无痕页面的数量。默认为 browser,将确保最大数量的浏览器实例可以并发执行。context 模式将确保最大数量的无痕页面可以并发执行。您还可以配置允许的最大并发数,默认为 5,以及渲染请求的最大持续时间,默认为 30 秒。

与浏览器集群相比,使用无痕页面集群性能更高,并且消耗的 CPU 和内存更少。但是,如果其中一个页面崩溃,可能会导致整个浏览器崩溃(使所有同时进行的渲染请求失败)。此外,每个页面不一定完全干净(cookie 和存储可能会发生泄露,如此处所示)。

bash
RENDERING_MODE=clustered
RENDERING_CLUSTERING_MODE=browser
RENDERING_CLUSTERING_MAX_CONCURRENCY=5
RENDERING_CLUSTERING_TIMEOUT=30
json
{
  "rendering": {
    "mode": "clustered",
    "clustering": {
      "mode": "browser",
      "maxConcurrency": 5,
      "timeout": 30
    }
  }
}

Reusable (实验性)

使用 reusable 渲染模式时,将创建一个浏览器实例并重复使用。每次请求都会打开一个新的无痕页面。此模式为实验性模式,因为如果浏览器实例崩溃,它不会自动重启。您可以使用 clustered 模式并设置较高的 maxConcurrency 来实现类似的行为。

bash
RENDERING_MODE=reusable
json
{
  "rendering": {
    "mode": "reusable"
  }
}

优化图像渲染器的性能、CPU 和内存使用

不同模式的性能和资源消耗很大程度上取决于您的服务正在处理的并发请求数量。要了解您的服务正在处理多少并发请求,请监控您的图像渲染器服务

在没有并发请求的情况下,不同模式的性能和 CPU / 内存使用情况非常相似。

处理并发请求时,我们发现以下趋势

  • 为了提高性能并减少 CPU 和内存消耗,请使用clustered模式,并将 RENDERING_CLUSTERING_MODE 设置为 context。这将并行处理无痕页面而不是浏览器。
  • 如果您使用clustered模式,并且 maxConcurrency 设置低于您的平均并发请求数量,性能将会下降,因为渲染请求需要等待其他请求完成后才能访问无痕页面/浏览器。

为了获得更好的性能,请监控您的服务运行所在的机器。如果您没有足够的内存和/或 CPU,每个渲染步骤都会比平时慢,从而增加每个渲染请求的持续时间。

其他可用设置

注意

请注意,并非所有设置都可以通过环境变量进行配置。如果以下没有使用环境变量的示例,则表示您需要更新配置文件。

HTTP 主机

更改 HTTP 服务器的监听主机。默认未设置,将使用本地主机。

bash
HTTP_HOST=localhost
json
{
  "service": {
    "host": "localhost"
  }
}

HTTP 端口

更改 HTTP 服务器的监听端口。默认为 8081。设置为 0 将自动分配一个未使用的端口。

bash
HTTP_PORT=0
json
{
  "service": {
    "port": 0
  }
}

HTTP 协议

注意

Image renderer v3.11.0 及更高版本支持 HTTPS 协议。

更改服务器的协议,可以是 httphttps。默认为 http

bash
HTTP_PROTOCOL=https
json
{
  "service": {
    "protocol": "https"
  }
}

HTTPS 证书和密钥文件

用于启动 HTTPS 服务器的图像渲染器证书和密钥文件的路径。

bash
HTTP_CERT_FILE=./path/to/cert
HTTP_CERT_KEY=./path/to/key
json
{
  "service": {
    "certFile": "./path/to/cert",
    "certKey": "./path/to/key"
  }
}

HTTPS 最低 TLS 版本

允许的最低 TLS 版本。可接受的值包括:TLSv1.2, TLSv1.3。默认为 TLSv1.2

bash
HTTP_MIN_TLS_VERSION=TLSv1.2
json
{
  "service": {
    "minTLSVersion": "TLSv1.2"
  }
}

启用 Prometheus 指标

您可以通过设置环境变量 ENABLE_METRICS 来启用Prometheus指标端点 /metrics。包含 Node.js 和渲染请求持续时间指标,详情请参阅启用 Prometheus 指标端点了解详情。

默认为 false

bash
ENABLE_METRICS=true
json
{
  "service": {
    "metrics": {
      "enabled": true,
      "collectDefaultMetrics": true,
      "requestDurationBuckets": [1, 5, 7, 9, 11, 13, 15, 20, 30]
    }
  }
}

启用详细计时指标

通过启用 Prometheus 指标,您还可以启用详细指标,以获取每个渲染步骤的持续时间。

默认为 false

bash
# Available from v3.9.0+
RENDERING_TIMING_METRICS=true
json
{
  "rendering": {
    "timingMetrics": true
  }
}

日志级别

更改日志级别。默认为 info,将包含级别为 errorwarninginfo 的日志消息。

bash
LOG_LEVEL=debug
json
{
  "service": {
    "logging": {
      "level": "debug",
      "console": {
        "json": false,
        "colorize": true
      }
    }
  }
}

详细日志记录

指示无头浏览器实例在渲染图像时是否捕获和记录详细信息。默认为 false,仅捕获和记录错误消息。启用时 (true),也会捕获和记录调试消息。

请注意,您需要将日志级别更改为 debug(如上所述),以便在日志中包含详细信息。

bash
RENDERING_VERBOSE_LOGGING=true
json
{
  "rendering": {
    "verboseLogging": true
  }
}

捕获浏览器输出

指示无头浏览器实例是否将其调试和错误消息输出到远程渲染服务的运行进程中。默认为 false。在故障排除时启用此项 (true) 可能很有用。

bash
RENDERING_DUMPIO=true
json
{
  "rendering": {
    "dumpio": true
  }
}

自定义 Chrome/Chromium

如果您已经在系统上安装了ChromeChromium,则可以使用已安装的版本,而不是预打包的 Chromium 版本。

注意

请注意,不建议这样做,因为如果已安装的 Chrome/Chromium 版本与Grafana Image renderer 插件不兼容,可能会遇到问题。

您需要确保 Grafana/图像渲染服务进程可以访问 Chrome/Chromium 可执行文件。

bash
CHROME_BIN="/usr/bin/chromium-browser"
json
{
  "rendering": {
    "chromeBin": "/usr/bin/chromium-browser"
  }
}

使用附加参数启动浏览器

传递给无头浏览器实例的附加参数。默认为 --no-sandbox,--disable-gpu。Chromium 标志列表可在此处找到,Puppeteer 默认使用的标志列表可在此处找到。多个参数之间用逗号分隔。

bash
RENDERING_ARGS=--no-sandbox,--disable-setuid-sandbox,--disable-dev-shm-usage,--disable-accelerated-2d-canvas,--disable-gpu,--window-size=1280x758
json
{
  "rendering": {
    "args": [
      "--no-sandbox",
      "--disable-setuid-sandbox",
      "--disable-dev-shm-usage",
      "--disable-accelerated-2d-canvas",
      "--disable-gpu",
      "--window-size=1280x758"
    ]
  }
}

忽略 HTTPS 错误

指示无头浏览器实例在导航期间是否忽略 HTTPS 错误。默认情况下不忽略 HTTPS 错误。出于安全风险考虑,不建议忽略 HTTPS 错误。

bash
IGNORE_HTTPS_ERRORS=true
json
{
  "rendering": {
    "ignoresHttpsErrors": true
  }
}

默认时区

指示无头浏览器实例在 Grafana 未提供时区时使用默认时区,例如渲染告警面板图像时。请参阅ICU 的 metaZones.txt以获取支持的时区 ID 列表。如果未设置,则回退到 TZ 环境变量。

bash
BROWSER_TZ=Europe/Stockholm
json
{
  "rendering": {
    "timezone": "Europe/Stockholm"
  }
}

默认语言

指示无头浏览器实例在 Grafana 未提供语言时使用默认语言,例如渲染告警面板图像时。请参考 HTTP 头 Accept-Language 以了解如何格式化此值。

bash
# Available from v3.9.0+
RENDERING_LANGUAGE="fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"
json
{
  "rendering": {
    "acceptLanguage": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"
  }
}

视口宽度

渲染请求中未指定宽度时的默认视口宽度。默认为 1000

bash
# Available from v3.9.0+
RENDERING_VIEWPORT_WIDTH=1000
json
{
  "rendering": {
    "width": 1000
  }
}

视口高度

渲染请求中未指定高度时的默认视口高度。默认为 500

bash
# Available from v3.9.0+
RENDERING_VIEWPORT_HEIGHT=500
json
{
  "rendering": {
    "height": 500
  }
}

视口最大宽度

限制可请求的最大视口宽度。默认为 3000

bash
# Available from v3.9.0+
RENDERING_VIEWPORT_MAX_WIDTH=1000
json
{
  "rendering": {
    "maxWidth": 1000
  }
}

视口最大高度

限制可请求的最大视口高度。默认为 3000

bash
# Available from v3.9.0+
RENDERING_VIEWPORT_MAX_HEIGHT=500
json
{
  "rendering": {
    "maxHeight": 500
  }
}

设备缩放因子

指定渲染图像的默认设备缩放因子。对于显示器分辨率,2 就足够了,对于打印材料,4 会更好。设置更高的值会影响性能和内存。默认为 1。这可以在渲染请求中被覆盖。

bash
# Available from v3.9.0+
RENDERING_VIEWPORT_DEVICE_SCALE_FACTOR=2
json
{
  "rendering": {
    "deviceScaleFactor": 2
  }
}

最大设备缩放因子

限制可请求的最大设备缩放因子。默认为 4

bash
# Available from v3.9.0+
RENDERING_VIEWPORT_MAX_DEVICE_SCALE_FACTOR=4
json
{
  "rendering": {
    "maxDeviceScaleFactor": 4
  }
}

页面缩放级别

以下命令设置页面缩放级别。默认值为 1。值为 1.5 等于 150% 缩放。

bash
RENDERING_VIEWPORT_PAGE_ZOOM_LEVEL=1
json
{
  "rendering": {
    "pageZoomLevel": 1
  }
}

追踪

通过设置追踪 URL 启用 OpenTelemetry 追踪。默认为空(禁用)。

bash
RENDERING_TRACING_URL="https://:4318/v1/traces"
json
{
  "rendering": {
    "tracing": {
      "url": "https://:4318/v1/traces"
    }
  }
}