本教程选用业界广泛采用的开源组合: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 的变量和模板功能,实现动态仪表盘。通过持续优化和扩展,你的监控系统将真正成为保障业务稳定的“哨兵”。
希望这篇教程能帮助你快速上手服务器监控系统的搭建。如果你在操作中遇到问题,欢迎查阅官方文档或在社区论坛寻求帮助。技术的价值在于实践,动手试试吧!
