不止能用!Prometheus+node_exporter+Grafana 监控系统的搭建详解与安全配置

前言

最近正好需要搭建一套监控平台,调研发现在服务器运维和应用监控领域,Prometheus(普罗米修斯)+Grafana的组合堪称“黄金搭档”。Prometheus负责采集和存储监控指标,node_exporter作为轻量级代理收集服务器硬件/系统指标,Grafana则提供可视化图表展示。本文将以CentOS 7/8系统为例,手把手教你从安装到配置,搭建一套完整的服务器监控体系。因为是生产环境,要在用户、端口、认证等方面都要非常注意,所以相较于其他教程,会多一些安全上的处理。

搭建完成后界面:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


一、环境准备

1.1 前置条件

  • 操作系统:CentOS 7或更高版本(本文以CentOS 8为例)
  • 用户权限:建议使用root用户操作(或具备sudo权限的用户)
  • 网络要求:需访问GitHub、Grafana官网下载安装包(可提前准备代理或本地镜像)
  • 硬件要求:Prometheus默认资源占用较低,测试环境建议至少1核2G内存;生产环境根据监控规模调整

二、安装Prometheus核心服务

2.1 下载并解压安装包

Prometheus官方提供了预编译的二进制包,我们选择最新的3.3.0-rc.1版本(截至2025年5月,可到GitHub Releases查看最新版本):

# 下载安装包(若速度慢可使用代理)
wget https://github.com/prometheus/prometheus/releases/download/v3.3.0-rc.1/prometheus-3.3.0-rc.1.linux-amd64.tar.gz

# 解压到/usr/local目录(生产环境建议统一存放软件)
tar -zxvf prometheus-3.3.0-rc.1.linux-amd64.tar.gz -C /usr/local

# 创建软连接(方便后续升级维护,无需修改配置路径)
ln -s /usr/local/prometheus-3.3.0-rc.1.linux-amd64 /usr/local/prometheus

2.2 创建专用运行用户

为了安全隔离,避免以root权限运行服务,我们创建专用用户和用户组:

# 创建prometheus用户组
groupadd prometheus

# 创建prometheus用户(-s指定不允许登录系统,-g指定用户组)
useradd -g prometheus -s /sbin/nologin prometheus

# 为Prometheus主目录赋予权限(确保用户有权限访问配置和数据)
chown -R prometheus:prometheus /usr/local/prometheus/

2.3 配置systemd服务

通过systemd管理服务可以实现开机自启、自动重启等功能,操作如下:

# 创建服务配置文件
cat > /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Monitoring System
Documentation=https://prometheus.io/docs/
After=network.target  # 确保网络启动后再启动服务

[Service]
Type=simple
User=prometheus       # 使用专用用户运行
# 启动命令:指定配置文件和数据存储路径(默认是./data,建议单独目录便于管理)
ExecStart=/usr/local/prometheus/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus

Restart=on-failure    # 失败自动重启
RestartSec=5          # 重启间隔5秒

[Install]
WantedBy=multi-user.target  # 加入多用户目标组,实现开机自启
EOF

注意--storage.tsdb.path指定的/var/lib/prometheus目录需要提前创建并赋予权限:

mkdir -p /var/lib/prometheus
chown -R prometheus:prometheus /var/lib/prometheus

2.4 启动并验证服务

# 重新加载systemd配置
systemctl daemon-reload

# 启动服务
systemctl start prometheus.service

# 设置开机自启
systemctl enable prometheus.service

# 检查服务状态(确保Active: active (running))
systemctl status prometheus.service

验证服务是否正常:访问http://服务器IP:9090(默认端口9090),看到Prometheus的Web界面即安装成功。


三、安装node_exporter(服务器指标采集器)

node_exporter是Prometheus生态中专门用于采集服务器硬件和系统指标(如CPU、内存、磁盘、网络)的代理程序,需要安装到每台被监控的服务器上(包括Prometheus所在服务器)。

3.1 下载并解压安装包

选择最新的1.9.1版本GitHub Releases):

wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz

# 解压到/usr/local
tar -zxvf node_exporter-1.9.1.linux-amd64.tar.gz -C /usr/local

# 创建软连接
ln -s /usr/local/node_exporter-1.9.1.linux-amd64 /usr/local/node_exporter

# 赋予权限(使用之前创建的prometheus用户)
chown -R prometheus:prometheus /usr/local/node_exporter/

3.2 配置systemd服务

cat > /usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Node Exporter for Prometheus
Documentation=https://prometheus.io/docs/guides/node-exporter/
After=network.target

[Service]
Type=simple
User=prometheus
# 启动命令:指定监听地址和认证配置(后续会讲解认证)
ExecStart=/usr/local/node_exporter/node_exporter \
  --web.listen-address=192.168.1.100:9101 \    # 固定IP:端口(可修改为服务器实际IP)
  --web.config.file=/etc/node_exporter/web-auth.yaml  # 认证配置文件路径

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

3.3 启动并验证服务

systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter

# 检查状态
systemctl status node_exporter

# 验证指标是否正常暴露(访问http://服务器IP:9101/metrics)
curl http://192.168.1.100:9101/metrics

若返回大量以node_开头的指标(如node_cpu_seconds_total),说明node_exporter运行正常。


四、安装Grafana(监控可视化工具)

Grafana用于将Prometheus的指标数据可视化成图表,支持丰富的仪表盘模板和告警功能。

4.1 下载并安装(RPM包)

Grafana提供企业版和社区版,本文以企业版11.6.1为例:

# 下载RPM包(若无法访问官网,可使用镜像源)
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.6.1-1.x86_64.rpm

# 安装(自动处理依赖)
yum install -y grafana-enterprise-11.6.1-1.x86_64.rpm

4.2 启动并配置

# 启动服务
systemctl restart grafana-server

# 设置开机自启
systemctl enable grafana-server

# 检查状态
systemctl status grafana-server

4.3 访问Grafana界面

浏览器访问http://服务器IP:3000(默认端口3000),初始用户名/密码为admin/admin(首次登录会提示修改密码)。


五、Prometheus配置监控node_exporter

5.1 配置Prometheus抓取任务

Prometheus通过prometheus.yml配置需要监控的目标(称为“Job”)。我们需要添加对node_exporter的抓取任务:

# 编辑主配置文件
vim /usr/local/prometheus/prometheus.yml

scrape_configs部分添加以下内容(示例监控本地node_exporter):

scrape_configs:
  - job_name: 'linux-node-cluster'  # 任务名称(自定义)
    static_configs:
      - targets: ['localhost:9100']  # node_exporter的IP:端口(若监控远程服务器,替换为实际IP)

注意:若node_exporter修改了默认端口(如本文设置为9101),需将targets中的端口改为9101。

5.2 验证配置并重启Prometheus

# 检查配置文件语法(输出"Checking prometheus.yml... SUCCESS"即正确)
/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml

# 重启Prometheus使配置生效
systemctl restart prometheus

5.3 查看监控目标状态

访问Prometheus Web界面(http://服务器IP:9090/targets),在“Status”列应看到UP状态,说明Prometheus已成功抓取node_exporter的指标。


六、进阶配置:启用Basic Auth认证

为了防止node_exporter的指标接口被未授权访问,我们可以启用Basic Auth认证。

6.1 安装密码生成工具

使用htpasswd生成加密密码(需安装httpd-tools):

yum install -y httpd-tools  # 安装htpasswd工具

6.2 生成加密认证文件

# 创建认证目录并设置权限(仅prometheus用户可访问)
mkdir -p /etc/node_exporter
chmod 750 /etc/node_exporter
chown prometheus:prometheus /etc/node_exporter

# 生成加密密码(替换"prometheus"为用户名,按提示输入密码)
htpasswd -nBC 12 prometheus | tr -d ':\n' > /etc/node_exporter/web-auth.yaml

执行后会输出类似以下内容(已加密的密码):

prometheus$2y$12$yVe23232323S0JR/423322/5jU222C3333226

6.3 配置node_exporter认证

编辑web-auth.yaml文件(删除用户名前的明文部分):

vim /etc/node_exporter/web-auth.yaml

修改为:

basic_auth_users:
  prometheus: "$2y$12$yVe23232323S0JR/423322/5jU222C3333226"  # 仅保留加密字符串

6.4 更新node_exporter服务配置

修改node_exporter.service文件,确保--web.config.file指向认证文件:

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

调整后的ExecStart行:

ExecStart=/usr/local/node_exporter/node_exporter \
  --web.listen-address=192.168.1.100:9101 \  # 替换为实际IP
  --web.config.file=/etc/node_exporter/web-auth.yaml

6.5 重启服务使认证生效

systemctl daemon-reload
systemctl restart node_exporter

验证认证:访问http://服务器IP:9101/metrics,会提示输入用户名(prometheus)和之前设置的密码,输入正确后才能查看指标。


七、配置Prometheus监控远程生产服务器

若需要监控多台远程服务器(如生产环境的多台主机),只需在每台服务器安装node_exporter,然后在Prometheus的prometheus.yml中添加对应的抓取任务。

7.1 示例配置(监控远程服务器)

scrape_configs:
  - job_name: 'node_exporter_prod'  # 生产环境任务名称
    scheme: http  # 若使用HTTPS需改为https
    basic_auth:    # 若远程node_exporter启用了认证,需填写用户名密码
      username: prometheus
      password: prometheus  # 与node_exporter的web-auth.yaml一致
    static_configs:
      - targets: ['192.168.1.100:9100', '192.168.1.101:9100']  # 远程服务器IP:端口

7.2 重启Prometheus生效

systemctl restart prometheus

八、Grafana配置Prometheus数据源

最后一步是将Prometheus的数据接入Grafana,实现可视化:

  1. 登录Grafana(http://服务器IP:3000),点击左侧菜单Configuration > Data Sources

  2. 点击Add data source,选择Prometheus

  3. URL字段填写Prometheus的访问地址(如http://192.168.1.100:9090)。
    在这里插入图片描述

  4. 点击Save & Test,提示“Data source is working”即连接成功。
    在这里插入图片描述

  5. 导入仪表盘模板:在Grafana市场搜索Node Exporter Full(ID: 1860),直接导入即可看到丰富的服务器监控图表。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


九、常见问题排查

Q1:Prometheus状态显示“DOWN”

  • 检查node_exporter是否正常运行(systemctl status node_exporter)。

  • 确认防火墙是否开放了node_exporter的端口(如9100/9101):

    firewall-cmd --add-port=9101/tcp --permanent
    firewall-cmd --reload
    
  • 检查prometheus.yml配置是否正确(使用promtool check config验证)。

Q2:Grafana无法连接Prometheus

  • 确认Prometheus服务是否运行(systemctl status prometheus)。
  • 检查Grafana的数据源URL是否正确(确保IP和端口与Prometheus实际监听地址一致)。
  • 若Prometheus启用了认证(如Basic Auth),需在Grafana数据源配置中填写认证信息。

Q3:node_exporter指标不完整

  • 检查node_exporter是否有缺失的采集器(可通过--collectors.enabled参数启用特定采集器)。
  • 确认服务器内核或系统版本是否兼容(node_exporter支持主流Linux发行版)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值