prometheus alertmanager 监控系统部署

发布 : 2019-06-05 分类 : 运维 浏览 :

需求

公司原本使用的监控系统为open-falcon,但是由于后期要使用k8s及容器,所以经运维团队讨论将监控系统改为prometheus,在此记录下二进制方式部署过程。

版本

服务名 版本 下载地址
prometheus 2.20.1 下载页面
alertmanager 0.21.0 下载页面
node_exporter 1.0.1 下载页面

prometheus 安装

  • 1.下载安装
1
2
3
# wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz
# tar zxvf prometheus-2.20.1.linux-amd64.tar.gz
# mv prometheus-2.20.1.linux-amd64 /xdfapp/server/prometheus
  • 2.prometheus配置修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# cat prometheus.yml
global:
scrape_interval: 30s # 设定抓取数据的周期,默认为1min
evaluation_interval: 15s # 设定更新rules文件的周期,默认为1min
scrape_timeout: 15s # 设定抓取数据的超时时间,默认为10s
external_labels: # 额外的属性,会添加到拉取得数据并存到数据库中
monitor: 'codelab_monitor'

# Alertmanager配置
alerting:
alertmanagers:
- static_configs:
- targets: ["localhost:9093"] # 设定alertmanager和prometheus交互的接口,即alertmanager监听的ip地址和端口
#
# rule配置,首次读取默认加载,之后根据evaluation_interval设定的周期加载
rule_files:
- /xdfapp/server/prometheus/config/rules
- /xdfapp/server/prometheus/config/alert


scrape_configs:
- job_name: online node # 节点名
metrics_path: '/metrics' # 获取数据的路径 http://x.x.x.x:9100/metrics
file_sd_configs:
- files:
- /xdfapp/server/prometheus/config/host/*.yaml #读取该目录下所有yaml后缀的配置内容,此处兼容json及yaml格式
refresh_interval: 1m # 刷新频率,1 分钟
  • 3.服务启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
封装下centos7下service配置

# cat /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
[Service]
# 以下配置根据实际情况修改
ExecStart=/xdfapp/server/prometheus/prometheus \
--log.level=debug \
--storage.tsdb.path=/xdfapp/data/prometheus-tsdb \
--config.file=/xdfapp/server/prometheus/prometheus.yml \
--web.enable-lifecycle \
--web.console.libraries=/xdfapp/server/prometheus/console_libraries \
--web.console.templates=/xdfapp/server/prometheus/consoles
User=web

[Install]
WantedBy=multi-user.target

注:

–web.enable-lifecycle: 启用prometheus通过HTTP请求,shutdown或reload的功能。 例如reload:curl http://127.0.0.1:9090/-/reload

将配置中的目录创建好,并修改对应权限

1
2
3
# mkdir /xdfapp/data/prometheus-tsdb 
# chown -R web:web /xdfapp/data/prometheus-tsdb
# touch /xdfapp/server/prometheus/config/{alerts,rules}

启动服务,并添加自启动

1
2
3
# systemctl daemon-reload
# systemctl start prometheus
# systemctl enable prometheus

prometheus基本部署完成,可以访问试一下

alertmanager 安装

  • 1.下载安装
1
2
3
# wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
# tar zxvf alertmanager-0.21.0.linux-amd64.tar.gz
# mv alertmanager-0.21.0.linux-amd64 /xdfapp/server/alertmanager
  • 2.配置修改

主配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#  cat /xdfapp/server/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m #处理超时时间,默认为5min,告警事件在这个时间内没有解决就会告警
smtp_smarthost: 'smtp.exmail.qq.com:587' # 邮箱smtp服务器代理
smtp_from: 'xxxxx' # 发送邮箱名称
smtp_auth_username: 'xxxxx@xxx' # 邮箱名称
smtp_auth_password: 'xxxx' # 邮箱密码或授权码
# 通知模板路径
templates:
- '/xdfapp/server/alertmanager/config/*.html'

# 定义路由树信息
route:
group_by: [node] # 报警分组依据,即匹配prometheus中的rules配置。
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 10s # 在发送新警报前的等待时间,与group中的resolve_timeout一致
repeat_interval: 8h # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'default-receiver' # 发送警报的接收者的名称,以下receivers name的名称,总路由一般都是指向默认接收者
# 以下为子路由
routes:
- receiver: 'online'
group_by: ['online']
continue: true # 此处如果为false那么匹配到此路由后,后面的子路由不在匹配
group_wait: 10s
repeat_interval: 8h
match_re:
alertGroup: online # 匹配labels,match_re正则匹配, “|” 可匹配多个条件 match匹配字符串
- receiver: 'qa'
group_by: ['qa']
match_re:
alertGroup: qa # 匹配labels,match_re正则匹配, “|” 可匹配多个条件 match匹配字符串
- receiver: 'other'
group_by: ['other']
match_re:
alertGroup: other

# 定义告警接收者信息
receivers:
- name: 'default-receiver' # 警报
email_configs: # 邮箱配置
- to: 'xxx@xxx.cn' # 接收警报的email配置
html: '{{ template "alert-table.html" . }}' # 设定邮箱的内容模板
headers: { Subject: "[{{ .Status }}] Prometheus报警邮件"} # 接收邮件的标题
send_resolved: true # 恢复告警通知,默认不会发送

邮件告警模板,告警模板可根据实际情况调整

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#  cat /xdfapp/server/alertmanager/config/alert-table.html
{{ define "alert-table.html" }}
{{ if eq .Status "firing" }}
告警总数:{{ .Alerts.Firing | len }} 条,其中告警状态为firing为异常状态,resolved为恢复告警
<table border="1">
<tr>
<td>报警项</td>
<td>实例</td>
<td>告警状态</td>
<td>报警内容</td>
<td>开始时间</td>
</tr>
{{ range $i, $alert := .Alerts.Firing }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Annotations "summary" }}</td>
<td>{{ .Status }}</td>
<td>{{ index $alert.Annotations "description" }}</td>
<td>{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</td>
</tr>
{{ end }}
</table>
{{ end }}

{{ if eq .Status "resolved" }}
恢复告警共:{{ .Alerts.Resolved | len }}条
<table border="1">
<tr>
<td>恢复项</td>
<td>实例</td>
<td>告警状态</td>
<td>恢复内容</td>
<td>开始时间</td>
<td>恢复时间</td>
</tr>
{{ range $i, $alert := .Alerts.Resolved }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Annotations "summary" }}</td>
<td>{{ .Status }}</td>
<td>{{ index $alert.Annotations "description" }}</td>
<td>{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</td>
<td>{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</td>
</tr>
{{ end }}
</table>
{{ end }}
{{ end }}

  • 3.服务启动

封装下centos7的service配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# cat /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
After=network.target
[Service]
ExecStart=/xdfapp/server/alertmanager/alertmanager \
--config.file=/xdfapp/server/alertmanager/alertmanager.yml \
--storage.path=/xdfapp/data/alertmanager \
--web.external-url=http://alert.xxx.cn # 此处写域名或ip:port
User=web

[Install]
WantedBy=multi-user.target

将以上配置中的目录创建好

1
2
3
# mkdir /xdfapp/data/alertmanager
# chown -R web:web /xdfapp/data/alertmanager
#

启动服务,并添加自启动

1
2
3
# systemctl daemon-reload
# systemctl start alertmanager
# systemctl enable alertmanager

alertmanager 已经基本配置完成~

node_exporter 安装

node_export是prometheus官方提供的主机基础监控agent,例如磁盘,cpu,内存等一些基础监控,更多官网推荐的export:点击跳转

  • 1.下载安装

    1
    2
    3
    # wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
    # tar zxvf node_exporter-1.0.1.linux-amd64.tar.gz
    # mv node_exporter-1.0.1.linux-amd64 /xdfapp/monitor/node_exporter
  • 2.配置启动

1
2
3
4
5
6
7
8
9
10
# cat /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
ExecStart=/xdfapp/monitor/node_exporter/node_exporter
User=web

[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
# systemctl start node_exporter.service
# systemctl enable node_exporter.service
```

# 联调测试

- 1.将启动的node_export添加到prometheus监控主机中

>安装prometheus时我们配置了以文件方式的自动发现机制,我们把要监控的主机,添加到配置中

cat >> /xdfapp/server/prometheus/config/host/online.yaml <<EOF

  • labels:
    service: op-prometheus-4
    environment: online
    targets:
    • 10.10.9.4:9100
      EOF
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      > 配置中的labels可以以key:value的方式自定义,方便通过labels实现不同的路由告警规则

      访问prometheus的targets页面,应该可以看到我们新添加的主机(不太方便贴图,就不贴图了。。) http://10.10.9.4:9090/targets#job-online%20node

      - 2.添加告警规则
      > prometheus
      ```shell
      # cat > /xdfapp/server/prometheus/config/alert <<EOF
      groups:
      - name: node
      rules:
      - alert: "node_exproter未启动"
      expr: up{environment="online"} == 0
      for: 5m
      labels:
      severity: critical
      annotations:
      summary: "{{.instance}}"
      description: "请检查{{ .instance }}服务器是否宕机."
      EOF

重启加载下配置

1
# curl -d POST 127.0.0.1:9090/-/reload

将node_export停止,然后访问prometheus的alerts页面,应该可以看到有告警提示,prometheus发现告警会有三个状态:pending > inactive > firing ,当告警处于firing状态,应该已经将警告通知到alertmanager,并由alertmanager通知到用户了

查收下邮件,如果收到告警邮件则部署成功。

参考文档

这个文档非常详细:https://www.prometheus.wang/

本文作者 : WGY
原文链接 : http://geeklive.cn/2019/06/05/prometheus/undefined/prometheus/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
留下足迹