一、Prometheus 是什么?

Prometheus 是一套开源的监控告警系统,它通过**“拉取”的方式定期从监控目标上采集数据,并将其存储在强大的时序数据库**中,再通过灵活的查询语言实现监控和告警。它现在是云原生监控领域的事实标准。


二、核心特点 

  1. 强大的数据模型:

    • 所有数据都以时间序列 (Time Series) 的形式存储。

    • 每条时间序列由指标名称 (Metric Name) 和一组标签 (Labels) 唯一确定。

    • 标签是灵魂: 标签可以让你从任意维度对数据进行切割、聚合和分析,非常灵活。例如,http_requests_total{method="POST", path="/api/v1"} 就比传统只有一个 http_requests_total 指标强大得多。

  2. 拉取模型 (Pull Model):

    • Prometheus Server 定期主动从配置好的监控目标 (Targets) 拉取指标数据。

    • 优点: 集中控制,易于管理;监控目标无需关心 Prometheus Server 在哪里;可以轻松在本地复现生产环境的监控。

  3. 强大的查询语言 (PromQL):

    • 专为时间序列数据设计的函数式查询语言。

    • 不仅能查询数据,还能进行丰富的聚合、计算和预测,是告警和可视化的基础。

  4. 高效的时序数据库 (TSDB):

    • 内置了一个高效的时序数据库,直接存储在本地磁盘,没有外部依赖。

    • 针对监控数据做了大量优化,写入和查询性能很高。

  5. 完善的告警能力:

    • 通过 Alertmanager 组件,可以实现强大的告警规则定义、告警去重、分组、静默和多渠道通知。

  6. 易于集成与发现:

    • 拥有庞大的生态,有数以百计的 Exporter 可以用来监控各种第三方服务(如数据库、消息队列等)。

    • 支持服务发现,能自动发现 Kubernetes、Consul 等平台上的监控目标,特别适合动态变化的云原生环境。


三、核心组件与架构 (它们如何协同工作)

您可以参照这张经典的架构图来理解:

  1. Prometheus Server: 核心大脑。它包含三个主要部分:

    • Retrieval (采集模块): 负责根据配置,通过服务发现找到并从 Exporter 拉取指标数据。

    • TSDB (时序数据库): 将采集到的数据高效地存储在本地硬盘。

    • HTTP Server: 对外提供 API 接口,特别是 PromQL 查询接口,供 Web UI、Grafana 或其他客户端调用。

  2. Exporters: 数据采集“探针”

    • 它们是独立运行的程序,负责从第三方服务(如 MySQL、Redis)采集原始数据,并将其转换为 Prometheus 要求的格式,通过一个 HTTP 端点(通常是 /metrics)暴露出来,等待 Server 来拉取。

    • node-exporter 是最常用的,用来采集机器的硬件和系统指标。

  3. Pushgateway: 临时数据“信箱”

    • 专为生命周期极短的批处理任务设计。这些任务在结束前可以将自己的指标数据“推”到 Pushgateway。

    • Prometheus Server 依然是从 Pushgateway “拉取”数据,而不是任务直接推给 Server。

  4. Alertmanager: 告警处理中心

    • 从 Prometheus Server 接收告警信息(Alerts)。

    • 负责告警的去重、分组、静默、抑制,防止告警风暴。

    • 最后根据配置的路由规则,将处理后的告警通过邮件、Slack、钉钉、PagerDuty 等多种方式发送出去。

  5. 数据可视化与查询:

    • Prometheus Web UI: Prometheus 自带的一个简单的Web界面,主要用于执行 PromQL 查询和调试。

    • Grafana: 最佳搭档。最主流的可视化工具,可以接入 Prometheus 作为数据源,创建丰富、炫酷的监控大盘。


四、PromQL 基础入门

PromQL 是 Prometheus 的精髓,初学时掌握以下几点即可:

  • 指标类型:

    • Counter (计数器): 只增不减的累计值,如 http_requests_total。适合用 rate() 函数计算速率。

    • Gauge (仪表盘): 可任意变化的瞬时值,如 cpu_usagememory_usage

    • Histogram (直方图): 用于统计数据分布,如请求延迟。可以计算分位数(如95%的请求耗时)。

    • Summary (摘要): 类似于直方图,也用于统计数据分布,但分位数在客户端计算。

  • 基本查询:

    • 选择指标: node_memory_MemAvailable_bytes

    • 按标签过滤: http_requests_total{job="api-server", code="200"}

  • 常用函数与操作符:

    • rate(metric[5m]): 计算 Counter 类型指标在过去5分钟内的平均增长速率。这是最常用的函数!

    • sum(), avg(), max(): 聚合函数。

    • by (label1, label2): 按指定标签分组聚合,如 sum by (path) (rate(http_requests_total[5m]))

    • topk(k, metric): 返回指标值最高的前 K 个时间序列。

总结

Prometheus 以其强大的数据模型和 PromQL 为核心,通过拉取模型丰富的 Exporter 生态,构建了一个高度可靠且灵活的监控告警系统。它与 Grafana 的结合,已成为云原生时代监控解决方案的黄金标准

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐