欢迎光临一站目录!
当前位置:一站目录 » 站长资讯 » seo优化 » 文章详细 订阅RssFeed

手把手教你从零搭建高效服务器监控平台

来源:一站目录 浏览:19次 时间:2026-03-14
    在当今高度依赖数字基础设施的企业环境中,服务器的稳定性与性能直接关系到业务连续性。一旦服务器出现异常,如 CPU 过载、内存泄漏或磁盘空间耗尽,若不能及时发现并处理,轻则影响用户体验,重则导致服务中断甚至数据丢失。因此,构建一套高效、可靠的服务器监控系统,已成为现代 IT 运维不可或缺的一环。本文将手把手带你从零开始,搭建一个基于开源工具的服务器监控平台,涵盖数据采集、存储、可视化与告警全流程。

    本教程选用业界广泛采用的开源组合:Prometheus 作为核心监控与时间序列数据库,Node Exporter 用于采集主机指标,Grafana 提供强大的可视化能力,Alertmanager 负责告警管理。这套方案不仅免费、灵活,而且社区活跃、文档丰富,非常适合中小型团队或个人开发者使用。即使你没有深厚的运维背景,只要具备基本的 Linux 操作知识,也能顺利完成搭建。

    首先,我们需要明确监控系统的基本架构。整个流程大致如下:被监控的服务器(目标主机)上运行 Node Exporter,它会定期暴露系统指标(如 CPU 使用率、内存、磁盘 I/O 等);Prometheus 主动拉取这些指标并存储在本地时间序列数据库中;Grafana 通过连接 Prometheus 数据源,将数据以图表形式展示;当某项指标超出预设阈值时,Prometheus 触发告警,并通过 Alertmanager 发送通知(如邮件、企业微信、钉钉等)。这种“拉取式”架构避免了传统“推送式”可能带来的网络拥塞和安全风险,也更符合云原生理念。

    接下来,我们进入实操环节。假设你有一台 Ubuntu 22.04 的服务器作为监控主机(IP 为 192.168.1.100),另有一台或多台需要被监控的 Linux 服务器(例如 192.168.1.101)。所有操作均以 root 用户或具有 sudo 权限的用户执行。第一步是安装 Prometheus。访问 Prometheus 官网(https://prometheus.io/download/),下载适用于 Linux 的最新稳定版二进制包。例如,截至 2024 年,可使用以下命令:
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
解压后,将 prometheus 和 promtool 可执行文件复制到 /usr/local/bin/ 目录,并创建配置目录 /etc/prometheus/ 和数据目录 /var/lib/prometheus/。接着,编写主配置文件 /etc/prometheus/prometheus.yml,内容如下:
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.101:9100']

这里定义了一个名为 'node' 的抓取任务,目标地址是被监控主机的 9100 端口(Node Exporter 默认端口)。你可以根据实际 IP 添加多个 target。

    为了便于管理,建议为 Prometheus 创建 systemd 服务。新建文件 /etc/systemd/system/prometheus.service,内容如下:
[Unit]
Description=Prometheus Monitoring
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.listen-address=0.0.0.0:9090

[Install]
WantedBy=multi-user.target

注意:需提前创建 prometheus 用户和组,并设置目录权限:
useradd --no-create-home --shell /bin/false prometheus
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

启动服务:
systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheus

此时,访问 http://192.168.1.100:9090,应能看到 Prometheus 的 Web UI,说明服务已正常运行。

    第二步是部署 Node Exporter 到被监控主机(192.168.1.101)。同样从官网下载对应版本:
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
解压后,将 node_exporter 二进制文件放入 /usr/local/bin/。同样创建 systemd 服务 /etc/systemd/system/node_exporter.service:
[Unit]
Description=Node Exporter
After=network.target

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

[Install]
WantedBy=multi-user.target

创建专用用户并授权:
useradd --no-create-home --shell /bin/false node_exporter
chown node_exporter:node_exporter /usr/local/bin/node_exporter

启动服务:
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter

此时,在监控主机上执行 curl http://192.168.1.101:9100/metrics,应能返回大量以 # HELP 和 # TYPE 开头的指标数据,说明 Node Exporter 已正常工作。

    第三步是安装 Grafana。Grafana 提供了比 Prometheus 更友好的可视化界面,支持丰富的图表类型和仪表盘模板。推荐使用官方 APT 仓库安装:
apt-get install -y software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | tee -a /etc/apt/sources.list.d/grafana.list
apt-get update
apt-get install grafana

启动 Grafana 服务:
systemctl start grafana-server
systemctl enable grafana-server

默认监听 3000 端口。访问 http://192.168.1.100:3000,首次登录使用 admin/admin,按提示修改密码。登录后,点击左侧齿轮图标进入“Configuration” -> “Data Sources”,选择“Add data source”,类型选 Prometheus,URL 填 http://localhost:9090,点击“Save & Test”。如果显示“Data source is working”,说明连接成功。

    接下来,我们可以导入现成的仪表盘模板。Grafana 官方提供了大量社区贡献的模板,其中最常用的是 Node Exporter Full(ID: 1860)。在 Grafana 主界面点击“+” -> “Import”,输入 ID 1860,选择刚才添加的 Prometheus 数据源,点击 Import。稍等片刻,一个包含 CPU、内存、磁盘、网络等全方位指标的精美仪表盘就呈现在眼前。你可以根据需要调整时间范围、刷新频率,甚至自定义面板。

    第四步是配置告警。Prometheus 本身支持基于规则的告警,但通知渠道有限,因此通常配合 Alertmanager 使用。首先安装 Alertmanager。同样从官网下载:
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
解压后,将 alertmanager 和 amtool 复制到 /usr/local/bin/,创建配置目录 /etc/alertmanager/。编辑 /etc/alertmanager/alertmanager.yml,例如配置邮件告警:
global:
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'alert@example.com'
  smtp_auth_username: 'alert@example.com'
  smtp_auth_password: 'your_password'

route:
  receiver: 'email'

receivers:
- name: 'email'
  email_configs:
  - to: 'admin@example.com'

注意:需替换为真实的 SMTP 信息。然后创建 systemd 服务 /etc/systemd/system/alertmanager.service,类似 Prometheus 的方式,指定配置文件路径和监听端口(默认 9093)。启动服务后,访问 http://192.168.1.100:9093 可查看 Alertmanager 状态。

    回到 Prometheus 配置,修改 /etc/prometheus/prometheus.yml,加入 alerting 部分:
alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']

rule_files:
  - "alert_rules.yml"

然后创建 /etc/prometheus/alert_rules.yml,定义告警规则,例如:
groups:
- name: example
  rules:
  - alert: HighCPUUsage
    expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "High CPU usage on {{ $labels.instance }}"
      description: "CPU usage is above 80% for more than 2 minutes."

  - alert: LowDiskSpace
    expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "Low disk space on {{ $labels.instance }}"
      description: "Available disk space is less than 10%."

重启 Prometheus 服务使配置生效。在 Prometheus Web UI 的“Alerts”页面,可以看到这些规则的状态。当条件触发时,告警会发送到 Alertmanager,并由其转发至指定邮箱。

    至此,一个基础但完整的服务器监控系统已搭建完成。当然,这只是一个起点。在实际生产环境中,你可能还需要考虑高可用(如 Prometheus 集群、远程存储)、安全加固(如 TLS 加密、认证授权)、多节点监控(使用服务发现自动注册)、日志集成(结合 Loki 或 ELK)等高级功能。但无论如何,掌握这套核心流程,将为你后续的运维自动化打下坚实基础。

    最后提醒几点最佳实践:一是定期备份 Prometheus 的数据目录和配置文件;二是合理设置 scrape_interval 和 retention 时间,避免磁盘爆满;三是告警规则不宜过于敏感,避免“告警疲劳”;四是善用 Grafana 的变量和模板功能,实现动态仪表盘。通过持续优化和扩展,你的监控系统将真正成为保障业务稳定的“哨兵”。

    希望这篇教程能帮助你快速上手服务器监控系统的搭建。如果你在操作中遇到问题,欢迎查阅官方文档或在社区论坛寻求帮助。技术的价值在于实践,动手试试吧!