三尺非寒 发表于 2024-6-19 11:50:11

Thanos解码:打造企业级云原生监控解决方案

本文深入探讨了Thanos技能在云原生监控领域的应用,详细先容了Thanos的基本概念、核心组件、安装配置步骤以及一个实战案例,帮助读者明白如何利用Thanos解决大规模监控数据的存储、查询和高可用性题目。
关注作者,分享互联网架构、云服务技能的全维度知识。作者拥有10+年互联网服务架构、AI产物研发履历、团队管理履历,同济本复旦硕,复旦呆板人智能实行室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产物研发负责人
https://img2024.cnblogs.com/other/488581/202406/488581-20240619113820692-1566287548.png
一、Thanos简介

Thanos是一个开源项目,旨在通过一种可扩展且可靠的方式为Prometheus提供跨集群的监控数据聚合、查询和长期存储功能。它解决了Prometheus在大规模情况下遇到的一些核心题目,比如数据的长期存储、监控数据的全局视图和高可用性。Thanos将云原生监控的概念推向了新的高度,为企业提供了一种强大且灵活的监控解决方案。
Thanos的起源和目标

Thanos诞生于Prometheus社区,其核心目标是补充Prometheus在长期数据存储和跨集群监控方面的不足。随着云原生应用的快速发展,企业越来越需要一个能够处置处罚大量监控数据、提供准确可靠监控信息的体系。Thanos应运而生,它不仅保存了Prometheus的优点,如简单的部署过程、丰富的指标和灵活的查询语言,还通过引入新的组件和架构计划,大幅提升了体系的可扩展性和可靠性。
云原生监控的挑战

云原生情况的动态性和分布式特性为监控体系带来了新的挑战,包罗:

[*]数据泛滥:大规模集群产生的监控数据量巨大,传统监控体系难以高效处置处罚。
[*]持久性与可靠性:监控数据需要长期保存以供分析和审计,要求监控体系具备可靠的数据持久化能力。
[*]全局视角:云原生应用通常跨多个集群和地域,需要一个统一的视角来观察和管理这些分散的资源。
[*]高可用性:监控体系自身也需要保证高可用,以确保监控服务的连续性。
Thanos与Prometheus的关系

Thanos建立在Prometheus之上,它通过引入几个关键组件扩展了Prometheus的能力:

[*]侧车(Sidecar):部署在Prometheus服务器旁边,用于实现数据的实时上传以及对汗青数据的访问。
[*]查询组件(Querier):提供了一个全局查询视图,能够跨多个Prometheus实例和Thanos Store进行数据查询。
[*]存储网关(Store Gateway):使Thanos能够访问长期存储的汗青数据。
[*]编译器(Compactor):优化存储空间,通过压缩和去重提高查询效率。
通过这些组件,Thanos不仅提供了Prometheus的所有功能,还增长了多个实用的特性,如数据压缩、去重、长期存储、高可用性等,使得Thanos成为了处置处罚云原生监控数据的理想选择。
二、Thanos组件概览

https://img2024.cnblogs.com/other/488581/202406/488581-20240619113821064-602873124.png
Thanos计划为一个高度模块化和可扩展的体系,通过多个相互协作的组件提供其功能。这些组件共同工作,以解决大规模监控数据的长期存储、高可用性和全局查询等题目。以下是Thanos主要组件的概览及其详细形貌。
查询组件(Querier)

Querier是Thanos中负责处置处罚查询哀求的组件。它可以从多个数据源(如Thanos Sidecars、Store Gateways、和Thanos Receivers)查询数据,实现了对多个Prometheus实例数据的透明访问。Querier的关键功能是提供一个全局视图,无论监控数据存储在何处,用户都可以通过单一的查询接口获取信息。别的,Querier还支持对查询效果进行去重,确保纵然在高可用性部署场景中,类似指标的数据不会被重复计算。
存储网关(Store Gateway)

Store Gateway组件使Thanos能够接入长期存储解决方案,如Amazon S3、Google Cloud Storage等,访问汗青监控数据。它对外提供与Prometheus兼容的API接口,让Querier能够透明地查询这些长期存储中的数据。Store Gateway通过对存储在对象存储中的数据块进行索引,实现了高效的数据访问,同时还支持对数据进行压缩和分片,以优化存储空间和查询性能。
接收器(Receiver)

Receiver组件主要负责接收来自Prometheus的监控数据,并将其写入到长期存储中。它支持接收Prometheus远程写入协议的数据,可以作为一个集中式的数据接收点,汇总来自多个集群的监控数据。Receiver通过实现数据的多副本存储,加强了监控数据的可靠性。别的,Receiver还可以与Thanos Querier联合利用,提供实时监控数据的查询功能。
编译器(Compactor)

Compactor是Thanos中负责处置处罚监控数据压缩和优化的组件。它定期对存储在对象存储中的数据块进行压缩,合并重复的时间序列数据,减少存储占用并提高查询效率。Compactor还负责清理逾期的监控数据,实现监控数据的生命周期管理。通过数据去重和压缩,Compactor显著降低了长期存储成本,同时保持了查询性能。
侧车(Sidecar)

Sidecar组件部署在每个Prometheus服务器旁边,负责实时同步监控数据到对象存储,以实现数据的长期存储。同时,Sidecar还提供了一个查询代理功能,使Querier能够通过它查询Prometheus的实时数据。Sidecar确保了数据的即时可用性和完整性,同时降低了对Prometheus服务器的直接访问需求。
规则器(Ruler)

Ruler组件提供了基于时间序列数据的警报规则和数据聚合规则的评估功能。它允许用户界说复杂的查询并在满足特定条件时触发警报。Ruler与Prometheus的规则引擎非常相似,但它可以跨多个Prometheus实例和Thanos组件工作,提供全局的规则评估能力。
通过这些组件的配合利用,Thanos解决了监控数据的长期存储、全局查询、高可用性和规模扩展等多个方面的挑战,为构建大规模、可靠的监控体系提供了强有力的支持。
三、Thanos的安装与配置

Thanos的安装和配置是一个灵活的过程,依赖于特定的运行情况和需求。以下是一个通用的步骤指南,旨在帮助您开始利用Thanos。本指南假设您已经有一个或多个运行Prometheus的情况,并盼望通过Thanos扩展其功能。
情况预备


[*]Prometheus情况:确保您有一个或多个运行中的Prometheus实例。Thanos将与这些实例配合工作,提供长期存储和全局查询能力。
[*]对象存储:选择一个对象存储解决方案(如Amazon S3、Google Cloud Storage、或其他兼容S3的存储)。Thanos将利用这个存储作为长期数据存储。
[*]Kubernetes集群(可选):如果您打算在Kubernetes情况中部署Thanos,需要预备一个Kubernetes集群。
利用Docker部署Thanos

以下是利用Docker快速部署Thanos的基本步骤,这适用于想要进行快速试验和开发的场景。

[*]部署Thanos Sidecar:对于每个Prometheus实例,部署一个Thanos Sidecar。这可以通过在Prometheus实例旁边运行Thanos Sidecar容器实现。
docker run -d --net=host --name thanos-sidecar \
-v /path/to/prometheus/data:/prometheus \
-v /path/to/thanos/config.yaml:/etc/thanos/config.yaml \
quay.io/thanos/thanos:v0.23.0 \
sidecar \
    --prometheus.url=http://localhost:9090 \
    --objstore.config-file=/etc/thanos/config.yaml
[*]部署Thanos Querier:Thanos Querier负责查询数据。您可以运行一个Querier实例来提供全局查询视图。
docker run -d --net=host --name thanos-querier \
quay.io/thanos/thanos:v0.23.0 \
query \
    --http-address=0.0.0.0:9090 \
    --query.replica-label=prometheus_replica \
    --store=<Sidecar-IP>:<gRPC-Port>
在这两个命令中,您需要根据实际情况更换/path/to/prometheus/data、/path/to/thanos/config.yaml、localhost:9090、和等占位符。
Kubernetes情况下的Thanos部署

在Kubernetes情况中,您可以利用Helm或者直接利用YAML文件部署Thanos。

[*]部署Thanos Sidecar:将Thanos Sidecar配置为Prometheus的sidecar容器。这通常通过修改Prometheus的Deployment或StatefulSet配置实现。
示例YAML配置片段:
spec:
containers:
- name: prometheus
    image: prom/prometheus:v2.22.0
    # Prometheus配置省略...
- name: thanos-sidecar
    image: quay.io/thanos/thanos:v0.23.0
    args:
    - sidecar
    - --prometheus.url=http://localhost:9090
    - --objstore.config-file=/etc/thanos/config.yaml
    volumeMounts:
    - name: thanos-config
      mountPath: /etc/thanos
    - name: prometheus-data
      mountPath: /prometheus
volumes:
- name: thanos-config
configMap:
    name: thanos-config
- name: prometheus-data
emptyDir: {}
[*]配置对象存储:创建一个ConfigMap包含您的对象存储配置。
示例ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: thanos-config
data:
config.yaml: |
    type: S3
    config:
      bucket: my-thanos-bucket
   
endpoint: s3.amazonaws.com
access_key:
secret_key:
3. **部署Thanos Querier**:部署Querier以提供全局查询能力。

示例Deployment YAML配置:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: thanos-querier
spec:
replicas: 1
selector:
    matchLabels:
      app: thanos-querier
template:
    metadata:
      labels:
      app: thanos-querier
    spec:
      containers:
      - name: thanos-querier
      image: quay.io/thanos/thanos:v0.23.0
      args:
      - query
      - --http-address=0.0.0.0:9090
      - --store=<Sidecar-Service-Name>:<gRPC-Port>确保在配置时根据您的情况更换相应的参数。以上步骤提供了一个Thanos底子部署的大致框架,但在实际部署时可能需要根据具体情况进行调整。
四、Thanos实战案例

本案例将详细形貌在一家大型电子商务公司中,如何利用Thanos来解决其监控体系在面临大规模数据、多集群情况下的挑战。该公司拥有多个Kubernetes集群分布在全球不同地区,每个集群都部署了Prometheus来网络监控数据,但随着业务的快速发展,原有监控体系面临以下挑战:

[*]数据孤岛:不同集群的监控数据相互隔离,无法实现全局视图。
[*]数据持久性:Prometheus的本地存储能力受限,难以满足长期存储需求。
[*]高可用性:需要确保监控数据的可靠性和服务的稳定性。
为了解决上述题目,公司决定引入Thanos来加强其监控体系。以下是具体实施步骤和细节。
步骤1:规划Thanos架构

首先,公司进行了详细的架构规划,决定采用Thanos Sidecar、Thanos Querier、Thanos Store Gateway和Thanos Compactor等组件,联合Amazon S3作为长期存储解决方案。规划效果如下:

[*]在每个Prometheus实例旁部署Thanos Sidecar,实实际时数据的上传和查询。
[*]部署一个全局Thanos Querier来提供跨集群的数据查询能力。
[*]利用Amazon S3作为长期数据存储,通过Thanos Store Gateway对汗青数据进行访问。
[*]部署Thanos Compactor对存储在S3中的数据进行压缩和优化。
步骤2:部署Thanos组件

部署Thanos Sidecar

在每个集群的Prometheus旁部署Thanos Sidecar。Sidecar配置了对Amazon S3的访问,实现数据的实时同步。
# Prometheus部署配置文件示例片段
containers:
- name: prometheus
image: prom/prometheus:v2.22.0
# Prometheus配置省略...
- name: thanos-sidecar
image: quay.io/thanos/thanos:v0.23.0
args:
- sidecar
- --objstore.config=type: S3
    config:
      bucket: <bucket-name>
      endpoint: s3.amazonaws.com
      access_key: <access-key>
      secret_key: <secret-key>部署Thanos Querier

公司在一个中央区域部署了Thanos Querier,配置了所有Sidecar的所在,提供全局查询能力。
部署Thanos Store Gateway

Thanos Store Gateway部署在同一中央区域,配置了对Amazon S3的访问,提供对汗青数据的查询。
部署Thanos Compactor

Thanos Compactor也部署在中央区域,对存储在Amazon S3中的数据进行定期压缩和优化。
步骤3:验证和优化

部署完成后,公司进行了一系列的测试和验证,确保数据的准确性、查询的相应时间以及体系的稳定性都达到预期。随后,根据测试效果对查询性能进行了优化,包罗调整查询缓存策略、优化PromQL查询语句等。
成果

通过引入Thanos,公司乐成解决了监控体系面临的挑战,实现了以下成果:

[*]全局视图:实现了跨集群、跨地域的全局监控数据查询。
[*]长期数据存储:通过Amazon S3实现了监控数据的长期存储,满足汗青数据分析的需求。
[*]高可用性:确保了监控体系的高可用性和数据的可靠性。
如有帮助,请多关注
TeahLead KrisChang,10+年的互联网和人工智能从业履历,10年+技能和业务团队管理履历,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产物业务负责人。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Thanos解码:打造企业级云原生监控解决方案