98·实战项目高级

实战:搭建 Prometheus + Grafana 监控

prometheusgrafanamonitoring

第98课 - 实战:搭建 Prometheus + Grafana 监控

学习目标

完成本课学习后,你将能够:

  1. 理解核心架构:清晰地阐述 Prometheus 和 Grafana 在监控体系中的角色及其协同工作流程。
  2. 完成端到端部署:独立在一台 Linux 主机上,从零开始安装并配置 Prometheus, Node Exporter 和 Grafana。
  3. 实现数据采集与可视化:配置 Prometheus 抓取系统指标,并通过 Grafana 创建一个展示服务器 CPU、内存、磁盘使用率的实时监控面板。

核心概念

Prometheus(普罗米修斯):你可以把它想象成一个数据收集中心和时间序列数据库。它的工作模式是主动去“拉取”(Pull)指标数据。你告诉它要监控的目标(例如 localhost:9100),它就会定期去访问这些目标的 /metrics 端点,将获取到的数据存储起来。

Node Exporter(节点导出器):这是一段运行在被监控服务器上的小程序。它的作用是采集操作系统和硬件层面的原始指标(如CPU使用率、内存占用、磁盘空间、网络流量),然后按照 Prometheus 能理解的格式,通过一个 HTTP 端口(默认 9100)暴露出来。

Grafana(图形化):这是最终的数据可视化平台。它不存储数据,而是连接到 Prometheus 这样的数据源,将其中的数据通过强大、灵活的图表(如折线图、仪表盘、热力图)呈现出来。运维人员通常通过 Grafana 的仪表板来直观地了解系统状态。

简单流程

  1. Node Exporter 在服务器上收集指标并暴露出来。
  2. Prometheus 周期性地去抓取(Scrape)这些指标,并存入自己的时序数据库。
  3. Grafana 从 Prometheus 查询数据,并将其渲染成美观、易读的监控面板。

代码示例

步骤 1:环境准备与安装

首先,确保系统已更新并安装必要依赖。

# 更新系统包列表
sudo apt update

# 安装 wget 和 add-apt-repository 工具(用于添加Grafana仓库)
sudo apt install -y wget software-properties-common

步骤 2:安装 Node Exporter (被监控端)

我们将 Node Exporter 安装为系统服务。

# 1. 创建 Prometheus 用户(出于安全考虑,避免使用root)
sudo useradd --no-create-home --shell /bin/false prometheus

# 2. 下载最新版 Node Exporter (请替换为官网最新版本链接)
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz

# 3. 将二进制文件复制到标准路径
sudo cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/node_exporter

# 4. 创建 systemd 服务文件,实现开机自启
cat <<EOF | sudo tee /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
EOF

# 5. 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

# 6. 验证服务状态和数据暴露
sudo systemctl status node_exporter
curl http://localhost:9100/metrics | head -n 5  # 应看到许多指标数据

步骤 3:安装与配置 Prometheus

# 1. 下载 Prometheus (同样请替换为最新版本)
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xvfz prometheus-2.47.0.linux-amd64.tar.gz

# 2. 创建配置和数据目录
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus

# 3. 复制二进制文件和配置
sudo cp prometheus-2.47.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.47.0.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
sudo cp -r prometheus-2.47.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.47.0.linux-amd64/console_libraries /etc/prometheus

# 4. 创建 Prometheus 主配置文件
cat <<EOF | sudo tee /etc/prometheus/prometheus.yml
global:
  scrape_interval: 15s  # 全局默认抓取间隔

scrape_configs:
  - job_name: 'prometheus' # 抓取自身指标
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node' # 抓取 Node Exporter 指标
    static_configs:
      - targets: ['localhost:9100'] # 可以添加多个被监控主机IP
EOF
sudo chown -R prometheus:prometheus /etc/prometheus

# 5. 创建 systemd 服务
cat <<EOF | sudo tee /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
After=network.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 \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
EOF

# 6. 启动服务
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
# 验证:浏览器访问 http://<你的服务器IP>:9090/targets,应看到两个目标(prometheus 和 node)状态为 UP

步骤 4:安装 Grafana

# 1. 添加 Grafana 官方 GPG 密钥和仓库
sudo apt-get install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

# 2. 安装 Grafana
sudo apt-get update
sudo apt-get install -y grafana

# 3. 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
# 验证:浏览器访问 http://<你的服务器IP>:3000,默认账号密码 admin/admin,首次登录需修改密码

步骤 5:在 Grafana 中配置 Prometheus 数据源并导入仪表板

  1. 登录 Grafana:访问 http://<服务器IP>:3000
  2. 添加数据源
    • 点击左侧菜单 Configuration (齿轮图标) -> Data Sources
    • 点击 Add data source,选择 Prometheus
    • URL 栏输入 http://localhost:9090,点击 Save & Test,应提示 Data source is working
  3. 导入现成仪表板
    • 点击左侧菜单 Dashboards (四方格图标) -> Import
    • Import via grafana.com 输入框中,输入一个流行的 Node Exporter 仪表板 ID,例如 1860 (Node Exporter Full)。
    • 点击 Load
    • Prometheus 下拉菜单中选择你刚刚添加的数据源。
    • 点击 Import。现在,你就能看到一个非常全面、美观的服务器监控仪表板了!

实践练习

  1. 基础验证

    • 要求:完成上述所有步骤后,通过 curl 命令或浏览器访问 Prometheus 的 Web UI(http://IP:9090/targets),截图展示所有抓取目标的状态。
    • 预期输出:至少 prometheusnode 两个目标状态为 UP
  2. 扩展监控

    • 要求:将另一台局域网内的 Linux 服务器(例如你的另一台虚拟机)也纳入监控。在那台机器上安装 Node Exporter,并在 Prometheus 的配置文件 prometheus.yml 中添加它的 IP 地址作为新的目标。
    • 预期输出:在 Prometheus 的 /targets 页面和 Grafana 的仪表板中,都能看到并切换查看新服务器的指标。
  3. 自定义监控

    • 要求:修改 Grafana 中导入的仪表板,添加一个新的面板(Panel)。这个面板需要使用 Prometheus 的查询语言 PromQL,显示 服务器最近 5 分钟的平均 1 分钟负载 (node_load1)
    • 预期输出:在仪表板上可以看到一个显示平均负载变化趋势的新图表。

常见错误

  1. 端口冲突:启动服务时报告端口已被占用(如 9090, 9100, 3000)。解决方法:使用 sudo netstat -tlnp | grep <端口号>sudo lsof -i :<端口号> 找出占用进程并停止它。
  2. 配置文件语法错误:Prometheus 或 Grafana 启动失败。解决方法:
    • Prometheus:使用 promtool check config /etc/prometheus/prometheus.yml 命令检查配置文件语法。
    • Grafana:查看日志 sudo journalctl -u grafana-server -f
  3. 权限问题:服务无法读取配置文件或数据目录。确保配置文件和数据目录的所有者是 prometheus 用户(sudo chown -R prometheus:prometheus /path)。
  4. 防火墙阻止:Prometheus 无法抓取 Node Exporter,或用户无法访问 Grafana Web UI。解决方法:确保服务器的防火墙放行了相关端口(如 9090, 9100, 3000)。例如使用 ufwsudo ufw allow 9090/tcp
  5. Grafana 添加数据源失败:测试连接时提示错误。首先,确认 Prometheus 服务本身运行正常且可访问(curl http://localhost:9090)。其次,在 Grafana 的数据源配置中,确保 URL 不包含多余的路径。

小结

本节课我们完成了一个完整的监控系统实战搭建:

  • 架构核心:Prometheus 作为数据采集与存储引擎,Node Exporter 作为被监控节点的数据生产者,Grafana 作为数据可视化层。
  • 部署流程:按照 被监控端(Node Exporter) -> 采集端(Prometheus) -> 展示端(Grafana) 的顺序进行安装和配置,并利用 systemd 实现服务管理。
  • 关键配置:Prometheus 的 prometheus.yml 文件定义了“抓取什么”;Grafana 通过添加 Prometheus 作为数据源,并导入或自建仪表板来定义“看什么”。
  • 运维价值:这套组合是云原生时代监控的事实标准,掌握它为你构建大规模、自动化的可观测性体系奠定了坚实基础。在后续的“备份策略与恢复演练”课程中,你将学习如何保护这些关键的监控数据。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「实战:备份策略与恢复演练」 以巩固所学知识。