技术解析

关于 prometheus HA 架构的方案
0
2021-06-19 02:22:53
idczone

当前方案

现在使用的是两个 prometheus 节点(配置完全相同), 存储 influxdb, 前端 nginx 负载均衡

存在的问题

  1. 两个节点的数据不完全一样, 图表展示的时候, 刷新前后的趋势图有点差别, 有点差别还挺明显
  2. 当我尝试弄挂掉一个节点, 重启时(节点还没完全可用), dashboard 中的图表中, 有的有数据, 有的显示 请求失败

本以为存储在 influxdb 读的数据是一致的, 但现在看来并不是

其它方案

  1. nginx 的 upstream 中设置 ip_hash 之类的, 用来解决问题 1, 但感觉也不靠谱
  2. Thanos 方案, 但了解的还不够多, 感觉能解决问题 2, 但不确定能否解决问题 1

请问各位公司里是怎么处理这两个问题的?


两台 prometheus 无法保证采集时间同步,可以尝试开启 黏性 Session,或者查询时混合数据。

你这个规模,thanos 可以解决问题,thanos 会对两个 sidecar 传来的数据进行汇聚。

最近搞不好也有这个需求,插眼学习。

黏性 session 是参数吗,我了解看看。查询混合数据。。。

Thanos 在你的环境能落地吗,Thanos 就现在的方案,感觉带来的问题,比解决的问题多

还在看, 初步了解还不错, 坑什么的还没发现

能不能说说大概为什么现在的方案问题比较大?如果只需要保证 grafana 查询的话,只需要用到 querier 和 sidecar,目前基本是没有问题的,这两个组件比较稳定了。目前的坑主要是在对象存储上,thanos store 占用的 memory 非常高。

HA 和 LB 还是有点区别的,传统上来讲 HA 的话,keepalived 虚 IP 就能行了

他说的 session affinity 是 k8s service 的那个吧?我看你好像不是 k8s 环境

个人觉得 m3db 是最适合国内的环境,可以持续关注下。

m3db 性能一般,我们团队压过,如果规模小可以上。

插眼学习一下,搞不好最近也得搞这个

对, 不在 K8S 环境, 不过也要考虑下




请问下, 你们的公司内部有写一些适合开发接入 Prometheus 的类似中间件的吗? 有同事说要写个工具方便他们接入, 要不每次都要写个 exporter, 可是我开发个工具不是也是要制定一些规范吗, Prometheus 已经都做好了

官方提供的 client lib 已经非常方便了,我们自己写的 exporter 也都是基于 client-java 和 client-go,基本我们用的中间件,官方和社区都已经提供了 prometheus metrics。

不是很理解你们的场景,但是有个思路是用 client-go 写一个脚本执行器,让它去调用比如 python 脚本,约定好脚本输出,由脚本执行器解析为 prometheus metrics,这样每次定义新型的 metrics 只需要写脚本就可以了。

thanos 有没有人用过的?

目前的开源的高可用方案中,感觉 thanos 算是比较靠谱的啊。 尝试过 remote write 到 es, 然后再从 es 中 remote read,效率太低了,数据存储效率下降 1-2 个数量级

我们用阿里云的 influxdb, 不过阿里云的读写限制让人头疼

influxdb 集群版貌似不开源的吧。 昨天对比了 thanos 和 cortex。 貌似 cortex 对多租户的支持比较理想。grafana cloud 的 sass 版的 prometheus 应该用的就是这个。thanos 还是更适合用作集团内部的 prometheus 方案。目前这两者不知道国内有没有公司在用的

Thanos



你们用的 thanos 的存储方案是什么? 好像 thanos 不支持管理写入 influxdb 等时序数据库, 如果它管理存储好像是存到对象存储的(如 s3, oss 等)
这是我了解到的, 你们是这样吗?

就是 prometheus,thanos 只是 prometheus 的 query 层,初期我们调研了很多时间序列数据库,influxdb(集群收费),TimescaleDB, FiloDB,cortex

可是官方文档并不建议使用 prometheus 本地存储,而且我们之前使用也遇到了不少问题,才买了阿里的 influxdb,但是有读写限制,用的也难受

能买的起阿里云说明你们规模应该不太大吧,我觉得只要规模没大到一定程度,用哪种数据库区别应该不会太大…我们现在接近 100W 的 scrape targets...上不起云,哈哈

请问,您这个最后落地是哪个方案呢?目前也是在考虑这个方案问题。

你好, 使用黏性会话解决了数据一致的问题, grafana 请求的时候始终会去访问其中一台 prometheus, 但有两个问题
1. grafana 上所有图表都会去这台 prom 上查询, 但如果出现大查询, 负载都在这台 prom 上, 内存占用很高, 会出现 OOM 危险
2. grafana 的所有查询请求都是以 grafana server 的 cookie 为准, 而用户是通过 grafana server 间接的请求, 因此 cookie 始终只有一个, 所有用户的查询都会发往一台 prom, 这也很危险...
请问你们是否遇到类似的问题, 我搜索了相关的情况, 但都没有比较好的解决方案, 目前做了限制查询量来防止比较大的查询导致的 OOM
PS: 我目前还不太想使用 thanos

我们现在存储已经不再用 prometheus 了,prometheus 只作为采集节点,remote storage victoriametrics。

好的,多谢

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服