服务器监控实战:Zabbix/Prometheus+Grafana 开源监控系统搭建指南

服务器监控实战:Zabbix/Prometheus+Grafana 开源监控系统搭建指南

服务器就像是您在线业务的心脏,它的稳定运行至关重要。然而,仅仅让服务器运行起来是不够的,您还需要时刻了解它的健康状况。服务器监控系统能够帮助您实时追踪关键性能指标(CPU、内存、磁盘、网络等)、发现潜在问题、分析性能瓶颈、进行容量规划,从而实现主动运维,保障业务连续性。幸运的是,我们有许多强大且免费的开源监控解决方案可供选择,其中 Zabbix 和 Prometheus+Grafana 是最受欢迎的两个组合。

两大主流开源监控方案简介

Zabbix:一体化企业级监控

Zabbix 是一个非常成熟且功能全面的一体化监控解决方案。它提供了数据收集、数据处理、告警通知、可视化(Web界面)以及用户权限管理等企业级功能。Zabbix 主要通过在被监控主机上安装 Agent 来采集数据(支持推/拉模式),也支持 SNMP、IPMI、JMX 等多种监控方式,非常适合监控传统的 IT 基础设施,包括服务器、网络设备、应用等。其优点是开箱即用功能丰富,但初始配置和学习曲线可能相对陡峭一些。

Prometheus + Grafana:现代化指标监控与可视化

Prometheus 是一个专注于时间序列(Time-Series)指标数据收集和存储的开源监控告警系统,最初由 SoundCloud 开发,现已成为云原生计算基金会 (CNCF) 的一部分。它采用 Pull(拉)模型,定期从配置的目标(Targets)暴露的 HTTP 端点上抓取(Scrape)指标。Prometheus 设计简洁、高效、易于扩展,并拥有强大的查询语言 PromQL。它特别适合动态的、容器化的云原生环境,因为它内置了服务发现机制。

Grafana 则是一个领先的开源数据可视化和分析平台。它本身不收集数据,但可以连接到各种数据源,其中 Prometheus 是最常见的搭配之一。通过 Grafana,您可以将 Prometheus 收集到的枯燥指标数据转换成美观、交互式的仪表盘(Dashboard),进行直观的展示和分析。

为何选择 Prometheus + Grafana? 这个组合提供了极大的灵活性、可扩展性和强大的可视化能力,社区活跃,生态丰富,是目前现代化监控领域的事实标准之一。

本文重点: 本篇实战指南将重点介绍如何搭建 Prometheus + Grafana 监控栈,并通过 Node Exporter 来监控 Linux 服务器的基本性能指标。

实战:搭建 Prometheus + Grafana 监控系统

场景假设: 我们将使用两台 Linux 服务器(以 Ubuntu 22.04 为例):一台作为监控服务器(安装 Prometheus 和 Grafana),另一台作为被监控的目标服务器(安装 Node Exporter)。为简化演示,您也可以在同一台服务器上完成所有安装。

前提条件 (Prerequisites)

  • 两台可以互相访问的 Linux 服务器(或一台也行)。
  • 拥有 sudoroot 权限。
  • 基础的 Linux 命令行操作知识。
  • 服务器防火墙已配置,允许访问即将使用的端口:Prometheus (默认 9090), Grafana (默认 3000), Node Exporter (默认 9100)。

步骤一:在被监控服务器上安装 Node Exporter

Node Exporter 是 Prometheus 官方提供的用于暴露 *nix 系统硬件和操作系统指标的工具。

  1. 下载 Node Exporter 二进制文件: 访问 Prometheus 官网下载页面 (https://prometheus.io/download/#node_exporter) 找到最新的 Linux (amd64) 版本的下载链接。 # 替换为最新的下载链接 wget https://github.com/prometheus/node_exporter/releases/download/vX.Y.Z/node_exporter-X.Y.Z.linux-amd64.tar.gz
  2. 解压文件: tar xvf node_exporter-*.linux-amd64.tar.gz
  3. 移动可执行文件到系统路径: sudo mv node_exporter-*.linux-amd64/node_exporter /usr/local/bin/
  4. (可选) 创建专用用户: (更安全) sudo useradd --no-create-home --shell /bin/false node_exporter
  5. 创建 systemd 服务文件: 创建并编辑 /etc/systemd/system/node_exporter.service 文件: sudo nano /etc/systemd/system/node_exporter.service 粘贴以下内容 (如果创建了专用用户,请取消 User=node_exporter 的注释): [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
  6. 启用并启动服务: sudo systemctl daemon-reload sudo systemctl enable node_exporter sudo systemctl start node_exporter sudo systemctl status node_exporter # 确认状态为 active (running)
  7. 验证: 在浏览器或使用 curl 访问 http://[Target_Server_IP]:9100/metrics,应该能看到大量输出的指标信息。
  8. 配置防火墙: # 如果使用 ufw sudo ufw allow 9100/tcp sudo ufw reload # 如果使用 firewalld # sudo firewall-cmd --add-port=9100/tcp --permanent # sudo firewall-cmd --reload

步骤二:在监控服务器上安装 Prometheus

  1. 下载 Prometheus 二进制文件: 访问 Prometheus 官网下载页面 (https://prometheus.io/download/#prometheus) 获取最新 Linux (amd64) 版下载链接。 # 替换为最新的下载链接 wget https://github.com/prometheus/prometheus/releases/download/vX.Y.Z/prometheus-X.Y.Z.linux-amd64.tar.gz
  2. 解压文件: tar xvf prometheus-*.linux-amd64.tar.gz
  3. 创建目录和移动文件: sudo mkdir /etc/prometheus sudo mkdir /var/lib/prometheus sudo mv prometheus-*.linux-amd64/prometheus /usr/local/bin/ sudo mv prometheus-*.linux-amd64/promtool /usr/local/bin/ sudo mv prometheus-*.linux-amd64/prometheus.yml /etc/prometheus/ sudo mv prometheus-*.linux-amd64/consoles /etc/prometheus/ sudo mv prometheus-*.linux-amd64/console_libraries /etc/prometheus/
  4. (可选) 创建专用用户: sudo useradd --no-create-home --shell /bin/false prometheus
  5. 设置目录权限: # 如果创建了专用用户 sudo chown prometheus:prometheus /etc/prometheus sudo chown prometheus:prometheus /var/lib/prometheus sudo chown -R prometheus:prometheus /etc/prometheus/consoles sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries # 如果没有创建用户,确保运行服务的用户有权限读写
  6. 配置 Prometheus (`prometheus.yml`): 编辑 Prometheus 配置文件 /etc/prometheus/prometheus.ymlsudo nano /etc/prometheus/prometheus.yml 默认配置会监控 Prometheus 自身。我们需要添加 Node Exporter 的目标。修改 scrape_configs 部分如下 (替换 [Target_Server_IP] 为您目标服务器的实际 IP): global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. scrape_configs: # Job for Prometheus itself - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] # Job for Node Exporter(s) - job_name: 'node_exporter' static_configs: # Replace with your target server IP(s). Add more targets if needed. # Also monitoring the prometheus server itself via node exporter if installed there. - targets: ['[Target_Server_IP]:9100', 'localhost:9100']
  7. 创建 systemd 服务文件: 创建并编辑 /etc/systemd/system/prometheus.service 文件: sudo nano /etc/systemd/system/prometheus.service 粘贴以下内容 (如果创建了专用用户,请取消 User/Group 的注释): [Unit] Description=Prometheus 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
  8. 启用并启动服务: sudo systemctl daemon-reload sudo systemctl enable prometheus sudo systemctl start prometheus sudo systemctl status prometheus # 确认状态为 active (running)
  9. 验证: 访问 Prometheus Web UI: http://[Prometheus_Server_IP]:9090。导航到 “Status” -> “Targets” 页面,检查 prometheusnode_exporter 的 State 是否为 “UP”。
  10. 配置防火墙: # 如果使用 ufw sudo ufw allow 9090/tcp sudo ufw reload # 如果使用 firewalld # sudo firewall-cmd --add-port=9090/tcp --permanent # sudo firewall-cmd --reload

步骤三:在监控服务器上安装 Grafana

推荐使用官方的 APT/YUM 仓库进行安装,这样方便后续更新。

  1. 添加 Grafana 仓库并安装: 请参考 Grafana 官方安装文档 (适用于 Debian/Ubuntu适用于 RPM) 获取最新步骤。通常类似如下 (以 Ubuntu 为例): sudo apt-get update sudo apt-get install -y apt-transport-https software-properties-common wget sudo mkdir -p /etc/apt/keyrings/ wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list sudo apt-get update sudo apt-get install grafana -y
  2. 启动 Grafana 服务: sudo systemctl daemon-reload sudo systemctl enable grafana-server sudo systemctl start grafana-server sudo systemctl status grafana-server # 确认状态为 active (running)
  3. 验证: 访问 Grafana Web UI: http://[Prometheus_Server_IP]:3000
  4. 配置防火墙: # 如果使用 ufw sudo ufw allow 3000/tcp sudo ufw reload # 如果使用 firewalld # sudo firewall-cmd --add-port=3000/tcp --permanent # sudo firewall-cmd --reload

步骤四:配置 Grafana 连接 Prometheus 并导入仪表盘

  1. 登录 Grafana: 打开 http://[Prometheus_Server_IP]:3000。默认用户名和密码通常是 admin / admin。首次登录会要求您修改密码。
  2. 添加 Prometheus 数据源:
    • 点击左侧菜单的齿轮图标 (Configuration) -> “Data Sources”。
    • 点击 “Add data source” 按钮,选择 “Prometheus”。
    • 在 “HTTP” 部分的 “URL” 字段中,输入 Prometheus 的地址: http://localhost:9090 (因为我们在同一台服务器上安装了 Prometheus 和 Grafana)。如果 Prometheus 在不同服务器,则输入对应 IP 和端口。
    • 其他设置保持默认即可。点击页面底部的 “Save & test” 按钮。如果一切正常,会提示 “Data source is working”。
  3. 导入 Node Exporter 仪表盘: Grafana 社区有大量预制的仪表盘可供导入。Node Exporter 的仪表盘非常多,一个流行的选择是 “Node Exporter Full” (ID: 1860)。
    • 点击左侧菜单的四个方块图标 (Dashboards)。
    • 点击页面右上角的 “New” -> “Import”。
    • 在 “Import via grafana.com” 字段中输入仪表盘 ID 1860,然后点击旁边的 “Load” 按钮。
    • 在下一个界面,您可以修改仪表盘的名称(可选),最重要的是在底部的 “Prometheus” 数据源下拉框中,选择您刚才添加的 Prometheus 数据源。
    • 点击 “Import” 按钮。
  4. 查看仪表盘: 导入成功后,您应该能看到一个包含各种服务器指标(CPU, Memory, Disk I/O, Network Traffic 等)的丰富仪表盘,数据来自您通过 Node Exporter 监控的服务器。

Zabbix 作为替代方案

如果您更倾向于一个功能集成度更高、开箱即用的传统监控方案,或者需要监控大量网络设备、Windows 主机等,Zabbix 可能是一个值得考虑的选择。它的优点在于一体化体验好,支持的监控类型广泛(Agent, SNMP, IPMI, JMX 等),社区成熟。其设置通常涉及安装 Zabbix Server (依赖 PHP 和数据库)、在目标主机上安装 Zabbix Agent,并通过 Web 界面进行详细配置。感兴趣的读者可以访问 Zabbix 官方文档 了解更多信息。

总结与后续步骤

恭喜!您已经成功搭建了一套基于 Prometheus 和 Grafana 的基础服务器监控系统,并通过 Node Exporter 收集和展示了 Linux 服务器的关键性能指标。这为您主动了解服务器状态、排查问题提供了有力的工具。

开源监控工具非常强大且灵活。接下来,您可以探索:

  • 添加更多 Exporter:mysqld_exporter (监控 MySQL), redis_exporter 等,或针对您的应用程序编写自定义 Exporter。
  • 配置告警: 使用 Prometheus 的 Alertmanager 组件来定义告警规则,并在满足条件时发送通知。
  • 定制 Grafana 仪表盘: 学习 PromQL 查询语言,根据您的特定需求创建更个性化的监控视图。
  • 服务发现: 研究 Prometheus 的服务发现机制(如基于 Consul, Kubernetes SD),以自动发现和监控动态环境中的目标。
  • 深入 Zabbix: 如果 Zabbix 的特性更符合您的需求,可以进一步学习和部署 Zabbix。

持续监控是确保系统稳定可靠运行的关键一环,希望本指南能帮助您迈出坚实的第一步。

知识库

GPU服务器选购指南:NVIDIA显卡(A/H/RTX系列)型号与显存核心解读

2025-4-22 14:23:10

知识库软件分享

保姆级教程:在Ubuntu上为PyTorch/TensorFlow配置CUDA与cuDNN环境

2025-4-23 11:09:49

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧