云原生监控系统Thanos介绍

举报
kaliarch 发表于 2023/10/21 10:16:00 2023/10/21
【摘要】 一 背景随着kubernetes和微服务架构的兴起,单体架构逐渐被分布式架构所取代。而传统的监控系统Prometheus更适用于单体架构,对于大规模的分布式集群监控就力不从心。因此,需要一种全新的监控方案来解决这个痛点。Thanos应运而生,它是Prometheus的云原生解决方案。 二 概述Thanos是一个可水平扩展的开源监控系统。它提供了全局查询视图、历史数据访问、无限存储以及跨集群...

一 背景

随着kubernetes和微服务架构的兴起,单体架构逐渐被分布式架构所取代。而传统的监控系统Prometheus更适用于单体架构,对于大规模的分布式集群监控就力不从心。因此,需要一种全新的监控方案来解决这个痛点。Thanos应运而生,它是Prometheus的云原生解决方案。

二 概述

Thanos是一个可水平扩展的开源监控系统。它提供了全局查询视图、历史数据访问、无限存储以及跨集群联邦等功能。Thanos通过Prometheus实现数据的收集,然后将数据上传到对象存储中进行持久化保存,实现长期存储。它还可以将多个Prometheus服务器联合在一起,提供一个统一的查询接口,实现跨集群监控。

三 相关概念

  • Sidecar: Thanos Sidecar负责将Prometheus数据上传到对象存储。
  • Store: Thanos Store从对象存储中读取数据,实现历史数据的查询。
  • Query: Thanos Query实现对多个Prometheus服务器的聚合查询。
  • Compactor: Thanos Compactor对对象存储数据进行下采样和压缩,优化存储。
  • Ruler: 基于Prometheus Rule实现报警。

四 实操

4.1 架构

我们在某个eu1集群中有一个Prometheus服务器。
我们在一些us1集群中有2个复制的Prometheus服务器,它们抓取相同的目标。

4.2 Prometheus配置文件

  • prometheus0_eu1.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: eu1
    replica: 0

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['172.17.0.1:9090']

  • prometheus0_us1.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: us1
    replica: 0

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['172.17.0.1:9091','172.17.0.1:9092']

  • prometheus1_us1.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: us1
    replica: 1

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['172.17.0.1:9091','172.17.0.1:9092']

每个Prometheus实例都必须有一组全局唯一的标识标签。这些标签很重要,因为它们表示特定的数据“流”(例如以TSDB块的形式)。在这些确切的外部标签中,执行压缩和降采样,Querier过滤其存储api,提供进一步的切分选项、重复数据删除和潜在的多租户功能。这些标签不容易进行追溯编辑,因此提供一组兼容的外部标签非常重要,以便Thanos能够跨所有可用实例聚合数据。

4.3 启动实例

mkdir -p prometheus0_eu1_data prometheus0_us1_data prometheus1_us1_data
  • Deploying “EU1”

docker run -d --net=host --rm \
    -v $(pwd)/prometheus0_eu1.yml:/etc/prometheus/prometheus.yml \
    -v $(pwd)/prometheus0_eu1_data:/prometheus \
    -u root \
    --name prometheus-0-eu1 \
    quay.io/prometheus/prometheus:v2.38.0 \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/prometheus \
    --web.listen-address=:9090 \
    --web.external-url=https://f17cc74e-c1f2-479d-8bf5-8c18bbf3ef38-10-244-5-127-9090.papa.r.killercoda.com \
    --web.enable-lifecycle \
    --web.enable-admin-api && echo "Prometheus EU1 started!"
  • Deploying “US1”

docker run -d --net=host --rm \
    -v $(pwd)/prometheus0_us1.yml:/etc/prometheus/prometheus.yml \
    -v $(pwd)/prometheus0_us1_data:/prometheus \
    -u root \
    --name prometheus-0-us1 \
    quay.io/prometheus/prometheus:v2.38.0 \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/prometheus \
    --web.listen-address=:9091 \
    --web.external-url=https://f17cc74e-c1f2-479d-8bf5-8c18bbf3ef38-10-244-5-127-9091.papa.r.killercoda.com \
    --web.enable-lifecycle \
    --web.enable-admin-api && echo "Prometheus 0 US1 started!"
    
    
 docker run -d --net=host --rm \
    -v $(pwd)/prometheus1_us1.yml:/etc/prometheus/prometheus.yml \
    -v $(pwd)/prometheus1_us1_data:/prometheus \
    -u root \
    --name prometheus-1-us1 \
    quay.io/prometheus/prometheus:v2.38.0 \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/prometheus \
    --web.listen-address=:9092 \
    --web.external-url=https://f17cc74e-c1f2-479d-8bf5-8c18bbf3ef38-10-244-5-127-9092.papa.r.killercoda.com \
    --web.enable-lifecycle \
    --web.enable-admin-api && echo "Prometheus 1 US1 started!"

4.4 安装Thanos sidecar

ocker run --rm quay.io/thanos/thanos:v0.28.0 --help

安装架构

  • Adding sidecar to “EU1” Prometheus
docker run -d --net=host --rm \
    -v $(pwd)/prometheus0_eu1.yml:/etc/prometheus/prometheus.yml \
    --name prometheus-0-sidecar-eu1 \
    -u root \
    quay.io/thanos/thanos:v0.28.0 \
    sidecar \
    --http-address 0.0.0.0:19090 \
    --grpc-address 0.0.0.0:19190 \
    --reloader.config-file /etc/prometheus/prometheus.yml \
    --prometheus.url http://172.17.0.1:9090 && echo "Started sidecar for Prometheus 0 EU1"
  • Adding sidecars to each replica of Prometheus in “US1”
docker run -d --net=host --rm \
    -v $(pwd)/prometheus0_us1.yml:/etc/prometheus/prometheus.yml \
    --name prometheus-0-sidecar-us1 \
    -u root \
    quay.io/thanos/thanos:v0.28.0 \
    sidecar \
    --http-address 0.0.0.0:19091 \
    --grpc-address 0.0.0.0:19191 \
    --reloader.config-file /etc/prometheus/prometheus.yml \
    --prometheus.url http://172.17.0.1:9091 && echo "Started sidecar for Prometheus 0 US1"
docker run -d --net=host --rm \
    -v $(pwd)/prometheus1_us1.yml:/etc/prometheus/prometheus.yml \
    --name prometheus-1-sidecar-us1 \
    -u root \
    quay.io/thanos/thanos:v0.28.0 \
    sidecar \
    --http-address 0.0.0.0:19092 \
    --grpc-address 0.0.0.0:19192 \
    --reloader.config-file /etc/prometheus/prometheus.yml \
    --prometheus.url http://172.17.0.1:9092 && echo "Started sidecar for Prometheus 1 US1"

修改配置文件

  • prometheus0_eu1.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: eu1
    replica: 0

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['172.17.0.1:9090']
  - job_name: 'sidecar'
    static_configs:
      - targets: ['172.17.0.1:19090']

  • prometheus0_us1.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: us1
    replica: 0

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['172.17.0.1:9091','172.17.0.1:9092']
  - job_name: 'sidecar'
    static_configs:
      - targets: ['172.17.0.1:19091','172.17.0.1:19092']

  • prometheus1_us1.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: us1
    replica: 1

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['172.17.0.1:9091','172.17.0.1:9092']
  - job_name: 'sidecar'
    static_configs:
      - targets: ['172.17.0.1:19091','172.17.0.1:19092']

4.5 增加Thanos Querier

docker run -d --net=host --rm \
    --name querier \
    quay.io/thanos/thanos:v0.28.0 \
    query \
    --http-address 0.0.0.0:29090 \
    --query.replica-label replica \
    --store 172.17.0.1:19190 \
    --store 172.17.0.1:19191 \
    --store 172.17.0.1:19192 && echo "Started Thanos Querier"

通过webui查询指标

prometheus_tsdb_head_series

取消去重

至此就安装部署好了Thanos

总结

Thanos使Prometheus原生监控方案真正向云原生迈进。它解决了Prometheus单集群监控的限制,实现了任意规模的存储,统一的查询界面,以及跨集群的联邦监控。通过Thanos,可以构建健壮、可扩展的云原生监控系统。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。