小团队从0搭建devOPS平台-Alertmanager报警平台

上一篇(//www.greatytc.com/p/b15217e8f24f
)文章简单介绍了监控神器prometheus的安装、配置、可视化等的使用。这篇我们来讲讲报警。

我们先简单回顾下prometheus的功能和原理。


prometheus总体架构图.png

从上图可以看出通过各种exporter采集数据后,prometheus把各种metrics(指标)统一pull到时间序列数据库中后,我们可以在可视化平台比如grafana显示后,如果有某些指标有异常可以把异常信息push推送给 alertmanager报警平台,报警平台进行处理后notify通知给指定的通道和指定的人。

这时候该Alertmanager报警平台登场了。

一、 Prometheus Alertmanager报警平台简介

报警在Prometheus的架构中被划分成两个独立的部分。如下图,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager推送报警信息。

Alertmanager架构图.png

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

  • 邮件
  • HipChat
  • OpsGenie
  • Slack (国外很火)
  • wechat(微信,由于微信的现在仅限微信企业号)
  • Webhook

当然Alertmanager不可能集成所有的通道,但是通过Webhook可以二次开发以支持更多定制化的场景。
例如,目前Alertmanager还不支持钉钉,那用户完全可以通过Webhook与钉钉机器人进行集成,从而通过钉钉接收告警信息。
已经有好人心实现了钉钉的webhook:https://github.com/timonwong/prometheus-webhook-dingtalk

Alertmanager特性

AlertManager 贴心的提供了报警分组去重、静默和告警抑制机制来对告警通知行为进行优化,比如升级系统需要两个小时,那么这两个小时就不需要对该系统的下线进行烦人的报警了,这个时候在AlertManager的WebUI上可以对该报警进行静默。下面对Alertmanager特性进行更细致的介绍。

1. 分组和去重

在某些情况下,比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知。

2. 抑制(Inhibition)

Inhibition字面上翻译是:抑制,但是从意思来讲:收敛这个词会更好(但是收敛其实已经包含了前面讲的分组和去重)。

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

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

3. 静默

静默提供了一个简单的机制可以快速根据标签对告警进行静默处理。如果接收到的告警符合静默的配置,Alertmanager则不会发送告警通知。例如上面提到的系统升级场景。

4. 告警延时

假设系统发生故障产生告警,每分钟发送一条告警消息,这样的告警信息十分令人崩溃。当然贴心的prometheus也为你想到了。Alertmanager提供第一个参数是repeat_interval,可以将重复的告警以更大频率发送。
不过对于告警延,需要和两个参数配合起来使用

  • 解决告警不能及时收到。假设当前发送一条告警,下一次告警在一个小时之后,但在这一个小时之内系统产生了一条告警,这时告警无法被及时发出去。alertmanager提供了第二个参数group_inteval,让报警能够及时的发送出去。
  • 另一个问题,当故障发生时,告警条件一个个被满足,到达Alertmanager的顺序也分先后,所以在最开始的时候可能收到多个消息。Alertmanager提供了第三个参数叫做group_wait,在一个分组收到第一条报警消息之后,通过等到group wait,把故障最开始发生时候产生告警收敛掉,最后作为一条消息发送出来。

啰嗦了这么多,相信你已经迫不及待要开始安装试用了。那我们开始吧。

二、AlertManager安装配置

安装

Alertmanager最新版本的下载地址可以从Prometheus官方网站https://prometheus.io/download/获取。
下载完成后,执行tar命令解压即可

tar -xzvf alertmanager-$VERSION.darwin-amd64.tar.gz

Alertmanager解压后会包含一个默认的alertmanager.yml配置文件,修改内容:

global:
  resolve_timeout: 5m
  smtp_from: 'xxx@xxx.com'
  smtp_smarthost: 'smtp.exmail.qq.com:465'
  smtp_auth_username: 'xxx@xxx.com'
  smtp_auth_password: 'xxx'
  smtp_require_tls: false
  smtp_hello: 'Alert'

templates:
  - 'template/*.tmpl'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 10m
  receiver: 'email.tech'
receivers:
  - name: 'email.tech'
    webhook_configs:
    - url: 'http://127.0.0.1:8060/dingtalk/tech1/send' ## dingding webhook
      send_resolved: true
    email_configs:
    - to: 'userxxx1@xxx.com,user2xxxx@xxx.com' # 多个用户用逗号隔开
      headers: {Subject: "异常报警"}

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

简单对上面的配置做下解释
Alertmanager的配置主要包含两个部分:

  • 路由(route)
  • 接收器(receivers)。
    所有的告警信息都会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器。在配置文件中使用route定义了顶级的路由,路由是一个基于标签匹配规则的树状结构。所有的告警信息从顶级路由开始,根据标签匹配规则进入到不同的子路由,并且根据子路由设置的接收器发送告警。

启动

由于golang的特性,启动Alertmanager很简单。进行刚刚解压后的文件夹中,执行

./alertmanager --config.file=alertmanager.yml

关联Prometheus Server与Alertmanager

前面的架构图中已经说明,Alertmanager是独立的组件,告警信息通过Prometheus Server 推送过来。所以需要做Prometheus Server中配置关联以及告警规则。当然也很简单。
编辑Prometheus配置文件prometheus.yml,并添加以下内容:

rule_files:
  - /etc/prometheus/rules/*.rules.yml  #告警规则文件存放目录

alerting:
  alertmanagers:
    - static_configs:
        targets: ['localhost:9093'] #Alertmanager和Prometheus Server部署在同一台主机

添加告警规则文件

例如,vi /etc/prometheus/rules/load_over1.rules.yml,添加一个load1超过3就告警的规则

groups:
- name: load1
  rules:
  - alert: Load1Over
    expr: (node_load1)> 3
    for: 30s
    labels:
      user: root
    annotations:
      summary: '【预警】{{$labels.instance}}:load1>3'
      description: '{{$labels.instance}}: 【预警】load1 大于3 (current value is:{{$value }})'

接收报警信息

笔者按照上面的配置收到的报警示例如下(钉钉的webhook请查看github安装指引)
1,邮件报警


邮件报警.png

2,钉钉报警


钉钉报警.png

三、总结

当故障发生时,能够即时获取到异常结果我们要用监控系统的最主要的目的之一。通过Prometheus提供的告警以及告警处理能力,通过内置的告警通知能力,能过帮助用户快速实现告警的通知。同时其还提供了简单有效的扩展方式,让用户可以基于Prometheus的告警处理模式实现更多的定制化需求。

当然笔者这篇文章写的比较简单,还有很多高级特性没有介绍,比如模板等,期待聪明的你自行更深入去理解吧。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • Prometheus Alertmanager 概述 Alertmanager与Prometheus是相互分离的两...
    YichenWong阅读 29,000评论 1 9
  • 主机数据收集 主机数据的采集是集群监控的基础;外部模块收集各个主机采集到的数据分析就能对整个集群完成监控和告警等功...
    梅_梅阅读 6,680评论 0 7
  • 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(T...
    dreamer_lk阅读 3,484评论 1 2
  • 有一位单身女子刚搬了家,她发现隔壁住了一户穷人家,一个寡妇与两个小孩子。有天晚上,那一带忽然停了电,那位女...
    林深偶见鹿阅读 346评论 0 2
  • 去过那么多地方,尤以古镇居多。 其中印象最深的是平遥,而平遥城里最值得称道的不是明清古居、晋商风貌,恰恰是最平凡、...
    Mr张观澜阅读 663评论 2 11