从零开始搭建 Prometheus + Grafana 监控系统,可以按“安装部署、配置数据源、添加监控、制作面板”这四个步骤来走。
这套组合的定位非常清晰:Prometheus 负责采集和存储监控数据,Grafana 负责将这些数据以漂亮的图表展示出来。
下面的操作,我们采用更稳健的二进制安装方式,把它装成系统服务,方便管理。以下操作均在 Ubuntu 22.04/24.04 系统上验证通过。
步骤一:安装 Prometheus 监控服务
创建专用用户:出于安全考虑,为 Prometheus 创建一个无登录权限的系统用户。
bash
sudo useradd --no-create-home --shell /usr/sbin/nologin prometheus
创建配置与数据目录:
bash
sudo mkdir -p /etc/prometheus
sudo mkdir -p /var/lib/prometheus
下载并解压 Prometheus:
首先,去 Prometheus 官网下载页 获取最新 Linux 版本的下载链接。
然后,在服务器上执行下载和解压(请将链接替换为最新版):
bash
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.53.1/prometheus-2.53.1.linux-amd64.tar.gz
tar xvf prometheus-2.53.1.linux-amd64.tar.gz
cd prometheus-2.53.1.linux-amd64
复制二进制和配置文件:
bash
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles console_libraries /etc/prometheus/
sudo cp prometheus.yml /etc/prometheus/
设置目录权限:
bash
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
创建 systemd 服务(实现开机自启):
bash
sudo tee /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
EOF
启动并验证 Prometheus:
bash
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
sudo systemctl status prometheus
确认服务状态为 active (running) 后,通过浏览器访问 http://你的服务器IP:9090,能看到 Prometheus 的 Web UI 即表示成功。
步骤二:安装 Grafana 可视化工具
添加 Grafana 官方 APT 仓库:
bash
sudo apt-get update
sudo apt-get install -y wget gnupg
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
安装 Grafana:
bash
sudo apt-get update
sudo apt-get install -y grafana
启动并验证 Grafana:
bash
sudo systemctl daemon-reload
sudo systemctl enable --now grafana-server
sudo systemctl status grafana-server
访问 Grafana:
确认服务状态为 active (running) 后,打开浏览器访问 http://你的服务器IP:3000。
默认用户名:admin
默认密码:admin
首次登录会强制修改密码。
步骤三:在 Grafana 中添加 Prometheus 数据源
这是连接“数据采集”与“数据展示”的关键一步。
登录 Grafana 后,点击左侧齿轮图标 Configuration(配置) > Data Sources(数据源)。
点击 Add data source 按钮。
在列表中选择 Prometheus。
在配置页面,只需要填写一个关键字段:
URL:输入 http://localhost:9090(因为 Prometheus 和 Grafana 装在同一台机器上)。
点击页面底部的 Save & Test 按钮,看到绿色的成功提示,就表示连接成功了。
步骤四:在 Grafana 中创建监控面板
有了数据源,就可以开始画图了。Grafana 支持从零开始创建,也支持导入社区分享的海量模板。
导入现成模板(最快捷):
在 Grafana 左侧菜单,点击 Dashboards > Import。
在 Import via grafana.com 输入框中,填入一个模板 ID。例如,监控 Linux 服务器的通用模板 ID 是 8919 或 16098。
点击 Load,然后选择你刚刚添加的 Prometheus 数据源,点击 Import 即可。
步骤五:安装 Node Exporter(监控服务器本身指标)
现在 Prometheus 只监控了自己,要监控服务器的 CPU、内存、磁盘等信息,还需要在每台被监控的服务器上安装一个代理程序:Node Exporter。
下载并安装 Node Exporter:
bash
# 创建专用用户
sudo useradd --no-create-home --shell /usr/sbin/nologin node_exporter
# 下载解压
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
cd node_exporter-1.7.0.linux-amd64
# 复制二进制文件并授权
sudo cp node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
创建 systemd 服务:
bash
sudo tee /etc/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
启动并验证:
bash
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl status node_exporter
确认服务启动后,访问 http://你的服务器IP:9100/metrics 能看到一堆数据,就说明成功了。
更新 Prometheus 配置:
现在,要让 Prometheus 知道从哪里拉取 Node Exporter 的数据。编辑 Prometheus 的配置文件:
bash
sudo vim /etc/prometheus/prometheus.yml
在 scrape_configs 部分,添加一个新的监控任务:
yaml
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100'] # 如果监控本机,填本机IP
# targets: ['被监控服务器IP:9100'] # 监控其他服务器时,填对应的IP
保存后,重启 Prometheus 使配置生效: sudo systemctl restart prometheus。
核心概念与常用配置(备查)
PromQL:Prometheus 的查询语言,是编写监控规则和告警的核心。例如:
查询 CPU 使用率:100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100)。
告警配置:在 Prometheus 的配置文件中定义告警规则,并由 Alertmanager 组件负责发送通知(支持邮件、钉钉、Slack等)