管理告警

功能概述

平台的告警管理功能旨在帮助用户全面监控和及时发现系统异常。通过利用预装的系统告警和灵活的自定义告警能力,结合标准化的告警模板和分级管理机制,为运维人员提供了一整套完整的告警解决方案。

无论是平台管理员还是业务人员,都可以便捷地在各自的权限范围内配置和管理告警策略,以有效监控平台资源。

主要特征

  • 内置系统告警策略:基于 global 集群和工作负载集群的常见故障诊断思路,预置丰富的告警规则。
  • 自定义告警规则:支持基于多种数据源创建告警规则,包括预置监控指标、自定义监控指标、黑盒监控项、平台日志数据和平台事件数据。
  • 告警模板管理:支持创建和管理标准化告警模板,以快速应用于相似资源。
  • 告警通知集成:支持通过多种渠道将告警信息推送给运维人员。
  • 告警视图隔离:区分平台管理告警和业务告警,确保不同角色的人员专注于各自的告警信息。
  • 实时告警查看:提供实时告警,集中展示当前发生告警的资源数量和详细的告警信息。
  • 告警历史查看:支持查看一段时间内的历史告警记录,便于运维人员和管理员分析近期监控告警状况。

功能优势

  • 全面的监控覆盖:支持对集群、节点和计算组件等多种资源类型的监控,内置丰富的系统告警策略,无需额外配置即可使用。
  • 高效的告警管理:通过告警模板实现标准化配置,提升运营效率,告警视图分离使不同角色的人员更易快速定位相关告警。
  • 及时的问题发现:告警通知自动触发,确保问题及时发现,支持多渠道告警推送,以主动避免问题发生。
  • 强大的权限管理:严格的告警策略访问控制确保告警信息安全且可管理。

通过UI创建告警策略

前提条件

  • 已配置通知策略(如需配置自动告警通知)。
  • 目标集群已安装监控组件(在使用监控指标创建告警策略时必需)。
  • 目标集群已安装日志存储组件和日志采集组件(在使用日志和事件创建告警策略时必需)。

操作步骤

  1. 导航至 运维中心 > 告警 > 告警策略
  2. 点击 创建告警策略
  3. 配置基本信息。

选择告警类型

资源告警

  • 按资源类型分类的告警类型(例如命名空间下的部署状态)。
  • 资源选择说明:
    • 未选择参数时默认为“任意”,支持自动关联新增资源。
    • 选择“全选”时,仅适用于当前资源。
    • 当选择多个命名空间时,资源名称支持正则表达式(例如 cert.*)。

事件告警

  • 按特定事件分类的告警类型(例如异常Pod状态)。
  • 默认选择指定资源下的所有资源,并支持自动关联新增资源。

配置告警规则

点击 添加告警规则,根据告警类型配置以下参数:

资源告警参数

参数说明
表达式Prometheus格式的监控指标算法,例如 rate(node_network_receive_bytes{instance="$server",device!~"lo"}[5m])
指标单位自定义监控指标单位,可以手动输入或从平台预置单位中选择
图例参数控制图表中曲线对应的名称,格式为 {{.LabelName}},例如 {{.hostname}}
时间范围日志/事件查询的时间窗口
日志内容日志内容的查询字段(例如错误),多个查询字段之间为OR关系
事件原因事件原因的查询字段(原因,例如:BackOff、Pulling、Failed等),多个查询字段之间为OR关系
触发条件由比较运算符、告警阈值和持续时间(可选)组成的条件。通过实时值/日志条数/事件条数与告警阈值的比较,以及实时值在告警阈值范围内的持续时间来判断是否触发告警。
告警等级分为四个等级:危急、严重、警告和信息。可以根据告警规则对业务的影响设定合理的告警等级。

事件告警参数

参数说明
时间范围事件查询的时间窗口
事件监控项支持监控事件等级或事件原因,多个字段之间为OR关系
触发条件基于事件计数的比较判断
告警等级与资源告警等级定义相同

其他配置

  1. 选择一个或多个已创建的通知策略。
  2. 配置告警发送间隔。
    • 全局:使用平台默认配置。
    • 自定义:可根据告警等级设置不同的发送间隔。
    • 选择“不要重复”时,仅在触发和恢复告警时发送通知。

额外说明

  1. 在告警规则的“更多”选项中,可以设置标签和注解。
  2. 配置标签和注解时,请参考 Prometheus告警规则文档
  3. 注意:标签中请勿使用 $value 变量,这可能导致告警异常。

通过CLI创建资源告警策略

前提条件

  • 已配置通知策略(如需配置自动告警通知)。
  • 目标集群已安装监控组件(在使用监控指标创建告警策略时必需)。
  • 目标集群已安装日志存储组件和日志采集组件(在使用日志和事件创建告警策略时必需)。

操作步骤

  1. 创建一个名为 example-alerting-rule.yaml 的新YAML配置文件。
  2. 向YAML文件中添加PrometheusRule资源并提交。以下示例创建一个名为policy的新告警策略:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  annotations:
    alert.cpaas.io/cluster: global      # 告警所在集群名称
    alert.cpaas.io/kind: Cluster        # 资源类型
    alert.cpaas.io/name: global         # 资源对象,支持单个、多个(|分隔)、或任意(.*)
    alert.cpaas.io/namespace: cpaas-system  # 告警对象所在的命名空间,支持单个、多个(|分隔),或任意(.*)
    alert.cpaas.io/notifications: '["test"]'
    alert.cpaas.io/repeat-config: '{"Critical":"never","High":"5m","Medium":"5m","Low":"5m"}'
    alert.cpaas.io/rules.description: "{}"
    alert.cpaas.io/rules.disabled: "[]"
    alert.cpaas.io/subkind: ""
    cpaas.io/description: ""
    cpaas.io/display-name: policy      # 告警策略的显示名称
  labels:
    alert.cpaas.io/owner: System
    alert.cpaas.io/project: cpaas-system
    cpaas.io/source: Platform
    prometheus: kube-prometheus
    rule.cpaas.io/cluster: global
    rule.cpaas.io/name: policy
    rule.cpaas.io/namespace: cpaas-system
  name: policy
  namespace: cpaas-system
spec:
  groups:
    - name: general # 告警规则名称
      rules:
        - alert: cluster.pod.status.phase.not.running-tx1ob-e998f0b94854ee1eade5ae79279e005a
          annotations:
            alert_current_value: "{{ $value }}"  # 通知当前值,保持默认
          expr: (count(min by(pod)(kube_pod_container_status_ready{}) !=1) or on() vector(0))>2
          for: 30s # 持续时间
          labels:
            alert_cluster: global # 告警所在集群名称
            alert_for: 30s # 持续时间
            alert_indicator: cluster.pod.status.phase.not.running  # 告警规则的指标名称(自定义告警指标名称)
            alert_indicator_aggregate_range: "30"  # 告警规则的聚合时间,单位秒
            alert_indicator_blackbox_name: "" # 黑盒监控项名称
            alert_indicator_comparison: ">"  # 比较方法
            alert_indicator_query: ""  # 日志告警的查询(仅对于日志告警适用)
            alert_indicator_threshold: "2"  # 告警规则的阈值
            alert_indicator_unit: ""  # 告警规则的指标单位
            alert_involved_object_kind: Cluster   # 告警规则所属对象类型:Cluster|Node|Deployment|Daemonset|Statefulset|Middleware|Microservice|Storage|VirtualMachine
            alert_involved_object_name: global   # 告警规则所属对象名称
            alert_involved_object_namespace: ""  # 告警规则所属对象的命名空间
            alert_name: cluster.pod.status.phase.not.running-tx1ob  # 告警规则的名称
            alert_namespace: cpaas-system  # 告警规则所在的命名空间
            alert_project: cpaas-system  # 告警规则所属对象的项目名称
            alert_resource: policy # 可用作告警规则所在的策略名称
            alert_source: Platform # 告警规则所在的数据类型:平台数据或业务数据
            severity: High # 告警等级:Critical-灾难,High-严重,Medium-警告,Low-信息

通过CLI创建事件告警策略

前提条件

  • 已配置通知策略(如需配置自动告警通知)。
  • 目标集群已安装监控组件(在使用监控指标创建告警策略时必需)。
  • 目标集群已安装日志存储组件和日志采集组件(在使用日志和事件创建告警策略时必需)。

操作步骤

  1. 创建一个名为 example-alerting-rule.yaml 的新YAML配置文件。
  2. 向YAML文件中添加PrometheusRule资源并提交。以下示例创建一个名为policy2的新告警策略:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  annotations:
    alert.cpaas.io/cluster: global
    alert.cpaas.io/events.scope: '[{"names":["argocd-gitops-redis-ha-haproxy"],"kind":"Deployment","operator":"=","namespaces":["*"]}]' 
      # names: 事件告警的资源名称;name为空则operator无效
      # kind: 触发事件告警的资源类型
      # namespace: 触发事件告警的资源所属命名空间,空数组表示非命名空间资源;ns为['*']表示全部命名空间
      # operator: 选择符 =, !=, =~, !~
    alert.cpaas.io/kind: Event   # 告警类型,事件(event告警)
    alert.cpaas.io/name: "" # 资源告警使用,事件告警保持为空
    alert.cpaas.io/namespace: cpaas-system 
    alert.cpaas.io/notifications: '["acp-qwtest"]'
    alert.cpaas.io/repeat-config: '{"Critical":"never","High":"5m","Medium":"5m","Low":"5m"}'
    alert.cpaas.io/rules.description: "{}"
    alert.cpaas.io/rules.disabled: "[]"
    cpaas.io/description: ""
    cpaas.io/display-name: policy2
  labels:
    alert.cpaas.io/owner: System
    alert.cpaas.io/project: cpaas-system
    cpaas.io/source: Platform
    prometheus: kube-prometheus
    rule.cpaas.io/cluster: global
    rule.cpaas.io/name: policy2
    rule.cpaas.io/namespace: cpaas-system
  name: policy2
  namespace: cpaas-system
spec:
  groups:
    - name: general
      rules:
        - alert: cluster.event.count-6sial-34c9a378e3b6dda8401c2d728994ce2f
          # 6sial-34c9a378e3b6dda8401c2d728994ce2f 可以自定义以确保唯一性
          annotations:
            alert_current_value: "{{ $value }}"  # 通知当前值,保持默认即可
          expr: round(((avg
            by(kind,namespace,name,reason)(increase(cpaas_event_count{namespace=~".*",id="policy2-cluster.event.count-6sial"}[300s])))
            + (avg
            by(kind,namespace,name,reason)(abs(increase(cpaas_event_count{namespace=~".*",id="policy2-cluster.event.count-6sial"}[300s])))))
            / 2)>2
          # id中 policy2 需要是告警策略的名,6sial需与前面告警规则的名称一致
          for: 15s # 持续时间
          labels:
            alert_cluster: global # 告警所在集群名称
            alert_for: 15s # 持续时间
            alert_indicator: cluster.event.count  # 告警规则的指标名称(自定义告警指标名称)
            alert_indicator_aggregate_range: "300" # 告警规则的聚合时间,单位秒
            alert_indicator_blackbox_name: "" 
            alert_indicator_comparison: ">" # 比较方法
            alert_indicator_event_reason: ScalingReplicaSet # 事件原因
            alert_indicator_threshold: "2" # 告警规则的阈值
            alert_indicator_unit: # 指标单位,事件告警保持不变
            alert_involved_object_kind: Event
            alert_involved_object_options: Single
            alert_name: cluster.event.count-6sial # 告警规则的名称
            alert_namespace: cpaas-system # 告警规则所在的命名空间
            alert_project: cpaas-system # 告警规则所属对象的项目名称
            alert_repeat_interval: 5m
            alert_resource: policy2 # 告警规则所在告警策略的名称
            alert_source: Platform # 告警规则所在告警策略的数据类型:平台数据或业务数据
            severity: High # 告警规则等级:Critical-灾难,High-严重,Medium-警告,Low-信息

通过告警模板创建告警策略

告警模板是一组针对相似资源的告警规则和通知策略的组合。通过告警模板,可以轻松快速地为平台上的集群、节点或计算组件创建告警策略。

前提条件

  • 已配置通知策略(如需配置自动告警通知)。
  • 目标集群已安装监控组件(在使用监控指标创建告警策略时必需)。

操作步骤

创建告警模板

  1. 在左边导航栏中,单击 运维中心 > 告警 > 告警模板
  2. 单击 创建告警模板
  3. 配置告警模板的基本信息。
  4. 告警规则 部分,单击 添加告警规则,并根据下述参数说明添加告警规则:
参数说明
表达式Prometheus格式的监控指标算法,例如 rate(node_network_receive_bytes{instance="$server",device!~"lo"}[5m])
指标单位自定义监控指标单位,可手动输入或从平台预置单位中选择
图例参数控制图表中曲线对应的名称,格式为 {{.LabelName}},例如 {{.hostname}}
时间范围日志/事件查询的时间窗口
日志内容日志内容的查询字段(例如错误),多个查询字段之间为OR关系
事件原因事件原因的查询字段(原因,例如:BackOff、Pulling、Failed等),多个查询字段之间为OR关系
触发条件由比较运算符、告警阈值、持续时间(可选)组成的条件
告警等级分为危急、严重、警告和信息四个等级。可以根据告警规则对业务的影响设定合理的告警等级。
  1. 单击 创建

使用告警模板创建告警策略

  1. 在左侧导航栏中,单击 运维中心 > 告警 > 告警策略提示:可以通过顶部导航栏切换目标集群。
  2. 单击 创建告警策略 按钮右侧的展开按钮 > 模板创建告警策略
  3. 配置部分参数,参考以下说明:
参数说明
模板名称要使用的告警模板的名称。模板按照集群、节点、计算组件分类排列。选中模板后,可查看告警模板中设置的告警规则、通知策略等信息。
资源类型选择模板是否为 集群节点计算组件 的告警策略模板,相应的资源名称将显示。
  1. 单击 创建

设置告警静默

支持为集群、节点和计算组件设置告警静默。通过为指定的告警策略设置静默,可以控制该告警策略下的所有规则在设定的静默时间范围内触发告警时不发送通知消息。支持设置永久静默和自定义时间静默。

例如,平台在进行升级或维护时,可能会有诸多资源出现异常状态,导致大量告警被触发,这使得运维人员在升级或维护完成前频繁收到告警通知。如能为告警策略设置静默可避免该情况的发生。

注意:如果静默状态持续到静默结束时间,静默设置将自动清除。

通过UI设置

  1. 在左侧导航栏中,单击 运维中心 > 告警 > 告警策略

  2. 单击待静默设置的告警策略右侧的操作按钮 > 设置静默

  3. 打开 告警静默 的开关。

    提示:此开关用于控制静默设置是否生效。取消静默时,只需关闭开关即可。

  4. 根据以下说明配置相关参数:

    提示:如果未选择静默范围或资源名称,则默认为 任意,即后续 删除/添加 资源操作将对应 删除静默/添加静默 的告警策略;如果选择 全选,则仅对当前选定的资源范围有效,后续 删除/添加 资源的操作不会被处理。

    参数说明
    静默范围静默设置生效的资源范围。
    资源名称静默设置针对的资源对象名称。
    静默时间告警静默的时间范围。告警将从静默时间开始进入静默状态,如果告警策略在静默结束时间后仍处于告警状态或触发告警,则恢复告警通知。 永久:静默设置将持续到告警策略被删除前。 自定义:自定义设置静默的开始和结束时间,时间间隔不得小于5分钟。
  5. 单击 设置

    提示:从设置静默起,到静默开始前,告警策略的静默状态为 静默等待;在此期间,策略中的规则触发告警时会正常发送通知;静默开始后至静默结束,告警策略的静默状态为 静默中,规则触发告警时将不会发送通知。

通过CLI设置

  1. 指定需要设置静默的告警策略资源名称,并执行以下命令:
kubectl edit PrometheusRule <所需设置的告警策略名>
  1. 根据以下示例,修改资源增加静默注解并提交。
---
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  annotations:
    alert.cpaas.io/cluster: global
    alert.cpaas.io/kind: Node
    alert.cpaas.io/name: 0.0.0.0
    alert.cpaas.io/namespace: cpaas-system
    alert.cpaas.io/notifications: "[]"
    alert.cpaas.io/rules.description: "{}"
    alert.cpaas.io/rules.disabled: "[]"
    alert.cpaas.io/rules.version: "23"
    alert.cpaas.io/silence.config: '{"startsAt":"2025-02-08T08:01:37Z","endsAt":"2025-02-22T08:01:37Z","creator":"leizhu@alauda.io","resources":{"nodes":[{"name":"192.168.36.11","ip":"192.168.36.11"},{"name":"192.168.36.12","ip":"192.168.36.12"},{"name":"192.168.36.13","ip":"192.168.36.13"}]}}'
      # 节点级别告警策略的静默配置,包括开始时间、结束时间,创建者等;如果静默范围包括特定节点,请参考上述示例附加resources.node信息;若需静默所有资源,则不需要resources字段。
    # alert.cpaas.io/silence.config: '{"startsAt":"2025-02-08T08:04:50Z","endsAt":"2199-12-31T00:00:00Z","creator":"leizhu@alauda.io","name":["alb-operator-ctl","apollo"],"namespace":["cpaas-system"]}'
      # 工作负载级别告警策略的静默配置,包括开始时间、结束时间,创建者等;如果静默范围包括特定工作负载,请参考上述示例附加name和namespace信息;若需静默所有资源,则无需name和namespace字段。
      # 设置endsAt字段为2199-12-31T00:00:00Z表示永久静默。
    alert.cpaas.io/subkind: ""
    cpaas.io/creator: leizhu@alauda.io
    cpaas.io/description: ""
    cpaas.io/display-name: policy3
    cpaas.io/updated-at: 2025-02-08T08:01:42Z
  labels:
  ## 省略不相关信息

配置告警规则的建议

告警规则并不总是越多越好,冗余或复杂的告警规则可能引发告警风暴,增加维护负担。在配置告警规则前,建议您先阅读以下指南,以确保自定义规则能够实现预期目的的同时保持高效。

  • 尽量使用最少的新规则:仅创建满足特定要求的规则。通过使用尽量少的规则数,可以在监控环境中建立更易于管理和集中的告警体系。
  • 关注症状而非原因:创建通知用户症状的规则,而不是触发症状的根本原因。这样可以确保在出现相关症状时,用户能够收到警报并可以进一步调查根本原因。此策略能显著减少您需要创建的规则总量。
  • 在尝试更改之前规划、评估需求:首先,明确哪些症状是重要的,以及当这些症状出现时,您希望用户执行哪些操作。然后评估现有规则,判断是否可以通过调整现有规则来实现目标,而不必为每个症状都创建新的规则。通过调整现有规则,合理创建新规则,您可以帮助简化告警系统。
  • 提供清晰的告警消息:创建告警消息时,提供症状描述、可能原因和建议操作。包含的信息应当明确简练,并包括故障排除步骤或相关信息的链接。这样可以帮助用户迅速评估情况并做出恰当的响应。
  • 合理设置严重级别:为规则分配严重级别,以提示用户在症状发生并触发警报时应作何反应。例如,定义Critical级别的警报,指示相关人员需要立即采取行动。通过确立严重性级别,您可以帮助用户在收到告警时决定应如何响应,并确保对紧急问题作出及时反应。