内容提要
Prometheus是一款开源的监控和报警工具,专为容器化和云原生架构设计。Thanos是一套开源组件,用于解决Prometheus在多集群环境下的可用性和可扩展性限制。通过存储和查询历史数据,Thanos保证了Prometheus的可靠性和一致性。建议在亚马逊中国区域使用独立部署的监控架构,而在支持托管Prometheus服务的区域,建议直接使用托管服务。
延伸解读
中国区域与全球区域的部署差异
文章指出,亚马逊云科技中国区域尚未推出托管的 Prometheus 服务(AMP),因此中国客户需要自行部署 Prometheus 监控架构。而在已支持 AMP 的区域,建议直接使用托管服务,以降低维护成本。这种区域差异意味着中国客户在架构选型时需优先考虑自建方案,如基于 Thanos 的独立部署,并关注后续服务发布动态。
四种监控架构的适用场景解析
文章对比了四种基于 Thanos 的监控架构:第一种通过 Sidecar 归档数据到 S3,适合中国区域生产环境;第二种增加 Remote Write 到 Receiver,适合需要数据冗余的场景;第三种使用 Agent Mode 最小化资源占用;第四种直接使用 AMP,适合支持托管服务的区域。读者应根据集群规模、数据冗余需求和区域服务可用性选择。
Thanos 组件配置的关键要点
文章详细说明了 Thanos 核心组件的配置,如 Store 作为 API 网关访问对象存储,Query Frontend 提供 Prometheus 兼容 API 并支持查询分片,避免 OOM。Receiver 需配置与源 Prometheus 相当的资源。这些配置细节有助于读者理解 Thanos 的工作原理,并在实际部署中优化性能和资源使用。
部署实践与注意事项
文章提供了基于 Terraform 和 Prometheus Operator 的部署步骤,包括创建 EKS 集群、配置 S3 存储桶和 Route53 子域名。读者需注意提前准备域名和权限,并根据需要选择部署前三种架构。实验还展示了如何通过 Grafana 配置多集群查询,以及清理环境的步骤,为实际落地提供了参考。
Q&A
Thanos 是什么?它主要解决 Prometheus 的哪些问题?
Thanos 是一套开源组件,构建在 Prometheus 之上,用于解决 Prometheus 在多集群环境下的高可用性、可扩展性限制。它通过接收并存储 Prometheus 的多集群数据副本,提供全局查询和一致性数据访问接口,从而解决 Prometheus 单集群在存储、查询历史数据和备份等方面的扩展性挑战。
Thanos 的主要组件有哪些?各自的作用是什么?
Thanos 的主要组件包括:Sidecar(运行在 Prometheus Pod 中,读取数据供查询并上传到对象存储)、Store(从对象存储查询数据)、Compactor(压缩、聚合历史数据)、Receiver(接收 Prometheus 远程写入的数据并上传到对象存储)、Ruler(评估记录和警报规则)、Query(实现 Prometheus v1 API,查询并汇总底层组件数据)、Query Frontend(代理查询、缓存响应并拆分查询以提高性能)。
在亚马逊云科技中国区域,推荐使用哪种 Prometheus 监控架构?为什么?
在亚马逊云科技中国区域,由于暂时没有发布托管的 Prometheus 服务,推荐使用第一种监控架构,即被监控集群部署 Prometheus 并启用 Thanos Sidecar 将历史数据归档到 S3,集中监控集群部署 Thanos Store 和 Grafana。这种架构简单,只有一份监控数据,最小化存储成本和其他资源开销,适合绝大部分生产环境,是客户首选。
Thanos 的四种监控架构分别适用于什么场景?
第一种:适合绝大部分生产环境,尤其在中国区域是首选,架构简单但查询实时数据时可能给被监控集群带来额外性能损耗。第二种:适合需要多副本监控数据的特殊场景,直接从 Receiver 查询实时数据,对被监控集群无额外性能损耗,但架构复杂。第三种:适合需要最大程度减少被监控集群资源占用的场景,使用 Agent Mode 几乎无状态,但某些组件无法启用。第四种:在支持托管 Prometheus 服务的区域直接使用 AMP,提供最佳性能和最低维护成本,实现开箱即用。
如何部署基于 Thanos 的 Prometheus 监控架构?
部署步骤包括:使用 Terraform 创建 EKS 集群和相关资源(如 VPC、IAM 角色等),通过 Prometheus Operator 和 Bitnami Thanos Chart 部署 Prometheus 和 Thanos 组件,并定制 values.yaml 文件。具体操作:克隆 thanos-example 和 eks-blueprints-clusters 仓库,配置环境变量和 terraform.tfvars,依次在 environment、ekscluster1、ekscluster2、ekscluster3 目录下运行 terraform init 和 terraform apply。
Thanos Query Frontend 有什么作用?如何配置查询拆分?
Thanos Query Frontend 对外提供与 Prometheus 兼容的 API,可以直接作为 Prometheus 类型的数据源添加到 Grafana 中。它代理查询给 Query 组件,缓存响应,并可以拆分查询以提高性能。配置查询拆分通过参数 --query-range.split-interval 和 --labels.split-interval 设置,默认 24 小时,示例中设置为 4 小时,将一个跨度较大的查询分割成跨度较短的查询,以更好地利用 Query 组件的横向扩展实现并行查询,并防止 OOM。
Thanos Receiver 组件如何工作?配置时需要注意什么?
Thanos Receiver 组件接收来自 Prometheus 远程写入(Remote Write)的数据,并将其保存到对象存储桶中,同时使用自己的标签组以区分数据。配置时建议分配 Receiver 组件的资源和数量与被监控集群中 Prometheus 采集组件的资源和数量相当。在 Receiver 的配置中需要指定对象存储桶的配置,并设置标签如 replica、receive、cluster、cluster_name、origin_prometheus 等。
如何将 Grafana 配置为支持多集群数据查询?
首先添加 Thanos Query Frontend 作为 Prometheus 类型的数据源,设置 URL 为 http://thanoslab-query-frontend.thanos.svc.cluster.local:9090 并设为默认。然后对于预置的 Dashboard,可以修改 cluster 变量,将 Data source 设置为 thanoslab,并保存 Dashboard。这样即可实现多集群数据查询。