Docker监控新纪元:Prometheus引领高效容器监控革命

ops/2024/12/22 1:10:02/

  • 作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 •
  • 座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
  • 个人主页:团儿.-CSDN博客

目录

前言:

正文:

Prometheus(%E6%99%AE%E7%BD%97%E7%B1%B3%E4%BF%AE%E6%96%AF)-toc" style="margin-left:0px;">Prometheus(普罗米修斯)

实验环境:

需要部署的组件:

##### 1)3个节点,全部部署node-EXporter,和cAdvisor.

//部署node-EXporter,收集硬件和系统信息。

验证:打开浏览器验证结果。

//部署安装cAdvisor,收集节点容器信息。

部署完成之后,打开浏览器验证。

docker01%E4%B8%8A%E9%83%A8%E7%BD%B2Prometheus%20Server%E6%9C%8D%E5%8A%A1%E3%80%82-toc" style="margin-left:80px;">##### 2)在docker01上部署Prometheus Server服务。

//重新运行prometheus容器。

浏览器访问验证。

docker01%E4%B8%8A%EF%BC%8C%E9%83%A8%E7%BD%B2grafana%E6%9C%8D%E5%8A%A1%EF%BC%8C%E7%94%A8%E6%9D%A5%E5%B1%95%E7%A4%BAprometheus%E6%94%B6%E9%9B%86%E5%88%B0%E7%9A%84%E6%95%B0%E6%8D%AE%E3%80%82-toc" style="margin-left:80px;">##### 3)在docker01上,部署grafana服务,用来展示prometheus收集到的数据。

浏览器访问验证:

设置Grafana,添加数据来源(prometheus)

点击“DATA SOURCES”

Prometheus%E2%80%9D-toc" style="margin-left:160px;">选择“Prometheus

选中一款模板,然后,我们有2种方式可以套用这个模板。

​**第一种方式:通过JSON文件使用模板。**

**第二种导入模板的方式**:

grafana常用监控模板

1、监控物理机/虚拟机ID(Linux)

2、监控物理机/虚拟机ID(windows)

3、监控容器ID

4、监控数据库ID

5、监控网站或者协议端口ID

配置AlertManager

简单介绍一下主要配置的作用:

配置如下:

docker1%20~%5D%23-toc" style="margin-left:120px;">[root@docker1 ~]#

修改 AlertManager 启动命令,将本地 alertmanager.yml 文件挂载到容器内指定位置

Prometheus%20%E9%85%8D%E7%BD%AE%20AlertManager%20%E5%91%8A%E8%AD%A6%E8%A7%84%E5%88%99-toc" style="margin-left:80px;">### 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(%E6%99%AE%E7%BD%97%E7%B1%B3%E4%BF%AE%E6%96%AF)">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

docker01%E4%B8%8A%E9%83%A8%E7%BD%B2Prometheus%20Server%E6%9C%8D%E5%8A%A1%E3%80%82">##### 2)在docker01上部署Prometheus Server服务。

在部署prometheus之前,我们需要对它的配置文件进行修改,所以我们先运行一个容器,先将其配置文件拷贝出来。

docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheusdocker 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: 这里能够查看到我们各个监控项。

docker01%E4%B8%8A%EF%BC%8C%E9%83%A8%E7%BD%B2grafana%E6%9C%8D%E5%8A%A1%EF%BC%8C%E7%94%A8%E6%9D%A5%E5%B1%95%E7%A4%BAprometheus%E6%94%B6%E9%9B%86%E5%88%B0%E7%9A%84%E6%95%B0%E6%8D%AE%E3%80%82">##### 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%E2%80%9D">选择“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:latestdocker 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服务,并获取授权码。

配置如下:

docker1%20~%5D%23">[root@docker1 ~]#
vim alertmanager.yml
global:resolve_timeout: 5msmtp_from: '收件邮箱'smtp_smarthost: 'smtp.qq.com:465'smtp_auth_username: '收件邮箱'smtp_auth_password: '认证密码'smtp_require_tls: falsesmtp_hello: 'qq.com'
route:group_by: ['alertname']group_wait: 5sgroup_interval: 5srepeat_interval: 5mreceiver: '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%20%E9%85%8D%E7%BD%AE%20AlertManager%20%E5%91%8A%E8%AD%A6%E8%A7%84%E5%88%99">### 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-uprules:- alert: node-upexpr: up{job="prometheus"} == 0for: 15slabels:severity: 1team: nodeannotations: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:9093rule_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


期待您的关注~   


http://www.ppmy.cn/ops/143896.html

相关文章

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…

Java 和 J2EE 有什么不同?

Java 和 J2EE 有什么不同&#xff1f; 一. Java的理解二. 什么是 J2EE三. Java 和 J2EE 的主要区别四. 结论 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 Java 和 J2EE&#xff…

1688商品爬取:商品信息与价格接口获取指南

引言 在电商领域&#xff0c;获取商品信息和价格对于市场分析、价格监控和供应链管理至关重要。1688作为中国领先的B2B电商平台&#xff0c;提供了海量的商品数据。本文将详细介绍如何利用Java爬虫技术合法合规地获取1688商品信息和价格接口数据。 环境准备 在开始之前&…

发送webhook到飞书机器人

发送webhook到飞书机器人 参考链接 自定义机器人使用指南 创建自定义机器人 邀请自定义机器人进群。 进入目标群组&#xff0c;在群组右上角点击更多按钮&#xff0c;并点击 设置。 在右侧 设置 界面&#xff0c;点击 群机器人。 在 群机器人 界面点击 添加机器人。 在 添…

数据结构_双向循环链表实战

双向循环链表实战 package XHLB;public class SXXHLB {// 定义双向链表节点static class DoubleListNode { //Node(节点)private int val;private DoubleListNode prev;private DoubleListNode next;public DoubleListNode(int val) {this.val val;this.next null;this.prev …

webpack打包流程及原理

Webpack 是一个模块打包工具&#xff0c;它可以分析项目的依赖关系&#xff0c;将这些依赖转换和打包为合适的格式以供浏览器使用。以下是 Webpack 打包流程的简化版&#xff1a; **初始化&#xff1a;**读取 webpack 配置文件&#xff0c;创建 compiler 对象。 **配置&#x…

学习笔记:Verilog连续赋值及在线仿真

参考 https://www.runoob.com/w3cnote/verilog-assign.htmlassign&#xff0c; 全加器 连续赋值语句是 Verilog 数据流建模的基本语句&#xff0c;用于对 wire 型变量进行赋值 assign LHS_target RHS_expression &#xff1b; LHS&#xff08;left hand side&#xff09; 指赋…

使用Python实现无人机自动导航系统:探索智能飞行的奥秘

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…