目录
-
- [Prometheus 简介和架构](#Prometheus 简介和架构)
-
- [Prometheus 核心概览:从基础到架构的深度解析](#Prometheus 核心概览:从基础到架构的深度解析)
- [一、Prometheus 简介:为何它成为监控领域的佼佼者?](#一、Prometheus 简介:为何它成为监控领域的佼佼者?)
- [二、Prometheus 核心特点:为何选择它?](#二、Prometheus 核心特点:为何选择它?)
- [三、Prometheus 架构:各组件如何协同工作?](#三、Prometheus 架构:各组件如何协同工作?)
- [四、总结:Prometheus 的核心价值](#四、总结:Prometheus 的核心价值)
- [Prometheus 部署](#Prometheus 部署)
-
- 二进制部署(推荐生产环境)
-
- [1. 下载安装包](#1. 下载安装包)
- [2. 配置 Prometheus](#2. 配置 Prometheus)
- [3. 启动 Prometheus](#3. 启动 Prometheus)
- [4. 验证部署](#4. 验证部署)
- 系统服务配置(开机自启)
Prometheus 简介和架构
Prometheus 核心概览:从基础到架构的深度解析
Prometheus 是一套开源的监控告警系统 ,最初由 SoundCloud 开发,后成为 Cloud Native Computing Foundation(CNCF)的毕业项目,广泛用于云原生环境、微服务架构的监控。其设计理念聚焦于时序数据的采集、存储与分析,能高效处理大规模分布式系统的监控需求。
一、Prometheus 简介:为何它成为监控领域的佼佼者?
Prometheus 专为监控动态服务环境(如 Kubernetes 集群、微服务)设计,核心功能包括:
- 基于时序数据模型存储监控指标(如服务器 CPU 使用率、API 响应时间);
- 通过Pull 模式主动抓取目标服务的指标数据;
- 支持灵活的查询语言(PromQL) 进行数据聚合与分析;
- 内置告警规则,可触发通知并集成外部工具(如 Alertmanager);
- 提供可视化界面(如 Prometheus UI、Grafana 集成)。
它适用于从单一服务到大规模分布式系统的监控场景,尤其在云原生生态中与 Kubernetes 深度协同。
二、Prometheus 核心特点:为何选择它?
特点 | 说明 | 优势 |
---|---|---|
多维数据模型 | 每个指标由指标名称 和键值对标签 (labels)组成,如 http_requests_total{method="GET", status="200"} |
支持多维度筛选、聚合,灵活定位问题(例如按接口、状态码分析请求量) |
Pull 模式采集 | 主动从目标服务的 /metrics 端点拉取数据,而非等待推送 |
减少目标服务的耦合,便于水平扩展;可直观检测服务存活状态 |
PromQL 查询语言 | 专为时序数据设计的查询语言,支持过滤、聚合、计算等操作 | 快速生成自定义报表(如"过去1小时95%接口响应时间") |
无依赖存储 | 本地时序数据库(TSDB)存储数据,无需外部数据库 | 简化部署,降低依赖复杂度;支持数据分片与联邦集群扩展 |
自动发现目标 | 支持 Kubernetes、Consul 等服务发现机制,自动识别新增/移除的监控目标 | 适配动态扩缩容的云原生环境,减少人工配置 |
内置告警机制 | 通过 Alertmanager 处理告警聚合、去重、路由(如邮件、Slack) | 避免告警风暴,确保关键问题及时触达 |
三、Prometheus 架构:各组件如何协同工作?

Prometheus 架构由多个核心组件构成,形成完整的监控闭环:
-
Prometheus Server
- 核心组件,负责数据采集 (Pull 模式)、存储 (本地 TSDB)和查询服务。
- 配置文件定义监控目标(如
scrape_configs
配置抓取规则)。
-
Exporters
- 用于将非 Prometheus 格式的指标(如 MySQL 性能、服务器硬件信息)转换为标准
/metrics
格式的代理程序。 - 常见类型:
node_exporter
(服务器监控)、mysqld_exporter
(MySQL 监控)等。
- 用于将非 Prometheus 格式的指标(如 MySQL 性能、服务器硬件信息)转换为标准
-
Alertmanager
- 接收 Prometheus Server 触发的告警规则,进行去重、分组、路由,并发送通知(如邮件、PagerDuty)。
- 支持静默规则(避免重复告警)和告警抑制(如父级告警触发时,抑制子级告警)。
-
Pushgateway
Pushgateway 是 Prometheus 生态中的一个组件,用于接收短生命周期或批处理任务的指标数据,并将其暴露给 Prometheus 进行抓取。
-
可视化工具
- Prometheus UI:内置简单界面,支持 PromQL 查询和图表展示。
- Grafana:第三方可视化平台,与 Prometheus 深度集成,可创建复杂仪表盘(如集群资源监控大屏)。
-
服务发现
- 自动发现新增的监控目标(如 Kubernetes Pod、Consul 服务),动态更新抓取配置,适配弹性伸缩场景。
四、总结:Prometheus 的核心价值
Prometheus 以时序数据为核心,通过 Pull 模式、多维标签和 PromQL 实现了对动态服务环境的高效监控。其架构轻量且灵活,无需依赖外部存储,同时支持自动发现和告警集成,成为云原生监控的事实标准。
尽管存在单机存储容量有限、不适合长期归档等限制(需结合 Thanos、Cortex 等工具扩展),但其在实时监控、问题排查和告警响应上的优势,使其成为微服务监控的首选方案。
Prometheus 部署
二进制部署(推荐生产环境)
1. 下载安装包
bash
# 下载最新版本(可从 https://prometheus.io/download/ 查看最新版本)
wget https://github.com/prometheus/prometheus/releases/download/v3.5.0/prometheus-3.5.0.linux-amd64.tar.gz
# 解压
tar -zxvf prometheus-3.5.0.linux-amd64.tar.gz
cd prometheus-3.5.0.linux-amd64
2. 配置 Prometheus
编辑默认配置文件 prometheus.yml
:
yaml
global:
scrape_interval: 15s # 全局抓取间隔
evaluation_interval: 15s # 规则评估间隔
rule_files:
# - "first_rules.yml" # 告警规则文件(可选)
scrape_configs:
- job_name: "prometheus" # 监控自身
static_configs:
- targets: ["localhost:9090"] # 自身地址
# 示例:添加其他监控目标(如 node_exporter)
# - job_name: "node"
# static_configs:
# - targets: ["localhost:9100"]
3. 启动 Prometheus
bash
# 前台启动(测试用)
./prometheus --config.file=prometheus.yml
# 后台启动
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &
4. 验证部署
访问 http://<服务器IP>:9090
,若出现 Prometheus UI 则部署成功。
系统服务配置(开机自启)
创建 systemd
服务文件 /etc/systemd/system/prometheus.service
:
ini
[Unit]
Description=Prometheus Monitoring System
After=network.target
[Service]
User=root
Group=root
ExecStart=/data/middleware/prometheus-3.5.0.linux-amd64/prometheus --config.file=/data/middleware/prometheus-3.5.0.linux-amd64/prometheus.yml --storage.tsdb.path=/data/middleware/prometheus-3.5.0.linux-amd64/data
Restart=always
[Install]
WantedBy=multi-user.target
启用服务:
bash
systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheus # 开机自启
