Linux 安装 Prometheus、Grafana、Alertmanager、Node Exporter,搭建主机监控告警平台(附安装包)

发布于 2026/8/24 · 1 阅读
PrometheusGrafanaAlertmanagerNode Exporter主机监控系统监控告警告警通知Linux时序数据库可视化开源
Linux主机监控告警平台搭建:Prometheus、Grafana、Alertmanager、Node Exporter四件套安装配置,覆盖CPU、内存、磁盘、网络指标,含systemd服务化、仪表盘、告警规则与邮件通知,附安装包。

封面.png

1. 简介:一套开源的主机监控告警方案

服务器运维最基础也最重要的一件事,是实时掌握每台主机与系统的健康状态:CPU 是否长期打满、内存是否吃紧、磁盘是否快写满、网络流量是否异常。这些指标过去分散在各台机器上,逐一登录查看既费时又容易遗漏。Prometheus、Grafana、Alertmanager、Node Exporter 这四个开源项目组合起来,是业界最主流、部署最轻量的主机监控方案——四者各司其职,几分钟内即可搭起一个覆盖 CPU、内存、磁盘、网络等指标的监控告警平台。

四个组件分工明确,各管一段:

  • Node Exporter(采集):部署在每台要监控的 Linux 主机上,读取内核暴露的 /proc/sys 等伪文件系统,把上百项硬件与系统指标聚合成标准格式,在 9100 端口暴露。
  • Prometheus(存储与告警):监控中心,按固定周期"拉取"各主机的指标,存入本地时序数据库,用 PromQL 查询,并在告警规则满足时触发告警。
  • Alertmanager(告警通知):接收 Prometheus 触发的告警,完成去重、分组、静默与路由,再把通知投递到邮件、Webhook 等接收方。
  • Grafana(可视化):把 Prometheus 里的指标画成图表、仪表盘,一屏看清整个服务器集群的运转状况。

四者的数据流关系如下:

node_exporter(每台主机,:9100)
     |  采集 CPU / 内存 / 磁盘 / 网络等指标
     |  Prometheus 定时拉取(pull)
     v
Prometheus(监控中心,:9090)
     |  存储时序数据、评估告警规则
     +--------------> Grafana(:3000,可视化查询)
     +--------------> Alertmanager(:9093,邮件 / Webhook 等告警通知)

四个组件各有鲜明的技术特点:

  • Prometheus:多维数据模型(时间序列由指标名 + 一组键值标签定义)、强大的 PromQL 查询语言、单节点自治无需外部存储、HTTP 拉取模型、原生告警规则评估。它诞生于 2012 年的 SoundCloud,用 Go 语言编写,2018 年成为继 Kubernetes 之后第二个从 CNCF(云原生计算基金会)毕业的项目,如今在 GitHub 上拥有约 6.5 万颗星标,是云原生监控领域的事实标准。
  • Grafana:支持 170 余种数据源(Prometheus、Loki、MySQL、PostgreSQL 等)、灵活的仪表盘与模板变量、指标与日志联动、原生可视化告警。它 2013 年由瑞典开发者 Torkel Ödegaard 创建,现拥有约 7.6 万颗星标,全球用户超 3500 万,是观测领域的标杆。
  • Alertmanager:Prometheus 官方维护的告警管理组件,负责告警去重、分组、静默与路由,支持邮件、PagerDuty、Slack、Webhook 等接收器,并可组建多实例 gossip 集群实现高可用,是云原生告警链路中"把原始告警变成可操作通知"的关键一环。
  • Node Exporter:Prometheus 官方维护的主机指标采集器,单二进制、零配置、开箱即用,采用可插拔采集器架构,覆盖 CPU、内存、磁盘、文件系统、网络、进程、systemd 服务等系统级指标,几乎所有 Linux 发行版都将其打包进官方软件源。

2. 准备工作

2.1 Linux 机器

可以是 Debian、Ubuntu、CentOS、openEuler、Anolis OS、Rocky、AlmaLinux、SUSE 等,随意。

一台作为监控平台机器(我这里以 192.168.10.29 为例)

另一台作为被监控机器(我这里以 192.168.10.37 为例)

2.2 SSH/SFTP 连接工具

这里使用 Tabby 进行 SSH 连接(输入命令)和 SFTP 连接(上传文件)。

关于 Tabby 的下载、安装和使用,请参考:

《Windows 下载、安装 Tabby,开源终端模拟器 SSH、串口、多标签页管理(附安装包tabby-1.0.235-setup-x64.exe)》

2.3 下载监控告警平台整合包

整合包及中文文档:https://hanshuixin.org/go/225T(内含 4个安装包、README 中英对照、发布说明中英对照和开源协议)。

本整合包内含 Prometheus、Grafana、Alertmanager、Node Exporter 四个软件的安装包与中文文档,目录结构如下:

Linux 安装 Prometheus、Grafana、Alertmanager、Node Exporter,搭建主机监控告警平台:CPU、内存、磁盘、网络(附安装包).zip
└── Linux 安装 Prometheus、Grafana、Alertmanager、Node Exporter,搭建主机监控告警平台:CPU、内存、磁盘、网络(附安装包)
    ├── Linux 安装 Prometheus、Grafana、Alertmanager、Node Exporter,搭建主机监控告警平台:CPU、内存、磁盘、网络(附安装包).pdf
    ├── prometheus-v3.13.2_Linux
    │   ├── prometheus-3.13.2.linux-amd64.tar.gz
    │   ├── README/
    │   │   ├── README.md
    │   │   └── README-中文版.md
    │   ├── 发布说明/
    │   │   ├── RELEASE-NOTES.md
    │   │   └── RELEASE-NOTES-中文版.md
    │   └── LICENSE
    ├── grafana-v13.1.3_Linux
    │   ├── grafana-13.1.3.linux-amd64.tar.gz
    │   ├── README/
    │   │   ├── README.md
    │   │   └── README-中文版.md
    │   ├── 发布说明/
    │   │   ├── RELEASE-NOTES.md
    │   │   └── RELEASE-NOTES-中文版.md
    │   ├── 源码/
    │   │   └── grafana-v13.1.3-源码.zip
    │   └── LICENSE
    ├── alertmanager-v0.33.1_Linux
    │   ├── alertmanager-0.33.1.linux-amd64.tar.gz
    │   ├── README/
    │   │   ├── README.md
    │   │   └── README-中文版.md
    │   ├── 发布说明/
    │   │   ├── RELEASE-NOTES.md
    │   │   └── RELEASE-NOTES-中文版.md
    │   └── LICENSE
    └── node_exporter-v1.12.1_Linux
        ├── node_exporter-1.12.1.linux-amd64.tar.gz
        ├── README/
        │   ├── README.md
        │   └── README-中文版.md
        ├── 发布说明/
        │   ├── RELEASE-NOTES.md
        │   └── RELEASE-NOTES-中文版.md
        └── LICENSE

四个安装包均为官方发布的 Linux x86_64 预编译二进制包,不绑定特定发行版,解压即可运行,适用于主流的 x86_64(amd64)架构发行版。

该整合包的其他版本https://hanshuixin.org/resource/software_integrated_package/Linux/Prometheus%E3%80%81Grafana%E3%80%81Alertmanager%E3%80%81Node%20Exporter

也可以选择单独下载这4个软件:

3. 安装

四者的部署关系是:Node Exporter 装在每台要监控的主机上;Prometheus、Grafana 和 Alertmanager 只需各装一台(作为监控中心)。本文演示环境为两台主机:监控中心(Prometheus、Grafana、Alertmanager)部署在 192.168.10.29,被监控主机部署在 192.168.10.37。为让监控平台主机自身的状态也纳入监控,Node Exporter 会同时部署在这两台机器上。

四款软件统一安装到规范的 /opt 目录:安装包上传到 /opt 后原地解压,再把解压出的目录直接改名为不带版本号的固定名称(详见 3.1 节),最后注册为 systemd 服务。

3.1 目录规划

四款软件都是免安装的预编译二进制包,解压即用。为便于统一管理与引用,遵循以下约定:

  1. 统一安装到 /opt/opt 是 FHS(文件系统层次结构标准)约定的"可选软件"目录,专门放置这类手工安装、独立于发行版包管理器的软件。
  2. 安装包上传到 /opt 后原地解压:解压出的目录自带版本号(如 /opt/prometheus-3.13.2.linux-amd64)。
  3. 解压后直接改名为不带版本号的固定名称:例如 mv /opt/prometheus-3.13.2.linux-amd64 /opt/prometheus。这样 systemd 服务、日常命令、访问路径一律引用 /opt/prometheus 这个简洁固定的路径。

四个软件安装完成后,/opt 目录结构如下:

/opt/
├── prometheus/       # 由 prometheus-3.13.2.linux-amd64 改名而来
├── grafana/          # 由 grafana-13.1.3 改名而来
├── alertmanager/     # 由 alertmanager-0.33.1.linux-amd64 改名而来
└── node_exporter/    # 由 node_exporter-1.12.1.linux-amd64 改名而来

说明:/opt 默认属主为 root,上传、解压与改名都需要 sudo 权限(或先用普通账号上传到临时目录,再 sudo mv/opt)。

3.2 安装 Node Exporter(每台主机,含监控中心)

Node Exporter 部署在每台要监控的 Linux 主机上。为了让监控平台主机自身(192.168.10.29)的 CPU、内存、磁盘、网络也纳入监控,需要在这台机器上也安装 Node Exporter。因此本文在 192.168.10.29192.168.10.37 两台机器上都执行以下安装步骤。

将整合包中的 ./node_exporter-v1.12.1_Linux/node_exporter-1.12.1.linux-amd64.tar.gz 分别上传到这两台机器的 /opt/ 目录

在每台机器上执行:

# 进入 /opt 目录
cd /opt
# 解压 Node Exporter 二进制包(内含 node_exporter 可执行文件与 LICENSE)
sudo tar -xzf node_exporter-1.12.1.linux-amd64.tar.gz
# 改名为不带版本号的固定名称
sudo mv node_exporter-1.12.1.linux-amd64 node_exporter

创建无登录权限的专用用户,并让该用户拥有软件目录:

# 创建无登录权限的专用系统用户 node_exporter
sudo useradd --system --no-create-home --shell /sbin/nologin node_exporter
# 将软件目录属主改为 node_exporter
sudo chown -R node_exporter:node_exporter /opt/node_exporter

创建服务文件 /etc/systemd/system/node_exporter.service

# 创建(或编辑)systemd 服务文件
vim /etc/systemd/system/node_exporter.service

写入以下内容:

[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
Type=simple
User=node_exporter
Group=node_exporter
WorkingDirectory=/opt/node_exporter
ExecStart=/opt/node_exporter/node_exporter \
  --web.listen-address=0.0.0.0:9100 \
  --collector.systemd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
# 设置开机自启
sudo systemctl enable node_exporter
# 启动服务
sudo systemctl start node_exporter
# 查看服务运行状态
sudo systemctl status node_exporter

默认监听 9100 端口

启动后访问对应主机的 http://<主机IP>:9100/metrics 即可看到该主机的指标输出:

如果看到下图所示内容,说明安装成功了,指标数据采集到了

9100metrics指标值.png

3.3 安装 Prometheus(监控中心)

这里用 192.168.10.29 这台机器作为监控平台机器

将整合包中的 ./prometheus-v3.13.2_Linux/prometheus-3.13.2.linux-amd64.tar.gz 上传到 192.168.10.29/opt/ 目录

192.168.10.29 机器上执行:

# 进入 /opt 目录
cd /opt
# 解压 Prometheus 二进制包(内含 prometheus 与 promtool 两个可执行文件)
sudo tar -xzf prometheus-3.13.2.linux-amd64.tar.gz
# 改名为不带版本号的固定名称
sudo mv prometheus-3.13.2.linux-amd64 prometheus

创建专用用户,并让该用户拥有软件目录:

# 创建无登录权限的专用系统用户 prometheus
sudo useradd --system --no-create-home --shell /sbin/nologin prometheus
# 将软件目录属主改为 prometheus
sudo chown -R prometheus:prometheus /opt/prometheus

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

vim /etc/systemd/system/prometheus.service

写入以下内容:

[Unit]
Description=Prometheus Monitoring
After=network.target

[Service]
Type=simple
User=prometheus
Group=prometheus
WorkingDirectory=/opt/prometheus
ExecStart=/opt/prometheus/prometheus \
  --config.file=/opt/prometheus/prometheus.yml \
  --web.listen-address=0.0.0.0:9090 \
  --storage.tsdb.retention.time=1y \
  --storage.tsdb.path=/opt/prometheus/data
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
MemoryLimit=1G

[Install]
WantedBy=multi-user.target
# 设置开机自启
sudo systemctl enable prometheus
# 启动服务
sudo systemctl start prometheus
# 查看服务运行状态
sudo systemctl status prometheus

启动后访问 http://192.168.10.29:9090 即可打开 Prometheus 的 Web 界面。

Prometheus首页.png

3.4 安装 Grafana(可视化)

这里用 192.168.10.29 这台机器作为监控平台机器

将整合包中的 ./grafana-v13.1.3_Linux/grafana-13.1.3.linux-amd64.tar.gz 上传到 192.168.10.29/opt/ 目录

192.168.10.29 机器上执行:

# 进入 /opt 目录
cd /opt
# 解压 Grafana 二进制包(内含 bin、conf 等目录)
sudo tar -xzf grafana-13.1.3.linux-amd64.tar.gz
# 改名为不带版本号的固定名称
sudo mv grafana-13.1.3 grafana

创建专用用户,并让该用户拥有软件目录:

# 创建无登录权限的专用系统用户 grafana
sudo useradd --system --no-create-home --shell /sbin/nologin grafana
# 将软件目录属主改为 grafana
sudo chown -R grafana:grafana /opt/grafana

创建服务文件 /etc/systemd/system/grafana.service

vim /etc/systemd/system/grafana.service

写入以下内容:

[Unit]
Description=Grafana Server
After=network.target

[Service]
Type=simple
User=grafana
Group=grafana
ExecStart=/opt/grafana/bin/grafana server --homepath=/opt/grafana
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
# 设置开机自启
sudo systemctl enable grafana
# 启动服务
sudo systemctl start grafana
# 查看服务运行状态
sudo systemctl status grafana

启动后浏览器访问 http://192.168.10.29:3000,使用默认账号 / 密码 admin / admin 登录,首次登录会提示修改密码。

Grafana登录界面.png

为 Grafana 设置新密码:

Grafana设置新密码.png

点击 Submit 即可,登录成功之后如下图所示:

Grafana登录成功.png

3.5 安装 Alertmanager(告警通知)

这里用 192.168.10.29 这台机器作为监控平台机器

将整合包中的 ./alertmanager-v0.33.1_Linux/alertmanager-0.33.1.linux-amd64.tar.gz 上传到 192.168.10.29/opt/ 目录

192.168.10.29 机器上执行:

# 进入 /opt 目录
cd /opt
# 解压 Alertmanager 二进制包(内含 alertmanager 与 amtool 两个可执行文件)
sudo tar -xzf alertmanager-0.33.1.linux-amd64.tar.gz
# 改名为不带版本号的固定名称
sudo mv alertmanager-0.33.1.linux-amd64 alertmanager

创建专用用户,并让该用户拥有软件目录:

# 创建无登录权限的专用系统用户 alertmanager
sudo useradd --system --no-create-home --shell /sbin/nologin alertmanager
# 将软件目录属主改为 alertmanager
sudo chown -R alertmanager:alertmanager /opt/alertmanager

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

vim /etc/systemd/system/alertmanager.service

写入以下内容:

[Unit]
Description=Alertmanager
After=network.target

[Service]
Type=simple
User=alertmanager
Group=alertmanager
WorkingDirectory=/opt/alertmanager
ExecStart=/opt/alertmanager/alertmanager \
  --config.file=/opt/alertmanager/alertmanager.yml \
  --storage.path=/opt/alertmanager/data \
  --web.listen-address=0.0.0.0:9093
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
# 设置开机自启
sudo systemctl enable alertmanager
# 启动服务
sudo systemctl start alertmanager
# 查看服务运行状态
sudo systemctl status alertmanager

启动后访问 http://192.168.10.29:9093 即可打开 Alertmanager 的 Web 界面。

alertmanager首页.png

4. 配置对接与告警

四个软件装好后,还需要两步"接线":第一步是让 Prometheus 抓取各主机的 Node Exporter、让 Grafana 连接 Prometheus 读取数据;第二步是打通告警链路,让 Prometheus 评估规则触发告警后,推送给 Alertmanager 去重、分组并通知到邮件。下面按顺序配置。

4.1 配置 Prometheus 抓取 Node Exporter

编辑 Prometheus 的 prometheus.yml,在 scrape_configs 下增加一个 node job,把各主机的 9100 端口列入 targets。参照实际环境,每台主机单独写一个配置项,并用 instance 标签给主机起一个易识别的别名(便于在 Grafana 里按名称切换主机):

# 修改配置文件之前先备份配置文件,方便修改失败时回滚
cp /opt/prometheus/prometheus.yml /opt/prometheus/prometheus.yml.backup_202608241511

# 编辑 Prometheus 配置文件
vim /opt/prometheus/prometheus.yml

修改说明:在 scrape_configs 下增加 prometheus 自身与 node 两个 job;node job 里把每台主机拆成独立的 - targets 配置项,分别标注 instance(主机别名)与 env(环境):

# 其他配置项

scrape_configs:

  # 其他配置项

  # 各 Linux 主机的 Node Exporter(含监控中心自身)
  - job_name: "node"
    static_configs:
      # 监控中心主机
      - targets: ["192.168.10.29:9100"]
        labels:
          # 实例名称:监控主机
          instance: "monitor"
          # 环境标识:测试环境
          env: "test"
      # 被监控主机
      - targets: ["192.168.10.37:9100"]
        labels:
          # 实例名称:测试主机1
          instance: "test-1"
          # 环境标识:测试环境
          env: "test"

说明:targets 里填每台主机的 IP 与 9100 端口;instance 是给主机起的别名,建议改成能体现用途的名字(如 db-1web-1)。保存后用 promtool 校验并热加载,无需重启进程:

# 校验配置,如果没有报错再继续下一步,否则按报错提示修改配置文件
/opt/prometheus/promtool check config /opt/prometheus/prometheus.yml

# 热加载,无需重启即可生效配置文件的修改
sudo systemctl reload prometheus

之后打开 Prometheus 界面 http://192.168.10.29:9090 的 Status → Target health,即可看到各主机抓取状态(UP 表示正常)。

Prometheus_targets.png

4.2 Grafana 接入 Prometheus 数据源、调整语言

调整语言为中文

Grafana调整语言.png

浏览器登录 Grafana http://192.168.10.29:3000 ,进入【连接(Connections)→ 数据源(Data sources)→ Add data source】,选择 Prometheus,在 URL 一栏填入 Prometheus 的地址(本文填 http://192.168.10.29:9090),保存并测试(Save & test)通过即可。

Grafana添加数据源.png

选择Prometheus数据源:

选择Prometheus数据源.png

Connection > Prometheus server URL 填写:http://localhost:9090

填写Prometheus连接.png

4.3 Grafana 导入主机监控仪表盘

Grafana 官方与社区提供了现成的主机监控仪表盘,无需从零绘制,导入 Dashboard ID 即可:

  • Node Exporter Full(ID 1860):最完整的 Node Exporter 仪表盘,覆盖 CPU、内存、磁盘、网络、系统负载等全面指标

导入路径:仪表盘(Dashboards)→ 新建 → 导入(Import)→ 输入 ID(1860) → Import。

导入看板模板.png

导入 Node Exporter Full(ID 1860):

根据ID1860加载模板.png

导入1860.png

点击查看 Node Exporter Full(ID 1860) 仪表盘

进入1860仪表盘.png

被监控主机 【test-1】 的指标面板:

1860仪表盘内容1.png

被监控主机 【monitor】 的指标面板:

1860仪表盘内容2.png

4.4 编写 Prometheus 告警规则

先编辑规则文件 /opt/prometheus/rules.yml,覆盖主机离线、磁盘、内存、CPU 四类常见异常:

# 编辑(新建)告警规则文件
vim /opt/prometheus/rules.yml

写入以下内容:

groups:
  - name: node-alerts
    rules:
      # 主机离线
      - alert: 主机离线
        expr: up{job="node"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: 主机离线
          description: "{{ $labels.instance }} Node Exporter 无法访问,已持续 2 分钟"

      # 磁盘空间不足(根分区剩余低于 5GB)
      - alert: 磁盘空间不足
        expr: node_filesystem_avail_bytes{mountpoint="/"} < 5 * 1024 * 1024 * 1024
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: 磁盘空间不足
          description: "{{ $labels.instance }} 根分区剩余空间低于 5GB,已持续 10 分钟"

      # 内存使用率过高
      - alert: 内存使用率过高
        expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 > 85
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: 内存使用率过高
          description: "{{ $labels.instance }} 内存使用率超过 85%,已持续 10 分钟"

      # CPU 使用率过高
      - alert: CPU使用率过高
        expr: 100 - avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100 > 85
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: CPU使用率过高
          description: "{{ $labels.instance }} CPU 使用率超过 85%,已持续 10 分钟"

然后在 prometheus.yml 中引入规则文件:

# 修改配置文件之前先备份配置文件,方便修改失败时回滚
cp /opt/prometheus/prometheus.yml /opt/prometheus/prometheus.yml.backup_202608241607

# 编辑 Prometheus 配置文件
vim /opt/prometheus/prometheus.yml

rule_files 下加入 rules.yml

rule_files:
  - "rules.yml"
# 校验 Prometheus 配置(会同时校验主配置文件和规则配置文件)
/opt/prometheus/promtool check config /opt/prometheus/prometheus.yml
# 热加载配置
sudo systemctl reload prometheus

规则中的 for 表示"条件持续满足多久才触发",可避免瞬时抖动误报;

labels.severity 标注严重级别,便于后续按级别路由;

annotations 中用 {{ $labels.instance }} 引用标签生成可读描述。

告警状态可在 Prometheus 界面 http://192.168.10.29:9090 的 Alerts 页查看(inactive / pending / firing)。

告警状态.png

4.5 Grafana 可视化告警(可选)

Grafana 13 也内置了告警能力,适合在图表上直接定义阈值告警:在面板编辑中进入「告警(Alert)」页签,编写阈值表达式、设置评估周期,再配置联系点(Contact point,支持邮箱、Slack、钉钉、企业微信、Webhook 等)与通知策略(Notification policy),即可形成"看图即告警"的闭环。对于纯主机指标,推荐以 Prometheus 规则为主、Grafana 告警为辅,两者可并存。

该方式这里不做演示。

4.6 配置 Alertmanager 邮件通知

Alertmanager 的行为全部由 alertmanager.yml 配置文件驱动,最常用的场景是"故障时发邮件通知"。配置由 global(SMTP 发信参数)、route(分组与发送节奏)、receivers(收件人)三部分组成:

# 修改配置文件之前先备份配置文件,方便修改失败时回滚
cp /opt/alertmanager/alertmanager.yml /opt/alertmanager/alertmanager.yml.backup_202608241634

# 编辑 Alertmanager 配置文件
vim /opt/alertmanager/alertmanager.yml

删除所有原有配置内容,写入以下内容(SMTP 参数按实际邮箱服务商填写):

global:
  smtp_smarthost: 'smtp.126.com:465'       # SMTP 服务器(以 126 邮箱为例)
  smtp_from: '你的发件人邮箱地址'           # 发件人邮箱,如:xxxxxx@126.com
  smtp_auth_username: '你的发件人邮箱地址'  # SMTP 认证用户名(通常是邮箱账号),如:xxxxxx@126.com
  smtp_auth_password: '你的客户端授权码'     # 客户端授权码(不是登录密码)
  smtp_require_tls: false                  # 465 端口 SSL/TLS 直连

route:
  receiver: email                          # 默认接收器
  group_by: ['alertname', 'instance']      # 相同标签的告警合并为一组
  group_wait: 5m                           # 首次告警后等待多久发送
  group_interval: 15m                      # 同组新增告警的发送间隔
  repeat_interval: 1h                      # 告警持续时的重复提醒间隔

receivers:
  - name: email
    email_configs:
      - to: '收件人邮箱'              # 收件人邮箱,如:xxxxxx@qq.com
        send_resolved: true                # 恢复时补发"已恢复"通知

配置要点:

  • SMTP 授权码smtp_auth_password 通常是邮箱服务商(126、QQ、163 等)后台生成的「客户端授权码」,而非登录密码,用登录密码会认证失败
  • 端口与加密465 端口是 SSL/TLS 直连,配合 smtp_require_tls: false;若用 587 端口需 STARTTLS,应改为 smtp_require_tls: true
  • 分组节奏group_wait 聚合首波告警、group_interval 控制同组增量、repeat_interval 控制重复提醒,三者配合避免刷屏

修改配置后先用 amtool 校验语法,再热加载:

# 校验 Alertmanager 配置语法
/opt/alertmanager/amtool check-config /opt/alertmanager/alertmanager.yml
# 重启 alertmanager 服务
sudo systemctl restart alertmanager

在 Alertmanager Web 界面 http://192.168.10.29:9093 查看告警触发状态

暂无被触发的告警:

Alertmanager触发状态.png

检查配置生效情况:

Alertmanager配置生效.png

4.7 把 Prometheus 告警指向 Alertmanager

Alertmanager 本身不产生告警,需要 Prometheus 推送。在 prometheus.yml 中通过 alerting 字段注册 Alertmanager 地址:

# 修改配置文件之前先备份配置文件,方便修改失败时回滚
cp /opt/prometheus/prometheus.yml /opt/prometheus/prometheus.yml.backup_202608241652

# 编辑 Prometheus 配置文件
vim /opt/prometheus/prometheus.yml

在配置中加入以下 alerting 段(地址填 Alertmanager 所在机器):

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 192.168.10.29:9093

保存后校验并热加载 Prometheus:

# 校验 Prometheus 配置
/opt/prometheus/promtool check config /opt/prometheus/prometheus.yml
# 热加载配置
sudo systemctl reload prometheus

至此告警链路打通:Prometheus 评估 4.4 节的规则触发告警 → 推送给 Alertmanager → 按 route 去重分组 → 通过 SMTP 发到运维邮箱。告警与通知情况可在 Alertmanager 界面 http://192.168.10.29:9093 查看。

5. 使用与运维

5.1 各服务访问地址

部署完成后,各组件通过以下地址访问。注意:下表中的 IP 为本文演示环境,请把 192.168.10.29 换成你自己的监控中心 IP、把 192.168.10.37 换成你的被监控主机 IP。

组件 访问地址 说明
Grafana http://192.168.10.29:3000 可视化仪表盘(默认账号/密码: admin / admin
Prometheus http://192.168.10.29:9090 Web 界面:查询、告警、抓取目标
Prometheus 指标 http://192.168.10.29:9090/metrics Prometheus 自身监控指标
Alertmanager http://192.168.10.29:9093 告警与通知记录界面
Node Exporter(监控中心) http://192.168.10.29:9100/metrics 监控中心主机指标
Node Exporter(被监控主机) http://192.168.10.37:9100/metrics 被监控主机指标

Grafana 中导入的常用仪表盘:Node Exporter Overview(ID 23333) 作为总览首页、Node Exporter Full(ID 1860) 查看逐项细节、Prometheus 2.0 Overview(ID 3662) 观察 Prometheus 自身运行状态。

5.2 服务状态查看

四个软件都以 systemd 服务运行,日常用以下命令查看状态与日志:

# 查看各服务运行状态
sudo systemctl status node_exporter
sudo systemctl status prometheus
sudo systemctl status grafana
sudo systemctl status alertmanager

# 实时查看服务日志
sudo journalctl -u node_exporter -f
sudo journalctl -u prometheus -f
sudo journalctl -u grafana -f
sudo journalctl -u alertmanager -f

页面侧的状态入口:

  • 抓取目标:Prometheus 界面 http://192.168.10.29:9090 Status → Target health 查看各主机抓取状态(UP 为正常)、抓取耗时与最近错误
  • 告警状态
  • 采集自检
    • 确认两台主机的 Node Exporter 正常输出
      • curl http://192.168.10.29:9100/metrics
      • curl http://192.168.10.37:9100/metrics
    • 确认 Prometheus 自身指标正常
      • curl http://192.168.10.29:9090/metrics

5.3 常见场景的配置修改

日常运维中最常见的配置改动,操作步骤统一为「备份配置文件 → 编辑配置文件 → 校验语法 → 热加载」。

场景一:新增被监控主机

编辑 /opt/prometheus/prometheus.yml,在 node job 的 static_configs 下为新增主机追加一个 - targets 配置项,并标注 instance 别名与 env

# 修改配置文件之前先备份配置文件,方便修改失败时回滚
cp /opt/prometheus/prometheus.yml /opt/prometheus/prometheus.yml.backup_202608241445

# 编辑 Prometheus 配置文件
vim /opt/prometheus/prometheus.yml

新增一个 - targets 配置项(以新增 192.168.10.xx 主机为例):

scrape_configs:
  - job_name: "node"
    static_configs:
      # 其他主机

      # 新加的被监控主机
      - targets: ["192.168.10.xx:9100"]
        labels:
          instance: "new-host"
          env: "prod"

保存后校验并热加载:

# 校验 Prometheus 配置
/opt/prometheus/promtool check config /opt/prometheus/prometheus.yml
# 热加载配置
sudo systemctl reload prometheus

场景二:调整告警阈值

编辑 /opt/prometheus/rules.yml,修改对应规则的 expr 阈值(如把磁盘剩余从 5GB 改为 10GB)与 for 持续时间:

# 修改配置文件之前先备份配置文件,方便修改失败时回滚
cp /opt/prometheus/rules.yml /opt/prometheus/rules.yml.backup_202608241445

# 编辑告警规则文件
vim /opt/prometheus/rules.yml

修改规则的 expr 阈值与 for 持续时间:

- alert: 磁盘空间不足
  expr: node_filesystem_avail_bytes{mountpoint="/"} < 10 * 1024 * 1024 * 1024
  for: 10m

保存后校验并热加载:

# 校验告警规则
/opt/prometheus/promtool check rules /opt/prometheus/rules.yml
# 热加载配置
sudo systemctl reload prometheus

场景三:更换告警通知邮箱

编辑 /opt/alertmanager/alertmanager.yml,修改 smtp_fromsmtp_auth_usernamesmtp_auth_passwordreceivers 中的收件邮箱:

# 修改配置文件之前先备份配置文件,方便修改失败时回滚
cp /opt/alertmanager/alertmanager.yml /opt/alertmanager/alertmanager.yml.backup_202608241445

# 编辑 Alertmanager 配置文件
vim /opt/alertmanager/alertmanager.yml

修改 SMTP 发信参数与收件邮箱:

receivers:
  - name: email
    email_configs:
      - to: 'new-ops@example.com'
        send_resolved: true

保存后校验并热加载:

# 校验 Alertmanager 配置
/opt/alertmanager/amtool check-config /opt/alertmanager/alertmanager.yml
# 重启 alertmanager 服务
sudo systemctl restart alertmanager