当用户拥有多个跨地域的Prometheus实例,并且需要为其中多个Prometheus实例创建相同的Prometheus告警规则时,可以使用Prometheus告警模板功能。本文介绍如何创建并管理Prometheus告警规则模板。

背景信息

对于多个跨地域的Prometheus实例,当需要为这些Prometheus实例创建告警规则时,如果每个Prometheus实例都单独创建,工作量较大并且难以同步管理。为了解决这个问题,阿里云Prometheus监控提供了告警规则模板功能,可以帮助用户快速为多个Prometheus实例创建告警规则,并且可以统一管理,降低用户管理多个Prometheus实例告警规则的成本。

Prometheus告警规则模板的主要功能

  • 创建Prometheus告警规则模板
  • 编辑Prometheus告警规则模版
  • 应用模板
    • Prometheus实例选择模式
    • 标签控制器模式
  • 删除Prometheus告警规则模版
  • 查看通过模板创建的告警规则
    • 批量启动告警规则
    • 批量停止告警规则
    • 批量删除告警规则
  • 批量应用模版
  • 批量删除模版

创建Prometheus告警规则模板

  1. 登录ARMS控制台
  2. 在左侧导航栏,选择Prometheus监控 > Prometheus告警规则模板
  3. Prometheus告警规则模板页面的右上角单击创建Prometheus告警规则模板
  4. 创建Prometheus告警规则页面设置以下参数。
    您可以选择通过静态阈值或自定义PromQL创建Prometheus告警规则模板。
    • 静态阈值检查类型提供了系统预设的告警指标,通过选择已有的告警指标,您可以通过语义化的方式快速创建对应指标项的告警规则。
    • 如果需要对静态阈值中系统预设指标之外的指标进行监控,您可以使用自定义PromQL检测类型来创建告警规则。
    表 1. 静态阈值检查类型
    参数 说明 示例
    告警规则模板名称 告警规则模板的名称。 生产集群-容器CPU使用率告警
    告警规则模板描述 非必填。对模板进行描述,可以用于记录模板的含义、适用场景、备注等。
    检测类型 选择静态阈值 静态阈值
    告警分组 选择告警分组。 Kubernetes负载
    告警指标 选择想要配置告警的指标,每个告警分组对应不同的指标。 容器CPU使用率
    告警条件 基于告警指标预置内容设置告警事件产生条件。 当容器CPU使用率大于80%时,满足告警条件。
    筛选条件 根据告警指标,设置当前配置的告警规则所适用的范围,即所有符合筛选条件的资源满足此条告警规则时,均会产生告警事件。
    可选筛选条件包括:
    • 遍历:告警规则适用于当前Prometheus实例下的所有资源。筛选条件默认为遍历。
    • 等于:选择该条件后,需继续输入具体资源名称。所创建的告警规则将仅适用于对应资源。不支持同时填写多个资源。
    • 不等于:选择该条件后,需继续输入具体资源名称。所创建的告警规则将适用于除该资源之外的其他资源。不支持同时填写多个资源。
    • 正则匹配:选择该条件后,按需输入正则表达式匹配相应的资源名称。所创建的告警规则将适用于符合该正则表达式的所有资源。
    • 正则不匹配:选择该条件后,按需输入正则表达式匹配相应的资源名称。所创建的告警规则将过滤符合该正则表达式的所有资源。
    实例IP:遍历
    持续时间
    • 当告警条件满足时,直接产生告警事件:有任何一个数据点满足阈值,就会产生告警事件。
    • 当告警条件满足持续N分钟时,才产生告警事件:即只有当满足阈值的时间大于等于N分钟时,才产生告警事件。
    1
    告警等级 自定义告警等级。默认告警等级为默认,告警严重程度从默认、P4、P3、P2、P1逐级上升。 默认
    告警内容 用户收到的告警信息。您可以使用Go template语法在告警内容中自定义告警参数变量。 命名空间: {{$labels.namespace}} / Pod: {{$labels.pod_name}} / 容器: {{$labels.container}} CPU使用率{{$labels.metrics_params_opt_label_value}} {{$labels.metrics_params_value}}%, 当前值{{ printf "%.2f" $value }}%
    高级设置
    标签 设置告警标签,设置的标签可用作通知策略匹配规则的选项。
    注释 设置告警的注释。
    表 2. 自定义PromQL检测类型
    参数 说明 示例
    告警规则模板名称 告警规则模板的名称。 Pod的CPU使用率大于8%
    告警规则模板描述 非必填。对模板进行描述,可以用于记录模板的含义、适用场景、备注等。
    检测类型 设置为自定义PromQL 自定义PromQL
    自定义PromQL语句 使用PromQL语句设置告警则表达式。 max(container_fs_usage_bytes{pod!="", namespace!="arms-prom",namespace!="monitoring"}) by (pod_name, namespace, device)/max(container_fs_limit_bytes{pod!=""}) by (pod_name,namespace, device) * 100 > 90
    持续时间
    • 当告警条件满足时,直接产生告警事件:有任何一个数据点满足阈值,就会产生告警事件。
    • 当告警条件满足持续N分钟时,才产生告警事件:即只有当满足阈值的时间大于等于N分钟时,才产生告警事件。
    1
    告警等级 自定义告警等级。默认告警等级为默认,告警严重程度从默认、P4、P3、P2、P1逐级上升。 默认
    告警内容 用户收到的告警信息。您可以使用Go template语法在告警内容中自定义告警参数变量。 命名空间: {{$labels.namespace}}/Pod: {{$labels.pod_name}}/磁盘设备: {{$labels.device}} 使用率超过90%,当前值{{ printf "%.2f" $value }}%
    高级设置
    标签 设置告警标签,设置的标签可用作通知策略匹配规则的选项。
    注释 设置告警的注释。

应用模板

创建Prometheus告警模板后,您可以通过应用模板来为Prometheus实例创建告警规则,或者根据现有模板更新Prometheus实例的告警规则。

Prometheus告警模板目前提供两种模板应用模式。

Prometheus实例选择模式

  1. 在控制台的Prometheus告警规则模板页面,单击需要应用的告警规则模板右侧的应用模板
  2. 应用模板页面的Prometheus实例选择模式页签,选择Prometheus实例,然后单击确认
    说明 您可以通过Prometheus实例名称、地域和Prometheus实例类型筛选需要使用该告警模板的Prometheus实例。
  3. 在弹出的提示框中选择是否更新已创建的告警规则,然后单击确认
    ARMS将会使用当前告警规则模板在选中的Prometheus实例中创建告警规则。
    • 未选中更新已经创建的告警规则:如果选中的Prometheus实例已经存在通过当前告警模板创建的告警规则,那么在创建告警规则时将会提示已经使用此模板创建过告警规则,不进行更新,此时告警规则将不会更新。
    • 选中更新已经创建的告警规则:如果选中的Prometheus实例已经存在通过当前告警模板创建的告警规则,那么此时会根据最新的告警模板内容更新Prometheus告警规则。
      注意 如果对应的告警规则单独修改过,并且保留了告警规则与模板的联系,那么单独修改的内容会将被告警规则模板覆盖而丢失。

标签控制器模式

利用容器服务为集群添加的标签,在标签控制器模式页签通过标签匹配的方式筛选符合条件的集群,每个模板可以单独配置,配置后就会直接为符合标签匹配条件的Prometheus实例创建告警规则。

Prometheus告警规则模板会根据标签动态更新告警规则:

  • 当模板发生变化时,满足标签匹配条件的集群对应的告警规则会根据模板自动更新。
  • 修改通过标签控制器模式创建的告警规则时,如果保留了告警规则和模板之间的映射关系,告警规则会被自动覆盖。
  • 当容器服务集群的标签发生变化时,与集群对应的Prometheus实例标签也会变化,Prometheus告警模板也会根据标签匹配条件动态删除或创建告警规则。
  1. 容器服务管理控制台为集群添加标签。
    1. 在左侧导航栏单击集群
    2. 集群列表页面,将鼠标悬浮于目标集群名称右侧的标签图标上,然后单击编辑标签
    3. 编辑标签对话框中添加集群标签,然后单击确定
      添加集群标签
  2. 在控制台的Prometheus告警规则模板页面,单击需要应用的告警规则模板右侧的应用模板
  3. 应用模板页面,单击标签控制器模式页签,设置匹配的标签和匹配表达式。

删除模板

当Prometheus告警模板不需要使用时,可以删除Prometheus告警模板。删除模板时,您可以根据需要,选择是否保留由此告警模板创建的告警规则。

  1. 在控制台的Prometheus告警规则模板页面,单击目标告警规则模板右侧的删除
  2. 在弹出的提示对话框中选择是否同时删除从模板创建的告警规则,然后单击确认
    • 选中同时删除从模版创建的告警规则:将会删除与模版相关联的Prometheus告警规则。如果通过模板创建的Prometheus告警规则被手动编辑过,并且保存时选择了不保留模板与规则的映射关系,则对应规则不会被删除。
    • 为选中同时删除从模版创建的告警规则:通过模版创建的Prometheus告警规则将会保留。

查看通过模板创建的告警规则

您可以查看并批量管理通过模板创建的告警规则。

  1. 在控制台的Prometheus告警规则模板页面,单击目标告警规则模板右侧的查看目标创建规则
  2. 从模板创建的告警规则页面批量管理告警规则。
    • 批量启动告警:选中需要启动的告警规则,然后单击批量启动告警
    • 批量停止告警:选中需要停止的告警规则,然后单击批量停止告警
    • 批量删除告警:选中需要删除的告警规则,然后单击批量删除告警

注意事项

编辑通过Prometheus告警规则模板创建的Prometheus告警规则后,在保存时需要选择是否保留模板与规则的映射关系。
  • 保留此告警规则与告警规则模板的映射关系:保留映射关系后,如果在应用对应告警规则模板时选择了当前规则对应的Prometheus实例,并且选择了强制更新时,本次编辑内容可能会丢失。
  • 解除此告警规则与告警规则模板的映射关系:解除映射关系后,此告警规则会被视为独立规则。建议修改告警规则名称,否则使用对应告警规则模板再次应用到该Prometheus实例时,会因为告警规则名称重复而导致创建失败。