菜单
Grafana Cloud 企业版 开源

性能考量和限制

Grafana 告警支持多维告警,一个告警规则可以生成多个告警。例如,您可以配置一个告警规则,以便在每台虚拟机的 CPU 达到最大值时触发告警。本主题讨论了多维告警带来的性能考量。

评估告警规则会消耗 RAM 和 CPU 来计算告警查询的输出,并消耗网络资源来发送告警通知并将结果写入 Grafana SQL 数据库。单个告警规则的配置会影响资源消耗,从而影响给定配置支持的最大规则数量。

以下部分列出了告警性能考量。

  • 规则评估频率考量。“Evaluate Every” 属性控制告警规则的评估频率。建议使用最低可接受的评估频率,以支持更多并发规则。
  • 规则结果集的基数。例如,假设您正在监控车队中每台虚拟机上每个 API 路径的 API 响应错误。该集合的基数等于路径数量 *n* 乘以虚拟机数量 *v*。您可以降低结果集的基数 - 例如,可以通过监控每台虚拟机的错误而不是每台虚拟机每个路径的错误来实现。
  • 告警查询的复杂性考量。数据源能够快速处理和响应的查询会消耗较少资源。虽然此考量不如上面列出的其他考量重要,但如果您已经尽可能减少了这些考量,那么关注单个查询性能可能会有所帮助。

每次告警规则评估都会生成一组告警实例;结果集中的每个成员对应一个实例。所有实例的状态会写入 Grafana SQL 数据库的 `alert_instance` 表中。在使用 SQLite 时,如此大量的写入操作可能会导致问题。

Grafana 告警暴露了一个名为 `grafana_alerting_rule_evaluations_total` 的指标,用于计算告警规则评估的数量。要了解规则评估对 Grafana 实例的影响,您可以观察评估速率并将其与资源消耗进行比较。在 Prometheus 兼容数据库中,您可以使用查询 `rate(grafana_alerting_rule_evaluations_total[5m])` 来计算 5 分钟时间窗口内的速率。请务必记住,这并非规则评估的全貌。例如,如果有些规则每 10 秒评估一次,而另一些规则每 30 分钟评估一次,则负载分布不均匀。

这些因素都会影响 Grafana 实例的负载,但您也应该注意评估这些规则对数据源的性能影响。告警查询通常是监控数据库处理的大多数查询,因此影响 Grafana 实例的相同负载因素也会影响它们。

受限的规则源支持

Grafana 告警可以检索存储在大多数可用的 Prometheus、Loki、Mimir 和 Alertmanager 兼容数据源中的告警和记录规则。

目前不支持从上述数据源以外的任何其他数据源读取或写入告警规则。

Prometheus 版本支持

支持 Prometheus 和 Alertmanager 的最新两个次要版本。我们无法保证旧版本能够正常工作。

例如,如果当前的 Prometheus 版本是 `2.31.1`,则支持 >= `2.29.0` 版本。

Grafana Alertmanager 只能接收 Grafana 管理的告警

Grafana 不能用于接收外部告警。您只能使用 Grafana 管理的告警向 Grafana Alertmanager 发送告警。

您可以选择将 Grafana 管理的告警发送到外部 Alertmanager,您可以在告警页面的 Admin 选项卡中找到此选项。

更多信息请参阅此 GitHub Issue

大量告警实例导致数据库高负载

如果告警实例数量很高,数据库负载可能会非常高,因为告警实例的每次状态转换都会保存到数据库中。

压缩告警状态

启用 `alertingSaveStateCompressed` 功能开关后,Grafana 会以压缩形式保存告警规则状态,从而减少大量实例告警的数据库开销。

定期保存状态

通过定期向数据库写入也可以防止高负载。为此,需要启用功能标志 `alertingSaveStatePeriodic`。默认情况下,它会每 5 分钟和每次关机时将状态保存到数据库。定期间隔也可以使用 `state_periodic_save_interval` 配置标志进行配置。在此过程中,Grafana 会从数据库中删除所有现有告警实例,然后在一个事务中分批将整个当前实例集写回。使用 `state_periodic_save_batch_size` 配置选项配置每批的大小。

可以使用 Grafana 暴露的 `state_full_sync_duration_seconds` 指标来监控定期写入数据库所需的时间。

如果 Grafana 崩溃或被强制终止,数据库可能会落后最多 `state_periodic_save_interval` 秒。Grafana 重启后,UI 可能会显示某些告警的错误状态,直到告警被重新评估。在某些情况下,崩溃前触发的告警可能会再次触发。如果发生这种情况,Grafana 可能会发送重复的触发告警通知。

Grafana 11.6.0 的告警规则迁移

升级到 Grafana 11.6.0 时,将对 `alert_rule_versions` 表执行迁移。如果您在升级到 11.6.0 时遇到迁移失败,则说明您的 `alert_rule_versions` 表行数过多。要解决此问题,您需要清空 `alert_rule_versions` 表以完成迁移。