grafana 通过 image-renderer 服务渲染面板为图片并注入告警 payload;需部署 renderer、配置 server_url、为高危告警建专用单面板 dashboard、记录 panel id,在 webhook 中用 {{ .imageurl }} 引用,注意数据源兼容性与 soc 接收规范。

Grafana 本身不直接生成物理图片文件(如 PNG/JPEG 存到磁盘),而是通过 image-renderer 服务完成“渲染—返回二进制流”的过程。所谓“截取物理图片”,实质是让 Grafana 在告警触发时,调用远程或本地的渲染服务,将指定面板快照生成图片,并把该图片的可访问 URL(或 Base64 内容)注入告警 payload,再由通知渠道(如 Webhook)转发给 SOC 平台。
确认渲染服务已就绪
必须先部署并验证 grafana-image-renderer 服务,否则所有带图操作都会失败:
- 推荐使用 Docker 启动:
docker run -d --name=render --network=host -e BROWSER_TZ=Asia/Shanghai grafana/grafana-image-renderer - 确保服务监听端口(默认
8081)可被 Grafana 实例访问,例如能 curl 通http://192.168.1.180:8081/render/health - 在
grafana.ini中配置:[remote_image_renderer]server_url = http://192.168.1.180:8081/render/
绑定高危告警与指定面板
Grafana 告警截图依赖具体 Dashboard 的 Panel ID,无法动态渲染任意查询。因此需提前准备:
- 为每个高危告警规则(如 “K8s Node NotReady”、“核心 DB 连接数 > 95%”)单独创建一个专用 Dashboard
- 每个 Dashboard 只保留 1 个关键 Panel,聚焦展示该告警最相关指标(含 PromQL、时间范围、阈值线)
- 记录下该 Panel 的唯一 ID(在面板右上角 ⋯ → View JSON 中查
id字段,或 URL 中&panelId=123)
配置 Webhook 通知并注入 imageUrl
SOC 通常通过 HTTP Webhook 接收结构化告警,Grafana 支持在 Alert payload 中自动注入图片地址:
- 在 Alert Rule 配置中启用 Include image(邮件/Slack 等内置通道直接勾选;Webhook 需确保 Grafana 版本 ≥ 8.0 且 renderer 正常)
- Webhook 模板中引用变量:
{{ .ImageURL }}(Grafana 自动填充渲染后图片的临时 URL) - 若 SOC 要求图片以 Base64 形式嵌入(非 URL),需改用自研中间服务:接收 Webhook → 用
GET {{ .ImageURL }}下载图片 → 转 Base64 → 重发至 SOC
适配 SOC 接收规范(关键细节)
多数 SOC 平台要求图片字段名固定(如 attachment 或 imageUrl),且需校验来源可信:
- 在 Webhook 请求头中添加认证信息,例如:
X-SOC-Auth: Bearer xxx - 确保
imageUrl返回的是公网可访问链接(若 renderer 仅内网可达,需配置反向代理或启用external_image_storage = local+ Nginx 暴露/var/lib/grafana/png/目录) - 注意:Browser 类型数据源(如 Loki Explore、CloudWatch Logs Insights)的面板不支持远程渲染,高危告警应基于 Prometheus / InfluxDB / MySQL 等 server-side 数据源构建











