前言
最近正好需要搭建一套监控平台,调研发现在服务器运维和应用监控领域,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,实现可视化:
-
登录Grafana(
http://服务器IP:3000
),点击左侧菜单Configuration > Data Sources
。 -
点击
Add data source
,选择Prometheus
。 -
在
URL
字段填写Prometheus的访问地址(如http://192.168.1.100:9090
)。
-
点击
Save & Test
,提示“Data source is working”即连接成功。
-
导入仪表盘模板:在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发行版)。