使用prometheus的特性
易管理性
Prometheus核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储
不依赖分布式存储,单服务器节点是自治的
高效
单一Prometheus可以处理数以百万的监控指标;每秒处理数十万
的数据点
易于伸缩
Prometheus提供多种语言 的客户端SDK,这些SDK可以快速让应用程序纳入到Prometheus的监控当中
通过服务发现或静态配置发现目标
良好的可视化
除了自带的可视化web界面,还有另外最新的Grafana可视化工具也提供了完整的Proetheus支持,基于 Prometheus提供的API还可以实现自己的监控可视化UI
docker搭建prometheus监控
环境:
全部关闭防火墙,禁用selinux
主机 | IP | 安装组件 |
machine | 172.16.46.111 | NodeEXporter、cAdvisor、 Prometheus Server、Grafana |
node01 | 172.16.46.112 | NodeEXporter、cAdvisor |
node02 | 172.16.46.113 | NodeEXporter、cAdvisor |
安装prometheus组件说明:
1
2
3
4
5
|
Prometheus Server: 普罗米修斯的主服务器,端口号9090 NodeEXporter: 负责收集Host硬件信息和操作系统信息,端口号9100 cAdvisor:负责收集Host上运行的容器信息,端口号占用8080 Grafana:负责展示普罗米修斯监控界面,端口号3000 altermanager:等待接收prometheus发过来的告警信息,altermanager再发送给定义的收件人 |
部署node-EXporter,收集硬件和系统信息
1
2
|
#3台主机都要安装 docker run -d -p 9100:9100 <br>-v /proc:/host/proc <br>-v /sys:/host/sys <br>-v /:/rootfs <br>--net=host prom/node-exporter <br>--path.procfs /host/proc <br>--path.sysfs /host/sys <br>--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)" |
PS:注意,为了网络的高效率,我们的网络使用的是host
验证收集效果
部署安装cAdvisor,收集节点容器信息
1
2
|
#3台都要安装 docker run -v /:/rootfs:ro -v / var /run:/ var /run/:rw -v /sys:/sys:ro -v / var /lib/docker:/ var /lib/docker:ro -p 8080:8080 --detach= true --name=cadvisor --net=host google/cadvisor |
验证收集效果传递
部署prometheus-server服务
部署prometheus-server服务
先启动一个prometheus服务,目的是复制他的配置文件,修改配置文件,prometheus挂载这个文件
1
2
3
4
5
6
|
mkdir /prometheus docker run -d --name test -P prom/prometheus docker cp test:/etc/prometheus/prometheus.yml /prometheus #编辑prometheus配置文件,在static_configs下面修改为 #以下添加的ip都将会被监控起来 - targets: [ 'localhost:9090' , 'localhost:8080' , 'localhost:9100' , '172.16.46.112:8080' , '172.16.46.112:9100' , '172.16.46.113:8080' , '172.16.46.113:9100' ] |
重新运行prometheus服务
收集cAdvisor和nodexporter的信息到prometheus
1
2
|
docker rm -f test docker run -d --name prometheus --net host -p 9090:9090 -v /prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus |
访问测试
进入首页会看到
在这里会出现简单的图形展示,和显然,这样看的话还得根据条件筛选着看,而且界面很简单,所以我们还要接入grafana
在prometheus服务器上部署grafana
grafana主要概念
- 插件:扩展功能作用,完成不能完成的事
- 数据源:连接数据源,通过数据源提供数据 来出图
- dashboard:展示面板,出什么样的图
grafana在zabbix应用参考: https://blog.csdn.net/weixin_43815140/article/details/106109605
grafana
1
2
3
|
mkdir /grafana chmod 777 -R /grafana docker run -d -p 3000:3000 --name grafana -v /grafana:/ var /lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana |
访问测试
默认的用户名和密码:admin/123.com
看到以上说明连接成功,不过还需要dashboard来展示图案
prometheus提供3种自带的方案
grafana官网提供了更多的模板让我们选择 官网模板根据我们的需求可以在官网挑选一款合适自己环境的模板不是很难。

不过这只是监控的宿主机资源信息,如果我们想看docker容器的信息
在官网查找与docker有关的模板导入并使用
找到一款全部适合的(ID:11600)
配置Alertmanager报警
启动 AlertManager 来接受 Prometheus 发送过来的报警信息,并执行各种方式的报警。
alertmanager与prometheus工作流程如下
- prometheus收集监测的信息
- prometheus.yml文件定义rules文件,rules里包括了告警信息
- prometheus把报警信息push给alertmanager ,alertmanager里面有定义收件人和发件人
- alertmanager发送文件给邮箱或微信
告警等级

同样以 Docker 方式启动 AlertManager
同prometheus一样,先启动一个test容器,拷贝下来alertmanager的配置文件
1
2
3
4
|
mkdir /alertmanager docker run -d --name test -p 9093:9093 prom/alertmanager docker cp test:/etc/alertmanager/alertmanager.yml /alertmanager cp alertmanager.yml alertmanager.yml.bak<br> //AlertManager 默认配置文件为 alertmanager.yml,在容器内路径为<code>/etc/alertmanager/alertmanager.yml</code> |
这里 AlertManager
默认启动的端口为 9093,启动完成后,浏览器访问http://:9093 可以看到默认提供的 UI 页面,不过现在是没有任何告警信息的,因为我们还没有配置报警规则来触发报警

配置alertmanager邮箱报警
查看alertmanager的配置文件
1
2
3
4
5
|
简单介绍一下主要配置的作用:简单介绍一下主要配置的作用: global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。 route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。 receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。 inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的报警(目标)。 |
配置邮箱报警,首先我们邮箱需要开启SMTP服务,并获取唯一标识码

编辑alertmanager.yml文件
编辑报警媒介等相关信息
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
|
global: resolve_timeout: 5m smtp_from: 'Sunny_lzs@foxmail.com' #定义发送的邮箱 smtp_smarthost: 'smtp.qq.com:465' smtp_auth_username: 'Sunny_lzs@foxmail.com' smtp_auth_password: 'iwxrdwmdgofdbbdc' smtp_require_tls: false smtp_hello: 'qq.com' route: group_by: [ 'alertname' ] group_wait: 5s group_interval: 5s repeat_interval: 5m receiver: 'email' receivers: - name: 'email' email_configs: - to: 'Sunny_lzs@foxmail.com' #定义接收的邮箱 send_resolved: true inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: [ 'alertname' , 'dev' , 'instance' ] |
重启alertmanager容器
1
2
|
docker rm -f test docker run -d --name alertmanager -p 9093:9093 -v /alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager |
接下来,我们需要在 Prometheus 配置 AlertManager 服务地址以及告警规则,新建报警规则文件 node-up.rules
如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mkdir /prometheus/rules cd /prometheus/rules vim node-up.rules groups: - name: node-up rules: - alert: node-up expr: up{job= "prometheus" } == 0 for : 15s labels: severity: 1 team: node annotations: summary: "{{ $labels.instance }} 已停止运行超过 15s!" |
修改prometheus.yml文件,添加rules规则

1
|
PS:这里 rule_files 为容器内路径,需要将本地 node-up.rules 文件挂载到容器内指定路径,修改 Prometheus 启动命令如下,并重启服务。 |
1
2
|
docker rm -f prometheus docker run -d --name prometheus -p 9090:9090 -v /prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /prometheus/rules:/usr/local/prometheus/rules --net host prom/prometheus |
在prometheus上查看相应的规则
触发报警发送邮件
关掉其中一个服务就ok
1
2
3
4
5
6
|
[root@docker02 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8d1cc177b58e google/cadvisor "/usr/bin/cadvisor -…" 4 hours ago Up 4 hours cadvisor b2417dbd850f prom/node-exporter "/bin/node_exporter …" 4 hours ago Up 4 hours gallant_proskuriakova [root@docker02 ~]# docker stop 8d1cc177b58e 8d1cc177b58e |
Alertmanager自定义邮件报警
上面虽然已经可以做出报警,但是我们想让报警信息更加直观一些
alertmanager支持自定义邮件模板的
首先新建一个模板文件 email.tmpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
mkdir /alertmanager/template vim email.tmpl {{ define "email.from" }}Sunny_lzs@foxmail.com{{ end }} {{ define "email.to" }}Sunny_lzs@foxmail.com{{ end }} {{ define "email.to.html" }} {{ range .Alerts }} =========start==========<br> 告警程序: prometheus_alert<br> 告警级别: {{ .Labels.severity }} 级<br> 告警类型: {{ .Labels.alertname }}<br> 故障主机: {{ .Labels.instance }}<br> 告警主题: {{ .Annotations.summary }}<br> 触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br> =========end==========<br> {{ end }} {{ end }} |
修改alertmanager文件

重建altermanager
1
2
|
[root@docker01 ~]# docker rm -f alertmanager [root@docker01 ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /alertmanager/template:/etc/alertmanager-tmpl prom/alertmanager |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)