prometheus与grafana

一、Prometheus 是什么?
Prometheus 是一套开源的监控告警系统,它通过**“拉取”的方式定期从监控目标上采集数据,并将其存储在强大的时序数据库**中,再通过灵活的查询语言实现监控和告警。它现在是云原生监控领域的事实标准。
二、核心特点
-
强大的数据模型:
-
所有数据都以时间序列 (Time Series) 的形式存储。
-
每条时间序列由指标名称 (Metric Name) 和一组标签 (Labels) 唯一确定。
-
标签是灵魂: 标签可以让你从任意维度对数据进行切割、聚合和分析,非常灵活。例如,
http_requests_total{method="POST", path="/api/v1"}就比传统只有一个http_requests_total指标强大得多。
-
-
拉取模型 (Pull Model):
-
Prometheus Server 定期主动从配置好的监控目标 (Targets) 拉取指标数据。
-
优点: 集中控制,易于管理;监控目标无需关心 Prometheus Server 在哪里;可以轻松在本地复现生产环境的监控。
-
-
强大的查询语言 (PromQL):
-
专为时间序列数据设计的函数式查询语言。
-
不仅能查询数据,还能进行丰富的聚合、计算和预测,是告警和可视化的基础。
-
-
高效的时序数据库 (TSDB):
-
内置了一个高效的时序数据库,直接存储在本地磁盘,没有外部依赖。
-
针对监控数据做了大量优化,写入和查询性能很高。
-
-
完善的告警能力:
-
通过 Alertmanager 组件,可以实现强大的告警规则定义、告警去重、分组、静默和多渠道通知。
-
-
易于集成与发现:
-
拥有庞大的生态,有数以百计的 Exporter 可以用来监控各种第三方服务(如数据库、消息队列等)。
-
支持服务发现,能自动发现 Kubernetes、Consul 等平台上的监控目标,特别适合动态变化的云原生环境。
-
三、核心组件与架构 (它们如何协同工作)
您可以参照这张经典的架构图来理解:
-
Prometheus Server: 核心大脑。它包含三个主要部分:
-
Retrieval (采集模块): 负责根据配置,通过服务发现找到并从 Exporter 拉取指标数据。
-
TSDB (时序数据库): 将采集到的数据高效地存储在本地硬盘。
-
HTTP Server: 对外提供 API 接口,特别是 PromQL 查询接口,供 Web UI、Grafana 或其他客户端调用。
-
-
Exporters: 数据采集“探针”。
-
它们是独立运行的程序,负责从第三方服务(如 MySQL、Redis)采集原始数据,并将其转换为 Prometheus 要求的格式,通过一个 HTTP 端点(通常是
/metrics)暴露出来,等待 Server 来拉取。 -
node-exporter是最常用的,用来采集机器的硬件和系统指标。
-
-
Pushgateway: 临时数据“信箱”。
-
专为生命周期极短的批处理任务设计。这些任务在结束前可以将自己的指标数据“推”到 Pushgateway。
-
Prometheus Server 依然是从 Pushgateway “拉取”数据,而不是任务直接推给 Server。
-
-
Alertmanager: 告警处理中心。
-
从 Prometheus Server 接收告警信息(Alerts)。
-
负责告警的去重、分组、静默、抑制,防止告警风暴。
-
最后根据配置的路由规则,将处理后的告警通过邮件、Slack、钉钉、PagerDuty 等多种方式发送出去。
-
-
数据可视化与查询:
-
Prometheus Web UI: Prometheus 自带的一个简单的Web界面,主要用于执行 PromQL 查询和调试。
-
Grafana: 最佳搭档。最主流的可视化工具,可以接入 Prometheus 作为数据源,创建丰富、炫酷的监控大盘。
-
四、PromQL 基础入门
PromQL 是 Prometheus 的精髓,初学时掌握以下几点即可:
-
指标类型:
-
Counter (计数器): 只增不减的累计值,如
http_requests_total。适合用rate()函数计算速率。 -
Gauge (仪表盘): 可任意变化的瞬时值,如
cpu_usage或memory_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 的结合,已成为云原生时代监控解决方案的黄金标准。
更多推荐


所有评论(0)