node_exporter 是一个用于采集和导出主机(节点)上系统和硬件信息的开源软件。它是 Prometheus 生态系统中的一个重要组件。Prometheus 是一个用于监控和警报的开源系统,而 node_exporter 则是用于收集节点级别的指标数据,以便 Prometheus 可以定期拉取这些数据进行监控和分析。

node_exporter 通过暴露一个 HTTP 端点,Prometheus 定期从这个端点获取有关节点的信息。它能够提供各种系统指标:

  1. CPU 使用率: 包括每个核心的使用率和总体 CPU 负载。
  2. 内存使用情况: 包括总内存、空闲内存、缓存和交换空间使用情况。
  3. 磁盘空间: 提供有关磁盘分区和文件系统的信息。
  4. 网络统计: 包括网络接口的流量、错误和丢包等信息。
  5. 系统负载: 提供系统的负载平均值。
  6. 进程和线程信息: 包括运行的进程和线程数量等。

这些信息对于系统管理员、运维团队和开发人员来说都是非常有价值的,因为它们可以用来监测系统的性能、识别潜在的问题并采取相应的措施。

通过将 node_exporter 集成到 Prometheus 中,用户可以使用 PromQL 查询语言对这些指标进行灵活的查询和分析,并设置警报规则以在特定条件下触发警报。这样,用户可以更好地了解其系统的状态并采取必要的措施以确保系统的可用性和性能。

一、node_exporter的部署与安装

1.1 下载 node_exporter:

下载node_exporter到本地:https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz

//下载
yum -y install wget
wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz

//解压
tar -zvxf node_exporter-1.4.0.linux-amd64.tar.gz   -C /usr/

//重命名
cd /usr

mv node_exporter-1.4.0.linux-amd64.tar.gz  node_exporter

1.2 创建 node_exporter 用户

 为了安全性,可以创建一个专用的用户来运行 node_exporter

groupadd prometheus

useradd -g prometheus -s /sbin/nologin prometheus

chown -R prometheus:prometheus /usr/node_exporter/
  • useradd: 创建新用户的命令。
  • -g prometheus: 指定新用户的初始登录组为 prometheus。这表示新用户会加入 prometheus 组。
  • -s /sbin/nologin: 指定新用户的登录shell。/sbin/nologin 是一个特殊的shell,它通常用于系统用户,以禁止该用户登录系统。这样的用户通常用于运行服务或进程,而不需要实际的交互式登录权限。
  • prometheus: 新用户的用户名。

1.3 创建 Systemd 服务文件

vim /usr/lib/systemd/system/node_exporter.service

[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/node_exporter/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

[Unit]: 这是一个服务单元的基本部分,提供有关服务的元数据和依赖性信息。

  • Description: 服务的描述信息,指定为 node_exporter
  • Documentation: 提供关于服务的文档链接,通常是官方文档链接。
  • After=network.target: 指定服务在 network.target 启动之后启动。表示该服务依赖于网络的正常运行。

[Service]: 这是定义服务的实际执行方式和行为的部分。

  • Type=simple: 指定服务的类型为 simple,表示 node_exporter 是一个简单的后台进程,Systemd 不会认为服务在启动完成前已经准备好。
  • User=prometheus: 指定服务运行时使用的用户为 prometheus。这有助于提高服务运行的安全性。
  • ExecStart=/usr/local/node_exporter/node_exporter: 指定服务启动时执行的命令,即启动 node_exporter
  • ExecReload=/bin/kill -HUP $MAINPID: 定义当服务需要重新加载时执行的命令。在这里,它发送 HUP 信号给主进程,通常用于重新加载配置。
  • KillMode=process: 定义服务停止时的杀死模式,这里指定为 process,表示只杀死主进程而不影响子进程。
  • Restart=on-failure: 指定服务在发生故障时重启。

[Install]: 这是定义服务如何安装的部分。

  • WantedBy=multi-user.target: 指定服务作为 multi-user.target 的一个关联单元,表示当系统进入多用户模式时,这个服务应该被启用。

1.4 启动并启用服务

启动 node_exporter 服务,并设置为在系统启动时自动启用:

 systemctl start node_exporter

 systemctl enable node_exporter

验证服务运行: 检查 node_exporter 服务是否正常运行:

systemctl status node_exporter

1.5 配置 Prometheus 收集数据

vim /usr/prometheus/prometheus.yml

- job_name: "node_exporter"
    scrape_interval: 10s
    static_configs:
      - targets: ['192.168.118.135:9100']
        labels:
          instance: node_exporter001

检查prometheus.yml格式

./promtool check config prometheus.yml

.重启prometheus

systemctl  restart prometheus

1.6 Prometheus 的 Web 界面中查看有关节点信息 

查看node 节点已经被监控

f8e5a43df1254ab9956562b0120f5fea.png

二、node_exporter 查询语句

1.查看节点的 CPU 使用率:

100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

e5b5bb5526fe4b6691a91cdbaa11443a.png 2.查看可用内存百分比:

(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

470feea977104bddadc6820a75350a40.png

 3.查看磁盘空间使用率:

(1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100

 5f08a797347843f5bee4181fdd49142f.png

4.查看网络接口流量:


sum(irate(node_network_receive_bytes_total{device="eth0"}[5m])) / 1024

此查询计算了过去 5 分钟内以千字节为单位的 eth0 网络接口的接收速率。

5.查看系统负载:

node_load1

e39cb61dfaa2429ead9be59da10c5133.png

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

 

1.获取系统信息:

node_uname_info

4f5925fd25d744a790ba870a24458676.png

此查询返回有关节点操作系统的信息,如内核版本、主机名等。

2.获取系统 uptime 时间:

sum(time() - node_boot_time_seconds) by (instance)

7a0db061c1f74569b27ee6e1cd8f77ab.png

通过计算当前时间与系统启动时间的差值的总和,您可以获取节点的累积运行时间。

3.系统启动时间:

node_boot_time_seconds

091ce32901084ce497a861baccc0606e.png

此查询返回节点的启动时间戳。

4.系统当前时间:

time()

ade3437dfb674eaa81b90c179cda762d.png

此查询返回当前时间戳。

5.CPU核数:

count(node_cpu_seconds_total{mode='system'}) by (instance)

1aa73e9091f847d6a10c4c9085776ab6.png

通过计算 node_cpu_seconds_total 指标的数量,您可以获取每个实例的 CPU 核数。

6.计算 CPU 使用率:

(1 - sum(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) / sum(rate(node_cpu_seconds_total[1m])) by (instance) ) * 100

019d8ce4929c433db3c78a2b22ea57d7.png

此查询计算 CPU 的使用率,基于 node_cpu_seconds_total 指标中的 idle 模式。

7.计算内存使用率:

(1- (node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes) / node_memory_MemTotal_bytes) * 100

fe7634b3ff1a47b69a9723fe28b3126d.png

此查询计算节点的内存使用率,考虑了缓存和空闲内存。

8.查看节点总内存:

node_memory_MemTotal_bytes/1024/1024/1024

此查询将节点的总内存从字节转换为 GB。

a3b4ab747e834d93b677d5b40bdbf69c.png

9.计算磁盘使用率:

(1 - node_filesystem_avail_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"}) * 100

此查询计算节点磁盘的使用率,基于 node_filesystem_avail_bytesnode_filesystem_size_bytes

e4793c4f0a844cd79ed24b205913a6cb.png

11.磁盘IO:

  • 磁盘读 IO 使用:

    sum by (instance) (rate(node_disk_reads_completed_total[5m]))

8dadf242366249d3b4f78dfc1b5259b1.png

  • 磁盘写 IO 使用:

    sum by (instance) (rate(node_disk_writes_completed_total[5m]))

ae4dc4ec5ec94060b0b2c969010cdb48.png

这两个查询分别返回磁盘读和写的 I/O 使用率。

11.网络带宽:

  • 下行带宽:

    sum by(instance) (irate(node_network_receive_bytes_total{device!~"bond.*?|lo"}[5m]))

2efa74253eb344f7b0fc26eebe1ca458.png

  • 上行带宽:

    sum by(instance) (irate(node_network_transmit_bytes_total{device!~"bond.*?|lo"}[5m]))

88163c0478bc46e1b268789a30cc0cfc.png

这两个查询分别返回节点的下行和上行网络带宽使用率。

下行带宽和上行带宽是与网络通信相关的术语,通常用于描述数据从网络中的一个点(如服务器)流向另一个点(如客户端)或反过来的速率。这两个术语通常与网络传输中的发送(上行)和接收(下行)有关。

  1. 下行带宽(Downstream Bandwidth):

    • 含义: 下行带宽是指数据从服务器或网络中心流向终端用户设备的速率。在互联网上,这通常是指从服务提供商或服务器到用户设备的数据流。
    • 示例: 当您从互联网上下载文件、浏览网页、观看在线视频时,您的设备通过下行带宽接收数据。
  2. 上行带宽(Upstream Bandwidth):

    • 含义: 上行带宽是指数据从终端用户设备流向服务器或网络中心的速率。这表示用户设备向网络上传送数据的速率。
    • 示例: 当您上传文件、发送电子邮件、进行在线游戏时,您的设备通过上行带宽向网络上传送数据。

下行带宽和上行带宽是网络连接的关键性能指标之一。它们通常以比特每秒(bps)、千比特每秒(Kbps)、兆比特每秒(Mbps)或千兆比特每秒(Gbps)的单位表示。在监控和管理网络性能时,了解这两个带宽值对于确保网络顺畅运行以及适应用户和应用程序的需求非常重要。带宽的不足可能导致网络拥塞和性能下降,而过剩的带宽则可能被浪费。

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐