Prometheus 存储和集群|学习笔记(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
可观测监控 Prometheus 版,每月50GB免费额度
简介: 快速学习 Prometheus 存储和集群

开发者学堂课程【3天吃透 PrometheusPrometheus 存储和集群】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1244/detail/18451


Prometheus 存储和集群


4、Prometheus 存储配置

(1)配置参数口

--storage.tsdb.path:数据储存路线,WAL日志亦会储存于该目录下,默认为data;

-storage.tsdb.retention.time:样本数据在储存中保存的时间长,超过该时间长的数据就会被删除;默认为15d;(可以自己更改时间)

--storage.tsdb.retention.size:每个 Block 的最大字节数(不包含WAL 文件),支持B、KB、MB、GB、TB、PB和EB,例如512MB等:

--storage.tsdb.wal-compression:是否启用 WAL 的压缩机制,2.20及以后的版本中默认即为启用;

(2)容量规划

needed_disk_space=retention_time_scconds*ingested_samples_per_second*bytes_per_sample

需要用到的磁盘空间=保存时长*每秒钟的平均样本数*每个样本的字节数(每个样本值几乎是等同的)

例:1秒钟采集一个样本,每个样本大小大约为1.7KB,保存30天所需的磁盘空间为

  10000*1.7KB*30*86400

目前固态硬盘不再是稀有物,完全可以把批发读写这样的数据放在性能比,磁盘IO性能较好的设备上进行保存。但固态硬盘的可靠性不如机械硬盘,可以让固态硬盘当缓存,自己将程序再写一遍然后定期同步到机械硬盘中。

5、Prometheus 远程存储

Prometheus 本地存储时间不长,若想长期存储,存到Prometheus 并不合适因为 Prometheus 是一个监控系统,它的核心功能是监控。因而 Prometheus 最好能使用专门外置的存储系统来存储数据。Prometheus 没有除 tsdb 这样的引擎之外的其他存储设备,它可以直接支持借助于远端的第三方的存储服务来存储数据,远端的存储服务要使用 Adapter 来进行适配。 Adapter 对于 Prometheus,可以通过 PrometheusQL 把数据查出再导入到另外一个存储系统中。读取时,适配器将数据从存储系统中读出,然后交给 Prometheus 的内存再显示给用户。对 Prometheus 而言,适配器对写和读是分开操作的,写可以写在一个存储中,读可以在另外一个存储中读,只要存储本身是可以复制同步过来。它允许本身就是一个集群的可以发往不同的节点。

Prometheus 可通过基于 gRPC 的适配器对接到远程存储

适配器主要处理里“读”和“写”两种数据操作,它们可分别通过不同的URL完成

(1)配置远程读存储

url.//读服务器的地址、端口等。最重要的一项。如果存储确实需要认证则提供一种方式即可。

[name:]//取域名[:…]//过滤数据[remote_timeout:|default=1m][read_recent:|default=false]//远程服务是否需要认证是否需要代理。[username:][password:][password_file:][bearer_token:][bearer_token_file:][][proxy_ult]

(2)配置远程写存储

除了与“读存储相同部分的配置参数外,还有这些专用配置参数

queue_config://要配置队列,因为远程服务比较慢。Prometheus请求很快,可以使用队列先暂存起来。

[capacity:|default=2500][max_shards:|default=200][min_shards:|default=1][max_samples_per_send:|default=500][batch_send_deadline:|default=5s][min_backoff:|default=30ms][max_backoff:|default=100ms][send:|default=true][send_interval|default=1m]

 

Prometheus 俨然就是一个分步式监控系统,各种功能都是以Prometheus solo  为中心辐射出去,各种第三方解决方案或者自己独立解决方案。最麻烦的地方在于alergen mange 可能会宕机,存储也有可能会宕机,对存储本身最好利用自己的功能做成集群的形式。例如三个节点做成的集群才是可用的。Prometheus 自己也应该做成集群,GRAFARA 也要多个。手动维护的话要组合的东西太多不容易操作,就算不使用 KMS 可以使用单机编排,若单机编排承载不了,就使用 KBS。这么多实例该如何部署,接下来讲解 Prometheus 集群。

 

三、Prometheus 集群

1、Prometheus Server 简单多实例

建立起多个 Prometheus Server,同时工作,共同收集同一组指标时

存在数据不一致的可能性;

特点:

不支持数据长期存储;

仅适用于小规模的系统环境;

image.png

所谓 Prometheus 集群就是为了提高可用性跑两个 Prometheus。两个Prometheus 共同监控同一组target。PrometheusA 有自己的TSDB,PrometheusB 也有自己的 TSDB,数据存储在本地,即使它们的抓取周期配置相同但启动时间点不一样也会导致抓取周期不同,二者数据很难完全相同。因此存在数据不一致的可能性。

Prometheus 每一个都在本地保存数据,意味着是有状态的,从这个角度讲 Prometheus 是有状态应用。也可以使用将有状态变成无状态的方式共享。

 

2、Prometheus 多实例共享同一远程存储

在前一种模型的基础上,为多个 PromethcusServer 添加一个共享的远程存储

支持数据的长期存储

Prometheus Server 恢复后能够快速恢复数据

仅适用于小规模的系统环境:

image.png

PrometheusA 和 PrometheusB 可以对接同一个远程存储。此时PrometheusA 与 PrometheusB 都直接把数据存到远端,此时对于proxy依然通过代理来访问,但因为 grafara

要展示数据源,而 Prometheus 本地没有数据, grafara支持多种数据源,通过inflax 可以直接在 3rd-party storage展示。即直接用inflaxDB 的查询接口展示即可。这样做解决了数据不一致的问题,还支持长期存储, PrometheusServer 恢复后能够快速恢复数据,但

仅适用于小规模的系统环境,因为单个 Prometheus 实例所支持的能够抓取的目标是有限的,这只是解决了存储问题而未解决扩展问题。

3、扩展 Prometheus

Prometheus Federation(Prometheus联邦)

设定多台 Promethcus Server,分别监控不同的 Target;

可基于地址位置、机房、业务等纬度来拆分监控对象;

设定一台主节点,来合开多个分片的 Prometheus Server 各自抓取的数据;

主节点使用 Prometheus federationAPI 进行数据合并;

主节点也 PrometheusGrafana 的数据源;

image.png

工作方式如上图:可以做多个 Prometheus,每个 Prometheus负责监控一组应用,很多个 MySQL 用一个专门的 Prometheus监控,并且这个 Prometheus 只监控 MySQL 。另一个 Prometheus 只负责监控 Node。显然一个只能展示 MySQL 的监控,另一个只能查询 Node 的监控数据。如果要期望他们合在一起进行展示查询,就需要通过 Federation 合并在一起被中央 Prometheus 统一存储。这是一种分布式逻辑,中央 Prometheus 不会去其他被监控服务器上抓取指标,而是到其他多个 Prometheus 上提取并合并指标。但这样一来每一组都需要提高可用性。

4、混合联邦模型与集群共享存储

多台 Prometheus 服务器分别监控不同的 Target ,而后使用两台或以上的 Prometheus Server 基于 FederationAPI 合并监控数据至共享的远程存储

能监控更具规模的系统环境,但部署复杂;

image.png

假设一个数据中心,因为系统是多机房的,数据中心中的每一个机房里面部署一个 Prometheus 作为合并房,合并一个机房中监控的多个不同指标。比如可以将 My SQL 和 Node 合并起来。合并起来后存储被中央全局 Prometheus 所抓取。抓取完后集中式放在 Ser-party storage 中。为了避免过于复制,没必要将每一级别都考虑的非常完整。

混合联邦模型与集群共享存储,既有可用性提升又有扩展模型。但如果手动组织过于困难。

 

5、Alertmanager 高可用

Gossip 协议

多 Alertmanager 实例的场景中,告警信息可能会被重复发送;

Gossip 机制可为多个 Alertanager 之间提供了信息传递的机制以确保在多个 Alertmanager 分别接收到相同告警信息的情况下,只会有一个告警通知被发送给 Receiver;

Gossip 是分布式系统中被广泛使用的协议,用于实现分布式节点之间的信息交换和状态同步;

image.png

Alertmanager 高可用比 Prometheus 高可用更加麻烦,如下图所示有两个 Prometheus Server,为了可用性配置了每个 Prometheus Server 都能使用两个 Alertmanager实例进行报警。但如果这两个 Alertmanager 都在正常工作,一个 Prometheus Server 触发一次告警后,两个 Alertmanager 同时给一个用户发告警是没有必要的,还会让用户更受困扰。两个 Alertmanager 可以认为在 Prometheus 组合的时候是有状态的,或者需要一次中央协调节点 leader,实在没有 leader 也可以使用中央协作机制,需要使用流言协议。

每一个节点拿到信息以后都会将一些信息尽可能让其他节点明白这个节点做过的事情,以确保其他节点不会重复发送告警,这是借助流言协议进行协作的。

当我们启动 Alertmanager 的时候。会有 gossip not settled的信息提示。因为在指定部署的时候只有一个 Alertmanager 所以没必要设定,但即便是设定了也无法发出。提示为gossipe settled:proceeding。因为只有一个实例,但多实例的 Alertmanager 必须要使用流言协议组织成集群,以确保同一个Prometheus Server 触发的告警不会被重复发送。

这是 Alertmanager 内置的一种功能,所以只要部署了Alertmanager 就可以使用该功能。

Gossip 是无状态的,但事实上也并非完全是无状态因为导入一个告警后它可能对一个 Gossip 有效,对另一个无效。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
存储 Prometheus 监控
高可用Prometheus集群
高可用Prometheus集群
1441 0
|
6月前
|
网络协议 API 数据库
InfluxDB集群
InfluxDB集群
193 0
|
存储 Prometheus Cloud Native
Prometheus实战--存储篇
Prometheus之于kubernetes(监控领域),如kubernetes之于容器编排。 随着heapster不再开发和维护以及influxdb 集群方案不再开源,heapster+influxdb的监控方案,只适合一些规模比较小的k8s集群。
5720 0
|
7天前
|
Prometheus 监控 Cloud Native
在 HBase 集群中,Prometheus 通常监控哪些类型的性能指标?
在 HBase 集群中,Prometheus 监控关注的核心指标包括 Master 和 RegionServer 的进程存在性、RPC 请求数、JVM 内存使用率、磁盘和网络错误、延迟和吞吐量、资源利用率及 JVM 使用信息。通过 Grafana 可视化和告警规则,帮助管理员实时监控集群性能和健康状况。
|
2月前
|
Prometheus Kubernetes 监控
prometheus学习笔记之集群内服务发现环境准备
本文介绍了在Kubernetes集群中部署Prometheus监控系统的详细步骤。首先创建用于监控的命名空间,并配置Docker以顺利下载镜像。接着,通过DaemonSet方式在集群中部署Node Exporter,确保每个节点上的指标都能被收集。然后,安装并配置NFS存储类别,以便为Prometheus提供持久化存储。最后,详细展示了如何在Kubernetes中部署Prometheus服务器,包括创建相关的配置文件、部署服务、设置角色权限以及暴露服务等
|
2月前
|
Prometheus 监控 Cloud Native
prometheus监控ceph集群环境
文章介绍了如何使用Prometheus监控Ceph集群环境,包括启用Prometheus模块、验证模块启用成功、访问Ceph的exporter、修改Prometheus配置文件、热加载配置,以及Grafana采集数据的方法。同时,还涵盖了监控Ceph集群宿主机的步骤,如在所有节点安装node-exporter、修改Prometheus配置文件、热加载配置,以及Grafana采集数据。
145 6
|
3月前
|
存储 Prometheus Cloud Native
[prometheus]基于influxdb2实现远端存储
[prometheus]基于influxdb2实现远端存储
198 2
|
存储 Kubernetes 数据安全/隐私保护
25-Kubernetes-数据存储-配置存储
25-Kubernetes-数据存储-配置存储
|
存储 Kubernetes 容器
24-Kubernetes-数据存储-高级存储
24-Kubernetes-数据存储-高级存储
|
存储 Kubernetes 应用服务中间件
23-Kubernetes-数据存储-基本存储
23-Kubernetes-数据存储-基本存储