首页 资源列表 文章列表

自动化运维部署学习日记--从零开始搭建 Prometheus + Grafana 监控系统

从零开始搭建 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等)