第98课 - 实战:搭建 Prometheus + Grafana 监控
学习目标
完成本课学习后,你将能够:
- 理解核心架构:清晰地阐述 Prometheus 和 Grafana 在监控体系中的角色及其协同工作流程。
- 完成端到端部署:独立在一台 Linux 主机上,从零开始安装并配置 Prometheus, Node Exporter 和 Grafana。
- 实现数据采集与可视化:配置 Prometheus 抓取系统指标,并通过 Grafana 创建一个展示服务器 CPU、内存、磁盘使用率的实时监控面板。
核心概念
Prometheus(普罗米修斯):你可以把它想象成一个数据收集中心和时间序列数据库。它的工作模式是主动去“拉取”(Pull)指标数据。你告诉它要监控的目标(例如 localhost:9100),它就会定期去访问这些目标的 /metrics 端点,将获取到的数据存储起来。
Node Exporter(节点导出器):这是一段运行在被监控服务器上的小程序。它的作用是采集操作系统和硬件层面的原始指标(如CPU使用率、内存占用、磁盘空间、网络流量),然后按照 Prometheus 能理解的格式,通过一个 HTTP 端口(默认 9100)暴露出来。
Grafana(图形化):这是最终的数据可视化平台。它不存储数据,而是连接到 Prometheus 这样的数据源,将其中的数据通过强大、灵活的图表(如折线图、仪表盘、热力图)呈现出来。运维人员通常通过 Grafana 的仪表板来直观地了解系统状态。
简单流程:
- Node Exporter 在服务器上收集指标并暴露出来。
- Prometheus 周期性地去抓取(Scrape)这些指标,并存入自己的时序数据库。
- 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 数据源并导入仪表板
- 登录 Grafana:访问
http://<服务器IP>:3000。 - 添加数据源:
- 点击左侧菜单
Configuration(齿轮图标) ->Data Sources。 - 点击
Add data source,选择Prometheus。 - 在
URL栏输入http://localhost:9090,点击Save & Test,应提示Data source is working。
- 点击左侧菜单
- 导入现成仪表板:
- 点击左侧菜单
Dashboards(四方格图标) ->Import。 - 在
Import via grafana.com输入框中,输入一个流行的 Node Exporter 仪表板 ID,例如1860(Node Exporter Full)。 - 点击
Load。 - 在
Prometheus下拉菜单中选择你刚刚添加的数据源。 - 点击
Import。现在,你就能看到一个非常全面、美观的服务器监控仪表板了!
- 点击左侧菜单
实践练习
-
基础验证:
- 要求:完成上述所有步骤后,通过
curl命令或浏览器访问 Prometheus 的 Web UI(http://IP:9090/targets),截图展示所有抓取目标的状态。 - 预期输出:至少
prometheus和node两个目标状态为UP。
- 要求:完成上述所有步骤后,通过
-
扩展监控:
- 要求:将另一台局域网内的 Linux 服务器(例如你的另一台虚拟机)也纳入监控。在那台机器上安装 Node Exporter,并在 Prometheus 的配置文件
prometheus.yml中添加它的 IP 地址作为新的目标。 - 预期输出:在 Prometheus 的
/targets页面和 Grafana 的仪表板中,都能看到并切换查看新服务器的指标。
- 要求:将另一台局域网内的 Linux 服务器(例如你的另一台虚拟机)也纳入监控。在那台机器上安装 Node Exporter,并在 Prometheus 的配置文件
-
自定义监控:
- 要求:修改 Grafana 中导入的仪表板,添加一个新的面板(Panel)。这个面板需要使用 Prometheus 的查询语言 PromQL,显示 服务器最近 5 分钟的平均 1 分钟负载 (
node_load1)。 - 预期输出:在仪表板上可以看到一个显示平均负载变化趋势的新图表。
- 要求:修改 Grafana 中导入的仪表板,添加一个新的面板(Panel)。这个面板需要使用 Prometheus 的查询语言 PromQL,显示 服务器最近 5 分钟的平均 1 分钟负载 (
常见错误
- 端口冲突:启动服务时报告端口已被占用(如 9090, 9100, 3000)。解决方法:使用
sudo netstat -tlnp | grep <端口号>或sudo lsof -i :<端口号>找出占用进程并停止它。 - 配置文件语法错误:Prometheus 或 Grafana 启动失败。解决方法:
- Prometheus:使用
promtool check config /etc/prometheus/prometheus.yml命令检查配置文件语法。 - Grafana:查看日志
sudo journalctl -u grafana-server -f。
- Prometheus:使用
- 权限问题:服务无法读取配置文件或数据目录。确保配置文件和数据目录的所有者是
prometheus用户(sudo chown -R prometheus:prometheus /path)。 - 防火墙阻止:Prometheus 无法抓取 Node Exporter,或用户无法访问 Grafana Web UI。解决方法:确保服务器的防火墙放行了相关端口(如 9090, 9100, 3000)。例如使用
ufw:sudo ufw allow 9090/tcp。 - Grafana 添加数据源失败:测试连接时提示错误。首先,确认 Prometheus 服务本身运行正常且可访问(
curl http://localhost:9090)。其次,在 Grafana 的数据源配置中,确保 URL 不包含多余的路径。
小结
本节课我们完成了一个完整的监控系统实战搭建:
- 架构核心:Prometheus 作为数据采集与存储引擎,Node Exporter 作为被监控节点的数据生产者,Grafana 作为数据可视化层。
- 部署流程:按照 被监控端(Node Exporter) -> 采集端(Prometheus) -> 展示端(Grafana) 的顺序进行安装和配置,并利用
systemd实现服务管理。 - 关键配置:Prometheus 的
prometheus.yml文件定义了“抓取什么”;Grafana 通过添加 Prometheus 作为数据源,并导入或自建仪表板来定义“看什么”。 - 运维价值:这套组合是云原生时代监控的事实标准,掌握它为你构建大规模、自动化的可观测性体系奠定了坚实基础。在后续的“备份策略与恢复演练”课程中,你将学习如何保护这些关键的监控数据。
练习编辑器
rust
Loading...