- 作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 •
- 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
- 个人主页:团儿.-CSDN博客
目录
前言:
正文:
Prometheus(普罗米修斯)
实验环境:
需要部署的组件:
##### 1)3个节点,全部部署node-EXporter,和cAdvisor.
//部署node-EXporter,收集硬件和系统信息。
验证:打开浏览器验证结果。
//部署安装cAdvisor,收集节点容器信息。
部署完成之后,打开浏览器验证。
##### 2)在docker01上部署Prometheus Server服务。
//重新运行prometheus容器。
浏览器访问验证。
##### 3)在docker01上,部署grafana服务,用来展示prometheus收集到的数据。
浏览器访问验证:
设置Grafana,添加数据来源(prometheus)
点击“DATA SOURCES”
选择“Prometheus”
选中一款模板,然后,我们有2种方式可以套用这个模板。
**第一种方式:通过JSON文件使用模板。**
**第二种导入模板的方式**:
grafana常用监控模板
1、监控物理机/虚拟机ID(Linux)
2、监控物理机/虚拟机ID(windows)
3、监控容器ID
4、监控数据库ID
5、监控网站或者协议端口ID
配置AlertManager
简单介绍一下主要配置的作用:
配置如下:
[root@docker1 ~]#
修改 AlertManager 启动命令,将本地 alertmanager.yml 文件挂载到容器内指定位置
### Prometheus 配置 AlertManager 告警规则
PS:该 rules 目的是监测 node 是否存活
然后,修改 prometheus.yml 配置文件,添加 rules 规则文件
此时在prometheus主页上可以看到相应规则
关闭某个node触发报警发送 Email
很开心和大家分享Prometheus的相关内容哦~
本实验所要用到的镜像在 ↓↓↓
通过网盘分享的文件:prometheus111
链接: https://pan.baidu.com/s/13v3efJo1QigSrWSVyvT6Ag 提取码: wudd
前言:
随着云计算和容器化技术的飞速发展,Docker已经成为现代软件开发和部署不可或缺的一部分。然而,随着Docker容器的广泛应用,如何高效地监控和管理这些容器成为了新的挑战。
在众多监控工具中,Prometheus凭借其强大的监控能力、灵活的告警机制以及丰富的数据可视化功能,逐渐成为Docker监控领域的佼佼者。Prometheus不仅可以实时监控Docker容器的运行状态、资源使用情况等关键信息,还可以对异常情况进行及时告警,为运维人员提供了极大的便利。
本文档将详细介绍如何使用Prometheus对Docker进行高效监控。我们将从Prometheus的基本概念入手,逐步深入讲解其安装、配置、使用以及与其他工具的集成方法。同时,我们还将结合实际应用场景,分享一些实用的监控技巧和最佳实践,帮助读者更好地掌握Prometheus在Docker监控中的应用。
希望本文档能够为广大Docker运维人员提供一份实用的指南,助力大家更好地应对Docker监控的挑战,提升系统的稳定性和可靠性。
正文:
Prometheus(普罗米修斯)
prometheus官方网站:https://prometheus.io/
Prometheus是由SoundCloud开发的开源监控系统的开源版本。2016年,由Google发起的Linux基金会(Cloud Native Computing Foundation,CNCF)将Prometheus纳入其第二大开源项目。Prometheus在开源社区也十分活跃
易管理性:
Prometheus: Prometheus核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
Nagios: 需要有专业的人员进行安装,配置和管理,并且过程很复杂。
业务数据相关性:
Prometheus:监控服务的运行状态,基于Prometheus丰富的Client库,用户可以轻松的在应用程序中添加对Prometheus的支持,从而让用户可以获取服务和应用内部真正的运行状态。
Nagios:大部分的监控能力都是围绕系统的一些边缘性的问题,主要针对系统服务和资源的状态以及应用程序的可用性。
另外Prometheus还存在以下优点:
高效:单一Prometheus可以处理数以百万的监控指标;每秒处理数十万的数据点。
易于伸缩:通过使用功能分区(sharing)+联邦集群(federation)可以对Prometheus进行扩展,形成一个逻辑集群;Prometheus提供多种语言的客户端SDK,这些SDK可以快速让应用程序纳入到Prometheus的监控当中。
良好的可视化:Prometheus除了自带有Prometheus UI,Prometheus还提供了一个独立的基于Ruby On Rails的Dashboard解决方案Promdash。另外最新的Grafana可视化工具也提供了完整的Proetheus支持,基于Prometheus提供的API还可以实现自己的监控可视化UI。
实验环境:
| 主机名称 | IP地址 | 安装组件 |
| -------- | ------------- | -------------------------------------------------- |
| docker1 | 192.168.8.10 | NodeEXporter、cAdvisor、Prometheus Server、Grafana |
| docker2 | 192.168.8.20 | NodeEXporter、cAdvisor |
| docker3 | 192.168.8.30 | NodeEXporter、cAdvisor |
全部关闭防火墙,禁用selinux。
需要部署的组件:
Prometheus Server: 普罗米修斯的主服务器。
NodeEXporter: 负责收集Host硬件信息和操作系统信息。
cAdvisor: 负责收集Host上运行的容器信息。
Grafana: 负责展示普罗米修斯监控界面。
##### 1)3个节点,全部部署node-EXporter,和cAdvisor.
//部署node-EXporter,收集硬件和系统信息。
docker run -d -p 9100:9100 --name exporter -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
PS: 注意,这里使用了--net=host,这样Prometheus Server可以直接与Node-EXporter通信。
验证:打开浏览器验证结果。
http://192.168.8.20:9100
//部署安装cAdvisor,收集节点容器信息。
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
部署完成之后,打开浏览器验证。
http://192.168.8.20:8080
##### 2)在docker01上部署Prometheus Server服务。
在部署prometheus之前,我们需要对它的配置文件进行修改,所以我们先运行一个容器,先将其配置文件拷贝出来。
docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
docker cp prometheus:/etc/prometheus/prometheus.yml /root
vim prometheus.yml
'localhost:9090','localhost:8080','localhost:9100','192.168.8.30:8080','192.168.8.30:9100','192.168.8.40:8080','192.168.8.40:9100'
PS: 这里指定了prometheus的监控项,包括它也会监控自己收集到的数据。
修改配置文件后删除掉前面开启的prometheus容器,因为我们已经得到配置文件并按照实际修改了,后面需要重新开启新的容器
docker rm -f prometheus
//重新运行prometheus容器。
docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
浏览器访问验证。
http://192.168.8.20:9090/targets
PS: 这里能够查看到我们各个监控项。
##### 3)在docker01上,部署grafana服务,用来展示prometheus收集到的数据。
mkdir /grafana-storage
chmod 777 -R /grafana-storage/
docker run -d -p 3000:3000 --name grafana -v /grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana
浏览器访问验证:
http://192.168.8.20:3000/login
用户名:admin
密码:123.com
设置Grafana,添加数据来源(prometheus)
点击“DATA SOURCES”
选择“Prometheus”
Name 选择Prometheus
URL 填写http://192.168.8.20:9090
拉到底点击 Save & Test
PS: 看到这个提示,说明prometheus和grafana服务的是正常连接的。
此时,虽然grafana收集到了数据,但怎么显示它,仍然是个问题,grafana支持自定义显示信息,不过要自定义起来非常麻烦,不过好在,grafana官方为我们提供了一些模板,来供我们使用。
grafana官网: https://grafana.com/
Grafana
Dashboards
Prometheus
Node Exporter for full
Download JSON
选中一款模板,然后,我们有2种方式可以套用这个模板。
**第一种方式:通过JSON文件使用模板。**
下载完成之后,来到grafana控制台
http://192.168.8.20:3000/datasources
点击左侧“+”,import ,upload JSON file
**第二种导入模板的方式**:
可以直接通过模板的ID 号。
11074 #监控节点信息
10619 #监控docker容器
grafana常用监控模板
1、监控物理机/虚拟机ID(Linux)
8919
9276
1860
12633
2、监控物理机/虚拟机ID(windows)
10467
10171
2129
3、监控容器ID
3146
8685
10000
8588
315
4、监控数据库ID
7362
10101
5、监控网站或者协议端口ID
http监控某个网站
icmp监控某台机器
tcp监控某个端口
dns监控dns
9965
Nginx
9614
2949
配置AlertManager
接下来,我们需要启动 AlertManager 来接受 Prometheus 发送过来的报警信息,并执行各
种方式的告警。同样以 Docker 方式启动 AlertManager,最简单的启动命令如下
docker run --name alertmanager -d -p 9093:9093 prom/alertmanager:latest
docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root
这里 AlertManager 默认启动的端口为 9093,启动完成后,浏览器访问 http://<IP>:9093 可以看到默认提供的 UI 页面,不过现在是没有任何告警信息的,因为我们还没有配置报警规则来触发报警。
URL:http://192.168.8.60:9093
AlertManager 配置邮件告警
AlertManager 默认配置文件为 alertmanager.yml,在容器内路为/etc/alertmanager/alertmanager.yml
简单介绍一下主要配置的作用:
- global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。
- route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。
- receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。
- inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。
那么,我们就来配置一下使用 Email 方式通知报警信息,这里以 QQ 邮箱为例,
当然在配置QQ邮箱之前,需要我们登录QQ邮箱,打开SMTP服务,并获取授权码。
配置如下:
[root@docker1 ~]#
vim alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '收件邮箱'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '收件邮箱'
smtp_auth_password: '认证密码'
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: '收件邮箱'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
PS: 以上模板中涉及的QQ邮箱换成自己的即可,授权码也一样。
修改 AlertManager 启动命令,将本地 alertmanager.yml 文件挂载到容器内指定位置
[root@docker1 ~]#
docker rm -f alertmanager
[root@docker01 ~]#
docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
### Prometheus 配置 AlertManager 告警规则
接下来,我们需要在 Prometheus 配置 AlertManager 服务地址以及告警规则,新建报警规则文件 node-up.rules 如下
mkdir -p /root/prometheus/rules
cd /root/prometheus/rules/
[root@docker1 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!"
PS:该 rules 目的是监测 node 是否存活
expr 为 PromQL 表达式验证特定节点 job="node-exporter" 是否活着,
for 表示报警状态为 Pending 后等待 15s 变成 Firing 状态,一旦变成 Firing 状态则将报警发送到 AlertManager,
labels 和 annotations 对该 alert 添加更多的标识说明信息,所有添加的标签注解信息,以及 prometheus.yml 中
该 job 已添加 label 都会自动添加到邮件内容中,更多关于 rule 详细配置可以参考
https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#rule
然后,修改 prometheus.yml 配置文件,添加 rules 规则文件
vim /root/prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.8.20:9093
rule_files:
- "/usr/local/prometheus/rules/*.rules"
PS:这里 rule_files 为容器内路径,需要将本地 node-up.rules 文件挂载到容器内指定路径,修改 Prometheus 启动命令如下,并重启服务。
docker rm -f prometheus
docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules:/usr/local/prometheus/rules --name prometheus --net=host prom/prometheus
此时在prometheus主页上可以看到相应规则
http://192.168.8.20:9090/targets
Status
Rules
关闭某个node触发报警发送 Email
期待您的关注~