告警管理

目录

功能概述

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

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

主要功能

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

功能优势

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

通过 UI 创建告警策略

前提条件

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

操作步骤

  1. 进入 运维中心 > 告警 > 告警策略
  2. 点击 创建告警策略
  3. 配置基础信息。

选择告警类型

资源告警

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

事件告警

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

配置告警规则

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

资源告警参数

参数说明
ExpressionPrometheus 格式的监控指标算法表达式,如 rate(node_network_receive_bytes{instance="$server",device!~"lo"}[5m])
Metric Unit自定义监控指标单位,可手动输入或从平台预设单位中选择
Legend Parameter控制图表中曲线对应的名称,格式为 {{.LabelName}},例如 {{.hostname}}
Time Range日志/事件查询的时间窗口
Log Content日志内容查询字段(如 Error),多个查询字段之间用 OR 连接
Event Reason事件原因查询字段(Reason,如 BackOff、Pulling、Failed 等),多个查询字段之间用 OR 连接
Trigger Condition由比较运算符、告警阈值和持续时间组成的条件(可选)。根据实时值/日志数/事件数与告警阈值的比较及实时值在阈值范围内的持续时间判断是否触发告警。
alert Level分为 Critical、Serious、Warning 和 Info 四个等级。可根据告警规则对业务的影响合理设置对应资源的告警等级。

事件告警参数

参数说明
Time Range事件查询的时间窗口
Event Monitoring Item支持监控事件级别或事件原因,多个字段之间用 OR 连接
Trigger Condition基于事件数量进行比较判断
alert Level与资源告警等级定义相同

其他配置

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

其他说明

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

通过 CLI 创建资源告警

前提条件

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

操作步骤

  1. 新建 YAML 配置文件,命名为 example-alerting-rule.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 # 告警规则指标名称(自定义告警指标名称为 custom)
                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 # 告警规则所在告警策略数据类型:Platform-平台数据 Business-业务数据
                severity: High # 告警规则严重级别:Critical-严重、High-严重、Medium-警告、Low-信息

通过 CLI 创建事件告警

前提条件

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

操作步骤

  1. 新建 YAML 配置文件,命名为 example-alerting-rule.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: 事件告警的资源名称;若名称为空,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
              # policy2 中的 id 需为告警策略名称;6sial 必须与前置告警规则名称匹配
              for: 15s # 持续时间
              labels:
                alert_cluster: global # 告警所在集群名称
                alert_for: 15s # 持续时间
                alert_indicator: cluster.event.count # 告警规则指标名称(自定义告警指标名称为 custom)
                alert_indicator_aggregate_range: '300' # 告警规则聚合时间,单位秒
                alert_indicator_blackbox_name: ''
                alert_indicator_comparison: '>' # 告警规则比较方式
                alert_indicator_event_reason: ScalingReplicaSet # 事件原因
                alert_indicator_threshold: '2' # 告警规则阈值
                alert_indicator_unit: pieces # 告警规则指标单位,事件告警保持不变
                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 # 告警规则所在告警策略数据类型:Platform-平台数据 Business-业务数据
                severity: High # 告警规则严重级别:Critical-严重、High-严重、Medium-警告、Low-信息

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

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

前提条件

  • 已配置通知策略(若需配置自动告警通知)。
  • 目标集群已安装监控组件(创建基于监控指标的告警策略时必需)。

操作步骤

创建告警模板

  1. 在左侧导航栏点击 运维中心 > 告警 > 告警模板
  2. 点击 创建告警模板
  3. 配置告警模板的基础信息。
  4. 告警规则 区域,点击 添加告警规则,根据以下参数说明添加告警规则:
参数说明
ExpressionPrometheus 格式的监控指标算法表达式,如 rate(node_network_receive_bytes{instance="$server",device!~"lo"}[5m])
Metric Unit自定义监控指标单位,可手动输入或从平台预设单位中选择
Legend Parameter控制图表中曲线对应的名称,格式为 {{.LabelName}},例如 {{.hostname}}
Time Range日志/事件查询的时间窗口
Log Content日志内容查询字段(如 Error),多个查询字段之间用 OR 连接
Event Reason事件原因查询字段(Reason,如 BackOff、Pulling、Failed 等),多个查询字段之间用 OR 连接
Trigger Condition由比较运算符、告警阈值和持续时间组成的条件(可选)。
alert Level分为 Critical、Serious、Warning 和 Info 四个等级。可根据告警规则对业务的影响合理设置对应资源的告警等级。
  1. 点击 创建

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

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

设置告警静默

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

例如:平台升级或维护时,许多资源可能出现异常状态,导致大量告警触发,运维人员在升级或维护完成前频繁收到告警通知。设置告警策略静默可以避免此类情况。

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

通过 UI 设置

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

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

  3. 切换 告警静默 开关至开启状态。

    提示:该开关控制静默设置是否生效。取消静默只需关闭开关。

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

    提示:若未选择静默范围或资源名称,默认为 任意,表示后续的 删除/添加 资源操作将对应 删除静默/添加静默 告警策略;选择“全选”时,仅对当前选中资源范围生效,后续的 删除/添加 资源操作不做处理。

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

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

通过 CLI 设置

  1. 指定要设置静默的告警策略资源名称,执行以下命令:

    kubectl edit PrometheusRule <TheNameOfThealertPolicyYouWantToSet>
  2. 按示例修改资源,添加静默注解并提交。

    ---
    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,表示相关人员需立即采取行动。通过设定严重级别,帮助用户判断告警响应优先级,确保紧急问题得到及时处理。