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

news2024/12/24 0:00:08

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


期待您的关注~   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

arcgisPro将面要素转成CAD多段线

1、说明&#xff1a;正常使用【导出为CAD】工具&#xff0c;则导出的是CAD三维多线段&#xff0c;无法进行编辑操作、读取面积等。这是因为要素面中包含Z值&#xff0c;导出则为三维多线段数据。需要利用【复制要素】工具禁用M值和Z值&#xff0c;再导出为CAD&#xff0c;则得到…

R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)

1. 上下标 # 注意y轴标签文字 library(ggplot2) ggplot(mtcars, aes(mpg, cyl))geom_point()ylab(label bquote(O[3]~(ug / m^3)))2. 希腊字母&#xff0c;如alpha ggplot(mtcars, aes(mpg, cyl))geom_point()ylab(label bquote(O[3]~(ug / m^3)))ggtitle(expression(alpha))…

WebContainerapi 基础(Web IDE 技术探索 一)

前言 随着web技术的发展&#xff0c;在网页端直接运行node.js、实现微型操作系统已经不再是难事。今天介绍的 WebContainers就是一个基于浏览器的运行时&#xff0c;用于执行 Node.js 应用程序和操作系统命令&#xff0c;它完全运行在您的浏览器页面中&#xff0c;提供了文件系…

解决pytorch安装中的三个错误

查明已安装python版本为3.12.7后&#xff0c;创建虚拟环境。 报错内容&#xff1a;ArgumentError: one of the arguments -n/–name -p/–prefix is required 解决方式&#xff1a; 输入 conda create -n pytorch python3.8即可安装成功。 参考文章&#xff1a;https://blo…

LeetCode:104.二叉树的最大深度

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;104.二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节…

上传文件(vue3)

使用el-upload 先上传到文件服务器&#xff0c;生成url 然后点击确定按钮&#xff1a; 保存数据 <template><el-dialog top"48px" width"500" title"新增协议" :modelValue"visible" close"handleClose()">…

PostgreSql+Pgpool-II配置高可用集群(超详细)

一.配置示例 1.1. 基本配置示例 1.1.1. 开始 首先&#xff0c;我们必须学习如何在使用复制之前安装和配置 Pgpool-II 和数据库节点。 1.1.1.1. 安装 Pgpool-II 安装 Pgpool-II 非常简单。 在已解压源 tar ball 的目录中&#xff0c; 执行以下命令。 $ ./configure$ make$ …

2012年西部数学奥林匹克试题(几何)

2012/G1 △ A B C \triangle ABC △ABC 内有一点 P P P, P P P 在 A B AB AB, A C AC AC 上的投影分别为 E E E, F F F, 射线 B P BP BP, C P CP CP 分别交 △ A B C \triangle ABC △ABC 的外接圆于点 M M M, N N N. r r r 为 △ A B C \triangle ABC △ABC 的内…

【自动驾驶】单目摄像头实现自动驾驶3D目标检测

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 概述算法介绍演示效果图像推理视频推理 核心代码算法处理过程使用方式环境搭建下载权重文件pytorch 推理&#xff08;自动选择CPU或GPU&#x…

帝国CMS自动生成标题图片并写进数据库

帝国CMS背景可自定义&#xff0c;可单独背景也可以随机背景,此插件根帝国cms官方论坛帖子改的&#xff0c;增加了生成图片后写入数据库,笔者的古诗词网 www.gushichi.com 也是这样设置的。 效果图 将下面的代码插入到/e/class/userfun.php中增加如下函数 单独背景代码 //自动…

5G -- 5G网络架构

5G组网场景 从4G到5G的网络演进&#xff1a; 1、UE -> 4G基站 -> 4G核心网 * 部署初中期&#xff0c;利用存量网络&#xff0c;引入5G基站&#xff0c;4G与5G基站并存 2、UE -> (4G基站、5G基站) -> 4G核心网 * 部署中后期&#xff0c;引入5G核心网&am…

达梦官方工具 SQLark数据迁移(oracle->达梦数据库)

应国产化需求需要,需将系统中涉及的各中间件替换成国产中间件,此文介绍了从Oracle迁移数据至达梦dm8的步骤,该文在windos环境下已验证测试过 1 SQLark介绍 SQLark是一款专为信创应用开发者设计的数据库开发和管理工具。它支持快速查询、创建和管理多种类型的数据库系统&#xf…

【Mac】安装 PaddleOCR

环境&#xff1a;Mac M1 芯片 1、安装 1.1 安装 Anaconda Anaconda 安装较为简单&#xff0c;直接在 Anaconda 官网 下载pkg文件&#xff0c;根据向导提示完成安装。 Anaconda 用于搭建 Python 虚拟环境&#xff0c;目的是为了避免与之前环境安装库的版本冲突&#xff0c;另…

AI的进阶之路:从机器学习到深度学习的演变(二)

AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;一&#xff09; 三、机器学习&#xff08;ML&#xff09;&#xff1a;AI的核心驱动力 3.1 机器学习的核心原理 机器学习&#xff08;Machine Learning, ML&#xff09;突破了传统编程的局限&#xff0c;它不再…

渗透测试实战—某医院安全评估测试

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…

垂起固定翼无人机大面积森林草原巡检技术详解

垂起固定翼无人机大面积森林草原巡检技术是一种高效、精准的监测手段&#xff0c;以下是对该技术的详细解析&#xff1a; 一、垂起固定翼无人机技术特点 垂起固定翼无人机结合了多旋翼和固定翼无人机的优点&#xff0c;具备垂直起降、飞行距离长、速度快、高度高等特点。这种无…

2024年《网络安全事件应急指南》

在这个信息技术日新月异的时代&#xff0c;网络攻击手段的复杂性与日俱增&#xff0c;安全威胁层出不穷&#xff0c;给企事业单位的安全防护能力带 来了前所未有的挑战。深信服安全应急响应中心&#xff08;以下简称“应急响应中心”&#xff09;编写了《网络安全事件应急指南》…

PHP阶段一

PHP 一门编程语言 运行在服务器端 专门用户开发网站的 脚本后缀名.php 与HTML语言进行混编&#xff0c;脚本后缀依然是.php 解释型语言&#xff0c;不要编译直接运行 PHP运行需要环境&#xff1a; Windows phpstudy Linux 单独安装 Web 原理简述 1、打开浏览器 2、输入u…

【C#】实现Json转Lua (Json2Lua)

关键词: C#、JsonToLua、Json2Lua、对象序列化Lua 前提需引入NewtonsofJson&#xff0c;引入方法可先在Visual Studio 2019 将Newtonsoft.Json.dll文件导入Unity的Plugins下。 Json格式字符串转Lua格式字符串&#xff0c;效果如下&#xff1a; json字符串 {"1": &q…

GM_T 0039《密码模块安全检测要求》题目

单项选择题 根据GM/T 0039《密码模块安全检测要求》,送检单位的密码模块应包括()密码主管角色。 A.一个 B.两个 C.至少一个 D.至少两个 正确答案:C 多项选择题 根据GM/T 0039《密码模块安全检测要求》,关于非入侵式安全,以下属于安全三级密码模块要求的是()。 …