Prometheus高可用方案之Thanos

背景:

Prometheus 本身无法做集群方案,存在单点故障;但是Prometheus 官方给出以下几种方案

1、HA:部署两套Prometheus 同时采集相同的数据,前端通过LB进行负载均衡

2、HA+远程存储,通过Prometheus 存储插件把收集的数据通过Remote write 写入到远端存储中如influxdb,解决存储持久化

3、联邦集群: Federation,按照功能进行分区,不同的shared采集不同的数据,由Global节点统一存放

Thanos 架构

Thanos 有两种工作模式分别为Sidecar 模式与 Receiver 模式,当然最常用的是 sidecar,Thanos 组件如下:

query

1、封装prometheus Query Api,支持PromQL

2、暴露query服务,实现Store Api,可查询来自四类endpoint的数据:

包括:rule节点record数据,sidecar节点prometheus原生数据,store gateway代理的object storage数据,receiver收集到的数据。

3、无状态,可水平扩展(高可用)

sidecar

1、prometheus sidecar,实现Store API,提供grpc给query组件进行指标查询;

2、使用时与prometheus放在一个pod里,共享生命周期;

3、prometheus每两个小时把数据存到硬盘一次,此时sidecar shipper同时把数据上传到对象存储;

4、此方案,如果prometheus节点down,会丢失最近两个小时的数据;

receiver

1、在prometheus remote-write基础上实现;

2、prometheus服务会把数据实时写到receiver;

3、receiver可分布式部署,实现一致性hash,(疑问:多个prometheus同时pull数据并上传到receiver,配置了external_labels,receiver是否能够实现一致性hash进行去重;)

4、此方案,一个prometheus down掉以后,仍然保证数据完整,目前thanos还没有推出比较稳定的版本。

5、receiver也会把数据写入object storage。(疑问:什么时候,什么频率)

6、远程写的同时,prometheus本地磁盘依然会写入数据。

store gateway

1、query查询object storage数据的唯一入口;

2、实现Query Api;

3、缓存对象存储索引,优化查询。

Compactor

1、单例

2、object storage数据压缩

3、object storage数据降采样,个人理解就是把数据重新整理,生成采样间隔更长的数据block,并上传至对象存储,可优化查询。

4、官方推荐100G磁盘空间用作临时数据处理空间

5、上传deletion-mark.json来标记删除对象存储里的block,三个重要参数–retention.resolution-raw,–retention.resolution-5m,–retention.resolution-1h

rule

1、类似于prometheus的rule,可根据配置文件提前生成用户配置的metric,已经对altermanagement发去告警信息;

2、rule聚合生成的数据也会上传至object storage;

3、rule的数据源是通过thanos query至prometheus查询到的,可见于thanos query互相查询。

组件与配置

Prometheus 

 thanos 是无侵入的,只是上层套件,因此你还是需要部署你的 Prometheus,这里不再赘述,默认你已经有一个单机的 Prometheus 在运行,可以是 pod 也可以是主机部署,取决于你的运行环境,我们是在 k8s 集群外,因此是主机部署。Prometheus 采集的是地域A的监控数据

1、启动参数:

exec ./prometheus --config.file=/apps/conf/prometheus/prometheus.yml  --storage.tsdb.path=/apps/dbdat/prometheus --storage.tsdb.max-block-duration=2h --storage.tsdb.min-block-duration=2h --storage.tsdb.wal-compression --storage.tsdb.retention.time=12h --web.enable-lifecycle &

--web.enable-lifecycle一定要开,用于热加载时 reload 你的配置,retention 保留 2 小时,Prometheus 默认 2 小时会生成一个 block,Thanos 会把这个 block 上传到对象存储

2、prometheus配置文件

global:

  scrape_interval:    15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).

  external_labels:

    region: 'IDC01'   

    replica: 0

必须要声明external_labels,标注地域,如果你是多副本运行,需要声明你的副本标识,如 0号,1,2 三个副本采集一模一样的数据,另外2个 Prometheus 就可以同时运行,只是 replica 值不同而已

部署sidecar 组件

1、Sidecar 组件与 Prometheus server 部署于同一个 pod 中。他有两个作用:

它使用 Prometheus 的 Remote Read API,实现了 Thanos 的 Store API。这使后面要介绍的Query 组件可以将 Prometheus 服务器视为时间序列数据的另一个来源,而无需直接与 Prometheus API交互(这就是 Sidecar 的拦截作用)

可选配置:在 Prometheus 每2小时生成一次 TSDB 块时,Sidecar 将 TSDB 块上载到对象存储桶中。这使得 Prometheus 服务器可以以较低的保留时间运行,同时使历史数据持久且可通过对象存储查询。

当然,这不意味着 Prometheus 可以是完全无状态的,因为如果它崩溃并重新启动,您将丢失2个小时的指标,不过如果你的 Prometheus 也是多副本,可以减少这 2h 数据的风险

2、启动参数:

exec  bin/thanos sidecar --tsdb.path "/apps/dbdat/prometheus" --prometheus.url "http://localhost:9090" --http-address 0.0.0.0:19191 --grpc-address 0.0.0.0:19091 --objstore.config-file etc/config.yaml --shipper.upload-compacted &

3、配置对象存储

cat   etc/conf.yaml

type: S3

config:

  bucket: thanos

  endpoint: 10.65.6.1:19000

  access_key: thanos

  insecure: true

  signature_version2: false

  secret_key: thanos2021

  put_user_metadata: {}

  http_config:

    idle_conn_timeout: 1m30s

    response_header_timeout: 2m

    insecure_skip_verify: false

    tls_handshake_timeout: 10s

    expect_continue_timeout: 1s

    max_idle_conns: 100

    max_idle_conns_per_host: 100

    max_conns_per_host: 0

压缩:官方文档有提到,使用sidecar时,需要将 prometheus 的–storage.tsdb.min-block-duration 和 --storage.tsdb.max-block-duration,这两个值设置为2h,两个参数相等才能保证prometheus关闭了本地压缩,其实这两个参数在 prometheus -help 中并没有体现,prometheus 作者也说明这只是为了开发测试才用的参数,不建议用户修改。而 thanos 要求关闭压缩是因为 prometheus 默认会以2,25,25*5的周期进行压缩,如果不关闭,可能会导致 thanos 刚要上传一个 block,这个 block 却被压缩中,导致上传失败。

不过你也不必担心,因为在 sidecar 启动时,会坚持这两个参数,如果不合适,sidecar会启动失败

部署store gateway 组件

在sidecar 配置中,如果你配置了对象存储 objstore.config-file,你的数据就会定时上传到 bucket 中,本地只留 2 小时,那么要想查询 2 小时前的数据怎么办呢?数据不被 Prometheus 控制了,应该如何从 bucket 中拿回来,并提供一模一样的查询呢?

1、Store gateway 组件:store gateway 主要与对象存储交互,从对象存储获取已经持久化的数据。与sidecar一样,store gateway也实现了 store api,query 组可以从 store gateway 查询历史数据

2、启动命令

exec bin/thanos store --data-dir /apps/dbdat/thanos/store --objstore.config-file etc/config.yaml --http-address 0.0.0.0:39191 --grpc-address 0.0.0.0:39090 --index-cache-size=250MB --sync-block-duration=5m --min-time=-2w --max-time=-1h &

Store gateway需要从网络上拉取大量历史数据加载到内存,因此会大量消耗 cpu 和内存

部署query组件

1、Query 组件(也称为“查询”)实现了 Prometheus 的 HTTP v1 API,可以像 Prometheus 的 graph一样,通过 PromQL 查询 Thanos 集群中的数据。

简而言之,sidecar 暴露了 StoreAPI,Query 从多个 StoreAPI 中收集数据,查询并返回结果。Query 是完全无状态的,可以水平扩展

2、启动命令

exec bin/thanos query --http-address "0.0.0.0:29090" --grpc-address "0.0.0.0:29091" --query.replica-label "IDC01" --store "10.65.4.2:19091" --store "10.65.6.9:19091" --store "10.65.6.9:39090" --store "127.0.0.1:39090" &

部署Compact

启动命令

exec bin/thanos compact --data-dir /apps/dbdat/thanos/compact --http-address 0.0.0.0:19192 --objstore.config-file etc/config.yaml &

Thanos UI

访问THanosUI 验证查询数据 http://10.65.4.2:29090

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容