👻创作者:丶重明
👻创作时间: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.pswp.cn/bicheng/94468.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94468.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94468.shtml

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

相关文章

2.7 提示词调优编码实战(二)

目录 四,提示词模版优化 - 格式化 4.1 代码示例 4.2 任务描述 4.3 模型输出格式化 4.4 用户输入 4.5 输出结果 四,提示词模版优化 - 格式化 在简单提示词的基础上,我们对提示词模版中各部分进行格式化。包括任务描述增加了相应的字段。 同时对输出增加了更多的定义和…

Kafka如何保证「消息不丢失」,「顺序传输」,「不重复消费」,以及为什么会发生重平衡(reblanace)

前言 上一篇文章总结了kafka为什么快,下面来总结一下,kafka高频的常见的问题。内容有点多,全部看完需要有一定的耐心。 kafka如何保证消息不丢失 Producer端 要保证消息不丢失,第一点要做的就是要保证消息从producer端发送到了…

原子操作汇编实现:原理、流程与代码解析

🔬 原子操作汇编实现:原理、流程与代码解析 引用:VC/C Intel x86 内联汇编实现 “Interlocked” 原子变量各种操作 🌟 引言:原子操作的重要性 在多线程编程中,原子操作是确保数据一致性的关键机制。本文…

【WRF理论第十九期】内陆湖泊、水体的处理方式

目录 WRF 模型中湖泊模拟概述 湖泊模型(Lake Model)集成 新增湖泊数据支持(如 WUDAPT + MODIS) LAKE_DEPTH Noah-MP + 湖泊模型联合使用 namelist.input 配置说明 WRF 代码更新 参考 论坛-WRF 湖泊模型(WRF-Lake model)与 SST 更新 WRF 模型中湖泊模拟概述 湖泊模型(La…

【渗透测试】SQLmap实战:一键获取MySQL数据库权限

注:所有技术仅用于合法安全测试与防御研究,未经授权的攻击行为属违法犯罪,将承担法律责任。一、SQLmap常规用法注意存放路径:C:\Users\neo\AppData\Local\sqlmap\output1、列出详细过程和数据库列表sqlmap -u http://192.168.61.2…

LeetCode 第464场周赛 第三天

1. 3658 奇数和与偶数和的最大公约数(欧几里得) 链接:题目链接 题解: 题解时间复杂度O(logmin(a, b)): 获得前n个奇、偶数的总和,由于数列为等差数列,等差数列和公式:(a1 an) * n …

IntelliJ IDEA 集成 ApiFox 操作与注解规范指南

一、IDEA装入Apifox 1.安装Apifox Helper 说明:在 IntelliJ IDEA 中安装 ApiFox Helper 插件。 2.打开Apifox 说明:点击 设置,在菜单中选择 API访问令牌。在弹出的窗口中输入任意名称,并选择令牌的有效期(为了方便,我这里选择了 无期限)。生成令牌后,由于 令牌只能复…

C++---双指针

在C编程中,双指针算法是一种高效的解题思路,其核心是通过设置两个指针(或索引)遍历数据结构(如数组、链表、字符串等),利用指针的移动规则减少无效操作,从而将时间复杂度从暴力解法的…

【LLM】GLM-4.5模型架构和原理

note 文章目录note一、GLM-4.5模型二、Slime RL强化学习训练架构Reference一、GLM-4.5模型 大模型进展,GLM-4.5技术报告,https://arxiv.org/pdf/2508.06471,https://github.com/zai-org/GLM-4.5,包括GLM-4.5(355B总参数&#xff…

LLM 中增量解码与模型推理解读

在【LLM】LLM 中 token 简介与 bert 实操解读一文中对 LLM 基础定义进行了介绍,本文会对 LLM 中增量解码与模型推理进行解读。 一、LLM 中增量解码定义 增量解码(Incremental Decoding)是指在自回归文本生成过程中,模型每次只计…

1.Spring Boot:超越配置地狱,重塑Java开发体验

目录 一、Spring框架:伟大的基石 历史背景与挑战 Spring的革命性贡献 新的挑战:配置地狱 二、Spring Boot:约定大于配置的革命 四大核心特性 1. 快速创建独立应用 2. 自动配置:智能化的魔法 3. 起步依赖:依赖管…

assert使用方法

assert 是 Python 中用来进行 调试 和 验证 的一个关键字,它用于测试一个 条件表达式 是否为真。如果条件为假,assert 会抛出一个 AssertionError 异常,通常带有错误信息。语法:assert condition, "Error message"condi…

【实习总结】快速上手Git:关键命令整理

目录 git的四大工作区域 git首次配置 克隆远程仓库 提交代码到远程仓库 查看文件状态(可选) 添加文件到暂存区 将暂存区的内容提交到本地仓库 将本地的提交上传到远程仓库 拉取并合并代码 第一种方式 第二种方式 分支管理 查看与创建分支 …

02-开发环境搭建与工具链

第2课:开发环境搭建与工具链 📚 课程目标 掌握DevEco Studio的下载、安装和配置熟悉HMS Core(华为移动服务)的使用了解鸿蒙模拟器与真机调试环境掌握必备开发工具的使用 🛠️ DevEco Studio环境搭建 2.1 下载与安装…

删掉一个元素以后全为1的最长子数组-滑动窗口

1493. 删掉一个元素以后全为 1 的最长子数组 - 力扣&#xff08;LeetCode&#xff09; Solution #include<iostream> #include<vector> using namespace std;class Solution { public://滑动窗口//动态维护一个窗口&#xff0c;窗口内只能有1个0&#xff0c;记录窗…

【计算机网络 | 第8篇】编码与调制

文章目录通信系统中的编码与调制&#xff1a;从信道基础到信号传输技术一、信道与通信电路&#x1f342;二、三种基本通信方式&#x1f4d6;1. 单向通信&#xff08;单工通信&#xff09;2. 双向交替通信&#xff08;半双工通信&#xff09;3. 双向同时通信&#xff08;全双工通…

当AI遇上终端:Gemini CLI的技术魔法与架构奥秘

"代码不仅仅是指令的集合&#xff0c;更是思想的载体。当AI与终端相遇&#xff0c;会碰撞出怎样的火花&#xff1f;" 在这个AI技术日新月异的时代&#xff0c;Google推出的Gemini CLI无疑是一颗璀璨的明星。它不仅仅是一个命令行工具&#xff0c;更是一个将人工智能无…

ViLU: Learning Vision-Language Uncertainties for Failure Prediction

研究方向&#xff1a;Image Captioning1. 论文介绍本文提出ViLU&#xff08;Vision-Language Uncertainties&#xff09;&#xff0c;一个用于学习视觉语言不确定性量化&#xff08;UQ&#xff09;和检测视觉语言模型故障的事后框架。使用VLMs进行量化&#xff08;UQ&#xff0…

数据集笔记:百度地图高德地图坐标互转

1 为什么会有高德坐标系和百度坐标系&#xff1f;根据《测绘法》和国家保密法规&#xff0c;在中国大陆范围内的地理坐标数据必须做加密处理&#xff0c;不允许直接使用 WGS84&#xff08;openstreetmap&#xff09;所以出现了GCJ-02 和 BD-09高德、腾讯、谷歌中国都遵循 GCJ-0…

SkyWalking高效线程上下文管理机制:确保调用链中traceId来自同一个请求

SkyWalking Agent 能确保获取到“正确”的 traceId,其核心在于它建立并维护了一套高效的线程上下文管理机制。这套机制确保了即使在复杂的多线程、异步环境下,也能将正确的上下文(包含 traceId)与当前正在执行的代码逻辑关联起来。 其工作原理可以概括为下图所示的流程: …