扩展1-node_exporter使用

node_exporter

node_exporter 是 Prometheus 生态中核心的主机监控采集器,通过暴露 metrics 接口提供服务器 CPU、内存、磁盘、网络等基础监控指标。其参数主要用于启用 / 禁用指标采集、配置采集规则、安全加固、网络配置等场景

一、安装使用

  • 下载安装

    bash 复制代码
    [root@localhost prometheus]# tar xf node_exporter-1.10.2.linux-amd64.tar.gz
    [root@localhost prometheus]# mkdir /data/node_exporter -p
    [root@localhost prometheus]# mv node_exporter-1.10.2.linux-amd64/* /data/node_exporter/
    [root@localhost prometheus]# chmod 777 /data/node_exporter/ -R
    [root@localhost prometheus]# cd /data/node_exporter/
    [root@localhost node_exproter]# ll
    总用量 22400
    -rw-r--r-- 1 1001 1002    11357 10月 26 04:10 LICENSE
    -rwxr-xr-x 1 1001 1002 22919216 10月 26 04:06 node_exporter
    -rw-r--r-- 1 1001 1002      463 10月 26 04:10 NOTICE
  • 配置启动项 <-- 启动参数往下看

    bash 复制代码
    cat > /usr/lib/systemd/system/node-exporter.service << EOF
    [Unit]
    Description=Node Exporter
    After=network.target
    
    [Service]
    ExecStart=/data/node_exporter/node_exporter \
    --collector.systemd \
    --collector.systemd.unit-include="(ssh|prometheus).service" \
    --collector.filesystem.ignored-fs-types="^(tmpfs|sysfs|proc|overlayfs|cgroup)$" \
    --collector.netdev.ignored-devices="^(lo|docker0|cni0|flannel.*)$"
    ExecReload=/bin/kill -HUP \$MAINPID
    TimeoutStopSec=20s
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    EOF
  • 启动并检查

    bash 复制代码
    [root@localhost data]# systemctl restart node-exporter
    [root@localhost data]# systemctl status node-exporter
       Active: active (running) since 五 2025-11-07 02:28:54 CST; 4s ago
               └─4684 /data/node_exporter/node_exporter --collector.systemd --collector.systemd.unit-include="(ssh|prometheus).service"
               
    [root@localhost data]# ss -tnlp
    LISTEN     0      32768                                   [::]:9100                                                [::]:*                   users:(("node_exporter",pid=4684,fd=3))

二、参数说明

2.1、基础配置参数

  • 参数

    参数名称 说明 适用场景
    --web.listen-address 指定监听地址和端口,默认 0.0.0.0:9100 避免端口冲突、限制内网访问
    --web.telemetry-path 自定义 metrics 暴露路径,默认 /metrics 配合反向代理隐藏真实路径
    --log.level 设置日志级别,可选 debug/info/warn/error,默认 info 调试问题(debug)、生产环境减少日志(warn)
    --web.max-requests 限制最大并发请求数,默认无限制 防止大量请求压垮 exporter
    --web.allow-origin 限制跨域访问的域名 配合前端监控面板跨域请求
    --web.config.file 指定 TLS/HTTPS 和 Basic Auth 配置文件路径 生产环境安全加固(HTTPS + 身份认证)
  • 示例

    bash 复制代码
    # 1. --web.listen-address:修改监听端口或限制访问IP
    --web.listen-address=":9101"  # 仅修改端口为9101,避免默认9100端口冲突
    --web.listen-address="192.168.1.100:9100"  # 仅允许内网IP 192.168.1.100监听,增强安全性
    
    # 2. --web.telemetry-path:自定义指标暴露路径
    --web.telemetry-path="/node/metrics"  # 隐藏默认的/metrics路径,配合反向代理隐藏真实接口
    
    # 3. --log.level:调整日志输出级别
    --log.level="debug"  # 调试场景启用,输出详细采集日志,用于排查指标采集失败问题
    --log.level="warn"  # 生产环境使用,仅输出警告和错误日志,减少磁盘日志占用
    
    # 4. --web.max-requests:限制最大并发请求数
    --web.max-requests=10  # 限制同时处理最多10个请求,避免高并发场景下exporter过载
    
    # 5. --web.allow-origin:限制跨域访问域名
    --web.allow-origin="https://prometheus.example.com"  # 仅允许Prometheus前端域名跨域请求指标,防止非法跨域访问
    
    # 6. --web.config.file:加载安全配置文件
    --web.config.file="/etc/node_exporter/web-config.yml"  # 加载TLS证书和Basic Auth配置,生产环境必配以保障指标安全

2.2、指标采集控制参数

  • 参数

    参数名称 说明 适用场景
    --collector.<NAME>.enabled=true/false 启用 / 禁用指定采集器(<NAME> 为采集器名) 按需开启 / 关闭指标,减少资源占用
    --no-collector.<NAME> 快速禁用采集器(等价于 --collector.<NAME>.enabled=false 批量禁用无用采集器,简化配置
    --collector.filesystem.ignored-mount-points 正则匹配需要忽略的文件系统挂载点 过滤虚拟目录、临时目录等无效挂载点指标
    --collector.filesystem.ignored-fs-types 正则匹配需要忽略的文件系统类型 忽略 tmpfs、sysfs 等虚拟文件系统指标
    --collector.netdev.ignored-devices 正则匹配需要忽略的网络设备 过滤回环网卡、容器虚拟网卡等无效网络指标
    --collector.textfile.directory 指定自定义静态指标的文本文件目录 暴露业务自定义指标(如应用状态、版本)
  • 示例

    bash 复制代码
    # 1. --collector.<NAME>.enabled:精确控制采集器启用/禁用
    --collector.diskstats.enabled=false # 禁用磁盘IO采集器(无需监控磁盘读写性能时使用)
    --collector.meminfo.enabled=true  	# 强制启用内存采集器(核心监控项,默认已启用)
    
    # 2. --no-collector.<NAME>:快速禁用采集器(批量操作更简洁)
    --no-collector.processes  			# 禁用进程指标采集(进程极多的容器主机建议禁用)
    --no-collector.netstat  			# 禁用TCP连接状态采集(无需监控连接数时使用)
    --no-collector.nfs  				# 禁用NFS相关指标(未使用NFS服务时禁用)
    
    # 3. --collector.filesystem.ignored-mount-points:忽略无效挂载点
    --collector.filesystem.ignored-mount-points="^/(sys|proc|tmp|var/tmp)($|/)"  # 忽略/sys、/proc等虚拟目录和临时目录
    
    # 4. --collector.filesystem.ignored-fs-types:忽略虚拟文件系统
    --collector.filesystem.ignored-fs-types="^(tmpfs|sysfs|proc|overlayfs|nfs)$"  # 忽略tmpfs、overlayfs等非物理文件系统
    
    # 5. --collector.netdev.ignored-devices:过滤无效网络设备
    --collector.netdev.ignored-devices="^(lo|docker0|cni0|flannel.*)$"  # 忽略回环网卡、容器虚拟网卡
    
    # 6. --collector.textfile.directory:启用自定义指标采集
    --collector.textfile.directory="/etc/node_exporter/textfile"  # 读取该目录下.prom文件的自定义指标(如业务状态)

2.3、常用采集器启用

  • 参数

    参数(禁用示例) 对应采集器 指标含义 禁用场景
    --no-collector.diskstats diskstats 磁盘 IO 统计(读写速率、IO 耗时) 无需监控磁盘 IO 性能的轻量服务器
    --no-collector.processes processes 进程相关指标(进程数、状态分布) 容器集群主机、进程数极多的场景
    --no-collector.netstat netstat TCP 连接状态(ESTABLISHED/TIME_WAIT 等) 无需监控网络连接数的场景
    --no-collector.nfs nfs NFS 服务相关指标(挂载状态、IO) 未部署 NFS 服务的服务器
    --no-collector.sockstat sockstat Socket 连接统计(TCP/UDP 连接数) 无需监控 Socket 状态的场景
    --no-collector.filesystem filesystem 磁盘容量、挂载点状态等存储指标 无需监控磁盘存储使用情况的场景

2.4、安全加固

  • 参数

    参数名称 说明 适用场景
    --web.config.file 加载 TLS/HTTPS 配置和 Basic Auth 身份认证 生产环境、公网暴露、内网敏感环境
    --web.listen-address(指定内网 IP) 限制仅内网 IP 监听指标接口 仅允许内网 Prometheus 服务器访问
  • 示例

    bash 复制代码
    # 1. --web.config.file:启用HTTPS+Basic Auth(生产核心安全配置)
    --web.config.file="/etc/node_exporter/web-config.yml"  # 配置文件含TLS证书路径和认证信息
    
    # 2. --web.listen-address:限制内网访问(配合安全配置双重加固)
    --web.listen-address="172.16.0.0/24:9100"  # 仅允许172.16.0.0/24网段的内网IP访问
    
    
    # web-config.yml
    # 需提前生成TLS证书和Basic Auth认证文件
    tls_server_config:
      cert_file: /etc/node_exporter/certs/node_exporter.crt  # TLS证书文件路径
      key_file: /etc/node_exporter/certs/node_exporter.key   # TLS私钥文件路径
    basic_auth_users:
      prometheus: $2y$05$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  # Basic Auth加密后的用户名密码(用htpasswd生成)

2.5、实用组合配置示例

  • 场景1:轻量采集(容器主机/轻量服务器,减少资源占用)

    bash 复制代码
    node_exporter \
      --web.listen-address=":9100" \  # 默认端口,限制内网访问可改为192.168.1.0/24:9100
      --log.level="warn" \  		  # 生产日志级别
      --no-collector.diskstats \  	  # 禁用磁盘IO采集
      --no-collector.processes \  	  # 禁用进程采集
      --no-collector.netstat \  	  # 禁用TCP连接采集
      --collector.filesystem.ignored-mount-points="^/(sys|proc|tmp)($|/)" \  # 过滤无效挂载点
      --collector.netdev.ignored-devices="^(lo|docker0|cni0)$"  # 过滤虚拟网卡
  • 场景2:生产环境安全采集(HTTPS+自定义指标+核心监控)

    bash 复制代码
    node_exporter \
      --web.listen-address="192.168.1.100:9100" \  # 仅内网IP监听
      --web.config.file="/etc/node_exporter/web-config.yml" \  # HTTPS+Basic Auth
      --log.level="warn" \  # 减少日志量
      --collector.textfile.directory="/etc/node_exporter/textfile" \  # 启用自定义业务指标
      --collector.filesystem.ignored-fs-types="^(tmpfs|sysfs|proc)$" \  # 忽略虚拟文件系统
      --web.max-requests=20  # 限制最大并发请求数

三、常用核心指标

3.1、CPU 监控指标

  • 参数

    指标名称 指标含义 单位
    `node_cpu_seconds_total{mode=~"user system idle
    node_load1 / node_load5 / node_load15 系统 1 分钟、5 分钟、15 分钟平均负载(等待 CPU 调度的进程数) 无(进程数)
    node_cpu_cores CPU 物理核心数(部分版本需启用 --collector.cpu.info
  • 示例

    bash 复制代码
    # 1. 整体CPU使用率(5分钟平均,排除空闲时间,按实例分组)
    100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100)
    # 说明:rate()计算5分钟内空闲CPU的速率,100减后得到使用率
    
    # 2. IO等待占比(排查磁盘IO瓶颈,5分钟平均)
    avg(rate(node_cpu_seconds_total{mode="iowait"}[5m])) by (instance) * 100
    # 说明:IO等待占比过高(如>10%),通常意味着磁盘IO存在瓶颈

3.2、内存监控指标

  • 参数

    指标名称 指标含义 单位
    node_memory_MemTotal_bytes 物理内存总大小 字节(B)
    node_memory_MemAvailable_bytes 可用内存(系统估算可立即分配的内存,含空闲 + 可回收缓存) 字节(B)
    node_memory_Cached_bytes 页缓存大小(文件系统缓存,可回收) 字节(B)
    node_memory_SwapTotal_bytes / node_memory_SwapFree_bytes 交换分区总大小 / 空闲大小 字节(B)
  • 示例

    bash 复制代码
    # 1. 内存使用率(核心查询,按实例分组,结果更准确)
    100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 by (instance)
    # 说明:使用MemAvailable而非MemFree,因为包含可回收缓存,更贴近实际可用内存
    
    # 2. 已使用内存大小(转换为GB,直观查看)
    (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / 1024 / 1024 / 1024
    # 说明:总内存减可用内存得到已用内存,除以1024^3转换为GB单位
    
    # 3. 缓存占比(判断缓存是否占用过多内存)
    node_memory_Cached_bytes / node_memory_MemTotal_bytes * 100 by (instance)
    # 说明:缓存占比过高(如>50%)但应用内存充足时,无需处理(缓存可回收)
    
    # 4. 可用内存低于1GB告警规则(按实例匹配)
    node_memory_MemAvailable_bytes{instance=~".*"} < 1024*1024*1024
    # 说明:1024*1024*1024 即1GB,可根据服务器内存大小调整阈值

3.3、磁盘存储指标

  • 参数

    指标名称 指标含义 单位
    `node_filesystem_size_bytes{mountpoint=~"/ /data /var"}`
    `node_filesystem_avail_bytes{mountpoint=~"/ /data /var"}`
    node_filesystem_free_bytes 文件系统空闲容量(完全未使用的空间) 字节(B)
    node_filesystem_readonly{mountpoint="/"} 文件系统是否为只读(1 = 只读,0 = 可读写) 布尔值(0/1)
  • 示例

    bash 复制代码
    # 1. 磁盘容量使用率(过滤虚拟文件系统,按实例+挂载点分组)
    100 - (node_filesystem_avail_bytes{mountpoint='/',fstype!="tmpfs"} / node_filesystem_size_bytes) * 100
    # 说明:过滤tmpfs等虚拟文件系统,避免无效数据;关注根目录(/)和数据目录(/data)
    
    # 2. 根目录可用空间低于10GB告警(转换为字节计算)
    node_filesystem_avail_bytes{mountpoint="/",fstype!~"tmpfs"} < 10*1024*1024*1024
    # 说明:10*1024^3 即10GB,根据业务需求调整阈值(如数据库服务器可设更大)
    
    # 3. 根目录空闲空间(转换为GB,直观查看)
    node_filesystem_free_bytes{mountpoint="/",fstype!~"tmpfs"} / 1024 / 1024 / 1024
    # 说明:free与avail的区别:free是完全未使用,avail是普通用户可使用(排除root预留)

3.4、网络监控指标

  • 参数

    指标名称 指标含义 单位
    `node_network_transmit_bytes_total{device!~"lo docker0 cni0"}`
    `node_network_receive_bytes_total{device!~"lo docker0 cni0"}`
    node_network_transmit_errors_total / node_network_receive_errors_total 网卡发送 / 接收错误数(累计,如丢包、校验错误)
    node_netstat_Tcp_CurrEstab 当前 ESTABLISHED 状态的 TCP 连接数
  • 示例

    bash 复制代码
    # 1. 网卡发送速率(每秒,5分钟平均,指定物理网卡eth0)
    rate(node_network_transmit_bytes_total{device="eth0"}[5m])
    # 说明:rate()计算累计字节数的每秒速率,单位为B/s;需替换为实际物理网卡名称(如ens33)
    
    # 2. 网卡接收速率(每秒,5分钟平均,转换为MB/s更直观)
    rate(node_network_receive_bytes_total{device="eth0"}[5m]) / 1024 / 1024
    # 说明:除以1024^2转换为MB/s,适合监控带宽使用情况
    
    # 3. 当前ESTABLISHED TCP连接数(监控连接数是否过高)
    node_netstat_Tcp_CurrEstab{instance="目标实例IP:9100"}
    # 说明:连接数过高(如>10000)可能导致端口耗尽,需结合业务调整阈值
    
    # 5. 网卡总吞吐量(发送+接收,MB/s,5分钟平均)
    (rate(node_network_transmit_bytes_total{device="eth0"}[5m]) + rate(node_network_receive_bytes_total{device="eth0"}[5m])) / 1024 / 1024
    # 说明:用于监控网卡带宽是否接近上限(如1G网卡上限约125MB/s)

3.5、磁盘 IO 指标

  • 参数

    指标名称 指标含义 单位
    `node_disk_read_bytes_total{device!~"loop.* sr0"}` 磁盘读取字节数(累计,排除虚拟磁盘 / 光驱)
    `node_disk_written_bytes_total{device!~"loop.* sr0"}` 磁盘写入字节数(累计,排除虚拟磁盘 / 光驱)
    node_disk_io_time_seconds_total 磁盘 IO 累计耗时 秒(s)
    node_disk_io_now 当前正在进行的磁盘 IO 请求数(磁盘繁忙度)
  • 示例

    bash 复制代码
    # 1. 磁盘读速率(每秒,5分钟平均,指定物理磁盘sda)
    rate(node_disk_read_bytes_total{device="sda"}[5m])
    # 说明:适用于监控磁盘读取性能,数据库服务器需重点关注
    
    # 2. 磁盘写速率(每秒,5分钟平均,转换为MB/s)
    rate(node_disk_written_bytes_total{device="sda"}[5m]) / 1024 / 1024
    # 说明:写入速率过高(如SSD>500MB/s、HDD>100MB/s)可能达到磁盘性能上限
    
    # 3. 磁盘IO使用率(5分钟平均,反映磁盘繁忙程度)
    avg(rate(node_disk_io_time_seconds_total{device="sda"}[5m])) by (instance) * 100
    # 说明:IO使用率>80% 表示磁盘繁忙,可能导致应用响应缓慢
    
    # 4. 磁盘当前IO请求数(实时繁忙度)
    node_disk_io_now{device="sda"}
    # 说明:普通SATA盘并发IO能力约10-20,SSD约1000+;超过磁盘能力会导致队列堆积
    
    # 5. 5分钟内磁盘IO请求累计数(评估磁盘IO压力)
    increase(node_disk_io_time_seconds_total{device="sda"}[5m])
    # 说明:请求数持续过高,需检查是否有大量随机读写操作

3.6、系统状态指标

  • 参数

    指标名称 指标含义 单位
    node_procs_running 当前运行状态(R 状态)的进程数
    node_procs_blocked 被阻塞(D 状态)的进程数(等待 IO 等资源)
  • 示例

    bash 复制代码
    # 3. 运行状态(R状态)进程数异常增长(5分钟内增长超过10个)
    increase(node_procs_running{instance="目标实例IP:9100"}[5m]) > 10
    # 说明:R状态进程数激增可能是应用异常(如死循环创建进程)
    
    # 4. 阻塞状态(D状态)进程数告警(超过5个需关注)
    node_procs_blocked{instance="目标实例IP:9100"} > 5
    # 说明:D状态进程数过高通常是IO瓶颈导致(如磁盘读写阻塞)

四、预警

  • prometheus配置

    bash 复制代码
    rule_files:
       - "/data/prometheus/rules/node_alter.yml"
       
    # 检查语法
    prometheus]# ./promtool check config prometheus.yml 
  • /data/prometheus/rules/node_alter.yml

    bash 复制代码
    groups:
    # 节点、CPU、磁盘、内存
      - name: 节点监控
        rules:
          - alert: 节点下线
            expr: up == 0
            for: 5m
            labels:
              severity: info
            annotations:
              title: 节点下线
              description: "节点 {{ $labels.instance }} node_export 服务已下线,请排查。"
          - alert: 节点CPU使用率过高
            expr: (1 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])))) * 100 > 90
            for: 5m
            labels:
              severity: warning
            annotations:
              title: 节点CPU使用率过高
              description: "节点 {{ $labels.instance }} CPU 使用率已持续 {{ $value | humanizeDuration }} 超过 85%,当前值:{{ $value | humanizePercentage }},请排查高负载进程。"
              runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-nodecpuexceededthreshold
          - alert: 节点内存使用率过高
            expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
            for: 5m
            labels:
              severity: info
            annotations:
              title: "节点 {{ $labels.instance }} 内存使用率过高"
              description: "节点 {{ $labels.instance }} 内存使用率已持续 {{ $value | humanizeDuration }} 超过 85%,当前值:{{ $value | humanizePercentage }},请排查高负载进程。"
          - alert: 节点磁盘使用率过高
            expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 > 95
            for: 5m
            labels:
              severity: warning
            annotations:
              title: "节点 {{ $labels.instance }} 磁盘使用率过高"
              description: "节点 {{ $labels.instance }} 磁盘使用率已持续 {{ $value | humanizeDuration }} 超过 90%,当前值:{{ $value | humanizePercentage }},请排查高负载进程。"
          - alert: 磁盘将耗尽
            expr: predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[6h], 3600) < 0
            for: 5m
            labels:
              severity: warning
            annotations:
              title: "节点 {{ $labels.instance }} 磁盘将耗尽"
              description: "节点 {{ $labels.instance }} 磁盘将耗尽,请清理磁盘。"
相关推荐
h***01541 天前
【prometheus】Pushgateway安装和使用
prometheus
meijinmeng2 天前
Monit-基于非容器服务自恢复程序实践
shell·监控
优质&青年2 天前
【Operator prometheus监控系列三---业务监控】
运维·云原生·kubernetes·自动化·prometheus
优质&青年4 天前
【Operator pormetheus监控系列四----.alertmanager和Rules服务配置】
运维·云原生·kubernetes·prometheus
清风一徐5 天前
K8S环境中通过prometheus实现flink服务监控并给flink设置服务监测自动重启
linux·运维·云原生·容器·flink·kubernetes·prometheus
小坏讲微服务7 天前
Spring Cloud Alibaba整合SkyWalking的监控完整使用
java·微服务·架构·springcloud·监控·skywalking·java微服务
xixixi777777 天前
通信电子围栏——对特定终端(手机/物联网卡)进行实时监控和预警
安全·监控·通信·电子围栏·电子边界
xixixi777778 天前
了解一下Sentry(一个开源的实时错误监控平台)
前端·安全·开源·安全威胁分析·监控·sentry
q***48318 天前
【监控】Spring Boot+Prometheus+Grafana实现可视化监控
spring boot·grafana·prometheus