Node Exporter与Prometheus实现Linux系统监控实战指南

发布时间:2026/11/2 2:35:40
Node Exporter与Prometheus实现Linux系统监控实战指南 1. 为什么选择node_exporterPrometheus监控Linux系统在运维领域系统监控就像给服务器装上健康监测仪。传统的监控方案如Zabbix虽然功能全面但配置复杂、资源消耗大。而Prometheusnode_exporter的组合则像一把精准的手术刀——轻量、专注、响应迅速。node_exporter是Prometheus生态中专用于*nix系统监控的采集器它能暴露800系统指标包括CPU使用率user/system/iowait等状态占比内存消耗已用/缓存/交换分区情况磁盘I/O吞吐量和延迟网络带宽和错误包统计系统负载和进程状态这些指标通过/metrics接口以文本形式暴露Prometheus定时抓取后存入时间序列数据库。相比传统方案这套组合有三大优势多维数据模型每个指标可带多标签如node_cpu_seconds_total{cpu0,modeuser}便于细粒度分析强大的PromQL支持瞬时向量、区间向量查询能直接计算CPU使用率等衍生指标低侵入性node_exporter仅需5MB内存对生产环境影响极小提示虽然Windows系统可使用windows_exporter但node_exporter在Linux下的指标覆盖更全面特别是对/proc和/sys文件系统的深度采集。2. 从零部署node_exporter实战指南2.1 二进制包安装推荐生产环境最新版node_exporter可从 GitHub Releases 获取。以1.6.1版本为例# 下载适用于Linux AMD64架构的版本 wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz # 解压并进入目录 tar xvfz node_exporter-*.tar.gz cd node_exporter-*/ # 直接运行默认监听9100端口 ./node_exporter此时访问http://服务器IP:9100/metrics将看到如下指标片段# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode. # TYPE node_cpu_seconds_total counter node_cpu_seconds_total{cpu0,modeidle} 38245.67 node_cpu_seconds_total{cpu0,modesystem} 1045.322.2 配置系统服务实现开机自启生产环境建议通过systemd管理服务sudo cat EOF /etc/systemd/system/node_exporter.service [Unit] DescriptionNode Exporter Afternetwork.target [Service] Usernode_exporter Groupnode_exporter ExecStart/usr/local/bin/node_exporter \ --collector.systemd \ --collector.tcpstat [Install] WantedBymulti-user.target EOF # 创建专用用户 sudo useradd -rs /bin/false node_exporter # 复制二进制文件 sudo cp node_exporter /usr/local/bin/ # 启动服务 sudo systemctl daemon-reload sudo systemctl enable --now node_exporter常用启动参数说明--web.listen-address:19100修改监听端口--collector.disable-defaults禁用默认采集器--collector.filesystem.ignored-mount-points忽略特定挂载点2.3 安全加固措施暴露9100端口存在风险建议使用Nginx反向代理添加Basic Authlocation /metrics { auth_basic Node Exporter; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://localhost:9100; }或通过iptules限制访问IPiptables -A INPUT -p tcp --dport 9100 -s 监控服务器IP -j ACCEPT iptables -A INPUT -p tcp --dport 9100 -j DROP3. Prometheus服务端配置详解3.1 基础抓取配置在prometheus.yml中添加job配置scrape_configs: - job_name: node scrape_interval: 15s static_configs: - targets: [192.168.1.10:9100, 192.168.1.11:9100] relabel_configs: - source_labels: [__address__] target_label: instance regex: (.*):.* replacement: $1关键配置解析scrape_interval抓取频率生产环境建议15-30smetrics_path默认为/metrics如需修改需与node_exporter启动参数一致relabel_configs重写标签规则示例中将IP:PORT格式转为纯IP3.2 使用服务发现动态管理目标对于大规模集群建议使用文件服务发现创建目标列表文件nodes.json[ { targets: [10.0.1.2:9100], labels: { env: prod, role: db } } ]修改prometheus.ymlscrape_configs: - job_name: node file_sd_configs: - files: [/etc/prometheus/nodes.json] refresh_interval: 5m3.3 关键指标告警规则示例在rules/node.yml中定义告警规则groups: - name: node_alerts rules: - alert: HighCPUUsage expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100) 80 for: 10m labels: severity: warning annotations: summary: High CPU usage on {{ $labels.instance }} description: CPU usage is {{ $value }}% - alert: MemoryPressure expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 20 for: 5m labels: severity: critical4. 高级监控场景实战4.1 监控Docker容器node_exporter默认只能监控主机需配合cAdvisordocker run -d \ --namecadvisor \ -v /:/rootfs:ro \ -v /var/run:/var/run:ro \ -v /sys:/sys:ro \ -v /var/lib/docker/:/var/lib/docker:ro \ -p 8080:8080 \ gcr.io/cadvisor/cadvisor:v0.47.0Prometheus配置示例- job_name: cadvisor static_configs: - targets: [docker-host:8080]4.2 自定义文本文件收集器通过textfile收集器采集脚本输出创建采集目录mkdir -p /var/lib/node_exporter/textfile_collector添加启动参数--collector.textfile.directory/var/lib/node_exporter/textfile_collector示例脚本/home/scripts/check_ssl.sh#!/bin/bash echo # HELP ssl_expire_days SSL certificate expire days /var/lib/node_exporter/textfile_collector/ssl.prom echo # TYPE ssl_expire_days gauge /var/lib/node_exporter/textfile_collector/ssl.prom openssl x509 -enddate -noout -in /etc/nginx/ssl/cert.pem | awk -F /notAfter/{print ssl_expire_days{domain\example.com\} (systime()-mktime(gensub(/ /, ,g,$2)))/86400} /var/lib/node_exporter/textfile_collector/ssl.prom4.3 使用Grafana可视化监控数据推荐仪表盘模板Node Exporter FullID 1860Linux Hosts MetricsID 11074配置步骤添加Prometheus数据源导入仪表盘JSON调整变量如$interval和$datasource关键面板建议CPU使用率100 - (avg by(instance)(rate(node_cpu_seconds_total{modeidle}[$__rate_interval])) * 100)内存使用(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100磁盘空间node_filesystem_avail_bytes{mountpoint/} / node_filesystem_size_bytes{mountpoint/} * 1005. 性能调优与故障排查5.1 资源占用优化当监控数百节点时需注意禁用不必要采集器如wifi、nfs--no-collector.wifi --no-collector.nfs调整Prometheus存储参数storage: tsdb: retention: 15d wal_compression: true使用Recording Rules预计算常用指标groups: - name: node_rules rules: - record: instance:node_cpu:avg_rate5m expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100)5.2 常见问题处理指标缺失排查流程检查node_exporter日志journalctl -u node_exporter -f手动访问metrics接口curl -s http://localhost:9100/metrics | grep node_memory验证Prometheus抓取状态访问/targets查看job状态检查up{jobnode}指标是否为1典型错误处理出现context deadline exceeded增加scrape_timeout指标值异常检查是否启用对应采集器如网络指标需netdev采集器时间戳不匹配确保所有节点时间同步chrony或ntpd我在实际运维中发现当node_exporter版本低于1.3时在多核CPU服务器上可能出现node_cpu指标不全的问题。解决方法很简单——升级到最新稳定版即可。另一个容易忽略的点是如果使用非root用户运行部分指标如node_sockstat_*会因权限不足无法采集这时需要给该用户增加/proc和/sys的读取权限。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询