{T}

容器监控实践:Prometheus、Grafana 方案介绍

0. 引言

K8s 时代监控选型绕不开 Prometheus。本文先拆解 Prometheus 的核心组件与整体架构,再与 Zabbix 做选型对比,最后演示 Prometheus + Grafana + node_exporter 从数据采集到图表展示的完整链路。

1. Prometheus 核心组件

Prometheus 是 Go 语言开发的开源监控系统,继 Kubernetes 之后第二个 CNCF 托管项目,官方网站 https://prometheus.io/。核心组件如下:

组件作用
Prometheus server核心组件,拉取监控数据并存入时序数据库,是整个系统的"心脏"
客户端 SDK植入监控的应用程序中,完成数据采集
Push Gateway中间网关,承接客户端主动推送的监控数据,再供 server 拉取
Exporter数据采集组件总称,从目标节点搜集数据并转化为 Prometheus 可抓取的格式
Alertmanager告警管理器,统一处理 Prometheus 发出的告警并触发通知

2. 整体监控架构

Prometheus 整体架构

Prometheus server 内部包含三部分:采集模块(Retrieval)、时序数据库 TSDB、对外 HTTP 服务接口。采集模块通过 discover targets 动态发现 K8s 集群中的目标节点(Pod),用 pull metrics 方式拉取数据。数据来源有两种:

  • 通过 Exporter 采集节点数据,标准化为通用 metric 接口供 server 抓取;
  • 客户端推送数据到 Push Gateway 转换,server 再拉取网关数据。

数据存入 TSDB 后,经运算、转换、逻辑处理,通过 HTTP 接口对外提供访问。触发报警规则时,告警推送给 Alertmanager,由它负责发送邮件等通知。可视化方面,可用自带的 Prometheus web UI,也可集成 Grafana 做更丰富的展示。

3. Prometheus 与 Zabbix 对比

维度ZabbixPrometheus
开发语言PHPGo
代码成熟度问世早,更成熟较新,部分代码需加固
性能关系库存储限制性能自研时序数据库,V3 可达每秒千万级存储
K8s/容器支持很晚才兼容动态发现、容器编排原生完美支持 K8s 动态发现
配置复杂度控制台配置完善,较简单配置项与规则运算多,复杂度更高
数据获取方式主动/被动均可Pull 方式,服务端方便水平扩展

结论:除配置复杂度外,Prometheus 在性能、K8s 支持、水平扩展方面均占优,是当前 K8s 部署场景下监控系统的首选。

4. Prometheus + Grafana 搭建演示

4.1 安装 Prometheus

容器方式安装:

bash
docker run -d -p 9090:9090 \
    -v ~/docker/prometheus/:/etc/prometheus/ \
    prom/prometheus

配置文件在挂载目录 prometheus.yml,包含两块:global(全局配置)和 scrape_configs(抓取目标,按需修改)。启动后浏览器访问 http://<IP>:9090 进入 Prometheus UI。

4.2 安装 Grafana 并配置数据源

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

访问 http://<IP>:3000,默认账号 admin/admin。登录后点击 Data Source → add data source → 选择 Prometheus,配置:

  • HTTP URL:Prometheus 服务地址与端口;
  • Scrape interval:采集间隔,如 15 秒;
  • HTTP Method:GET 方式请求。

4.3 客户端 Exporter 采集

下载解压 node_exporter 后直接执行 ./node_exporter 启动,它提供 metric 数据接口(默认端口 9100)供服务端拉取。在 Prometheus 的 scrape_configs 中填入客户端 IP 与 9100 端口,重启 Prometheus 容器。

4.4 验证与图表展示

Prometheus UI 的 Status 页面可查看目标节点、状态与采集时间。再到 Grafana 的 Dashboards → import,搜索导入 Node Exporter 面板插件,即可看到 CPU、内存、负载、磁盘等指标的图表化展示。

5. 小结

Prometheus 以 Pull 模式 + 时序数据库 + 原生 K8s 服务发现取胜,Exporter 生态让采集面覆盖操作系统、中间件、业务应用;Grafana 负责统一可视化。与 Zabbix 相比,Prometheus 更适合动态、容器化的云原生环境,但配置复杂度更高,需要团队具备一定的规则与指标设计能力。监控数据的最终价值在于驱动 46 章的告警与值班闭环,而非只是"看得见"。

下一章讲解回滚与运行手册,把发布事故的兜底动作固化成可执行的标准流程。