掌握Docker容器监控:Docker命令与Prometheus的协同作战(上)

🐇明明跟你说过:个人主页

🏅个人专栏:《Docker入门到精通》 《k8s入门到实战》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Docker简介

2、为什么要对Docker容器实行监控

3、Docker自带命令与Prometheus在监控中的角色

二、Docker自带命令监控

1、docker stats 实时资源监控

2、docker top 容器进程监控

3、docker inspect 容器详细信息查询

三、进阶监控:Prometheus介绍

1、Prometheus概述

2、核心特性与优势

3、架构与组件介绍


一、引言

1、Docker简介

Docker是一个开源的应用容器引擎,基于Google公司推出的Golang语言开发,并基于Linux内核的Cgroups、NameSpace以及UnionFS等技术。它允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上。Docker不仅实现了虚拟化,而且其容器是完全使用沙箱机制,相互之间不会有任何接口,使得容器之间以及容器与宿主机之间的资源和环境相互隔离。

关于Docker的详细介绍,可以参考《Docker的诞生背景与设计初衷,以及发展前景》这篇文章

2、为什么要对Docker容器实行监控

  1. 资源管理和优化:监控Docker容器的资源使用情况,如CPU使用率、内存占用、网络流量等,有助于管理员了解每个容器的资源消耗情况,从而进行合理的资源分配和优化。通过监控,可以及时发现资源瓶颈,避免资源浪费或过载,确保系统的稳定运行。
  2. 故障排查和预警:通过监控Docker容器的运行状态和日志信息,可以及时发现容器运行过程中的异常情况或错误。当容器出现性能下降、崩溃或异常退出等情况时,监控系统可以发出预警通知,帮助管理员快速定位问题并进行处理,减少故障对业务的影响。
  3. 安全性保障:监控Docker容器的安全状态,如文件系统的完整性、网络连接的安全性等,有助于发现潜在的安全威胁。通过实时监控和告警机制,可以及时发现并应对恶意攻击、非法访问等安全事件,保障系统的安全性。
  4. 业务连续性保障:对Docker容器进行监控可以确保业务的连续性和稳定性。通过监控系统的实时反馈和预警功能,管理员可以及时了解系统的运行状态和潜在风险,并采取相应的措施进行预防和应对,确保业务的稳定运行。

3、Docker自带命令与Prometheus在监控中的角色

Docker自带的命令在监控中主要起到实时查看容器状态和性能的作用。例如,docker top命令可以显示容器内的进程信息,帮助了解容器的运行状况;docker stats命令则提供容器的资源使用统计,包括CPU使用率、内存使用情况等,这对于监控容器的性能非常有用;docker logs命令可以输出容器的日志信息,有助于排查容器的运行问题。

Prometheus在监控中的角色更为全面和深入。Prometheus是一个开源的系统监控和报警工具,它通过收集多维度的时间序列数据来监控系统的状态和性能。在Docker环境中,Prometheus可以配合各种exporter(如NodeExporter和cAdvisor)来收集Host硬件信息、操作系统信息以及容器运行信息等。这些信息随后被发送到Prometheus server进行处理,并通过Grafana进行图形化的展示,使得用户可以直观地了解系统的运行状况。

二、Docker自带命令监控

1、docker stats 实时资源监控

使用实例:

在安装docker的服务器上执行,如果还未安装docker,请参考《在CentOS系统中轻松安装和配置Docker指南》这篇文章

[root@node1 ~]# docker stats

监控指标解读:

  • CONTAINER ID:容器的唯一标识符,用于识别容器。
  • NAME:容器的名称。
  • CPU %:容器使用的 CPU 百分比。该百分比是相对于系统总 CPU 容量的使用率。
  • MEM USAGE / LIMIT:内存使用量和限制。MEM USAGE表示容器当前使用的内存量,LIMIT表示为容器设置的内存限制。
  • MEM %:内存使用百分比。表示容器当前使用的内存占其限制的百分比。
  • NET I/O:网络的输入和输出数据量。这包括了接收和发送的数据量。
  • BLOCK I/O:块设备的输入和输出数据量。这包括了从存储系统读取和写入的数据量。
  • PIDS:容器中正在运行的进程数量。

2、docker top 容器进程监控

使用语法:

docker top [OPTIONS] CONTAINER [ps OPTIONS]
  • OPTIONS:可选参数,用于指定额外的选项。
  • CONTAINER:要查看进程信息的容器名称或容器ID。
  • ps OPTIONS:可选参数,用于传递给ps命令的选项。

示例说明:

  • UID:进程的用户ID。
  • PID:进程的ID。
  • PPID:进程的父进程ID。
  • C:进程的CPU占用率。
  • STIME:进程的启动时间。
  • TTY:进程所连接的TTY(终端)。
  • TIME:进程已占用的CPU时间。
  • CMD:进程的命令。

3、docker inspect 容器详细信息查询

查询容器配置:

[root@node1 ~]# docker inspect test

这个命令会返回一个 JSON 格式的输出,其中包含了有关指定容器的详细配置信息,包括容器的网络设置、挂载的卷、环境变量、镜像信息等等。

环境变量与状态查看:

查看环境变量

docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' <container_id_or_name>

这条命令会列出指定容器的所有环境变量。

查看容器状态

docker inspect -f '{{.State.Status}}' <container_id_or_name>

这条命令会输出指定容器的状态,例如 running、exited 等。

三、进阶监控:Prometheus介绍

1、Prometheus概述

Prometheus是一套开源的系统监控报警框架,启发于Google的borgmon监控系统,由在SoundCloud工作的前Google员工于2012年创建,并作为社区开源项目进行开发,于2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目。

Prometheus相比传统监控系统如Nagios或Zabbix,具有易管理性、业务数据相关性、高效性以及良好的可视化等优势。Prometheus的核心部分只有一个单独的二进制文件,易于部署和管理;同时,它能够监控服务的运行状态,获取服务和应用内部真正的运行状态,提供深入的业务数据相关性;其高效性体现在可以处理大量的监控指标和高速的数据处理;而良好的可视化则使得用户可以直观地了解系统的运行状况。

2、核心特性与优势

  • 多维数据模型: Prometheus 使用多维数据模型来存储时间序列数据,每个时间序列具有指标名称和一组键值对标签,这使得数据聚合和查询变得非常灵活。
  • 灵活的查询语言: Prometheus 提供了 PromQL(Prometheus Query Language),这是一种强大且灵活的查询语言,可以用于对时间序列数据执行各种操作和聚合。
  • 数据抓取: Prometheus 使用轮询的方式定期从目标服务中抓取指标数据。它支持多种抓取方式,包括 HTTP、HTTPS、DNS、TCP 和 ICMP。
  • 动态服务发现: Prometheus 支持多种服务发现机制,包括 Kubernetes 服务发现、Consul、EC2 等,这使得自动发现和监控新的目标变得简单。
  • 可视化和图表: Prometheus 结合了 Grafana 等可视化工具,可以通过图表和仪表盘直观地展示监控数据,帮助用户更好地理解系统的行为和趋势。
  • 警报和通知: Prometheus 提供了灵活的警报规则和通知机制,可以根据时间序列数据定义警报规则,并在触发条件满足时发送通知。
  • 易于部署和扩展: Prometheus 的架构简单,易于部署和扩展。它具有单二进制文件和可运行在容器中的特性,因此非常适合于云原生环境和微服务架构。
  • 社区和生态系统: Prometheus 有一个庞大的开源社区,提供了丰富的插件和整合解决方案,例如各种 Exporters 和 Alertmanager,使得用户能够自定义和扩展 Prometheus 的功能。 

3、架构与组件介绍

1. Prometheus Server(Prometheus 服务器):

Prometheus Server 是整个监控系统的核心组件。它负责从各种目标(如应用程序、数据库、操作系统等)收集指标数据,并将这些数据存储在本地时间序列数据库中。Prometheus Server 还提供了查询 API,允许用户使用 PromQL 查询语言对存储的指标数据进行查询和分析。

2. Exporter(导出器):

Exporter 是用于将第三方系统的指标数据导入到 Prometheus 中的中间件。Exporter 通常是在待监控的系统中运行的小型服务或进程,它们负责暴露系统的运行时指标,并将这些指标以 Prometheus 可以理解的格式暴露出来。Prometheus 支持各种类型的 Exporter,包括 Node Exporter(用于监控主机的资源利用率)、Blackbox Exporter(用于网络探测和监控)等。

3. PromQL(Prometheus 查询语言):

PromQL 是 Prometheus 的查询语言,它允许用户对存储在 Prometheus 中的指标数据进行灵活的查询和聚合。使用 PromQL,用户可以执行各种操作,包括选择、过滤、聚合、计算率等,以便对监控数据进行分析和可视化。

4. Alertmanager(警报管理器)

Alertmanager 是 Prometheus 的警报管理组件,负责处理从 Prometheus Server 发出的警报。Alertmanager 可以根据用户定义的警报规则对警报进行分组、去重和抑制,然后将警报发送到指定的通知渠道(如电子邮件、Slack、PagerDuty 等)。

5. Grafana(可视化工具)

Grafana 是一个流行的开源监控和可视化工具,它与 Prometheus 集成紧密,可以通过 Prometheus 数据源连接到 Prometheus Server,并使用 PromQL 查询语言创建仪表盘和图表,以直观地展示监控数据。

 

 🎗️🎗️🎗️以上仅是我对Docker容器监控的个人观点与见解,如果您有任何不同的看法或建议,欢迎在评论区与我分享和讨论。

🚩🚩🚩对于希望深入了解Docker技术的朋友们,我诚挚地邀请您关注我的Docker专栏《Docker从零到精通:实战指南》。我会定期更新和分享Docker领域的最新知识、技术动态和前沿实践,希望能为您的Docker学习之旅提供有价值的参考和指导。

❤️❤️❤️最后,请允许我衷心感谢您的阅读和对本专栏的支持!您的鼓励是我持续创作的最大动力。希望我们能在Docker的学习道路上共同进步,共创辉煌!!!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【智能家居入门1之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据&#xff0c;之后会持续发布如下项目&#xff1a;①可以实现微信小程序控制下位机动作&#xff0c;真正意义上的智能家居&#xff1b;②将网络通讯协议换成MQTT协议再实现上述功能&#xff0c;此时的服务器也不再是ONENET&…

为什么电容器放电电阻器现在被强制要求作为基本安全装置

在电子产品中&#xff0c;电容器放电电阻器或泄放电阻器是与高压电源电路的输出并联的电阻器&#xff0c;其明确目的是释放存储在电源滤波电容器中的剩余电荷。 例如&#xff0c;开关模式电源使用桥式整流器将交流市电转换为 320V&#xff08;市电电压为 220/240V&#xff09;或…

先进电机技术 —— 编码器

一、编码器 电机编码器是一种用于检测和反馈电动机转轴位置、旋转速度和方向的传感器装置。它在电机控制系统中起到关键作用&#xff0c;通过将机械运动转换为电信号&#xff0c;帮助控制器精确控制电机的动态性能。 编码器主要组成 1. **光学或磁性传感元件**&#xff1a;基于…

VSCode报错:/bin/sh: python: command not found

背景 以前都是直接用txt写python&#xff0c;然后直接命令行运行。 这次涉及的代码较多&#xff0c;决定用编译器。 写好的一段python点击运行报错&#xff01; 问题描述 因为我本地安装的是python3&#xff0c;但是vscode用的是另一个路径的python&#xff0c;所以找不到 解…

IDEA自定义Maven仓库

Maven 是一款广泛应用于 Java 开发的工具&#xff0c;其作用类似于一个全自动的 JAR 包管理器&#xff0c;能够方便地导入开发所需的相关 JAR 包。在使用 Maven 进行 Java 程序开发时&#xff0c;开发者能够极大地提高开发效率。以下是关于如何安装 Maven 以及在 IDEA 中配置自…

【C++】学习记录

一、第一个C程序 #include<iostream> using namespace std;int main() {cout << "Hello World!";return 0; } 二、数据类型、变量与常量、运算符 2.1 数据类型 2.2 变量与常量 2.3 运算符 三 、判断语句&#xff08;if-else、switch-case&#xff09; …

开源分子对接程序rDock使用方法(1)-Docking in 3 steps

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、Docking in 3 steps 标准对接rDock 的基本对接步骤及注意事项 二、 三步对接案例Step 1. 结构文件准备Step 2. 产生对接位点Step 3. 运行分子对接3.1 检查输入文件3.2 测试-只进行打分3.3 运行…

绝地求生:PUBG2024萌新入坑指南四排建议避坑

PUBG自2017年起至今已近7个年头了&#xff0c;许多游戏玩家都体验过这款游戏&#xff0c;但也有相当多的玩家对这种模式不感冒。 游戏市场日新月异&#xff0c;经过多年发展&#xff0c;PUBG这款游戏不可避免的衰落&#xff0c;哪怕他本体免费了。 闲游盒免费给这款游戏续了一…

免费分享一套SpringBoot+Vue旅游管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue旅游管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue旅游管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue旅游管理系统 Java毕业设计项目来自互联网&…

自定义协议清理后,浏览器还一直弹出匹配提示用户新应用打开问题

问题 这段时间出现了自定义协议清理异常的问题。在一台电脑上&#xff0c;用chrome&#xff0c;一直出现问题&#xff0c;自定义协议可能存在了缓存或者其他内容。导致一直重复的弹出ms-store打开新应用的奇怪问题。 后来 第一步&#xff1a; 清理注册表&#xff0c;把注册…

JVM(内存区域划分)

JVM JVM - Java虚拟机 我们编写的 Java 程序, 是不能够被 OS 直接识别的 JVM 充当翻译官的角色, 负责把我们写的的 Java 程序 ,翻译给 OS “听”, 让 OS 能够识别我们所写的 Java 代码 JVM 内存区域划分 JVM 是一个应用程序, 在启动的时候, 会从 操作系统 申请到一整块很大的内…

excel统计分析——裂区设计

参考资料&#xff1a;生物统计学 裂区设计&#xff08;split-plot design&#xff09;是安排多因素试验的一种方法&#xff0c;裂区设计对因素的安排有主次之分&#xff0c;适用于安排对不同因素试验精度要求不一的试验。 裂区设计时&#xff0c;先按第一因素的处理数划分主区&…