当前位置: 首页 > news >正文

保姆级教程:用Prometheus+AlertManager给你的服务器CPU、内存、磁盘上个“健康保险”

从零搭建服务器健康监控系统:Prometheus+AlertManager实战指南

想象一下凌晨三点,你的服务器突然因为CPU爆满而宕机,而你还沉浸在梦乡中毫不知情。等到第二天早上,客户投诉、数据丢失、服务中断的连锁反应已经无法挽回。这种噩梦般的场景,正是我们需要给服务器上"健康保险"的原因。本文将手把手教你使用Prometheus和AlertManager这套黄金组合,为你的Linux服务器打造全天候的健康监测与告警系统,让你在问题发生前就能及时干预,避免灾难性后果。

这套方案特别适合拥有个人博客、测试环境或小型项目服务器的开发者与运维新手。你不需要成为监控专家,只要跟着本文的步骤操作,就能在几小时内建立起覆盖CPU、内存、磁盘等核心指标的监控体系。更重要的是,我们会深入解释每个配置背后的逻辑,让你不仅能"知其然",还能"知其所以然",未来可以根据实际需求灵活调整。

1. 监控系统基础架构搭建

在开始配置之前,我们需要先了解整个监控系统的架构。Prometheus作为监控系统的核心,负责定期从被监控的服务器(我们称之为"目标")上拉取指标数据。这些数据通过运行在每台服务器上的Node Exporter组件采集。当指标超过预设阈值时,Prometheus会触发告警规则,将告警信息发送给AlertManager。AlertManager则负责对这些告警进行去重、分组,并通过邮件、钉钉等渠道通知相关人员。

1.1 安装Node Exporter

Node Exporter是Prometheus生态中专用于采集主机级指标的组件。它能够收集CPU、内存、磁盘、网络等系统层面的监控数据。以下是安装步骤:

# 下载最新版Node Exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz # 解压文件 tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz # 移动二进制文件到系统目录 sudo mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin/ # 创建系统服务文件 sudo tee /etc/systemd/system/node_exporter.service <<EOF [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 EOF # 创建专用用户并启动服务 sudo useradd -rs /bin/false node_exporter sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter

安装完成后,你可以通过curl http://localhost:9100/metrics验证Node Exporter是否正常工作。这个端点会返回大量的指标数据,这些正是Prometheus将要收集的信息。

1.2 安装与配置Prometheus

Prometheus的安装过程与Node Exporter类似,但配置更为复杂。我们需要明确告诉Prometheus从哪些目标采集数据,以及如何识别这些数据。

# 下载Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.33.1/prometheus-2.33.1.linux-amd64.tar.gz # 解压并移动文件 tar xvfz prometheus-2.33.1.linux-amd64.tar.gz sudo mv prometheus-2.33.1.linux-amd64 /usr/local/share/prometheus sudo ln -s /usr/local/share/prometheus/prometheus /usr/local/bin/prometheus

接下来创建Prometheus的配置文件/etc/prometheus/prometheus.yml

global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'node' static_configs: - targets: ['localhost:9100']

这个基础配置告诉Prometheus每15秒从本地的Node Exporter(端口9100)采集一次数据。如果你有多台服务器需要监控,只需在targets数组中添加更多的Node Exporter地址即可。

创建系统服务文件/etc/systemd/system/prometheus.service

[Unit] Description=Prometheus 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/ [Install] WantedBy=multi-user.target

最后创建用户并启动服务:

sudo useradd -rs /bin/false prometheus sudo mkdir /var/lib/prometheus sudo chown prometheus:prometheus /var/lib/prometheus sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus

现在,你可以通过浏览器访问http://<服务器IP>:9090来打开Prometheus的Web界面。在"Status > Targets"页面,你应该能看到node作业的状态为"UP",表示Prometheus已经成功连接到Node Exporter。

2. 指标理解与告警规则配置

监控系统的核心价值在于能够及时发现问题并通知相关人员。要实现这一点,我们需要定义什么样的指标值算是"有问题",这就是告警规则的作用。在配置告警规则前,我们需要先理解几个关键指标的含义。

2.1 核心指标解析

Node Exporter提供了数百个指标,但对我们来说最重要的是以下几个:

  1. CPU使用率node_cpu_seconds_total记录了CPU在各种模式下花费的时间(单位:秒)。通过计算非空闲时间的比例,我们可以得到CPU使用率。

  2. 内存使用率node_memory_MemTotal_bytesnode_memory_MemAvailable_bytes分别表示总内存和可用内存。注意这里使用的是"可用内存"而非"空闲内存",因为Linux会利用空闲内存做缓存,这部分内存实际上是可以立即回收的。

  3. 磁盘使用率node_filesystem_size_bytesnode_filesystem_avail_bytes表示文件系统的总大小和可用空间。需要注意的是,不同的文件系统类型(如ext4、xfs)需要分别处理。

2.2 创建告警规则文件

在Prometheus的配置目录下创建/etc/prometheus/rules/host.rules文件,内容如下:

groups: - name: host-monitoring rules: - alert: HighCPUUsage expr: 100 * (1 - avg by(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m]))) > 80 for: 10m labels: severity: critical annotations: summary: "高CPU使用率 ({{ $value }}%) 在 {{ $labels.instance }}" description: "实例 {{ $labels.instance }} 的CPU使用率已经超过80%持续10分钟" - alert: HighMemoryUsage expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85 for: 15m labels: severity: critical annotations: summary: "高内存使用率 ({{ $value }}%) 在 {{ $labels.instance }}" description: "实例 {{ $labels.instance }} 的内存使用率已经超过85%持续15分钟" - alert: HighDiskUsage expr: 100 * (node_filesystem_size_bytes{fstype=~"ext4|xfs"} - node_filesystem_avail_bytes{fstype=~"ext4|xfs"}) / node_filesystem_size_bytes{fstype=~"ext4|xfs"} > 90 for: 30m labels: severity: warning annotations: summary: "高磁盘使用率 ({{ $value }}%) 在 {{ $labels.mountpoint }} ({{ $labels.instance }})" description: "挂载点 {{ $labels.mountpoint }} (实例 {{ $labels.instance }}) 的磁盘使用率已经超过90%持续30分钟"

注意:上述阈值(CPU>80%、内存>85%、磁盘>90%)是示例值,实际应用中需要根据你的服务器负载特性调整。生产环境通常需要更保守的阈值。

为了让Prometheus加载这些规则,我们需要修改prometheus.yml配置文件,在global部分后添加:

rule_files: - '/etc/prometheus/rules/*.rules'

然后重启Prometheus服务:

sudo systemctl restart prometheus

2.3 阈值调整建议

设置合理的告警阈值是一门艺术,需要考虑以下因素:

  • 服务器用途:数据库服务器和Web服务器对资源的需求模式完全不同
  • 时间特性:白天和夜晚的负载可能有显著差异
  • 业务关键性:核心业务系统需要更敏感的告警

以下是一些调整建议:

指标类型开发环境建议阈值生产环境建议阈值持续时间建议
CPU使用率90%70-80%5-15分钟
内存使用率90%80-85%10-30分钟
磁盘使用率95%85-90%30-60分钟

3. AlertManager配置与告警通知

告警规则只是监控系统的一半,另一半是如何有效地将这些告警传达给正确的人。这就是AlertManager的职责所在。AlertManager可以处理告警的去重、分组和路由,确保你不会被同一问题的多个告警淹没,同时相关的告警会被组织在一起发送。

3.1 安装AlertManager

# 下载AlertManager wget https://github.com/prometheus/alertmanager/releases/download/v0.23.0/alertmanager-0.23.0.linux-amd64.tar.gz # 解压并移动文件 tar xvfz alertmanager-0.23.0.linux-amd64.tar.gz sudo mv alertmanager-0.23.0.linux-amd64 /usr/local/share/alertmanager sudo ln -s /usr/local/share/alertmanager/alertmanager /usr/local/bin/alertmanager

创建配置文件/etc/alertmanager/alertmanager.yml,我们先配置一个简单的邮件通知:

route: group_by: ['alertname', 'severity'] group_wait: 30s group_interval: 5m repeat_interval: 4h receiver: 'email-notifications' receivers: - name: 'email-notifications' email_configs: - to: 'your-email@example.com' from: 'alertmanager@yourdomain.com' smarthost: 'smtp.yourdomain.com:587' auth_username: 'smtp-user' auth_password: 'smtp-password' require_tls: true

创建系统服务文件/etc/systemd/system/alertmanager.service

[Unit] Description=AlertManager After=network.target [Service] User=alertmanager Group=alertmanager Type=simple ExecStart=/usr/local/bin/alertmanager \ --config.file=/etc/alertmanager/alertmanager.yml \ --storage.path=/var/lib/alertmanager/ [Install] WantedBy=multi-user.target

创建用户并启动服务:

sudo useradd -rs /bin/false alertmanager sudo mkdir /var/lib/alertmanager sudo chown alertmanager:alertmanager /var/lib/alertmanager sudo systemctl daemon-reload sudo systemctl start alertmanager sudo systemctl enable alertmanager

3.2 配置Prometheus与AlertManager通信

为了让Prometheus能够将告警发送给AlertManager,我们需要修改prometheus.yml文件,添加以下内容:

alerting: alertmanagers: - static_configs: - targets: - 'localhost:9093'

重启Prometheus服务使配置生效:

sudo systemctl restart prometheus

3.3 高级告警路由配置

在实际生产环境中,你可能希望不同类型的告警发送给不同的人,或者在非工作时间只发送严重告警。这可以通过AlertManager的路由树实现。下面是一个更复杂的配置示例:

route: receiver: 'default-receiver' group_by: ['alertname', 'cluster'] routes: - match: severity: 'critical' receiver: 'critical-alerts' group_wait: 10s repeat_interval: 30m - match_re: alertname: '.*Disk.*' receiver: 'storage-team' group_interval: 5m receivers: - name: 'default-receiver' email_configs: - to: 'team@example.com' - name: 'critical-alerts' email_configs: - to: 'oncall@example.com' webhook_configs: - url: 'http://alert-gateway/critical' - name: 'storage-team' email_configs: - to: 'storage-team@example.com' slack_configs: - api_url: 'https://hooks.slack.com/services/...' channel: '#storage-alerts'

这个配置实现了:

  1. 默认所有告警发送给团队邮箱
  2. 严重(severity=critical)告警额外发送给值班人员,并缩短重复间隔
  3. 磁盘相关告警单独发送给存储团队,并通过Slack通知

4. 系统优化与实用技巧

一个健壮的监控系统不仅需要正确配置,还需要考虑性能和可用性。以下是几个提升监控系统效能的实用技巧。

4.1 告警静默与维护窗口

在进行系统维护时,你可能希望暂时屏蔽某些预期的告警。AlertManager提供了静默(Silence)功能,可以在Web界面(http://<alertmanager-ip>:9093)中配置。

对于计划内的维护,可以提前创建静默规则:

  1. 匹配特定的标签(如instance=server1)
  2. 设置静默的开始和结束时间
  3. 添加注释说明静默原因

4.2 监控系统自身的监控

监控系统本身也需要被监控。建议为Prometheus和AlertManager设置基础的健康检查:

- alert: PrometheusDown expr: up{job="prometheus"} == 0 for: 1m labels: severity: critical annotations: summary: "Prometheus down ({{ $labels.instance }})" description: "Prometheus实例 {{ $labels.instance }} 已经下线超过1分钟" - alert: AlertManagerDown expr: up{job="alertmanager"} == 0 for: 1m labels: severity: critical annotations: summary: "AlertManager down ({{ $labels.instance }})" description: "AlertManager实例 {{ $labels.instance }} 已经下线超过1分钟"

4.3 性能优化建议

随着监控目标的增加,Prometheus的资源消耗也会增长。以下是一些优化建议:

  • 调整抓取间隔:对于不关键的指标,可以适当延长scrape_interval
  • 限制指标数量:在Node Exporter中使用--collector参数只启用需要的采集器
  • 长期存储:考虑使用VictoriaMetrics或Thanos扩展存储能力
  • 分片:对于大规模部署,可以按业务线拆分Prometheus实例

4.4 监控面板配置

虽然Prometheus自带简单的图表功能,但对于日常监控,建议使用Grafana创建更丰富的仪表板。以下是一个快速安装Grafana的步骤:

# 在Ubuntu/Debian上安装 sudo apt-get install -y adduser libfontconfig1 wget https://dl.grafana.com/oss/release/grafana_8.3.4_amd64.deb sudo dpkg -i grafana_8.3.4_amd64.deb # 启动服务 sudo systemctl start grafana-server sudo systemctl enable grafana-server

安装后,访问http://<grafana-ip>:3000,默认用户名和密码都是admin。添加Prometheus作为数据源后,可以导入现成的Node Exporter仪表板(ID:1860)。

http://www.jsqmd.com/news/953314/

相关文章:

  • 飞书CLI开源47天突破万星,国内办公套件第一
  • FPGA饮料售货机Verilog工程:含完整Quartus编译文件与仿真测试用例
  • 别再只做报警了!LabVIEW温度监控系统进阶:从界面美化到数据持久化全流程
  • 别再只会用单片机点灯了!重温经典:用555和CD4017芯片搭一个可调频的流水灯电路
  • GKD订阅管理宝典:一站式解决方案让自动化规则触手可及
  • 黑海岸Java课堂从*入门*至*精通* 第六章
  • 2026年深圳专利申请与无效律师实力对比 5位深度测评 - 本地品牌推荐
  • pandas多维聚合实战:金融级生产环境的高效分析范式
  • 基于TCAN的光伏功率预测TensorFlow工程包:含训练脚本、预测绘图与模块化组件
  • ORION框架:多机器人协同导航的技术突破与应用
  • 【2027最新】基于SpringBoot+Vue的spring boot医院挂号就诊系统管理系统源码+MyBatis+MySQL
  • 对话ai助手,在快马平台智能解答centos7安装难题并生成代码
  • KLayout核心功能深度解析:DRC、LVS与版图验证实战教程
  • 2026年6月北京老房翻新装修公司推荐:五大排名旧房安全改造评测专业价格 - 品牌推荐
  • 开发者必读:项目全生命周期中Claude Code的最佳介入时机
  • 实战案例:使用MOSS-Audio构建智能会议记录系统的完整解决方案
  • 中山市六大正规黄金回收+实地测评简报 - 余生黄金回收
  • 别再手动算Q值了!用FDTD Solutions分析组搞定高/低Q谐振腔(附2D/3D案例)
  • Play Integrity Fix:Android设备完整性验证绕过技术深度解析与实战指南
  • 别再傻傻分不清了!一文搞懂内存、硬盘、Cache到底有啥区别(附通俗图解)
  • CANN/asc-devkit reg数据类型定义
  • 告别海思PQtool和SecureCRT:我的ISP图像调试入门工具包与避坑指南
  • 2026年天津代理记账公司推荐 荣天会计25年专注中小企业值得选择 - 本地品牌推荐
  • 从Notebook到生产:机器学习模型服务化七道工序
  • 多维聚合实战:从groupby到业务决策的七步炼金术
  • 告别代码!用ShaderGraph的5个‘隐藏’节点,轻松复刻那些经典Shader效果
  • GewisLab/CNEnvAir高级应用:多源数据融合与空间分析实战
  • ZYNQ7000新手避坑:用AXI GPIO扩展IO口,比EMIO更省心的实战配置指南
  • PDMS Pipeline Tool材料表实战:从MTO导出到螺栓表避坑,一份给管道工程师的完整指南
  • 适配正点原子IMX6ULL的QT车载主界面源码,集成音乐播放、视频播放与传感器扩展接口