热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Prometheus监控运维实战十:告警管理

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Prometheus监控运维实战十:告警管理相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Prometheus监控运维实战十:告警管理相关的知识,希望对你有一定的参考价值。



在上篇文章中,我们学习了Prometheus告警规则的配置,但由于其不提供告警发送功能,我们只能在UI界面查看到相关的告警情况。在Prometheus架构中,告警管理功能主要通过Alertmanager来完成,本文将接着上篇,讲解通过Alertmanager来实现警报的发送与管理 。


Alertmanager简介

Alertmanager作为一个独立的组件,负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方,Prometheus内置了对邮件,Slack等多种通知方式的支持,同时还支持通过Webhook的方式接入企业微信、钉钉等国内IM工具。

\'Prometheus监控运维实战十:告警管理_监控\'

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参数进行设置。

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监控运维实战十:告警管理_Prometheus_02\'

 


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界面可看到已成功触发告警规则

\'Prometheus监控运维实战十:告警管理_Prometheus_03\'

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


\'Prometheus监控运维实战十:告警管理_Prometheus_04\'

标签路由

在前面的示例中,我们只定义了一个顶级路由,这意味着所有的告警都由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"按键。
\'Prometheus监控运维实战十:告警管理_监控_05\'

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

\'Prometheus监控运维实战十:告警管理_Prometheus_06\'

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

\'Prometheus监控运维实战十:告警管理_Prometheus_07\'

 

 

 

 

 

 




推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
author-avatar
我爱板材_527
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有