Docker一键部署prometheus并飞书告警
- 一、安装docker
- 二、安装部署prometheus
- 三、飞书告警
- 四、prometheus告警机制的核心部分-解释说明
- 五、手动测试
-
- 1、重启alertmanager容器
- [2、手动杀死node exporter](#2、手动杀死node exporter)
- 3、查看容器
- 4、网页查看状态
一、安装docker
1、上传压缩包
- 通过xftp上传docker压缩包至/opt/software下
bash
[root@hadoop105 software]# ll
total 361032
-rw-r--r-- 1 root root 86397507 Sep 19 21:35 docker-20.10.5-install.tar.gz
2、解压
bash
[root@hadoop105 software]# tar -xzvf docker-20.10.5-install.tar.gz -C /opt/module/
docker-20.10.5-install/
docker-20.10.5-install/docker-20.10.5.tgz
docker-20.10.5-install/docker
docker-20.10.5-install/docker-compose-v2.20.3
docker-20.10.5-install/docker.service
docker-20.10.5-install/install.sh
docker-20.10.5-install/daemon.json
docker-20.10.5-install/daemon.json.bak
You have new mail in /var/spool/mail/root
3、执行脚本
- 进入/opt/module/docker目录下
bash
[root@hadoop105 docker-20.10.5-install]# ll
total 125664
-rw-r--r-- 1 root root 259 May 23 10:11 daemon.json
-rw-r--r-- 1 root root 447 May 23 10:11 daemon.json.bak
-rw-r--r-- 1 root root 117176 Jun 18 2024 docker
-rw-r--r-- 1 root root 69158342 Jun 18 2024 docker-20.10.5.tgz
-rw-r--r-- 1 root root 59383631 Jun 18 2024 docker-compose-v2.20.3
-rw-r--r-- 1 root root 443 Jun 18 2024 docker.service
-rwxr-xr-x 1 root root 719 Apr 29 14:11 install.sh
[root@hadoop105 docker-20.10.5-install]# sh install.sh
docker/
docker/docker-init
docker/docker
docker/containerd-shim
docker/ctr
docker/docker-proxy
docker/runc
docker/containerd-shim-runc-v2
docker/containerd
docker/dockerd
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
Client: Docker Engine - Community
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:14:11 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.5
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 363e9a8
Built: Tue Mar 2 20:18:31 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Docker Compose version v2.20.3
二、安装部署prometheus
1、上传prometheus-feishu压缩包
bash
[root@hadoop105 software]# ll
total 361032
-rw-r--r-- 1 root root 86397507 Sep 19 21:35 docker-20.10.5-install.tar.gz
-rw-r--r-- 1 root root 283293814 Sep 19 21:35 prometheus-feishu.tar.gz
2、解压
bash
[root@hadoop105 software]# tar -xzvf prometheus-feishu.tar.gz -C /opt/module/
3、加载镜像
- 进入/opt/module/prometheus-feishu/shell路径下
bash
[root@hadoop105 module]# cd prometheus-feishu/
[root@hadoop105 prometheus-feishu]# ll
total 8
drwxr-xr-x 2 root root 30 Mar 19 2024 alertmanager
-rwxr-xr-x 1 root root 1624 Mar 19 2024 docker-compose.yaml
drwxr-xr-x 3 root root 18 Mar 19 2024 grafana
drwxr-xr-x 2 root root 162 Mar 19 2024 images
drwxr-xr-x 4 root root 32 Mar 19 2024 prometheus
drwxr-xr-x 4 root root 28 Mar 19 2024 prometheus-alert
-rw-r--r-- 1 root root 242 Mar 19 2024 readme.txt
drwxr-xr-x 2 root root 58 Mar 19 2024 shell
[root@hadoop105 prometheus-feishu]# cd shell/
[root@hadoop105 shell]# ll
total 8
-rwxr-xr-x 1 root root 324 Mar 19 2024 prometheus-load.sh
-rwxr-xr-x 1 root root 461 Mar 19 2024 prometheus-save.sh
[root@hadoop105 shell]# pwd
/opt/module/prometheus-feishu/shell
[root@hadoop105 shell]# sh prometheus-load.sh
4、修改文件夹名称
bash
[root@hadoop105 module]# mv prometheus-feishu/ prometheus
5、docker-compose启动容器
- 确保当前目录包含 docker-compose.yml 文件。
bash
[root@hadoop105 prometheus]# docker-compose up -d
[+] Running 4/4
✔ node-exporter 3 layers [⣿⣿⣿] 0B/0B Pulled 19.0s
✔ 9fa9226be034 Pull complete 0.7s
✔ 1617e25568b2 Pull complete 0.7s
✔ c6e37428e3b3 Pull complete 2.2s
[+] Running 6/6
✔ Network prometheus_default Created 0.1s
✔ Container prometheus-alert Started 0.1s
✔ Container prometheus Started 0.1s
✔ Container node-exporter Started 0.1s
✔ Container grafana Started 0.1s
✔ Container alertmanager Started 0.1s
You have new mail in /var/spool/mail/root
6、查看容器
bash
[root@hadoop105 prometheus]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cdc172d294c prom/alertmanager "/bin/alertmanager -..." About a minute ago Up About a minute 0.0.0.0:9093->9093/tcp alertmanager
7eb4f87f4031 prom/prometheus "/bin/prometheus --c..." About a minute ago Up About a minute 0.0.0.0:9090->9090/tcp prometheus
4c2e9aced851 grafana/grafana "/run.sh" About a minute ago Up About a minute 0.0.0.0:3000->3000/tcp grafana
aa3835c67861 prom/node-exporter "/bin/node_exporter" About a minute ago Up About a minute 0.0.0.0:9100->9100/tcp node-exporter
40c955b63e59 feiyu563/prometheus-alert:v4.6.1 "/bin/sh /app/docker..." About a minute ago Up About a minute (healthy) 0.0.0.0:9094->8080/tcp prometheus-alert
You have new mail in /var/spool/mail/root
7、浏览器访问
- 192.168.2.105:9090
三、飞书告警
1、进入容器修改配置文件
bash
[root@hadoop105 prometheus]# docker exec -it prometheus-alert /bin/sh
/app # vi conf/app.conf
/app # exit

2、重启容器
bash
[root@hadoop105 prometheus]# docker restart prometheus-alert
prometheus-alert
综上,prometheus告警已配置好
四、prometheus告警机制的核心部分-解释说明
- 告警规则 在/opt/module/prometheus/prometheus/config/rules.yml里
- 作用:这是 Prometheus 服务器本身的告警规则配置,用于定义何时触发告警。
expr: up == 0 :up 是 Prometheus 内置的监控指标(1 表示实例存活,0 表示宕机),这里表示 "当实例宕机(up=0)时"。
for: 15s :避免瞬时抖动,只有当 "宕机状态持续 15 秒" 才会真正触发告警。
labels 和 annotations:给告警添加标签(用于分类)和描述信息(用于展示具体内容)。
bash
[root@hadoop105 config]# cd /opt/module/prometheus/prometheus/config/
[root@hadoop105 config]# ll
total 8
-rw-r--r-- 1 root root 583 Sep 20 13:33 prometheus.yml
-rw-r--r-- 1 root root 246 Sep 20 13:57 rules.yml
[root@hadoop105 config]# cat rules.yml
groups:
- name: 实例存活报警
rules:
- alert: 服务器宕机报警
expr: up == 0 # 表达式:监控指标up的值为0时触发
for: 15s # 持续时间:该状态持续15秒后才发送告警
labels:
severity: emergency # 告警级别:紧急
level: critical # 自定义标签:严重
annotations:
description: '服务器 {{ $labels.instance }}宕机' # 告警描述,包含实例信息
- 告警管理器配置
在/opt/module/prometheus/alertmanager/alertmanager.yml里 - 作用:这是 Alertmanager 的配置,用于处理 Prometheus 触发的告警(如分组、去重、路由、发送到指定渠道)。
route :定义告警的路由规则,包括如何分组、发送时机、重复频率等。
receivers:定义告警的接收方式,这里配置了一个 WebHook 地址,用于将告警发送到飞书机器人(通过 feishu.cn 域名可看出)。
bash
[root@hadoop105 alertmanager]# vim alertmanager.yml
global:
resolve_timeout: 5m # 告警恢复后,等待5分钟确认后发送"恢复通知"
route:
group_by: ['instance'] # 按instance(实例)分组告警
group_wait: 30s # 同一组内第一个告警触发后,等待30s再发送(可能合并同组新告警)
group_interval: 60s # 同一组内两次告警的间隔时间
repeat_interval: 5m # 同一告警重复发送的间隔(避免刷屏)
receiver: 'web.hook.prometheusalert' # 默认接收者
receivers:
- name: 'web.hook.prometheusalert' # 接收者名称
webhook_configs:
- url: 'http://192.168.2.102:9094/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.feishu.cn/open-apis/bot/v2/hook/290f7aee-879b-4be1-9576-123' # 告警发送到的WebHook地址(这里是飞书机器人)
-
- 这是
prometheusalert
服务的部署地址和端口。
- 这是
-
prometheusalert
是一个第三方告警转发工具,用于将 Prometheus/Alertmanager 的告警转换为各种平台(如飞书、钉钉、企业微信等)的消息格式。
-
/prometheusalert
-
- 是 prometheusalert 服务提供的接口路径,用于接收 Alertmanager 发送的告警请求。
查询参数(? 后面的部分)
- 是 prometheusalert 服务提供的接口路径,用于接收 Alertmanager 发送的告警请求。
-
type=fs
:指定告警接收平台为 "飞书"(fs 是飞书 Feishu 的缩写)。 -
tpl=prometheus-fs
:指定使用的消息模板名称为 prometheus-fs,用于格式化告警内容(如标题、正文结构等)。
-
fsurl=https://open.feishu.cn/...:
飞书机器人的 WebHook 地址,是实际接收告警消息的终点。
这个地址由飞书机器人创建时生成,用于标识具体的接收群组 / 机器人(类似 "收件地址")。
-
两者的联系
工作流程衔接:
Prometheus 按照第一段配置的规则(如 "服务器宕机")检测到异常,生成告警并发送给Alertmanager。
Alertmanager 按照第二段配置的规则(如分组、重复频率)处理告警,最终通过 WebHook 发送到飞书。
五、手动测试
1、重启alertmanager容器
- 因为上面修改了收件人地址url,因此要重启下容器
bash
[root@hadoop105 alertmanager]# docker restart alertmanager
alertmanager
2、手动杀死node exporter
bash
[root@hadoop105 alertmanager]# docker stop node-exporter
node-exporter
3、查看容器
bash
[root@hadoop105 alertmanager]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cdc172d294c prom/alertmanager "/bin/alertmanager -..." 45 minutes ago Up 2 minutes 0.0.0.0:9093->9093/tcp alertmanager
7eb4f87f4031 prom/prometheus "/bin/prometheus --c..." 45 minutes ago Up 45 minutes 0.0.0.0:9090->9090/tcp prometheus
4c2e9aced851 grafana/grafana "/run.sh" 45 minutes ago Up 45 minutes 0.0.0.0:3000->3000/tcp grafana
40c955b63e59 feiyu563/prometheus-alert:v4.6.1 "/bin/sh /app/docker..." 45 minutes ago Up 32 minutes (healthy) 0.0.0.0:9094->8080/tcp prometheus-alert
4、网页查看状态
- 可以看到此时的node exporter爆红了,我们也就收到告警了