部署 node_exporter 收集机器的系统数据
node_exporter
是一个用于采集和导出主机(节点)上系统和硬件信息的开源软件。它是 Prometheus 生态系统中的一个重要组件。Prometheus 是一个用于监控和警报的开源系统,而 node_exporter
则是用于收集节点级别的指标数据,以便 Prometheus 可以定期拉取这些数据进行监控和分析。
node_exporter
通过暴露一个 HTTP 端点,Prometheus 定期从这个端点获取有关节点的信息。它能够提供各种系统指标:
- CPU 使用率: 包括每个核心的使用率和总体 CPU 负载。
- 内存使用情况: 包括总内存、空闲内存、缓存和交换空间使用情况。
- 磁盘空间: 提供有关磁盘分区和文件系统的信息。
- 网络统计: 包括网络接口的流量、错误和丢包等信息。
- 系统负载: 提供系统的负载平均值。
- 进程和线程信息: 包括运行的进程和线程数量等。
这些信息对于系统管理员、运维团队和开发人员来说都是非常有价值的,因为它们可以用来监测系统的性能、识别潜在的问题并采取相应的措施。
通过将 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 节点已经被监控
二、node_exporter 查询语句
1.查看节点的 CPU 使用率:
100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
2.查看可用内存百分比:
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
3.查看磁盘空间使用率:
(1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100
4.查看网络接口流量:
sum(irate(node_network_receive_bytes_total{device="eth0"}[5m])) / 1024
此查询计算了过去 5 分钟内以千字节为单位的 eth0
网络接口的接收速率。
5.查看系统负载:
node_load1
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
1.获取系统信息:
node_uname_info
此查询返回有关节点操作系统的信息,如内核版本、主机名等。
2.获取系统 uptime 时间:
sum(time() - node_boot_time_seconds) by (instance)
通过计算当前时间与系统启动时间的差值的总和,您可以获取节点的累积运行时间。
3.系统启动时间:
node_boot_time_seconds
此查询返回节点的启动时间戳。
4.系统当前时间:
time()
此查询返回当前时间戳。
5.CPU核数:
count(node_cpu_seconds_total{mode='system'}) by (instance)
通过计算 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
此查询计算 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
此查询计算节点的内存使用率,考虑了缓存和空闲内存。
8.查看节点总内存:
node_memory_MemTotal_bytes/1024/1024/1024
此查询将节点的总内存从字节转换为 GB。
9.计算磁盘使用率:
(1 - node_filesystem_avail_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"}) * 100
此查询计算节点磁盘的使用率,基于 node_filesystem_avail_bytes
和 node_filesystem_size_bytes
。
11.磁盘IO:
- 磁盘读 IO 使用:
sum by (instance) (rate(node_disk_reads_completed_total[5m]))
- 磁盘写 IO 使用:
sum by (instance) (rate(node_disk_writes_completed_total[5m]))
这两个查询分别返回磁盘读和写的 I/O 使用率。
11.网络带宽:
- 下行带宽:
sum by(instance) (irate(node_network_receive_bytes_total{device!~"bond.*?|lo"}[5m]))
- 上行带宽:
sum by(instance) (irate(node_network_transmit_bytes_total{device!~"bond.*?|lo"}[5m]))
这两个查询分别返回节点的下行和上行网络带宽使用率。
下行带宽和上行带宽是与网络通信相关的术语,通常用于描述数据从网络中的一个点(如服务器)流向另一个点(如客户端)或反过来的速率。这两个术语通常与网络传输中的发送(上行)和接收(下行)有关。
-
下行带宽(Downstream Bandwidth):
- 含义: 下行带宽是指数据从服务器或网络中心流向终端用户设备的速率。在互联网上,这通常是指从服务提供商或服务器到用户设备的数据流。
- 示例: 当您从互联网上下载文件、浏览网页、观看在线视频时,您的设备通过下行带宽接收数据。
-
上行带宽(Upstream Bandwidth):
- 含义: 上行带宽是指数据从终端用户设备流向服务器或网络中心的速率。这表示用户设备向网络上传送数据的速率。
- 示例: 当您上传文件、发送电子邮件、进行在线游戏时,您的设备通过上行带宽向网络上传送数据。
下行带宽和上行带宽是网络连接的关键性能指标之一。它们通常以比特每秒(bps)、千比特每秒(Kbps)、兆比特每秒(Mbps)或千兆比特每秒(Gbps)的单位表示。在监控和管理网络性能时,了解这两个带宽值对于确保网络顺畅运行以及适应用户和应用程序的需求非常重要。带宽的不足可能导致网络拥塞和性能下降,而过剩的带宽则可能被浪费。
更多推荐
所有评论(0)