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

【Prometheus 】Prometheus + Docker 监控服务器CPU、内存完整实战

Prometheus + Docker 监控服务器CPU、内存完整实战

承接上一篇 Java JVM 监控,这里分两套方案:

  1. node-exporter(标准方案):采集宿主机整机CPU、内存、磁盘、网络
  2. 配套 Prometheus 配置、Grafana 面板、CPU/内存告警、Mermaid 流程图

一、整体架构图 Mermaid

暴露服务器硬件指标

物理/云服务器

node-exporter容器 9100端口

Prometheus

Grafana 展示CPU/内存曲线

告警规则 CPU高、内存溢出

node-exporter 专门抓取 Linux 系统层指标:CPU使用率、总内存/可用内存、Swap、磁盘IO、负载等。

二、Docker 部署 node-exporter 🐳

1. 启动 node-exporter 容器

dockerrun-d\--namenode-exporter\--net=host\--pid=host\-v/:/host:ro,rslave\-v/run/udev:/run/udev:ro\quay.io/prometheus/node-exporter:v1.8.2\--path.rootfs=/host
  • --net=host:共享宿主机网络,暴露 9100 端口
  • --pid=host:读取宿主机进程、CPU、内存信息
    访问指标地址:http://服务器IP:9100/metrics

三、修改 Prometheus 配置 prometheus.yml

新增抓取 node-exporter 的 job,同时保留之前 Java JVM 任务:

global:scrape_interval:10sevaluation_interval:10srule_files:-"alert-rules.yml"scrape_configs:# 1、Java JVM监控(原有)-job_name:"java-jvm-demo"metrics_path:"/actuator/prometheus"static_configs:-targets:["host.docker.internal:8080"]labels:service:java-app# 2、服务器宿主机监控CPU/内存-job_name:"linux-server-node"static_configs:-targets:["host.docker.internal:9100"]labels:env:production

重启 Prometheus 生效:

docker-composerestart prometheus

打开 PrometheusStatus -> Targets,看到linux-server-node状态 UP 即采集成功。

四、核心CPU、内存 PromQL 查询语句 📊

1. CPU 使用率(常用)

1)单CPU核心空闲率,计算1分钟内非空闲CPU占比
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
  • 结果:0~100,代表整机CPU总使用率
2)各核心CPU使用率
100 - (irate(node_cpu_seconds_total{mode="idle"}[1m]) * 100)
3)系统负载 1分钟/5分钟/15分钟
node_load1 node_load5 node_load15

2. 内存使用率

1)物理内存使用率(百分比)
(1 - node_memory_MemFree_bytes / node_memory_MemTotal_bytes) * 100
2)可用内存(MB)
node_memory_MemFree_bytes / 1024 / 1024
3)Swap交换分区使用率
(1 - node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes) * 100

五、Grafana 服务器监控大盘导入

官方 Linux Node 监控模板 ID:1860

  1. Grafana -> Import,输入 1860
  2. 数据源选择 Prometheus
    自动生成完整面板:
  • CPU总使用率、单核曲线、CPU上下文切换
  • 内存、Swap、缓存、缓冲区占用
  • 磁盘读写、磁盘使用率、网络流量

六、CPU/内存告警规则 alert-rules.yml ⚠️

groups:-name:server-resource-alertrules:# CPU使用率超过85%持续5分钟告警-alert:ServerCpuHighexpr:100-(avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)>85for:5mlabels:severity:warningannotations:summary:"服务器CPU使用率过高"description:"机器{{$labels.instance}} CPU使用率 {{$value}}%,持续超过85%"# 内存使用率超过90%持续3分钟严重告警-alert:ServerMemHighexpr:(1-node_memory_MemFree_bytes / node_memory_MemTotal_bytes) * 100>90for:3mlabels:severity:criticalannotations:summary:"服务器内存占用过高,存在OOM风险"description:"机器{{$labels.instance}} 内存使用率 {{$value}}%"# Swap大量使用,内存不足-alert:ServerSwapUsedexpr:(1-node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes) * 100>50for:2mlabels:severity:warningannotations:summary:"Swap交换分区占用过高"

七、整合进 docker-compose.yml(完整容器编排)

原有 compose 增加 node-exporter 服务:

version:'3.8'volumes:prom_data:grafana_data:services:prometheus:image:prom/prometheus:v2.47.0container_name:prometheusports:-"9090:9090"volumes:-./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml-./prometheus/alert-rules.yml:/etc/prometheus/alert-rules.yml-prom_data:/prometheuscommand:-'--config.file=/etc/prometheus/prometheus.yml'-'--storage.tsdb.retention.time=15d'extra_hosts:-"host.docker.internal:host-gateway"restart:unless-stoppedgrafana:image:grafana/grafana:10.2.0container_name:grafanaports:-"3000:3000"volumes:-grafana_data:/var/lib/grafanaenvironment:-GF_SECURITY_ADMIN_USER=admin-GF_SECURITY_ADMIN_PASSWORD=123456depends_on:-prometheusrestart:unless-stopped# 新增:服务器资源采集器node-exporter:image:quay.io/prometheus/node-exporter:v1.8.2container_name:node-exporternetwork_mode:hostpid:hostvolumes:-/:/host:ro,rslave-/run/udev:/run/udev:rocommand:---path.rootfs=/hostrestart:unless-stopped

一键启动:

docker-composeup-d

八、常见问题 💡

  1. Targets 显示 DOWN
    • Linux 环境不能用host.docker.internal,target 改为172.17.0.1:9100
    • 防火墙放行 9100、9090、3000 端口
  2. CPU 指标全为0
    node-exporter 必须加--net=host --pid=host才能读取宿主机硬件数据
  3. 内存指标不准
    使用node_memory_MemFree_bytes,不要用缓存内存做判断

九、区分两个监控范围(重点)

  1. node-exporter:服务器整机CPU、内存、磁盘、系统负载
  2. SpringBoot actuator/prometheus:单个Java进程JVM堆、GC、线程、应用CPU占用

两者搭配使用,既能看机器资源,又能定位是哪个Java服务吃光CPU/内存。

http://www.jsqmd.com/news/1241951/

相关文章:

  • 【Python毕业设计】基于 Python 爬虫与数据分析的膳食健康系统智能化饮食营养评估与膳食规划系统 (源码+文档+远程调试,全bao定制等)
  • 嵌入式接口时序设计实战:从OMAP5912手册到PCB布局的完整指南
  • C++实现十六进制转二进制:查表法、位运算与工程实践详解
  • 022、VanillaNet与FasterNet骨干:极简架构与快速网络的检测性能对比
  • 游戏分发平台技术架构与商业模式解析
  • 分布式事务:让多个数据库“步调一致“
  • Mac Studio芯片升级与散热技术解析
  • 2026三明市政桥梁道路加固排名 TOP5 资质齐全提供桥面加固、边坡加固、混凝土加固一站式服务 联系方式推荐 - 科信检测
  • 匠心焕新|帝舵2026售后网络升级,全新热线守护时计 - 帝舵售后服务中心官网
  • 为啥每家都在做 Agent
  • 多线程学习:线程与进程
  • OMAP5912处理器接口详解:信号描述、硬件设计与调试指南
  • 智能体个人信息保护公约发布:开发者合规指南与技术实践
  • 如何找到靠谱的 GEO 服务商(2026 行业测评) - xiaotaokeji
  • 深入解析TI ePWM核心机制:时间基准同步与计数器比较模块实战指南
  • 2026金华防水补漏靠谱机构测评,房屋漏水维修问答详解,免砸砖测漏+固定报价省心不踩坑 - 宅安选房屋修缮
  • 濮阳钢材采购濮阳市鑫瑞源商贸有限公司:行业盘点与避坑攻略 - 百航
  • 亚马逊竞品跟踪系统:双引擎架构与智能分析实践
  • 主流AI搜索方案横向评测(LlamaIndex vs Vespa vs OpenSearch+LLM插件):实测QPS、召回率、RAG延迟三维度硬核对比
  • Kafka分布式消息系统入门与实战指南
  • 158.2026年国家级科研瓶颈 磁悬浮主轴电磁轴承刚度与阻尼主动控制
  • 阿布昔替尼Abrocitinib规范给药方案、剂量调整与正确服用方法【海得康】
  • GPT-5.6 Codex误删用户家目录文件,数据丢失风险高
  • 鸿蒙Flutter 页面过渡动画:默认动画与自定义动画实现
  • 紧跟大盘金价!2026 杭州如何辨别透明公正的黄金回收商家 - 奢侈品回收评测
  • 洛阳综合汽修的差异化核心优势,到底在哪里?2026 实测告诉你:120 人一类资质综合厂,用技术+理赔+法务三位一体打破传统修理厂天花板 - 速递信息
  • ARM Cortex-A MPU子系统时钟、复位与电源管理深度解析与实战
  • 语义搜索赋能图像生成:技术实现与创意突破
  • 2026最新北京卡地亚中国维修中心,官方认证地址查询,专属服务电话权威信息公示 - 卡地亚官方维修中心
  • Unity中OSGB倾斜摄影模型加载优化:流式调度、GPU Instancing与预处理实战