🐇明明跟你说过:个人主页
🏅个人专栏:《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容器实行监控
- 资源管理和优化:监控Docker容器的资源使用情况,如CPU使用率、内存占用、网络流量等,有助于管理员了解每个容器的资源消耗情况,从而进行合理的资源分配和优化。通过监控,可以及时发现资源瓶颈,避免资源浪费或过载,确保系统的稳定运行。
- 故障排查和预警:通过监控Docker容器的运行状态和日志信息,可以及时发现容器运行过程中的异常情况或错误。当容器出现性能下降、崩溃或异常退出等情况时,监控系统可以发出预警通知,帮助管理员快速定位问题并进行处理,减少故障对业务的影响。
- 安全性保障:监控Docker容器的安全状态,如文件系统的完整性、网络连接的安全性等,有助于发现潜在的安全威胁。通过实时监控和告警机制,可以及时发现并应对恶意攻击、非法访问等安全事件,保障系统的安全性。
- 业务连续性保障:对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的学习道路上共同进步,共创辉煌!!!