alertmanager

在文章 How to monitor your system with prometheus 中介绍过 Prometheus 的安装教程,相信看过的小伙伴都已经开始使用了。但这样就够了吗,是否还缺少点什么?

对,没错,我们缺少告警 !

图表再好看,也不会时时刻刻盯着啊,个人认为一个好的监控系统是能够自发告警,只有在有告警的时候,我们才登上去多喵几眼。

其实,Prometheus 官方提供了告警模块,那就是 Alertmanager, 不过因为代码解耦关系,它被单独剥离成一个独立项目了。

我是分割线

下面我们将完成安装和配置 Alertmanager, 并结合 Onealert 实现报警需求

环境准备

Step 1 — 安装 Alertmanager

使用 wget 下载 Alertmanager 安装包

cd ~/Download
wget https://github.com/prometheus/alertmanager/releases/download/v0.4.2/alertmanager-0.4.2.linux-amd64.tar.gz
cd Prometheus

使用 tar 解压缩 alertmanager-0.4.2.linux-amd64.tar.gz

tar -xvzf ~/Download/alertmanager-0.4.2.linux-amd64.tar.gz
cd alertmanager-0.4.2.linux-amd64

当解压缩成功后,可以运行 version 检查运行环境是否正常

./alertmanager -version

如果你看到类似输出,表示你已安装成功:

alertmanager, version xxx (branch: master, revision: 9a5ab2fa63dd7951f4f202b0846d4f4d8e9615b0)
  build user:       root@2811d2f42616
  build date:       20160902-15:34:07
  go version:       go1.6.3

Step 2 — 修改 alertmanager 配置

修改 simple.yml 文件,使用 Onealert 的 Prometheus 默认应用配置

#simple.yml
global:
  resolve_timeout: 1m

route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'webhook'

receivers:
- name: 'webhook'
  webhook_configs:
  - url: 'http://api.110monitor.com/alert/api/event/prometheus/xxxxxxxxx'
    send_resolved: true

提示: 这里我们使用 Alertmanager 的 webhook_configs,地址为 Onealert 一个 App

Step 3 — 启动 Alertmanager

使用 ./alertmanager -config.file simple.yml 运行 Alertmanager, 如果看到类似输出,表示运行成功

INFO[0000] Starting alertmanager (version=0.4.2, branch=master, revision=9a5ab2fa63dd7951f4f202b0846d4f4d8e9615b0)  source=main.go:84
INFO[0000] Build context (go=go1.6.3, user=root@2811d2f42616, date=20160902-15:34:07)  source=main.go:85
INFO[0000] Loading configuration file                    file=simple.yml source=main.go:156
INFO[0000] Listening on :9093                            source=main.go:206

Step 4 — 添加 Rules

切换到 Prometheus Server 目录, 修改 prometheus.yml 文件,添加 rule_files

#prometheus.yml
rule_files:
  - "first.rules"

创建 first.rules 文件, 并添加

ALERT InstanceStatus
  IF up{job="node"} == 0
  FOR 10s
  LABELS {
    instance = "",
  }
  ANNOTATIONS {
    summary = "服务器  运行状态",
    description = "服务器  已当机超过 20s"
  }

使用命令 ./prometheus -alertmanager.url http://localhost:9093 重启 Promtheus Server

此时在浏览器中访问页面 http://localhost:9090/alerts,你将看到配置的所有 Rules

proalert1

停掉 Node Exporter,隔一定时间,刷新该页面,你将看到

proalert2

此时你会收到类似的告警邮件(Onealert 默认通知配置)

proalert3

至此,我们已完成了使用 Alertmanager 来实现应用的告警通知。


结语:

Prometheus 代码是非常解耦的,我们可以使用官方的 Alertmanager 包,再结合 PromQL 强大能力,简单配置 Rules, 即满足常见告警需求,对于比较特殊的告警,则需要结合 Alertmanager 更加细致的配置实现。

我已仔细阅读代码,发现它在告警聚合,去重,以及配置不同发送频率,不同渠道都做的比较完备,以后会展开细讲。