告警有两个部分。 首先,向Prometheus添加警报规则(Alert rules),定义构成警报的逻辑和依据值。 其次,Alertmanager将触发警报转换为通知,例如电子邮件,页面和聊天消息。
先给prometheus添加告警规则后面手动触发下告警,在prometheus.yml
同目录创建文件rules.yml
Copy groups:
- name: example
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
然后在prometheus.yml
添加下面内容让prometheus去加载rules并配置prometheus使用alertmanager的信息
Copy rule_files:
- rules.yml
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
然后重新运行prometheus后停掉node_exporter后查询可以up == 0
可以看到down了
在prometheus的web页面的Alerts可以看到有告警生成
告警在未达到for的时间上限内状态为pending
达到了时间就会切成firing
并被发送到alertmanager,这里我们部署下alertmanager来处理告警
Copy $ wget https://github.com/prometheus/alertmanager/releases/download/v0.16.0/alertmanager-0.16.0.linux-amd64.tar.gz
$ tar -xzf alertmanager-*.linux-amd64.tar.gz
$ cd alertmanager-*.linux-amd64/
配置alertmanager,创建文件alertmanager.yml
写入下面信息。可以申请个163的邮箱开启pop3和smtp然后开启客户端密码即可。
Copy global:
resolve_timeout: 5m #处理超时时间,默认为5min
smtp_smarthost: 'smtp.163.com:25' # 邮箱smtp服务器代理
smtp_from: '177xxxx7xx6@163.com' # 发送邮箱名称
smtp_auth_username: '177xxxx7xx6@163.com' # 邮箱账号
smtp_auth_password: 'xxxxxxxxx' # 邮箱密码或授权码
route:
receiver: example-email
receivers:
- name: example-email # 路由中对应的receiver名称
email_configs: # 邮箱配置
- send_resolved: true #故障恢复的时候时候发邮件
to: 'youraddress@xxx.com'
然后运行alertmanager
Copy $ ./alertmanager
level=info ts=2019-01-18T03:23:25.618242308Z caller=main.go:174 msg="Starting Alertmanager" version="(version=0.15.3, branch=HEAD, revision=d4a7697cc90f8bce62efe7c44b63b542578ec0a1)"
level=info ts=2019-01-18T03:23:25.618299711Z caller=main.go:175 build_context="(go=go1.11.2, user=root@4ecc17c53d26, date=20181109-15:40:48)"
level=info ts=2019-01-18T03:23:25.620962633Z caller=cluster.go:155 component=cluster msg="setting advertise address explicitly" addr=172.25.0.4 port=9094
level=info ts=2019-01-18T03:23:25.622780056Z caller=main.go:322 msg="Loading configuration file" file=/etc/alertmanager/config.yml
level=info ts=2019-01-18T03:23:25.62283361Z caller=cluster.go:570 component=cluster msg="Waiting for gossip to settle..." interval=2s
level=info ts=2019-01-18T03:23:25.625547849Z caller=main.go:398 msg=Listening address=:9093
level=info ts=2019-01-18T03:23:27.623182959Z caller=cluster.go:595 component=cluster msg="gossip not settled" polls=0 before=0 now=1 elapsed=2.000272s
level=info ts=2019-01-18T03:23:35.624264613Z caller=cluster.go:587 component=cluster msg="gossip settled; proceeding" elapsed=10.001369295s
然后访问alertmanager的web页面http://localhost:9093/
如果配置正确的话在你的邮件收件箱能看到如下图类似的告警邮件
这个基本设置让您对prometheus可以做的事情有所了解。 您可以向prometheus.yml添加更多target,您的警报也会自动为它们工作
在下一章中,我将重点介绍使用Prometheus的client library添加到自己的应用程序里