在通知中使用图片
注意
Grafana Cloud 用户可以通过在 Cloud Portal 中开启支持工单来请求此功能。
通知中的图片通过包含与警报关联的面板截图,帮助告警通知的接收者更好地理解警报触发或解决的原因。
注意
Mimir 或 Loki 不支持此功能,或者当 Grafana 配置为将告警发送到其他 Alertmanager(例如 Prometheus Alertmanager)时也不支持。
当警报触发或解决时,Grafana 会截取与警报关联的面板截图。这通过规则的 Dashboard UID 和 Panel ID 标注来确定。对于未关联面板的警报,Grafana 无法截取截图。
Grafana 最多为每个警报截取两张截图:一张在警报触发时,一张在警报解决时。在警报的整个生命周期内不会重新截取截图,您应该在 Grafana 中打开面板以实时跟踪数据。此外,根据您通知策略中警报的分组方式,Grafana 可能会发送包含同一面板多张截图的通知。发生这种情况是因为 Grafana 在截图时不知道您的警报是如何分组的,因此保守地为每个警报都截取了一张截图。
截图完成后,Grafana 可以将其上传到云存储服务(例如 Amazon S3、Azure Blob Storage 或 Google Cloud Storage);将其上传到其内部 Web 服务器;或将其上传到接收通知的服务(例如 Slack)。您应该选择哪种选项取决于您的 Grafana 如何管理以及您使用的集成。有关更多信息,请参阅要求。
请参阅本页末尾的表格,了解支持在通知中使用图片的联系点列表及支持情况。
要求
要在通知中使用图片,必须设置 Grafana 以使用图片渲染。您可以安装图片渲染插件或将其作为远程渲染服务运行。
截图时,即使 Grafana 配置为将截图上传到云存储服务,截图也会保存到
[data][paths]
文件夹中。Grafana 必须对该文件夹具有写入权限,否则无法将截图保存到磁盘,并且每次截图失败都会记录错误。除非将警报发送到 Discord、电子邮件、Pushover、Slack 或 Telegram,否则您应该使用云存储服务。这些集成支持在电子邮件中嵌入截图或将截图作为附件添加到通知中,而其他集成必须链接上传到云存储桶的截图。如果配置了云存储服务,则同时支持这两种方式的集成将链接云存储桶中的截图,而不是在通知中嵌入或附加截图。
如果将截图上传到云存储服务(例如 Amazon S3、Azure Blob Storage 或 Google Cloud Storage),并且访问存储桶中的截图需要身份验证、登录 VPN 或公司网络,则图片预览可能无法在所有即时通讯和通信平台中正常工作,因为某些服务会重写 URL 以使用其 CDN。如果发生这种情况,我们建议使用支持上传图片的集成或完全禁用通知中的图片。
将截图上传到云存储服务时,Grafana 为每张图片使用一个随机的 20 个字符(Azure Blob Storage 为 30 个字符)的文件名。这使得 URL 难以猜测,但并非不可能。
Grafana 不会从云存储中删除截图。我们建议在您的云存储服务中配置保留策略,以删除早于 1 个月的截图。
如果 Grafana 配置为将其截图上传到其内部 Web 服务器,并且访问 Grafana 需要登录 VPN 或公司网络,则图片预览可能无法在所有即时通讯和通信平台中正常工作,因为某些服务会重写 URL 以使用其 CDN。如果发生这种情况,我们建议使用支持上传图片的集成或完全禁用通知中的图片。
Grafana 不会删除上传到其内部 Web 服务器的截图。要从
static_root_path/images/attachments
一段时间后删除截图,我们建议设置一个 CRON 作业。请注意,您无法调整通知中图片的数量、大小或其位置。
配置
注意
Grafana Cloud 用户可以通过在 Cloud Portal 中开启支持工单来请求此功能。
安装图片渲染插件或将 Grafana 设置为使用远程渲染服务后,在 [unified_alerting.screenshots]
中将 capture
设置为 true
# Enable screenshots in notifications. You must have either installed the Grafana image rendering
# plugin, or set up Grafana to use a remote rendering service.
# For more information on configuration options, refer to [rendering].
capture = false
如果截图应该上传到云存储,则 upload_external_image_storage
也应该设置为 true
# Uploads screenshots to the local Grafana server or remote storage such as Azure, S3 and GCS. Please
# see [external_image_storage] for further configuration options. If this option is false, screenshots
# are persisted to disk for up to temp_data_lifetime.
upload_external_image_storage = false
重启 Grafana 使更改生效。
高级配置
我们建议 max_concurrent_screenshots
小于或等于 concurrent_render_request_limit
。max_concurrent_screenshots
和 concurrent_render_request_limit
两者的默认值均为 5
# The maximum number of screenshots that can be taken at the same time. This option is different from
# concurrent_render_request_limit as max_concurrent_screenshots sets the number of concurrent screenshots
# that can be taken at the same time for all firing alerts where as concurrent_render_request_limit sets
# the total number of concurrent screenshots across all Grafana services.
max_concurrent_screenshots = 5
支持的联系点
Grafana 支持广泛的联系点,对通知中的图片支持情况各不相同。下表显示了 Grafana 中支持的所有联系点列表以及它们对上传截图到接收服务和引用已上传到云存储服务的截图的支持情况。
名称 | 从磁盘上传 | 从云存储引用 |
---|---|---|
钉钉 | 否 | 否 |
Discord | 是(每次通知最多 10 张) | 是(每次通知最多 10 张) |
电子邮件 | 是(嵌入在电子邮件中) | 是 |
Google Chat | 否 | 是 |
Kafka | 否 | 否 |
Line | 否 | 否 |
MQTT | 否 | 否 |
Microsoft Teams | 否 | 是 |
Opsgenie | 否 | 是 |
PagerDuty | 否 | 是 |
Prometheus Alertmanager | 否 | 否 |
Pushover | 是(每次通知最多 1 张) | 否 |
Sensu Go | 否 | 否 |
Slack | 是(使用 Bot 令牌时,每次通知最多 5 张) | 是(使用 webhooks 时,每次通知最多 1 张) |
Telegram | 是 | 否 |
Threema | 否 | 否 |
VictorOps | 否 | 否 |
Webhook | 否 | 是 |
限制
- Mimir 或 Loki 不支持此功能,或者当 Grafana 配置为将告警发送到其他 Alertmanager(例如 Prometheus Alertmanager)时也不支持。
- 在电子邮件通知中使用自定义模板时不支持此功能。
- 许多联系点每次通知最多支持一张图片。在这种情况下,每次通知只会上传或引用第一张图片。
- 当在单个通知中发送多个警报时,可能会为每个警报包含一个截图。图片显示的顺序是随机的。
- 如果将截图上传到云存储服务(例如 Amazon S3、Azure Blob Storage 或 Google Cloud Storage),并且访问存储桶中的截图需要身份验证、登录 VPN 或公司网络,则图片预览可能无法在所有即时通讯和通信平台中正常工作,因为某些服务会重写 URL 以使用其 CDN。
故障排除
如果已设置 Grafana 在通知中发送图片,但仍然收到没有图片的通知,请按照以下故障排除步骤操作
- 检查是否已按照说明设置了通知中的图片功能。
- 在 Grafana 中启用调试日志记录并查找日志记录器为
ngalert.image
的日志。 - 如果警报未与仪表盘关联,则日志中会有
Cannot take screenshot for alert rule as it is not associated with a dashboard
。 - 如果警报与仪表盘关联,但未关联仪表盘中的任何面板,则日志中会有
Cannot take screenshot for alert rule as it is not associated with a panel
。 - 如果因配置错误或图片渲染问题无法获取图片,则日志中会有
Failed to take an image
,包含 Dashboard UID、Panel ID 和错误信息。 - 检查联系点是否支持在通知中使用图片,以及是否支持将图片上传到接收服务或引用已上传到云存储服务的图片。
监控
Grafana 提供以下指标来观察通知中图片的性能和失败率。例如,如果在预期时间(10 秒)内无法截取截图,则计数器 grafana_screenshot_failures_total
将被更新。
grafana_alerting_image_cache_hits_total
grafana_alerting_image_cache_misses_total
grafana_screenshot_duration_seconds
grafana_screenshot_failures_total
grafana_screenshot_successes_total
grafana_screenshot_upload_failures_total
grafana_screenshot_upload_successes_total