前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用thanos管理Prometheus持久化数据

使用thanos管理Prometheus持久化数据

作者头像
charlieroro
发布2020-03-24 15:08:18
2.1K0
发布2020-03-24 15:08:18
举报
文章被收录于专栏:charlieroro

关于thanos的介绍可以参考这篇官方博客的翻译文档,本文不作部署操作介绍。下图是thanos的官方架构图,主要有5个组件:

  • Query:可以近似看作是Prometheus的实现,用于采集其他组件的数据,如sidecar和store gateway。Query的UI与Prometheus基本相同。
  • Store Gateway:用于获取来自对象存储的历史数据,它使得Query可以获取历史数据,并通过Grafana展示。
  • Compact:用于历史数据的压缩和降准采样,提高在Grafana上执行Zoom-in/Zoom-out时的效率。
  • Ruler:配置告警相关的内容,Ruler的UI与Alertmanager原生的UI基本相同。
  • Sidecar:与Prometheus部署,一来为Query提供未持久化到对象存储的数据;二来将超期的数据持久化到对象存储。

通常thanos管理多集群时,除Sidecar组件需要在每个集群内部署,其余组件仅部署一份,用于处理多个集群的数据。需要注意的是,thanos的StoreAPI采用的是gRPC协议,只能走四层通信,像在openshift 3.11版本下无法通过router(ingress)暴露给集群外部的Query等组件。规避办法为采用nodePort方式暴露,但通常nodePort并不是一个很好的方式,因为它占用了主机的端口。

从使用上看,thanos使用上最主要的作用就是实现了数据的持久化以及历史数据的提取,其实现的StoreAPI也可以作为可移植的功能。

TIPS:

  • 目前thanos还不能支持阿里OSS,但很快会支持,代码合入进展可以参考该PR,如果有需要,可以从dockerhub上下载我自己打包的镜像。oss配置文件如下:
代码语言:javascript
复制
type: ALIYUNOSS
config:
  endpoint: ""
  bucket: ""
  access_key_id: ""
  access_key_secret: ""
  • 可以在源码中使用make build编译源码
  • 可以使用下述校验对象存储状态,如thanos bucket ls --objstore.config-file=/etc/thanos/oss.yml 列出所有的bucket信息
代码语言:javascript
复制
  bucket verify [<flags>]
    Verify all blocks in the bucket against specified issues

  bucket ls [<flags>]
    List all blocks in the bucket

  bucket inspect [<flags>]
    Inspect all blocks in the bucket in detailed, table-like way
  • Query,Ruler,Store_Gateway和Compact的docker-compose启动方式可以参考如下yaml文件
代码语言:javascript
复制
version: '3.1'

volumes:
    grafana_data: {}
    minio_data: {}
    store_data: {}
    compactor_data: {}

services:
  thanos-querier:
    image: ${thanos-image}
    extra_hosts:
      - "{$bucket_name}.${oss_backend}:${oss_backend_ip}}" #ali-yun需要添加这一行解析
      - "${oss_backend}:${oss_backend_ip}}"
    command:
      - 'query'
      - '--grpc-address=0.0.0.0:10901'   # Query storeAPI
      - '--http-address=0.0.0.0:10902'   # Query UI
      - '--query.replica-label=replica'
      - '--store=${prometheus_sidecar_lb}:${prometheus_sidecar_lb_port}'
      - '--store=thanos-store-gateway:10901'
    privileged: true
    ports:
      - 10902:10902
    restart: always

  thanos-store-gateway:
    image: ${thanos-image}
    extra_hosts:
      - "{$bucket_name}.${oss_backend}:${oss_backend_ip}}"
      - "${oss_backend}:${oss_backend_ip}}"
    volumes:
      - ./thanos/:/etc/thanos/
      - store_data:/data
    command:
      - 'store'
      - '--grpc-address=0.0.0.0:10901'
      - '--http-address=0.0.0.0:10902'
      - '--data-dir=/data'
      - '--objstore.config-file=/etc/thanos/bucket_config.yaml' # Object store config file
    privileged: true
    restart: always

  thanos-compactor:
    image: ${thanos-image}
    extra_hosts:
      - "{$bucket_name}.${oss_backend}:${oss_backend_ip}}"
      - "${oss_backend}:${oss_backend_ip}}"
    volumes:
      - ./thanos/:/etc/thanos/
      - compactor_data:/data
    command:
      - 'compact'
      - '--log.level=debug'
      - '--data-dir=/data'
      - '--objstore.config-file=/etc/thanos/bucket_config.yaml'
      - '--http-address=0.0.0.0:10902'
      - '--wait'
    privileged: true
    restart: always

  grafana:
    image: ${grafana-image}
    user: "104"
    ports:
      - 3000:3000
    volumes:
      - grafana_data:/var/lib/grafana
    restart: always

  thanos-ruler:
    image: ${thanos-image}
    volumes:
      - ./thanos/:/etc/thanos/
    command:
      - 'rule'
      - '--grpc-address=0.0.0.0:10901'  # Ruler Store API
      - '--http-address=0.0.0.0:10902'  # Ruler UI
      - '--log.level=debug'
      - '--data-dir=/data'
      - '--eval-interval=15s'
      - '--query=thanos-querier:10902'
      - '--alertmanagers.url=http://alertmanager:9093'
      - '--rule-file=/etc/thanos/*.rules.yaml'
      - '--objstore.config-file=/etc/thanos/bucket_config.yaml'
      - "--label=monitor_cluster=\"poc-ocp01\""
      - "--label=replica=\"r1\""
    ports:
      - 10903:10902
    privileged: true
    depends_on:
      - thanos-querier
    restart: always

  alertmanager:
    image: ${alertmanager-image}
    ports:
      - 10904:9093
    volumes:
      - ./thanos/:/etc/alertmanager/
    restart: always
    privileged: true
    command:
      - '--data.retention=120h'
      - '--web.listen-address=0.0.0.0:9093'
      - '--config.file=/etc/alertmanager/alertmanager.yaml'
      - '--storage.path=/alertmanager'

TIPS:

  • 创建alertmanager高可用集群可以参见这里
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档