Docker一键部署prometheus并实现飞书告警详解
Docker一键部署prometheus并飞书告警
- 一、安装docker
- 1、上传压缩包
- 2、解压
- 3、执行脚本
- 二、安装部署prometheus
- 1、上传prometheus-feishu压缩包
- 2、解压
- 3、加载镜像
- 4、修改文件夹名称
- 5、docker-compose启动容器
- 6、查看容器
- 7、浏览器访问
- 三、飞书告警
- 1、进入容器修改配置文件
- 2、重启容器
- 四、prometheus告警机制的核心部分-解释说明
- 五、手动测试
- 1、重启alertmanager容器
- 2、手动杀死node exporter
- 3、查看容器
- 4、网页查看状态
一、安装docker
1、上传压缩包
- 通过xftp上传docker压缩包至/opt/software下
[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、解压
[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目录下
[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 - CommunityVersion: 20.10.5API version: 1.41Go version: go1.13.15Git commit: 55c4c88Built: Tue Mar 2 20:14:11 2021OS/Arch: linux/amd64Context: defaultExperimental: trueServer: Docker Engine - CommunityEngine:Version: 20.10.5API version: 1.41 (minimum version 1.12)Go version: go1.13.15Git commit: 363e9a8Built: Tue Mar 2 20:18:31 2021OS/Arch: linux/amd64Experimental: falsecontainerd:Version: v1.4.3GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939brunc:Version: 1.0.0-rc93GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdecdocker-init:Version: 0.19.0GitCommit: de40ad0
Docker Compose version v2.20.3
二、安装部署prometheus
1、上传prometheus-feishu压缩包
[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、解压
[root@hadoop105 software]# tar -xzvf prometheus-feishu.tar.gz -C /opt/module/
3、加载镜像
- 进入/opt/module/prometheus-feishu/shell路径下
[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、修改文件夹名称
[root@hadoop105 module]# mv prometheus-feishu/ prometheus
5、docker-compose启动容器
- 确保当前目录包含 docker-compose.yml 文件。
[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、查看容器
[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、进入容器修改配置文件
[root@hadoop105 prometheus]# docker exec -it prometheus-alert /bin/sh
/app # vi conf/app.conf
/app # exit
2、重启容器
[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:给告警添加标签(用于分类)和描述信息(用于展示具体内容)。
[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 域名可看出)。
[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地址(这里是飞书机器人)
-
http://192.168.2.102:9094
-
- 这是
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,因此要重启下容器
[root@hadoop105 alertmanager]# docker restart alertmanager
alertmanager
2、手动杀死node exporter
[root@hadoop105 alertmanager]# docker stop node-exporter
node-exporter
3、查看容器
[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爆红了,我们也就收到告警了