Prometheus Grafana服务器监控搭建教程
为什么要用 Prometheus 和 Grafana 监控服务器
很多站长或运维人员都遇到过这样的困扰:服务器负载突然飙升,但等接到报警时业务已经受影响。Prometheus Grafana服务器监控是目前非常流行的开源组合,Prometheus 负责采集和存储指标数据,Grafana 负责把数据变成直观的图表和仪表盘。
这套方案免费、灵活,而且社区生态成熟,适合从单台服务器到集群的监控需求。
本文会带着你从零开始,在 Linux 服务器上完整跑通这套监控系统。
安装前需要准备的几样东西
动手之前,请确认手头有一台 Linux 服务器(CentOS 7/8 或 Ubuntu 20.04+ 都行),并且你有 root 或 sudo 权限。
此外,需要服务器能正常访问外网,以便下载安装包。
建议先更新系统包:
# CentOS
sudo yum update -y
# Ubuntu
sudo apt update && sudo apt upgrade -y
以后的所有操作都在终端里完成,不需要图形面板。
一步步安装 Prometheus
Prometheus 官方提供二进制包,安装非常简单。
我们以最新稳定版为例(实际版本请到官网查看):
# 下载 Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar -xzf prometheus-2.47.0.linux-amd64.tar.gz
sudo mv prometheus-2.47.0.linux-amd64 /opt/prometheus
创建系统用户(安全考虑不要用 root 运行):
sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown -R prometheus:prometheus /opt/prometheus
创建 systemd 服务文件 /etc/systemd/system/prometheus.service,内容如下:
[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--storage.tsdb.path=/opt/prometheus/data \
--web.console.templates=/opt/prometheus/consoles \
--web.console.libraries=/opt/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
现在访问 http://你的服务器IP:9090,如果看到 Prometheus 的 Web 界面,说明安装成功。
安装 Grafana 并连接 Prometheus
Grafana 同样提供二进制包,推荐用官方仓库安装(以 CentOS 为例):
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.3-1.x86_64.rpm
# 或者直接用 yum 安装:sudo yum install -y grafana
启动 Grafana:
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
默认端口是 3000,访问 http://你的服务器IP:3000,初始账号密码都是 admin,登录后按提示修改密码。
下一步需要添加 Prometheus 作为数据源:
- 在 Grafana 左侧菜单点击 Configuration(齿轮图标)→ Data Sources。
- 点击 Add data source,选择 Prometheus。
- 在 URL 字段填写
http://localhost:9090(如果 Prometheus 和 Grafana 在同一台服务器)。 - 点击 Save & Test,如果出现绿色提示“Data source is working”,说明连接成功。
配置服务器仪表盘(Node Exporter)
Prometheus 自身只能监控自身状态,要监控服务器的 CPU、内存、磁盘等指标,需要安装 Node Exporter。
# 下载并解压
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar -xzf node_exporter-1.6.1.linux-amd64.tar.gz
sudo mv node_exporter-1.6.1.linux-amd64 /opt/node_exporter
创建 systemd 服务 /etc/systemd/system/node_exporter.service:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=nobody
Group=nogroup
Type=simple
ExecStart=/opt/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
启动:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
现在 Prometheus 需要知道去抓取 Node Exporter 的数据。
编辑 Prometheus 配置文件 /opt/prometheus/prometheus.yml,在 scrape_configs 下添加:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
重启 Prometheus 生效:
sudo systemctl restart prometheus
回到 Grafana,导入官方 Node Exporter 仪表盘:左侧 Dashboards → Import,输入仪表盘 ID 1860(来自 grafana.com),点击 Load,选择刚才创建的 Prometheus 数据源,然后 Import。
稍等片刻你就能看到服务器 CPU、内存、磁盘、网络等实时图表。
常见问题与避坑
1. 端口无法访问?
检查防火墙是否放行 9090(Prometheus)、3000(Grafana)、9100(Node Exporter)。CentOS 示例:
sudo firewall-cmd --add-port=9090/tcp --permanent
sudo firewall-cmd --add-port=3000/tcp --permanent
sudo firewall-cmd --add-port=9100/tcp --permanent
sudo firewall-cmd --reload
2. Prometheus 启动失败常见原因:
- 配置文件格式错误:仔细检查 yaml 缩进,Prometheus 对缩进非常敏感。
- 数据目录权限不对:确保
/opt/prometheus/data属主是 prometheus 用户。
3. Grafana 导入仪表盘后无数据?
- 确认 Node Exporter 正在运行:
curl http://localhost:9100/metrics应该返回大量指标。 - 检查 Prometheus 的 Targets 页面(
http://IP:9090/targets),看看 node 任务状态是否为 UP。
4. 监控多台服务器?
在每台被监控机器上安装 Node Exporter,然后在 Prometheus 配置文件的 targets 里添加多个 IP 地址即可。
验证监控是否生效
执行一次压力测试(比如 stress --cpu 4 --timeout 60),然后回到 Grafana 仪表盘,观察 CPU 使用率曲线是否实时上升。
你也可以查看 Prometheus 的 Graph 页面,输入 node_cpu_seconds_total 看看数据是否正常。
整个Prometheus Grafana服务器监控系统就算搭建完成了,后续你可以根据业务需求增加更多 Exporter(比如 MySQL Exporter、Nginx Exporter),或者配置告警规则。
如果你在搭建过程中遇到具体报错,欢迎留言交流,我会根据错误信息帮你排查。