Prometheus高可用自动分区方案

Prometheus分区实践中我们介绍了使用集群联邦与远程存储来扩展Prometheus以及监控数据持久化,但之前的分区方案存在一定不足,如分区配置较难维护,全局Prometheus存在性能瓶颈等,本文通过Thanos+Kvass实现更优雅的Prometheus扩展方案。

自动分区

之前分区方案依赖Prometheus提供hashmod,通过在配置中指定hash对象与modules进行散列(md5),每个分片只抓取相同job命中的对象,例如我们可以通过对node散列从而对cadvisornode-exporter等job做分片。

通过这种方式可以简单的扩展Prometheus,降低其抓取压力,但是显而易见hashmod需要指定散列对象,每个job可能需要配置不同的对象如nodepodip等,随着采集对象增多,配置难以维护。直到看见了Kvass,Kvass是一个Prometheus横向扩展方案,可以不依赖hashmod动态调整target,支持数千万series规模。

Kvass核心架构如下:
在这里插入图片描述

  • Kvass-Coordinator: 加载配置文件并进行服务发现,获取所有target,周期性分配target到kvass-sidecar,以及管理分片负载与扩缩容
  • Kvass-Sidecar: 根据Coordinator分发的target生成配置,以及代理Prometheus请求

通过Kvass可实现Prometheus动态横向扩展,而不依赖hashmod,灵活性更高。

全局查询

另一个问题是在集群联邦中我们需要一个全局的Prometheus来聚合分区Prometheus的数据,依赖原生的/federate接口,随着数据量增多,全局Prometheus必然会达到性能瓶颈。高可用Prometheus集群解决方案Thanos中提供了全局查询功能,通过Thanos-QueryThanos-Sidecar可实现查询多个Prometheus的数据,并支持了去重。

Thanos组件较多,核心架构如下:
在这里插入图片描述

  • Thanos Query: 实现了Prometheus API,将来自下游组件提供的数据进行聚合最终返回给查询数据的client (如 grafana),类似数据库中间件
  • Thanos Sidecar: 连接Prometheus,将其数据提供给Thanos Query查询,并且可将其上传到对象存储,以供长期存储
  • Thanos Store Gateway: 将对象存储的数据暴露给Thanos Query去查询
  • Thanos Ruler: 对监控数据进行评估和告警,还可以计算出新的监控数据,将这些新数据提供给Thanos Query查询并且可上传到对象存储,以供长期存储
  • Thanos Compact: 将对象存储中的数据进行压缩和降低采样率,加速大时间区间监控数据查询的速度

借助于Thanos提供的QueryRuler我们可以实现全局查询与聚合。

最终方案

Kvass+Thanos可实现Prometheus自动扩展、全局查询,再配合Remote Wirite实现数据支持化,通过Grafana展示监控数据
在这里插入图片描述

测试验证

所有部署文件见prometheus-kvass

git clone https://github.com/qingwave/kube-monitor.git
kubectl apply -f kube-monitor/prometheus-kvass

结果如下:

$ kubectl get po
NAME                                 READY   STATUS    RESTARTS   AGE
kvass-coordinator-7f65c546d9-vxgxr   2/2     Running   2          29h
metrics-774949d94d-4btzh             1/1     Running   0          10s
metrics-774949d94d-558gn             1/1     Running   1          29h
metrics-774949d94d-gs8kc             1/1     Running   1          29h
metrics-774949d94d-r85rc             1/1     Running   1          29h
metrics-774949d94d-xhbk9             1/1     Running   0          10s
metrics-774949d94d-z5mwk             1/1     Running   1          29h
prometheus-rep-0-0                   3/3     Running   0          49s
prometheus-rep-0-1                   3/3     Running   0          48s
prometheus-rep-0-2                   3/3     Running   0          19s
thanos-query-b469b648f-ltxth         1/1     Running   0          60s
thanos-rule-0                        1/1     Running   2          25h

Deployment metrics有6个副本,每个生成10045 series,kvass-coordinator配置每个分区最大series为30000,以及Prometheus默认的指标,需要3个Prometheus分片。

每个分片包含2个target

prometheus_tsdb_head_chunks{instance="127.0.0.1:9090",job="prometheus_shards",replicate="prometheus-rep-0-0",shard="0"}	20557

通过Thanos Query可以查询到多个Prometheus分片的数据,以及聚合规则metrics_count
在这里插入图片描述

待优化问题

此方案可满足绝大部分场景,用户可通过自己的实际环境配合不同的组件,但也存在一些需要优化确认的问题

  • Thanos Ruler不支持远程写接口,只能存储于Thanos提供的对象存储中
  • Coordinator性能需要压测验证

总结

Kvass+Thanos+Remote-write可以实现Prometheus集群的自动分区、全局查询、数据持久化等功能,满足绝大部分场景。虽然有一些问题需要验证优化,但瑕不掩瑜,能够解决原生Prometheus扩展性问题。

引用

  • https://qingwave.github.io/prometheus-federation/
  • https://github.com/tkestack/kvass
  • https://github.com/thanos-io/thanos
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值