当前位置: 首页 > java >正文

【Prometheus】Prometheus监控Docker实战

👻创作者:丶重明
👻创作时间:2025年8月23日
👻擅长领域:运维

目录

  • 前言
  • 什么是Prometheus和cAdvisor
    • Prometheus
    • cAdvisor
  • 部署操作
    • 部署cAdvisor
    • 部署Prometheus
  • 指标说明
    • cpu相关指标
    • 内存相关指标
    • 磁盘相关指标
    • 网络相关指标
    • 其他相关指标

前言

在现代微服务架构中,容器化技术已成为应用部署的标准方式。随着Docker容器数量的增长,监控容器资源使用情况和性能指标变得至关重要。本文将介绍如何使用Prometheus和cAdvisor搭建一个完整的Docker容器监控解决方案,所有组件都通过Docker容器部署。


什么是Prometheus和cAdvisor

Prometheus

Prometheus是一款开源的系统监控和警报工具包,以其强大的多维数据模型、灵活的查询语言和高效的时序数据库而闻名。它采用拉取模式从目标收集指标,非常适合监控容器化环境。

cAdvisor

cAdvisor(Container Advisor)是Google开源的容器资源使用和性能分析工具。它能够自动收集、聚合、处理并导出运行中容器的资源隔离参数、资源使用情况和历史性能数据。


部署操作

部署cAdvisor

cAdvisor作为数据收集器,需要访问宿主机的各种资源信息。

docker pull spcodes/cadvisor:v0.47.2
docker run -d \--name=cadvisor \--volume=/:/rootfs:ro \--volume=/var/run:/var/run:ro \--volume=/sys:/sys:ro \--volume=/var/lib/docker/:/var/lib/docker:ro \--volume=/sys/fs/cgroup:/sys/fs/cgroup:ro \--volume=/dev/disk/:/dev/disk:ro \--volume=/var/run/docker.sock:/var/run/docker.sock \--publish=8080:8080 \--detach=true \--privileged \--device=/dev/kmsg \spcodes/cadvisor:v0.47.2

参数解释:

  • --volume:将宿主机目录挂载到容器中,使cadvisor可以访问系统资源

  • --publish=8080:8080:将容器内端口8080映射到宿主机端口8080

  • --privileged和--device:授予容器访问系统设备的权限

部署完成后可通过ip:8080访问cadvisor的web界面

在这里插入图片描述

部署Prometheus

首先准备好prometheus的配置文件,方便一会挂载使用

mkdir /prom/prometheus -p
vim prometheus.yml# prometheus.yml内容
global:scrape_interval: 15sevaluation_interval: 15sscrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']- job_name: 'cadvisor'static_configs:- targets: ['192.168.10.13:8080']

拉取镜像并启动prometheus容器

docker pull prom/prometheus:v3.5.0
docker run -d \-p 9090:9090 \-v /prom/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \--name prometheus \prom/prometheus:v3.5.0

参数解释:

  • -v /prom/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:挂载自定义配置文件到容器内

运行成功后可以通过ip:9090访问到Prometheus的web页面

在这里插入图片描述
点击Status >> Target health可以查看两个实例的运行情况

在这里插入图片描述


指标说明

cpu相关指标

指标名称指标类型指标含义
container_cpu_usage_seconds_totalcounter容器启动以来总消耗cpu时间
container_cpu_system_seconds_totalcounter容器启动以来内核态消耗cpu时间
container_cpu_user_seconds_totalcounter容器启动以来用户态消耗cpu时间

案例:计算每个运行中的容器在过去1分钟的平均cpu使用率

sum (rate(container_cpu_usage_seconds_total{name!=""}[1m])) by (instance,job,name) * 100

内存相关指标

指标名称指标类型指标含义
container_memory_usage_bytesgauge容器当前正在使用的总内存量
container_memory_working_set_bytesgauge容器“工作集”内存大小
container_spec_memory_limit_bytesgauge容器内存使用上限
machine_memory_bytesgauge当前主机总内存量

案例:获取每个容器内存实际使用量(单位:MB)

sum (container_memory_working_set_bytes{name!=""}) by (increase,name) / 1024 / 1024

案例:计算所有容器的内存和占物理内存的比例

sum(container_memory_working_set_bytes{name!=""}) / sum(machine_memory_bytes) * 100

磁盘相关指标

指标名称指标类型指标含义
container_fs_reads_bytes_totalcounter容器读入总大小
container_fs_writes_bytes_totalcounter容器写入总大小
container_fs_reads_totalcounter容器启动以来文件系统IO读操作总次数
container_fs_writes_totalcounter容器启动以来文件系统IO写操作总次数

案例:计算每个容器每秒磁盘写入吞吐量(单位:MB)

sum (rate(container_fs_writes_bytes_total{name!=""}[1m])) by (increase,name) /1024 /1024

网络相关指标

指标名称指标类型指标含义
container_network_transmit_bytes_totalcounter发送的网络流量的总量
container_network_receive_bytes_totalcounter接收的网络流量的总量

案例:查询每个容器“接收”的总流量大小(单位:MB)

sum (container_network_receive_bytes_total{name!=""}) by (instance,job,name) /1024 /1024

其他相关指标

指标名称指标类型指标含义
container_last_seengauge容器最后一次被探到的时间戳
container_tasks_stategauge跟踪不同状态容器额数量
container_start_time_secondsgauge容器启动的时间戳

案例:查询正在运行的容器数量

count(container_tasks_state{name!="",state="running"})

案例:查询每个容器运行的时长(单位:小时)

sum (time() - container_start_time_seconds{name!=""}) by (instance,name) /3600
http://www.xdnf.cn/news/18617.html

相关文章:

  • C++编程语言:标准库:第36章——字符串类(Bjarne Stroustrup)
  • 【C语言16天强化训练】从基础入门到进阶:Day 8
  • Krea Video:Krea AI推出的AI视频生成工具
  • 知识蒸馏 Knowledge Distillation 序列的联合概率 分解成 基于历史的条件概率的连乘序列
  • 大模型——深度评测智能体平台Coze Studio
  • 2025-08-23 李沐深度学习19——长短期记忆网络LSTM
  • Kafka Streams vs Apache Flink vs Apache Storm: 实时流处理方案对比与选型建议
  • SpringBootWeb入门
  • Ollama 本地部署 Qwen2.5-7b
  • 搜索--常见面试问题
  • Android 之wifi连接流程
  • 使用 LangChain 和 Neo4j 构建知识图谱
  • 一文学会vue的动态权限控制
  • 00后AI创业者崛起与AI商业应用新玩法:从Mercor到历史人物复刻的机遇
  • 【剖析高并发秒杀】从流量削峰到数据一致性的架构演进与实践
  • MySQL GPG 密钥更新问题解决文档
  • Kubernetes网络服务全解析
  • Linux netfilter工作原理详解
  • Mac简单测试硬盘读写速度
  • 暴雨环境漏检率下降78%!陌讯动态融合算法在道路积水识别的工程突破
  • LeetCode 面试经典 150_数组/字符串_找出字符串中第一个匹配项的下标(23_28_C++_简单)(KMP 算法)
  • PyTorch 面试题及详细答案120题(71-85)-- 高级特性与工具
  • Base64 编码优化 Web 图片加载:异步响应式架构(Java 后端 + 前端全流程实现)
  • vue实现小程序oss分片上传
  • 合合信息acge模型获C-MTEB第一,文本向量化迎来新突破
  • 微前端架构核心要点对比
  • C++ 使用最新 MySQL Connector/C++(X DevAPI)+ CMake 完整教程
  • 力扣 30 天 JavaScript 挑战 第38天 (第九题)学习了 语句表达式的区别 高级函数 promise async await 节流
  • 《P3623 [APIO2008] 免费道路》
  • Redis Set 类型详解:从基础命令到实战应用