
服务器就像是您在线业务的心脏,它的稳定运行至关重要。然而,仅仅让服务器运行起来是不够的,您还需要时刻了解它的健康状况。服务器监控系统能够帮助您实时追踪关键性能指标(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 服务器(或一台也行)。
- 拥有
sudo
或root
权限。 - 基础的 Linux 命令行操作知识。
- 服务器防火墙已配置,允许访问即将使用的端口:Prometheus (默认 9090), Grafana (默认 3000), Node Exporter (默认 9100)。
步骤一:在被监控服务器上安装 Node Exporter
Node Exporter 是 Prometheus 官方提供的用于暴露 *nix 系统硬件和操作系统指标的工具。
- 下载 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
- 解压文件:
tar xvf node_exporter-*.linux-amd64.tar.gz
- 移动可执行文件到系统路径:
sudo mv node_exporter-*.linux-amd64/node_exporter /usr/local/bin/
- (可选) 创建专用用户: (更安全)
sudo useradd --no-create-home --shell /bin/false node_exporter
- 创建 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
- 启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable node_exporter sudo systemctl start node_exporter sudo systemctl status node_exporter # 确认状态为 active (running)
- 验证: 在浏览器或使用
curl
访问http://[Target_Server_IP]:9100/metrics
,应该能看到大量输出的指标信息。 - 配置防火墙:
# 如果使用 ufw sudo ufw allow 9100/tcp sudo ufw reload # 如果使用 firewalld # sudo firewall-cmd --add-port=9100/tcp --permanent # sudo firewall-cmd --reload
步骤二:在监控服务器上安装 Prometheus
- 下载 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
- 解压文件:
tar xvf prometheus-*.linux-amd64.tar.gz
- 创建目录和移动文件:
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/
- (可选) 创建专用用户:
sudo useradd --no-create-home --shell /bin/false prometheus
- 设置目录权限:
# 如果创建了专用用户 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 # 如果没有创建用户,确保运行服务的用户有权限读写
- 配置 Prometheus (`prometheus.yml`): 编辑 Prometheus 配置文件
/etc/prometheus/prometheus.yml
:sudo 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']
- 创建 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
- 启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable prometheus sudo systemctl start prometheus sudo systemctl status prometheus # 确认状态为 active (running)
- 验证: 访问 Prometheus Web UI:
http://[Prometheus_Server_IP]:9090
。导航到 “Status” -> “Targets” 页面,检查prometheus
和node_exporter
的 State 是否为 “UP”。 - 配置防火墙:
# 如果使用 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 仓库进行安装,这样方便后续更新。
- 添加 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
- 启动 Grafana 服务:
sudo systemctl daemon-reload sudo systemctl enable grafana-server sudo systemctl start grafana-server sudo systemctl status grafana-server # 确认状态为 active (running)
- 验证: 访问 Grafana Web UI:
http://[Prometheus_Server_IP]:3000
。 - 配置防火墙:
# 如果使用 ufw sudo ufw allow 3000/tcp sudo ufw reload # 如果使用 firewalld # sudo firewall-cmd --add-port=3000/tcp --permanent # sudo firewall-cmd --reload
步骤四:配置 Grafana 连接 Prometheus 并导入仪表盘
- 登录 Grafana: 打开
http://[Prometheus_Server_IP]:3000
。默认用户名和密码通常是admin
/admin
。首次登录会要求您修改密码。 - 添加 Prometheus 数据源:
- 点击左侧菜单的齿轮图标 (Configuration) -> “Data Sources”。
- 点击 “Add data source” 按钮,选择 “Prometheus”。
- 在 “HTTP” 部分的 “URL” 字段中,输入 Prometheus 的地址:
http://localhost:9090
(因为我们在同一台服务器上安装了 Prometheus 和 Grafana)。如果 Prometheus 在不同服务器,则输入对应 IP 和端口。 - 其他设置保持默认即可。点击页面底部的 “Save & test” 按钮。如果一切正常,会提示 “Data source is working”。
- 导入 Node Exporter 仪表盘: Grafana 社区有大量预制的仪表盘可供导入。Node Exporter 的仪表盘非常多,一个流行的选择是 “Node Exporter Full” (ID: 1860)。
- 点击左侧菜单的四个方块图标 (Dashboards)。
- 点击页面右上角的 “New” -> “Import”。
- 在 “Import via grafana.com” 字段中输入仪表盘 ID
1860
,然后点击旁边的 “Load” 按钮。 - 在下一个界面,您可以修改仪表盘的名称(可选),最重要的是在底部的 “Prometheus” 数据源下拉框中,选择您刚才添加的 Prometheus 数据源。
- 点击 “Import” 按钮。
- 查看仪表盘: 导入成功后,您应该能看到一个包含各种服务器指标(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。
持续监控是确保系统稳定可靠运行的关键一环,希望本指南能帮助您迈出坚实的第一步。