使用thanos管理Prometheus持久化數據


關於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配置文件如下:
type: ALIYUNOSS
config:
  endpoint: ""
  bucket: ""
  access_key_id: ""
  access_key_secret: ""
  • 可以在源碼中使用make build編譯源碼
  • 可以使用下述校驗對象存儲狀態,如thanos bucket ls --objstore.config-file=/etc/thanos/oss.yml 列出所有的bucket信息
  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文件
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高可用集群可以參見這里
  • prometheusruler都需要配置external label,否則可能會出現數據沖突
  • store-gateway可能會發生OOM,可以嘗試使用--max-time命令限制查找的metric的范圍。參見該issue
  • compactor建議配置--consistencyDelay參數,防止由於畸形報文導致compactor崩潰


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM