纯技术

go-zero:Prometheus 监控

Prometheus是一款最受欢迎的开源监控系统之一,它由SoundCloud开发,目的是收集各种应用程序的度量数据并将其存储在时间序列数据库中,从而可以进行数据可视化和警报 数据模型 Prometheus数据模型的关键组件是时间序列。时间…

7 分钟阅读
精选技术记录
持续迭代更新
Share

什么是Prometheus

Prometheus是一款最受欢迎的开源监控系统之一,它由SoundCloud开发,目的是收集各种应用程序的度量数据并将其存储在时间序列数据库中,从而可以进行数据可视化和警报

Prometheus的设计

1.1 数据模型

Prometheus数据模型的关键组件是时间序列。时间序列是一个由指标名称和一组键值对标识的样本流,每个样本都包含一个时间戳和一个值。例如,一个HTTP请求计数指标可能是以http_requests_total为名称,以HTTP方法(GET,POST,等)和HTTP状态码作为标签的键值对的组合来标识。对于每个组合,Prometheus都可以收集样本数据并存储在时间序列数据库中。

1.2 收集度量

Prometheus通过不同的机制来收集指标数据。一个基本的方法是通过客户端库来公开应用程序的度量接口。这些库包括API接口,用于离线批处理和其他用途的exporter,以及其他与监视相关的库。在客户端库中,度量数据被公开为Prometheus的格式,可以提供与时间序列相同的标识符和样本数据。

1.3 存储数据

Prometheus使用一种自定义的时间序列数据存储格式,称为TSDB(时间序列数据库)。TSDB存储格式包括一些有用的特性,例如可压缩的编码格式,支持多值查询和原子增量并发修改。它还包括对内存和磁盘的动态分配,以提高性能,并允许实施长期数据保留策略

Prometheus的存储

Prometheus存储数据的方式是以一定间隔时间(称之为采样间隔)拉取所监控的系统或服务的数据(metrics),并将这些数据存储到磁盘上。这个过程称之为scraping。Prometheus默认的采样间隔是15秒,此间隔可以根据实际需要进行调整。

在存储数据时,Prometheus会将数据进行压缩,以节省磁盘空间。压缩后的数据被存储在本地磁盘上,称之为Chunk。Chunk的大小通常为两个小时到一天不等,这取决于时间序列的数量以及采样间隔的设置。

除了数据的压缩存储,Prometheus还使用了一种称为WAL(Write Ahead Log)的技术,在数据被压缩前将它们写入WAL文件中。这种技术可以保证数据的可靠性,即便在Prometheus崩溃或终止运行时也可以进行数据恢复

Promethues 的 核心组件

Prometheus的架构由四个核心组件组成:Server,Pushgateway,Alertmanager和Client Libraries。

  1. Server(服务端)
    Prometheus Server 是整个架构的核心组件,负责拉取监控数据,存储数据、查询数据以及聚合数据。Prometheus 会定期抓取 Exporter 提供的 metrics,并将它们保存到本地的 Time-Series 数据库中。用户可以通过 PromQL(Prometheus Query Language)语言,基于存储在本地的 Time-Series 数据做聚合查询,生成 Dashboard、报表等视图。

  2. Pushgateway
    Pushgateway 是数据的主动推送组件,它允许非直接的采集客户端(就是 Exporter)将 metrics 主动推送到 Pushgateway 中,然后 Prometheus Server 再通过对 Pushgateway 的访问,定期拉取 metric 信息。这个组件主要是用于那些不能使用 Exporter 方式直接暴露监控指标的场景,例如批处理作业或者定时任务,或者为了实时监控一些计算导致的指标。

  3. Alertmanager
    Alertmanager 负责管理 Prometheus Service 产生的告警,并将告警消息发送给相关的接收者。当 Prometheus 在进行查询时,如果检测到某些 metrics 已经触发的告警条件,就会将告警信息发送到 Alertmanager。同时,Alertmanager 也支持聚合多个告警信息到一个通知中,当然,告警广播支持多个接收者,包括电子邮件、PagerDuty、Webhook 和 Slack 等平台。

  4. Client Libraries
    Prometheus Client Libraries 是一组用于采集监控数据的库,支持多种编程语言,包括 Go, Java, Python, Ruby 等等。这些客户端库封装了采集指标的操作,使得代码编写更加简单易用,提高了采集指标的准确率,同时保证了服务端和 Exporter 任意时刻可插拔性

图源自Go-zero社区

监控指标类型

Prometheus的监控指标类型包括:

  1. Counter:计数器,用于累计数量,只能增长不能为负数。

  2. Gauge:仪表,用于衡量任何可以增减的数字,比如CPU利用率、内存使用率等。

  3. Histogram:直方图,用于衡量观测值的分布情况,比如服务请求响应时间的分布情况等。

  4. Summary:摘要,与直方图类似,用于衡量观测值的分布情况,但涵盖了更多的统计信息,如均值、标准差等。

Counter适用于记录累计请求数等计数需求;Gauge适用于记录系统负载等度量数据;Histogram和Summary适用于对服务性能进行度量和分析。

Go-zero 关于 Prometheus 的使用

go-zero 框架中集成了基于prometheus的服务指标监控,默认不开启prometheus监控

开启 prometheus

/etc/{your-service}.yaml 中增加 Prometheus 的配置,指标的路径默认为/metrics

Prometheus:
  Host: 127.0.0.1
  Port: 9091
  Path: /metrics

参考

go-zero.dev/cn/docs/dep…

github.com/zeromicro/g…


本文同步自掘金

如果发现内容有误或需要更新,请访问掘金原文进行查看。

Share

如果这类内容对你有帮助

这里放一个阿里云 AIGC 活动入口。只有在你本身就有相关需求时,再通过它了解即可;如果产生推广收益,我会优先用于支付服务器、域名和网站维护费用。

看看阿里云 AIGC 活动

相关文章

2025年8月21日

为什么有的人学了很多年的编程,还是只会【增删改查】?

为什么你写了多年代码,技术栈还停留在"增删改查"? 我们不妨从一个常见的开发者画像开始:工作数年,日常任务是理解需求、实现业务逻辑、提供数据接口。在熟悉的框架下,每天熟练地进行着数据库的增、删、改、查(CURD)操作,周而复始。 这套流程看…

2023年12月21日

go-zero:zrpc

zrpc是go-zero的rpc部分,简单易用可直接用于生产的企业级rpc框架 zRPC底层依赖gRPC,内置了服务注册、负载均衡、拦截器等模块,其中还包括自适应降载,自适应熔断,限流等微服务治理方案 zRPC主要有以下几个模块组成: di…

2025年7月21日

活动架构(二):告别if-else地狱,用"策略模式"构建可插拔的玩法引擎

在上一篇 《活动架构的"第一性原理"》 中,我们回归本质,建立了任务、资格、奖品三大核心基石。它们如同三块坚固的"乐高积木",为我们提供了稳固的原子能力。 但只有零件还不够。当业务方带着层出不穷的新玩法("大转盘抽奖"、"签到领积分"、"玩…