使用 Prometheus 监控服务器节点:Node Exporter 详解与配置

前言

在上一篇文章中,我们介绍了如何在 CentOS 上部署 Prometheus 并使用 systemd 进行管理。本文将继续深入,讲解如何使用 Prometheus 监控服务器节点,重点介绍 Node Exporter 的作用、安装和配置方法。

Node Exporter 是 Prometheus 生态系统中用于收集服务器硬件和操作系统指标的官方组件,它暴露了丰富的系统指标,使我们可以全面监控服务器的运行状态。


Node Exporter 简介

什么是 Node Exporter?

Node Exporter 是一个 Prometheus 的 exporter,专门用于收集 *NIX 内核公开的硬件和操作系统指标。它不会收集应用程序级别的指标,而是专注于系统层面的监控数据,包括:

  • CPU 使用情况
  • 内存利用率
  • 磁盘 I/O 统计
  • 网络接口统计
  • 文件系统使用情况
  • 系统负载
  • 硬件温度(如果可用)
  • 服务状态(systemd)

为什么需要 Node Exporter?

当 Prometheus Server 部署在一台机器上时,它只能收集自身指标。要监控其他服务器节点,需要在每个节点上运行 Node Exporter,使其暴露系统指标,然后由 Prometheus Server 定期抓取这些指标。


部署 Node Exporter

1. 在目标节点上创建用户和目录

注意: 这些操作需要在被监控的服务器节点上执行,而不是在 Prometheus Server 上。

# 创建 Prometheus 组
sudo groupadd prometheus# 创建 Prometheus 用户
sudo useradd -g prometheus -m -d /var/lib/prometheus -s /sbin/nologin prometheus# 创建 Prometheus 目录
sudo mkdir -p /usr/local/prometheus/
sudo chown -R prometheus:prometheus /usr/local/prometheus/

命令解释:

  • groupadduseradd: 创建专用用户和组,提高安全性
  • mkdir -p: 递归创建目录
  • chown -R: 递归更改目录所有权

2. 下载并安装 Node Exporter

# 下载 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz# 解压
tar -zxvf node_exporter-1.9.1.linux-amd64.tar.gz# 移动到安装目录
mv node_exporter-1.9.1.linux-amd64 /usr/local/prometheus/node_exporter# 更改所有权
chown -R prometheus:prometheus /usr/local/prometheus/node_exporter

3. 创建 Systemd 服务

sudo vim /etc/systemd/system/node_exporter.service

添加以下内容:

[Unit]
Description=node_exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/node_exporter/node_exporter
Restart=on-failure[Install]
WantedBy=multi-user.target

配置解释:

  • Description: 服务描述
  • Documentation: 相关文档链接
  • After: 指定启动顺序依赖
  • Type: 服务类型(simple 表示直接启动主进程)
  • User: 指定运行服务的用户
  • ExecStart: 启动命令
  • Restart: 故障时自动重启
  • WantedBy: 指定服务所属 target

4. 启动 Node Exporter 服务

# 重新加载 systemd 配置
sudo systemctl daemon-reload# 启动服务
sudo systemctl start node_exporter# 设置开机自启
sudo systemctl enable node_exporter# 检查服务状态
sudo systemctl status node_exporter

5. 防火墙配置

如果系统启用了防火墙,需要开放 Node Exporter 的默认端口(9100):

# 开放9100端口
sudo firewall-cmd --permanent --add-port=9100/tcp# 重新加载防火墙配置
sudo firewall-cmd --reload

配置 Prometheus Server

现在我们需要在 Prometheus Server 上配置,使其能够抓取 Node Exporter 暴露的指标。

修改 Prometheus 配置文件

编辑 Prometheus Server 上的配置文件:

sudo vim /usr/local/prometheus/prometheus.yml

scrape_configs 部分添加或修改配置:

# 全局配置
global:scrape_interval: 15s # 每15秒抓取一次指标evaluation_interval: 15s # 每15秒评估一次规则# 告警配置
alerting:alertmanagers:- static_configs:- targets:# - alertmanager:9093# 规则文件配置
rule_files:# - "first_rules.yml"# - "second_rules.yml"# 抓取配置
scrape_configs:# 监控 Prometheus 自身- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]labels:app: "prometheus"# 监控节点- job_name: "node"static_configs:- targets: ["localhost:9090", "被监控节点IP:9100"]labels:app: "node-exporter"

关键配置解释:

  • scrape_configs: 定义抓取目标配置
  • job_name: 任务名称,用于分组相关目标
  • static_configs: 静态目标配置
  • targets: 指定要监控的目标地址和端口
    • localhost:9090: Prometheus 自身
    • 被监控节点IP:9100: Node Exporter 节点(将"被监控节点IP"替换为实际IP)

重启 Prometheus 服务

# 检查配置文件语法
sudo -u prometheus /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml# 重启 Prometheus
sudo systemctl restart prometheus# 检查服务状态
sudo systemctl status prometheus

验证监控

1. 访问 Prometheus Web 界面

在浏览器中打开 http://Prometheus服务器IP:9090,转到 “Status” -> “Targets” 页面。你应该能看到两个目标:

  • prometheus (localhost:9090) 状态为 UP
  • node (被监控节点IP:9100) 状态为 UP

如果状态为 DOWN,请检查网络连接和防火墙设置。

2. 查询节点指标

在 Prometheus 的 “Graph” 页面中,可以尝试查询各种节点指标:

查询 CPU 使用率
100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

查询解释:

  • node_cpu_seconds_total: Node Exporter 提供的 CPU 时间指标
  • mode="idle": 筛选空闲状态的 CPU 时间
  • irate([5m]): 计算最近5分钟内的瞬时增长率
  • avg by(instance): 按实例分组计算平均值
  • 100 - (... * 100): 计算使用率百分比
其他常用查询

内存使用率:

100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100)

磁盘使用率:

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

系统负载:

node_load1

高级配置

多节点监控

当需要监控多个节点时,可以修改 prometheus.yml 中的 targets 列表:

- job_name: "node"static_configs:- targets: - "node1-ip:9100"- "node2-ip:9100"- "node3-ip:9100"labels:group: "production-servers"

使用文件服务发现

对于大规模环境,建议使用文件服务发现而不是静态配置:

- job_name: "node"file_sd_configs:- files:- /usr/local/prometheus/targets/nodes/*.json

然后创建对应的 JSON 文件定义目标。


故障排除

常见问题

  1. 连接被拒绝

    • 检查 Node Exporter 是否正在运行
    • 验证防火墙设置
  2. 无数据

    • 检查 Prometheus 配置中的目标地址是否正确
    • 验证网络连通性
  3. 权限问题

    • 确保 Node Exporter 以正确用户身份运行
    • 检查目录和文件权限

查看 Node Exporter 指标

可以直接访问 Node Exporter 的 metrics 端点验证数据:

curl http://被监控节点IP:9100/metrics

这将显示 Node Exporter 暴露的所有原始指标。


总结

通过本文,我们学习了:

  1. Node Exporter 的作用:收集服务器硬件和操作系统指标
  2. 安装和配置 Node Exporter:在被监控节点上部署并配置为 systemd 服务
  3. 配置 Prometheus Server:添加节点监控任务
  4. 查询节点指标:使用 PromQL 查询 CPU 使用率等关键指标

Node Exporter 是 Prometheus 监控体系中的重要组件,它使我们能够全面了解服务器的运行状态。结合 Prometheus 的强大查询能力和 Alertmanager 的告警功能,可以构建完整的服务器监控和告警系统。

在下一篇文章中,我们将介绍如何使用 Grafana 可视化这些监控数据,创建直观的监控仪表盘。

相关资源:

  • Node Exporter GitHub 仓库
  • Prometheus 查询文档
  • Node Exporter 常用查询

希望本文对您使用 Prometheus 监控服务器节点有所帮助!如有任何问题,欢迎在评论区留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94475.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 编写一个XmlToDota的转换工具

以下代码可以将Labelme标注的旋转框Xml格式文件转换为Yolo标注格式的txt文件,以便用Yolo OBB训练自己的数据集:using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Linq; using System.Globalization;na…

[Android] 人体细胞模拟器1.5

[Android] 人体细胞模拟器1.5 链接:https://pan.xunlei.com/s/VOYVUieTpjNVJq-bMys4EEDGA1?pwdm7m6# 省流:这个软件的开发者有点逆天,一个模拟人体器官的软件,细致到有血液报告,还缝合了生理学和病理学,甚至还能做切…

【Linux基础知识系列】第一百一十篇 - 使用Nmap进行网络安全扫描

在网络安全管理中,了解网络中的设备、开放的端口以及运行的服务是至关重要的。Nmap(Network Mapper)是一个功能强大的开源工具,用于网络发现和安全审计。它可以扫描网络中的设备,识别开放的端口和运行的服务&#xff0…

【Linux仓库】进程的“夺舍”与“飞升”:exec 驱动的应用现代化部署流水线

🌟 各位看官好,我是egoist2023! 🌍 Linux Linux is not Unix ! 🚀 今天来学习exec系列的进程程序替换,从"fork"的"克隆"到"exec"的"重生"。 👍 如果觉…

Reachability Query

题目分析 该代码实现了一个动态集合管理系统,支持三种操作:合并集合、切换元素状态、查询集合中是否- 存在活跃元素。核心数据结构为并查集,结合状态标记数组和计数器。关键数据结构与函数 初始化 fa[N]:并查集父节点数组&#xf…

SSL移动接入方案和移动资源发布

一、SSL VPN概述SSL VPN是一种基于SSL/TLS协议的远程安全接入技术,因其广泛兼容Web浏览器,支持“无客户端”部署,具备易于使用和维护的特点。它通过插件系统支持非Web类TCP/UDP应用,并且支持对用户的访问可以做出限制,…

C++STL---count() 统计容器中特定元素出现次数

在 C 标准库中&#xff0c;count 是一个用于统计容器中特定元素出现次数的函数&#xff0c;定义在 <algorithm> 头文件中。它可以快速计算某个值在容器&#xff08;如数组、vector、list 等&#xff09;中出现的次数&#xff0c;避免手动编写循环计数的麻烦。 一、函数原…

Tesla自动驾驶域控制器(AutoPilot HW)的系统化梳理

目前网络上对Tesla自动驾驶硬件&#xff08;AP1-AP4、HW1.0-HW4.0&#xff09;迭代的相关介绍比较混乱&#xff0c;本文这里进行系统化梳理并澄清&#xff0c;并对一些错误进行更正。1、AutoPilot HW迭代图图1 AutoPilot HWMCU迭代图图2 AutoPilot HW 散热设计迭代图&#xff0…

C 语言:第 20 天笔记:typedef(类型重命名规则、应用场景与实战案例)

C语言&#xff1a;第20天笔记 内容提要 构造类型枚举类型typedef综合案例:斗地主预处理 构造类型&#xff1a;枚举类型 使用建议 如果定义不相干的常量&#xff0c;使用宏定义&#xff08;符号常量&#xff09;&#xff1b;如果需要定义一组相关联的常量&#xff08;如月份011、…

在 vue3 和 vue2 中,v-for 和 v-if 可以一起用吗,区别是什么

在 Vue 2 和 Vue 3 中&#xff0c;v-for 和 v-if 可以一起使用&#xff0c;但两者在处理顺序和推荐用法上存在明显区别&#xff0c;主要体现在优先级和最佳实践上&#xff1a; 1. Vue 2 中的 v-for 与 v-if优先级&#xff1a;v-for 的优先级高于 v-if。 这意味着 Vue 会先循环渲…

Linux-进程相关函数

文章目录Linux-进程相关函数父子进程关系父子进程地址空间getpid函数 获取本进程号getppid函数 获取当前进程的进程的父进程号getpgid函数 获取进程组号示例fork函数 创建进程区分父子进程exit函数 进程退出wait函数 等待子进程退出waitpid函数Linux-进程相关函数 每个进程都由…

数据挖掘 6.1 其他降维方法(不是很重要)

6.1 Other dimensionality reduction methods 6.1 其他降维方法 其他降维方法前言问题答案流形3 降维大纲3.1 线性方法3.2 非线性方法3.2.1 流形学习方法&#xff08;Manifold Learning&#xff09;3.2.2 概率方法&#xff08;Probabilistic Approaches&#xff09;3.2.3 拓扑数…

Unity中的特殊文件夹

一.工程路径获取print(Application.dataPath);只用于游戏开发编辑器模式下&#xff0c;游戏发布后此路径就不存在了二.Resources 资源文件夹//路径获取: //一般不获取 //只能使用Resources相关API进行加载 //如果硬要获取 可以用工程路径拼接print(Application.dataPath "…

Seaborn数据可视化实战:Seaborn高级使用与性能优化教程

Seaborn最佳实践与技巧 学习目标 本课程将深入探讨Seaborn库的高级使用技巧&#xff0c;包括性能优化、常见问题解决方法等&#xff0c;旨在帮助学员掌握如何高效地使用Seaborn进行数据可视化&#xff0c;提升图表的美观度和信息传达效率。 相关知识点 Seaborn最佳实践与技巧 学…

分布式系统与单机系统的优劣势对比

近期有遇到一个本地部署的需求&#xff0c;他们希望用主备方案&#xff0c;这就涉及到了备用系统怎么收费的问题。我们是单机系统&#xff0c;其他友商是分布式系统&#xff0c;那20坐席的手拨需求到底是选单机系统好&#xff0c;还是选分布式系统好呢&#xff1f;了解了两者的…

深度学习:从手写数字识别案例认识pytorch框架

目录 一、PyTorch 核心优势与框架定位 二、实战基础&#xff1a;核心库与数据准备 1. 关键库导入与功能说明 2. MNIST 数据集加载与可视化 &#xff08;1&#xff09;数据集下载与封装 &#xff08;2&#xff09;数据集可视化&#xff08;可选&#xff09; 3. DataLoade…

二分|组合|旋转数组

lc1976dijk min_pathpq. min_wlcr187同lc1823.约瑟夫环class Solution { public:int iceBreakingGame(int num, int target) {int x0;for(int i2;i<num;i){x(xtarget)%i;} return x;} };lc2972计算数组中可移除的子数组数量先找最长递增前缀&#xff0c;再结合递增后缀…

【C语言16天强化训练】从基础入门到进阶:Day 10

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题、洛谷刷题、C/C基础知识知识强化补充、C/C干货分享&学习过程记录 &#x1f349;学习方向&#xff1a;C/C方向学习者…

云计算与云原生技术探索

&#x1f31f; Hello&#xff0c;我是蒋星熠Jaxonic&#xff01; &#x1f308; 在浩瀚无垠的技术宇宙中&#xff0c;我是一名执着的星际旅人&#xff0c;用代码绘制探索的轨迹。 &#x1f680; 每一个算法都是我点燃的推进器&#xff0c;每一行代码都是我航行的星图。 &#x…

STM32之ADC详解

一、ADC概述 ADC&#xff08;模拟量转数字量转换器&#xff09;&#xff0c;在 STM32 开发中&#xff0c;利用 ADC 端口的电压数据&#xff0c;转换为对应的具体数字量数据内容。可通过 ADC 方式获取常用数据内容有&#xff1a; 光敏电阻、电池电量、油箱油量 ADC 转换…