告警管理概述,告警管理功能有哪些

4747 1543 2023-01-17

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

本文讲述了告警管理概述,告警管理功能有哪些。

ARMS告警管理提供了可靠的告警收敛、通知、自动升级等功能,帮助您快速检测和修复业务告警。本文主要介绍了告警管理的实现原理和优势。

功能架构

告警管理包含集成管理、告警事件管理、通知策略管理、告警协同处理和告警处理分析五个功能模块。

告警管理-实现原理

集成管理

集成管理分为默认告警集成和三方产品集成两部分。

默认告警集成

默认告警集成默认集成了ARMS各子产品的告警,如应用监控告警、前端监控告警、Prometheus告警、云拨测告警等。ARMS默认告警通常通过周期性的触发任务来检查监控数据是否存在异常,检测到异常后会通过默认的通道将告警事件上报到事件管理中心。

ARMS各子产品创建告警规则的操作,请参见:
  • 应用监控告警规则

  • 前端监控告警规则

  • Prometheus告警规则

  • Prometheus告警规则模板

  • 云拨测告警配置

三方产品集成

三方产品集成支持通过简单配置接入任意告警源产生的告警,从而在ARMS上一站式处理分布在各个云上云下IDC系统产生的告警,实现统一处理告警的目的。任意告警源产生的告警上报到ARMS告警管理后统称为告警事件,告警事件有如下约束:

告警事件的数据结构

ARMS告警事件的数据结构参考开源AlertManager的数据结构,数据结构包括:

  • Labels(标签):告警元数据,一组标签唯一标识一个事件,标签相同的事件为同一个事件,重复上报会进行合并,例如:“alertname: 告警名称 ”

  • Annotations(注释):注释是告警事件的附加描述,注释不属于元数据。例如:“message: 告警内容”

  • StartsAt(告警开始时间):告警事件开始时间。

  • EndsAt(告警结束时间):告警事件结束时间。

  • GeneratorUrl(事件URL地址):告警事件URL地址。

标签(Labels)和注释(Annotations)的区别
  • 一组标签共同决定了一个告警事件,当其中的一个标签发生变化时,将产生新的告警事件。

    示例:

    { "hostname":"线上生产主机", "alertname":"CPU使用率过高","ip":"192.168.0.3"}这一组标签代表一个告警(主机192.168.0.3的CPU使用率过高)。当标签IP发生变化后,如{ "hostname":"线上生产主机", "alertname":"CPU使用率过高","ip":"192.168.0.4"},就会生成一个新的告警(主机192.168.0.4的CPU使用率过高)。

  • 注释的变化不会改变告警事件,一组标签相同注释不同的多条事件会被认为是一条事件多次上报。

    示例:

    注释{"value":"85","message":"主机192.168.0.3 CPU使用率85%,超过阈值80%"}改变其中的内容不会产生新的告警,例如改变CPU使用率后{"value":"86","message":"主机192.168.0.3 CPU使用率86%,超过阈值80%"} ,两次事件上报的告警为同一条告警。

说明 集成中可以配置去重字段,配置去重字段后这个集成上报的告警都会按照配置的去重字段作为标签来唯一确定一个告警事件。如果不配置去重字段默认会按照所有的标签来唯一确定一个告警事件。

告警事件管理

告警事件管理支持通过以下两种方式对告警源再加工:

  • 通过事件处理流编排简单的处理流程,对任意告警源上报的告警事件进行再加工,以满足差异化的事件数据处理需求。

  • 事件管理支持对任意告警源上报的告警事件去重、压缩、降噪、静默,从而收敛告警,减少告警风暴的产生。

事件压缩原理

告警事件管理默认会对事件进行2个层面的压缩,基于标签压缩和基于时间压缩,下面分别阐述压缩实现的原理。

基于标签压缩
满足条件的告警事件在通知时会按照通知策略中设置的分组策略进行压缩。根据分组策略中设置的标签,当满足条件的多条事件包含相同的标签时,将会自动压缩成一条告警进行通知。下图展示3个不同的事件,根据两种不同的压缩标签进行压缩的效果:

基于标签压缩

基于时间压缩
每个告警事件都包含告警开始时间和告警结束时间,标签相同的告警如果开始时间和结束时间有交集,则会合并为一个告警事件,且合并后的告警事件的开始时间和结束时间取这两个告警事件的并集。

基于时间压缩

通知策略管理

通知策略本质上是一种订阅规则,通过配置匹配规则,当满足条件的告警事件产生时会根据通知策略的配置进行通知。

事件处理流、事件管理和通知策略的关系如下图所示。

通知策略管理

告警协同处理

告警协同处理模块支持多种协作策略的配置,您可以在阿里云控制台、钉钉、企业微信、飞书等工具中直接对告警进行处理。同时也支持群消息同步、排班管理、升级策略等功能,满足团队协同处理告警的需求。告警处理流程如下所示,具体操作,请参见在告警通知群中处理告警。

告警协同处理

告警处理分析

告警处理分析模块通过记录和分析告警处理的过程,可以对单个告警进行复盘或者对过去一段时间内的告警进行处理分析,找出告警处理过程中的薄弱点,优化告警处理流程,提高处理效率。 与Grafana、Loki、Prometheus结合可以通过Grafana大盘实时查看已处理和未处理的告警,实现通过一个大盘全盘掌握系统告警处理状态。

默认支持丰富的SLO指标统计,通过告警接手率、平均接手时长、平均处理时长等指标来管理团队。通过丰富的标签能力多维度分析(如团队、应用、服务、环境)告警处理情况,满足大规模团队使用。更多信息,请参见通过ARMS告警大盘提高告警处理效率。

告警管理优势

当业务部署到阿里云并使用ARMS产品监控业务后,如果使用告警管理功能处理业务告警,ARMS告警管理能从以下几点来提升您的运维效率。

  • 全球化。

    • 告警规则模板全球化,一站式为全球事件配置告警。

    • 联系人、通知策略全球化,一次配置全球生效。

  • 集成事件后管理更高效。

    • 告警管理默认支持一键化集成阿里云常见的监控工具,并支持更多的监控工具手动接入,方便统一维护。

    • 事件接入模块稳定,能提供7×24小时的无间断事件处理服务。

    • 处理海量事件数据时可以保证低延时。

  • 及时准确地将告警通知给联系人。

    • 配置通知规则,对事件合并后再发送告警通知,减少运维人员出现通知疲劳的情况。

    • 根据告警的紧急程度选择邮件、短信、电话、钉钉等不同的通知方式,来提醒联系人处理告警。

    • 通过升级通知对长时间没有处理的告警进行多次提醒,保证告警及时解决。

  • 帮助您快速便捷地管理告警。

    • 联系人能通过钉钉随时处理告警。

    • 使用通用告警格式,联系人能更好地分析告警。

    • 多个联系人通过钉钉协同处理。

  • 统计告警数据,实时分析处理情况,改进告警处理效率。

在上篇文章中,我们学习了Prometheus告警规则的配置,但由于其自身不提供告警发送功能,我们只能在UI界面查看相关的告警情况。

在Prometheus的整体方案中,告警管理功能主要通过Alertmanager来完成,本文将接着上篇,讲解使用Alertmanager来实现警报的发送与管理 。

一. Alertmanager简介

Alertmanager作为一个独立的组件,负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方。

Alertmanager内置了对邮件,Slack等多种通知方式的支持,同时还支持通过Webhook的方式接入企业微信、钉钉等国内IM工具。

Alertmanager除了提供基本告警通知能力以外,还具有以下几个特点:

1. 分组

分组机制可以将相同性质的警报合并为一个通知。比如在某些故障场景中,可能导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受收大量的通知信息,而无法对问题进行快速定位。

例如:当一台宿主机上运行着数十个虚拟机,如果机器发生网络或硬件故障,运维人员可能收到数十个告警,包括物理机与上面的所有虚拟机。而逐个查看这些故障本身是个耗时的工作,也容易导致对主要问题的忽略。

作为告警接收人,我们希望可以在一个通知中就能查看到受影响的所有实例信息,这时可以按照告警名称或所属宿主机对告警进行分组,而将这些告警合并到一个通知中查收。

告警分组功能可以通过Alertmanager的配置文件进行配置。

2. 抑制

抑制是指当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制。

例如:当集群不可访问时触发了一次告警,通过配置Alertmanager可以忽略与该集群有关的其它所有告警。这样可以避免接收到大量与实际问题无关的告警通知。

抑制机制同样通过Alertmanager的配置文件进行设置。

3. 静默

静默提供了一种简单的方法对特定的告警在特定时间内进行静音处理,它根据标签进行匹配。如果Alertmanager接收到的告警信息符合静默的配置,它将不会发送告警通知。静默功能适合在机器进行维护等场景下,暂时屏蔽告警通知。

静默设置需要在Alertmanager的Wer页面上进行设置。

二. 安装部署

下载安装包并解压

$ wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

$ tar -xvf alertmanager-0.21.0.linux-amd64.tar.gz

拷贝文件到bin目录 

$ cd alertmanager-0.21.0.linux-amd64

$ sudo cp alertmanager /usr/local/bin/

$ sudo cp amtool /usr/local/bin/

注:amtool是一个Alertmanager管理工具,支持用命令行方式进行管理。

查看版本号验证安装是否正常

$ alertmanager --version

alertmanager, version 0.21.0 (branch: HEAD, revision: 4c6c03ebfe21009c546e4d1e9b92c371d67c021d)

  build user:       root@dee35927357f

  build date:       20200617-08:54:02

  go version:       go1.14.4

三. 配置介绍

Alertmanager与Prometheus  Server一样,也是通过yml格式的配置文件进行配置。下面是一个基本的配置文件模板:

global:

  resolve_timeout: 3m 

  smtp_smarthost: 'localhost:25' 

  smtp_from: 'devops@example.com'

  smtp_require_tls: false

templates:

- '/etc/alertmanager/template/*.tmpl'

route:

  receiver: 'admin'   

  group_by: ['alertname'] 

  group_wait: 20s

  group_interval: 10m 

  repeat_interval: 3h 

receivers:

- name: 'admin'

  email_configs:

  - to: 'admin@example.com'

该配置文件总共定义了四个模块,global、templates、route和receivers。

global 

用于定义Alertmanager的全局配置。

在示例中我们只配置几个参数,其中resolve_timeout定义持续多长时间未接收到告警标记后,就将告警状态标记为resolved。而smtp_smarthost指定SMTP服务器地址,smtp_from定义了邮件发件的的地址,smtp_require_tls配置禁用TLS的传输方式。

templates

用于指定告警通知时的模板,如邮件模板等。

由于Alertmanager的信息可以发送到多种接收介质,如邮件、Slack等,我们通常需要能够自定义警报所包含的信息,这个就可以通过模板来实现。

限于篇幅原因,相关模板的配置方式本文不做介绍,有兴趣的朋友可上官网查看:https://prometheus.io/docs/alerting/latest/notifications/。

route

用于定义Alertmanager接收警报的处理方式,根据规则进行匹配并采取相应的操作。

路由是一个基于标签匹配规则的树状结构,所有的告警信息都会从配置中的顶级路由(route)进入路由树。从顶级路由开始,根据标签匹配规则进入到不同的子路由,并且根据子路由设置的接收者发送告警。在示例配置中只定义了顶级路由,并且配置的接收者为admin,因此,所有的告警都会发送给到admin的接收者。

group_by用于定义分组规则,前面讲过Alertmanager支持告警分组功能,这里使用告警名称做为规则,满足规则的告警将会被合并到一个通知中;group_wait配置分组等待的时间间隔,在这个时间内收到的告警,会根据前面的规则做合并;group_interval定义相同group间发送告警通知的时间间隔;repeat_interval用于定义重复警报发送间隔,默认为3小时。

receivers

用于定义接收者的地址信息。

由于我们示例配置是邮件告警的方式,这里email_configs参数配置相关的邮件地址信息,另外还支持wechat_configs、webhook_configs等方式。

四. 启动Alertmanager

启动Alertmanager时可使用参数修改相关配置,--config.file用于指定配置文件路径,--storage.path用于指定数据存储路径。

$ alertmanager --config.file alertmanager.yml --storage.path /data/alertmanager/ &

启动完成后,打开浏览器,访问http://$IP:9093,可看到UI界面

五. Prometheus关联Alertmanager

Prometheus的配置文件中,alerting模块用于配置Alertmanager地址。当配置完成后,Prometheus会将触发告警规则的警报发送到Alertmanager。

alerting:

  alertmanagers:

    - static_configs:

        - targets: ['localhost:9093']

我们可以试着将上篇文章中的cpu告警规则调低,触发Prometheus告警规则来验证配置,此处我们改为CPU使用率大于1%触发告警。

groups:

- name: node_alert

  rules:

  - alert: cpu_alert

    expr: 100 -avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)* 100 > 1

    for: 5m

    labels:

      level: warning

    annotations:

      description: "instance: {{ $labels.instance }} ,cpu usage is too high ! value: {{$value}}"

      summary:  "cpu usage is too high"

在Prometheus界面看到已成功触发告警规则

打开Alertmanager,可看到接收到的警报信息。

六. 标签路由

在前面的示例中,我们只定义了一个顶级路由,这意味着所有的告警都由admin的接收者获取。但在实际环境中,告警的需求往往要比这个来得复杂。

例如:我们需要根据资源类型,将数据库的告警发送给DBA团队,将服务器的告警发送给运维团队;或者根据告警的严重级别,普通告警发送给技术人员,严重告警还需要通知到领导层等等。

对于此类需求,我们可以使用子路由的方式来实现,这些Route支持通过标签的方式进行匹配,并发送给相关的receiver。

route:

  receiver: 'admin'   

  group_by: ['alertname'] 

  group_wait: 20s

  group_interval: 10m 

  repeat_interval: 3h 

  routes:

    - receiver: 'database'

      continue: true

      match_re

        type: mysql|mongodb

     - receiver: 'devops'

       continue: true

       match:

         type: server

receivers:

- name: 'admin'

  email_configs:

  - to: 'admin@example.com'

- name: 'database'

  email_configs:

  - to: 'database1@example.com |database2@example.com'

- name: 'devops'

  email_configs:

  - to: 'devops1@example.com |devops2@example.com'

在上面的这个示例中,我们配置了顶级路由,然后又根据不同的标签,定义了两个子路由和相关的接收者。其中continue的值如果为false,那么告警在匹配到第一个子节点之后就直接停止,如果continue为true,报警则会继续进行后续子节点的匹配。

对于告警信息的匹配,可以通过match和match_re进行标签的匹配,其中match匹配字符,而match_re支持正则表达式的方式。

七. 静默告警

在某些情况下,我们可能希望对告警信息进行屏蔽,不收到相关的告警信息。例如对服务器进行关机维护、实例重启等场景。对此,Alertmanager提供了静默功能,用于处理此类需求。

静默功能的配置可以UI界面上进行,在页面上点击 "Slience"按键。

在"New Slience“页面进行配置,Matchers通过标签配置需要屏蔽的告警,如果勾上Regex,则可以在Value处使用正则表达式做匹配。在Start处填写开始时间,然后在End或Duration中填写一处即可,另外一个会自动计算出来。

配置完成后,点击 "Create”完成创建。此时点击”Sliences”,可看到已经生成的Slience。当需要提前中止该Slience时,可点击旁边的Expire红色字体,让其过期即可。

上文就是小编为大家整理的告警管理概述,告警管理功能有哪些。

国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)睿象云智能运维平台软件分析、比较及推荐。

上一篇:it运维是做什么的?保障企业数字化运作的心脏,it运维工作内容
下一篇:智能照明以后的趋势是怎样的
相关文章

 发表评论

暂时没有评论,来抢沙发吧~