这个问题通常是服务端缺少图片渲染插件或浏览器依赖导致的,优先检查插件状态和系统依赖。
先说结论:大多数情况下是因为 Grafana 服务器上没有正确安装或配置 image renderer 插件,导致无法调用 headless 浏览器生成图片。
- 先确认:插件是否已安装且处于启用状态,日志中是否有浏览器启动报错。
- 先处理:安装缺失的系统依赖库(如 libgbm、libnss3 等),并检查渲染超时设置。
- 再验证:手动触发面板图片导出,观察日志是否不再出现渲染错误。
命令速用版
如果你使用的是 Linux 服务器,可以快速执行以下命令检查插件状态和安装基础依赖。操作前建议备份配置文件,防止修改失误。
# 备份配置文件 cp /etc/grafana/grafana.ini /etc/grafana/grafana.ini.bak # 检查插件列表 grafana-cli plugins list # 如果缺少依赖,Debian/Ubuntu 系统可尝试 apt-get update && apt-get install -y libgbm1 libxshmfence1 libnss3 # 重启服务 systemctl restart grafana-server
注意:具体依赖包名称可能因操作系统版本而异,上述命令适用于大多数基于 Debian 的环境。CentOS/RHEL 系统请使用 yum 或 dnf 安装对应兼容包。
典型错误日志
在排查前,请先查看 Grafana 日志(通常位于 /var/log/grafana/grafana.log),对比是否出现以下典型报错信息:
level=error msg="error rendering view" error="chrome not found" level=error msg="Render call failed" error="context deadline exceeded" level=error msg="stderr" error="... missing libgbm ..."
如果出现 chrome not found,说明插件未找到浏览器二进制文件;如果出现 missing libgbm 或类似库缺失错误,则需安装对应系统依赖;如果出现 context deadline exceeded,通常是渲染超时。
分步处理
按照以下顺序排查,每步做完后观察日志变化:
1. 检查插件状态
登录服务器,使用命令行工具查看插件列表。确认 grafana-image-renderer 是否存在且版本较新。如果没有安装,可以通过 grafana-cli 安装或直接下载插件包到 plugins 目录。
2. 安装系统依赖
这是最容易出错的一步。即使插件安装了,如果操作系统缺少 Chrome 运行的底层库,渲染依然会失败。查看 Grafana 日志,如果看到类似 "stderr: ... missing libgbm ..." 的错误,说明缺库。根据报错信息安装对应的 libgbm、libnss3 等库。
3. 调整渲染配置
编辑 grafana.ini 配置文件。注意配置项位置可能因版本而异,通常在 [plugin.grafana-image-renderer] 或 [rendering] 部分。如果面板数据量大,渲染耗时久,需要适当增加超时时间。示例配置如下:
[plugin.grafana-image-renderer] rendering_timeout = 60 rendering_view_timeout = 60
如果是 Docker 部署,确保传递了正确的环境变量,例如 GF_PLUGIN_RENDERING_TIMEOUT=60。
4. 权限与用户
确保运行 Grafana 的用户有权限执行插件中的二进制文件。在某些安全加固的系统上,可能需要调整 SELinux 策略或文件执行权限。
5. Docker 环境特别处理
官方 Grafana Docker 镜像为了体积精简,默认不包含完整的渲染依赖。如果必须在容器内渲染,建议在 Dockerfile 中手动安装依赖:
FROM grafana/grafana:latest USER root RUN apt-get update && apt-get install -y libgbm1 libnss3 libxshmfence1 USER grafana
或者直接使用带有 "renderer" 标签的官方镜像,或搭建独立的 rendering service。
怎么验证是否生效
完成上述步骤后,不要只依赖告警触发来验证,建议主动测试:
- 手动导出:在任意面板点击分享按钮,选择 "Export" -> "Image",看是否能下载图片。
- 查看日志:触发一次告警或导出,实时 tail 日志文件,确认没有 "error rendering view" 或浏览器启动失败的报错。
- 检查临时文件:渲染过程中通常会生成临时文件,确认指定目录有写入权限且未被占满。
常见坑
1. Docker 环境缺库
官方 Grafana Docker 镜像为了体积精简,默认不包含完整的渲染依赖。如果使用 Docker,建议使用带有 "renderer" 标签的镜像,或者在 Dockerfile 中手动安装 Chrome 依赖。
2. 渲染超时
默认超时时间较短,如果面板查询复杂,渲染进程会被强制杀死。不要盲目增加超时,先优化面板查询速度。
3. 远程渲染服务
如果服务器资源紧张,不建议在本地运行渲染插件。可以搭建独立的 rendering service,并在 Grafana 配置中指向该服务 URL,这样能避免本地依赖问题。
4. 版本兼容性
Grafana 主版本升级后,渲染插件可能也需要升级。不要长期锁定插件版本,保持与主程序版本兼容。