免费监控
logo prod

资讯与帮助

如何用 Prometheus + Grafana 搭建监控系统:从部署到告警配置实战教程

时间:2025-06-23
编辑:tance.cc

监控系统搭建.png

你可能已经听过成百上千次关于“监控”的话题。什么是 SLO、SLI、告警触发器、黑盒监控、白盒监控……听起来很高级对吧?

可一旦轮到你上手,脑子里就浮现一句话:

我该从哪开始?!

别慌。今天我就带你从零开始,一步步搭建起一个基于 Prometheus + Grafana 的现代监控系统。从安装、采集指标到绘图、告警,全流程打通。不废话、不跳步、不浅尝辄止。


第一节:为什么是 Prometheus + Grafana?

先说个最现实的问题:为什么这么多公司都在用 Prometheus 和 Grafana,而不是 ELK、Zabbix 或者商业APM?

简单说,这两个组合有几个致命吸引力:

  • 开源免费:适合个人、小公司、大企业,灵活无比。

  • 社区活跃:各种 Exporter、教程、模板多得像海。

  • 易扩展 + 可视化强:Prometheus 负责采集、存储、查询,Grafana 则把这些数据“画”出来,清清楚楚,美美的。

  • 天然适配容器化/K8s:Kubernetes 就是用 Prometheus 默认监控的。

你可以把它俩理解成“后厨 + 服务员”的关系:Prometheus 在厨房炒菜(采集原始指标),Grafana 端上餐桌(可视化图表),两者配合,堪称经典。


第二节:准备工作:环境+依赖

我们直接实操。以下所有步骤都默认你有一台 Linux 服务器(Ubuntu 或 CentOS 均可),或者本地测试环境(Docker 环境亦可)。

所需组件

  • Prometheus(监控核心)

  • Node Exporter(采集主机指标)

  • Grafana(展示界面)

  • Alertmanager(告警系统)

  • 浏览器(访问 Grafana)

可以使用物理部署,也可以用 Docker。这里我们以 Docker 为例,便于复制和移植。


第三节:部署 Prometheus 和 Node Exporter

1. 拉取镜像

bash
docker pull prom/prometheus
docker pull prom/node-exporter

2. 创建配置文件 prometheus.yml

yaml
global:
  scrape_interval: 15sscrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['host.docker.internal:9100']

上面这段配置的意思是:每15秒抓取一次指标,抓的对象是 Node Exporter 提供的接口。

Tip:host.docker.internal 是 Docker 中访问宿主机的特殊域名。实际部署时请用实际 IP。

3. 启动 Node Exporter

bash
docker run -d -p 9100:9100 --name node_exporter prom/node-exporter

你访问一下 http://localhost:9100/metrics,就能看到熟悉的 Prometheus 格式指标输出了。

4. 启动 Prometheus

bash
docker run -d -p 9090:9090 \
  -v /your/path/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

然后打开 http://localhost:9090,你就进入了 Prometheus 的 Web UI,能搜索、查看、测试你的指标。


第四节:接入 Grafana 展示界面

1. 启动 Grafana

bash
docker run -d -p 3000:3000 grafana/grafana

访问 http://localhost:3000,默认用户密码 admin/admin,首次登录会要求你修改密码。

2. 添加数据源

进入 Grafana 后台:

Configuration → Data Sources → Add data source → Prometheus

填写 Prometheus 的地址(如 http://localhost:9090),点击 Save & Test 即可。

3. 创建仪表盘

现在你可以:

  • 添加一个新的 Dashboard;

  • 选择图表类型(Line、Gauge、Table 等);

  • 添加指标,例如:

promQL
node_cpu_seconds_total{mode="idle"}
  • 设置单位为百分比、颜色、阈值;

  • 多图联动,自定义布局。

想要快速上手?你可以去 Grafana Dashboards 官网 下载成千上万个模板。


第五节:告警配置 + 自动通知

监控没告警 = 白搭。你总不能每小时盯着仪表盘看数据吧?

1. Prometheus 端配置 Alert Rules

更新 prometheus.yml

yaml
rule_files:
  - "alert.rules.yml"

示例告警规则(alert.rules.yml):

yaml
groups:- name: example
  rules:
  - alert: HighCPUUsage
    expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "高CPU使用率"
      description: "服务器 {{ $labels.instance }} CPU 使用率超过 85%"

这条规则含义是:如果 CPU 使用率超过 85%,并持续 2 分钟,就发告警。

2. 启动 Alertmanager(可选)

bash
docker run -d -p 9093:9093 --name alertmanager prom/alertmanager

配置 Prometheus 的 alerting 指向 Alertmanager:

yaml
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - "localhost:9093"

然后在 Alertmanager 中配置邮件、钉钉、Slack 等通知渠道。


第六节:实用场景与进阶操作

✅ 场景1:Kubernetes 集群监控

Prometheus Operator + Kube-prometheus-stack + Grafana → 一键监控 K8s 所有 Pod、服务、节点、PVC、Ingress。

✅ 场景2:MySQL/Mongo/Nginx 等服务监控

使用对应 Exporter:

  • MySQL → mysqld_exporter

  • Nginx → nginx-exporter

  • Redis → redis_exporter

每个 exporter 都有对应 metrics endpoint,添加到 scrape_configs 里即可。

✅ 场景3:黑盒监控(HTTP 测试)

blackbox_exporter 做 HTTP 检测,判断站点可用性。


第七节:监控常见问题 & 误区

  1. PromQL 太复杂? → 用模板 + UI 引导模式,新手友好。

  2. 抓不到容器指标? → 注意宿主机与容器网络隔离,挂载 Docker Socket。

  3. 数据不刷新? → 检查 scrape_interval 与 metrics 时间戳是否同步。

  4. Grafana 页面慢? → 适当设置数据缓存、时间范围过滤,别一次性加载 30 天。


最后一节:别让监控“只为了好看”

很多人装好 Prometheus + Grafana 后,就开始疯狂“整仪表盘”,搞得跟指挥中心大屏一样好看,但——没人看,也没人用

监控不是做给老板看的,是用来:

  • 发现问题(可观测性)

  • 理解问题(指标解释)

  • 响应问题(告警联动)

所以,别堆页面,堆逻辑;别堆线条,堆价值。


客服
意见反馈