Prometheus实战教程 01 - Prometheus 简介和架构

目录

    • [Prometheus 简介和架构](#Prometheus 简介和架构)
      • [Prometheus 核心概览:从基础到架构的深度解析](#Prometheus 核心概览:从基础到架构的深度解析)
      • [一、Prometheus 简介:为何它成为监控领域的佼佼者?](#一、Prometheus 简介:为何它成为监控领域的佼佼者?)
      • [二、Prometheus 核心特点:为何选择它?](#二、Prometheus 核心特点:为何选择它?)
      • [三、Prometheus 架构:各组件如何协同工作?](#三、Prometheus 架构:各组件如何协同工作?)
      • [四、总结:Prometheus 的核心价值](#四、总结:Prometheus 的核心价值)
    • [Prometheus 部署](#Prometheus 部署)

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 架构由多个核心组件构成,形成完整的监控闭环:

  1. Prometheus Server

    • 核心组件,负责数据采集 (Pull 模式)、存储 (本地 TSDB)和查询服务
    • 配置文件定义监控目标(如 scrape_configs 配置抓取规则)。
  2. Exporters

    • 用于将非 Prometheus 格式的指标(如 MySQL 性能、服务器硬件信息)转换为标准 /metrics 格式的代理程序。
    • 常见类型:node_exporter(服务器监控)、mysqld_exporter(MySQL 监控)等。
  3. Alertmanager

    • 接收 Prometheus Server 触发的告警规则,进行去重、分组、路由,并发送通知(如邮件、PagerDuty)。
    • 支持静默规则(避免重复告警)和告警抑制(如父级告警触发时,抑制子级告警)。
  4. Pushgateway

    Pushgateway 是 Prometheus 生态中的一个组件,用于接收短生命周期或批处理任务的指标数据,并将其暴露给 Prometheus 进行抓取。

  5. 可视化工具

    • Prometheus UI:内置简单界面,支持 PromQL 查询和图表展示。
    • Grafana:第三方可视化平台,与 Prometheus 深度集成,可创建复杂仪表盘(如集群资源监控大屏)。
  6. 服务发现

    • 自动发现新增的监控目标(如 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  # 开机自启
相关推荐
呦呦鹿鸣Rzh2 小时前
微服务快速入门
java·微服务·架构
2301_781668612 小时前
微服务 01
微服务·云原生·架构
无责任此方_修行中4 小时前
不止是 AI 热潮:AWS 2025 技术峰会带给我的思考
后端·架构·aws
数据要素X4 小时前
【数据架构10】数字政府架构篇
大数据·运维·数据库·人工智能·架构
Goboy5 小时前
分库分表后ID乱成一锅粥
后端·面试·架构
Goboy6 小时前
我是如何设计出高性能群消息已读回执系统的
java·后端·架构
mldong6 小时前
推荐一款超高颜值的后台管理模板!Art-Design-Pro!开源!免费!
前端·vue.js·架构
是瑶瑶子啦8 小时前
【AlphaFold3】网络架构篇(2)|Input Embedding 对输入进行特征嵌入
架构·embedding
●VON10 小时前
重生之我在暑假学习微服务第五天《Docker部署项目篇》
java·学习·docker·微服务·云原生·架构·暑假
泉城老铁10 小时前
Spring Boot 对接支付宝支付的详细流程和步骤
java·后端·架构