Prometheus-alertmanager

1 下载

wget https://github.com/prometheus/alertmanager/releases/download/v0.18.0/alertmanager-0.18.0.linux-amd64.tar.gz -P /usr/local/

2 安装

tar  xf alertmanager-0.18.0.linux-amd64.tar.gz
mv alertmanager-0.18.0.linux-amd64 alertmanager

3 配置为系统服务

cat>/lib/systemd/system/alertmanager.service<<EOF
[Service]
Restart=on-failure
WorkingDirectory=/usr/local/alertmanager/
ExecStart=/bin/sh -c '/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml'
[Install]
WantedBy=multi-user.target
EOF


chown 644 /lib/systemd/system/alertmanager.service
systemctl daemon-reload
systemctl enable alertmanager
systemctl start alertmanager
systemctl status alertmanager

4 自定义yml文件配置告警方式

[root@node1 alertmanager]# cat alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'xxxx@163.com'
  smtp_auth_username: 'xxxx@163.com'
  smtp_auth_password: 'xxxxxx'
  smtp_require_tls: false

route:
  receiver: 'mail'
receivers:
- name: 'mail'
  email_configs:
  - to: 'xxxx@qq.com'



alertmanager 也是服务可以通过下面方式访问
http://IP:9093

5 设置prometheus开启alertmanager

vim prometheus.yml 
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - localhost:9093

这里完全是localhost ,因为alertmanager也是个服务器可以安装到任何节点,所以只需要根据实际情况做配置即可

systemctl restart prometheus

6 添加告警规则

cd /usr/local/prometheus
mkdir rules

vim /usr/local/prometheus/rules/node_rules.yml

groups:
- name: node_alerts
  rules:
  - alert: HighNodeCpuLoad
    expr: node_load1{job=~"aliyun"} > 2
    for: 2m
    labels:
     severity: waring
    annotations:
     summer: High Node CPU for 1m
     console: Please check cpu load ,active 2m.

7 Prometheus配置告警规则引入

vim prometheus.yml
rule_files:
   - "rules/*_rules.yml"

systemctl restart prometheus

8 在某一个节点进行cpu压力测试


while [ 1 ];do : ;done 
如cpu多可以多起几个

9 页面查看alert

2d4e2b98e20bcab97110a3c7fefd2a13cef.jpg

现在事pending状态,过2分钟将会变成报警状态,因为我们设置的是2分钟

3671aa0a4d7c1f24b98e7321181a9a5d419.jpg

10 查看alertmanager页面

fec4b8e48c5beb3e31225f020cbfbaeb7e9.jpg

发现已经接受到告警

添加一条服务器down机规则

1)修改配置文件

[root@node1 rules]# cat node_alerts.yml 
groups:
- name: node_alerts
  rules:
  - alert: HighNodeCpuLoad
    expr: node_load1{job=~"aliyun"} > 1 
    for: 2m
    labels:
     severity: waring
    annotations:
     summer: High Node CPU for 2m
     console: Please check cpu load,active 2m
#一下内容添加 
  - alert: HostDown   
    expr: up{job="aliyun"} == 0
    for: 1m
    labels:
     severity: critical
    annotations:
     summary: Host {{ $labels.instance }} of {{ $labels.job }} is Down!   
     console: '110 吗?服务器挂了!!!!'

2)关闭一台被监控的节点

3)查看prometheus alert页面

81d825dd305e04aa7070b64c2b3c294f39b.jpg

a7601d4abb3f7c8b15a9b9d4bff0db62c10.jpg

4)查看Alertmanager告警页面

b2ab93342a61827fee10ccce76270a6e847.jpg

11 查看邮件

559973cbf0bccf6a060337286d03ab185c2.jpg

0e71f926808b1bb6460728280f8ac42581e.jpg

12 Alertmanager路由

路由匹配

每一个告警都会从配置文件中顶级的route进入路由树,需要注意的是顶级的route必须匹配所有告警(即不能有任何的匹配设置match和match_re),每一个路由都可以定义自己的接受人以及匹配规则。默认情况下,告警进入到顶级route后会遍历所有的子节点,直到找到最深的匹配route,并将告警发送到该route定义的receiver中。但如果route中设置continue的值为false,那么告警在匹配到第一个子节点之后就直接停止。如果continue为true,报警则会继续进行后续子节点的匹配。如果当前告警匹配不到任何的子节点,那该告警将会基于当前路由节点的接收器配置方式进行处理。其中告警的匹配有两种方式可以选择。一种方式基于字符串验证,通过设置match规则判断当前告警中是否存在标签labelname并且其值等于labelvalue。第二种方式则基于正则表达式,通过设置match_re验证当前告警标签的值是否满足正则表达式的内容。如果警报已经成功发送通知, 如果想设置发送告警通知之前要等待时间,则可以通过repeat_interval参数进行设置。

告警分组

Alertmanager可以对告警通知进行分组,将多条告警合合并为一个通知。这里我们可以使用group_by来定义分组规则。基于告警中包含的标签,如果满足group_by中定义标签名称,那么这些告警将会合并为一个通知发送给接收器。有的时候为了能够一次性收集和发送更多的相关信息时,可以通过group_wait参数设置等待时间,如果在等待时间内当前group接收到了新的告警,这些告警将会合并为一个通知向receiver发送。而group_interval配置,则用于定义相同的Gourp之间发送告警通知的时间间隔。

我们可以通过instance job 等标签进行分组并根据定义的告警的级别将告警发送给不同级别人员经行处理。编辑

1)编辑配置文件

[root@node1 alertmanager]# cat alertmanager.yml
global:
  resolve_timeout: 5m
  smtp_smarthost: 'x@x.com:25'
  smtp_from: 'xx@xx.com'
  smtp_auth_username: 'xxx'
  smtp_auth_password: '!xxxxx'
  smtp_require_tls: false

route:
  group_by: ['instance']
  group_wait: 30s
  group_interval: 1m
  repeat_interval: 5m
  receiver: 'lv1'
  routes:
  - match:
     severity: critical
    receiver: lv1
  - match_re:
     severity: ^(critical|warning)$
    receiver: lv2
receivers:
- name: 'lv1'
  email_configs:
  - to: 'xx@xxx.com'
- name: 'lv2'
  email_configs:
  - to: 'xxx@xxxx.com'

group_by: 根据 labael(标签)进行匹配,如果是多个,就要多个都匹配
group_wait: 30s 等待该组的报警,看有没有一起合伙搭车的
group_interval: 5m 下一次报警开车时间
repeat_interval: 3h 重复报警时间
注意:
新报警报警时间: 上一次报警之后的 group_interval 时间
重复的报警,下次报警时间为:group_interval + repeat_interval
其中 severity 级别分类是rules告警规则配置文件中定义的 在路由中进行分类

[root@node1 local]# cat prometheus/rules/node_alerts.yml 
groups:
- name: node_alerts
  rules:
  - alert: HighNodeCpuLoad
    expr: node_load1{job=~"aliyun"} > 1 
    for: 2m
    labels:
     severity: waring
    annotations:
     summer: High Node CPU for 2m
     console: Please check cpu load,active 2m
  - alert: HostDown
    expr: up{job="aliyun"} == 0
    for: 1m
    labels:
     severity: critical
    annotations:
     summary: Host {{ $labels.instance }} of {{ $labels.job }} is Down!   
     console: '110 吗?服务器挂了!!!!'

2)测试

目前我们监控了两台主机,我们将一台主机的cpu做一个压测,另外一台将器关机

查看proetheus alerts和alertmanager收到的告警信息

58450fe8454ab3d4e7b4383e042ce4a0d11.jpg

4550159babe6ef82f676af95e6bf3cbadc6.jpg

查看邮箱是否接受到邮件

7d7262ce6c12166606d16209897bf5f54c2.jpg

e51b5e1ee19399fb3bf38ab806dad71cce7.jpg

如果在过一段时间观察发现如果告警没有恢复将会重复告警。

13 告警静默设置

静默可以理解为屏蔽告警,当我们需要维护某一个被监控的实例由于一些操作可能会触发 监控告警,但是我们不需要接收到这些告警此时我们可以设置告警静默。

告警静默可以再UI页面上设置也可以通过命令行设置,我们这里只演示再页面上设置告警静默 4649889d6d24000f3111cd1161ac2f8af1b.jpg

91897d98015b35cd8c626fb114732ecbd3a.jpg

93c862dd6ff6c4624837081087d533aa51b.jpg

218e61a11e178f762f8f1f0731764270c71.jpg

转载于:https://my.oschina.net/54188zz/blog/3072978

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值