0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Thanos+Prometheus+Grafana构建监控系统

马哥Linux运维 来源:luizrojo.medium 作者:Luiz Rojo 2022-05-05 21:14 次阅读

对于弹性伸缩和高可用的系统来说,一般有大量的指标数据需要收集和存储,如何为这样的系统打造一个监控方案呢?本文介绍了如何使用 Thanos+Prometheus+Grafana 构建监控系统。

4b3d2ff8-ca1e-11ec-bce3-dac502259ad0.png

集群容量概览

直到今年 1 月,我一直在使用一款企业级监控解决方案来监控 Kubernetes 集群,这款监控方案还用于 APM。它用起来很自然,与 Kubernetes 的集成非常容易,只需要进行一些细微的调整,并且可以集成 APM 和基础设施指标。

尽管这款监控方案可以很容易地收集和存储数据,但使用指标创建警报却有很大的查询限制。经常我们收到的告警和仪表盘上显示的内容会不一样。更不用说我们有 6 个集群,收集和存储的指标数量非常多,这在很大程度上增加了我们的经济成本。

经过一番考虑,我们认识到继续使用这款监控方案弊大于利。是时候替换我们的监控方案了!但是,该使用什么产品或者工具呢?Grafana 是可视化工具的最佳选项,但我们的“后端”需要具备弹性伸缩和高可用能力,该使用什么工具呢?

纯粹使用 OpenTSDB 的话,安装需要太多的工作和精力;单机 Prometheus 不提供复制能力,还需要为其配备多个数据库;TimeScaleDB 看起来不错,但我不太会使用 PostgreSQL。

在对以上这些方案进行了一些实验后,我查看了 CNCF 网站,最后找到了 Thanos!它满足我们所有的需求:可长期保留数据、可复制、高可用、适合微服务、对使用相同数据库的所有集群有一个 global view!

架构

我们的集群上没有可用的持久化存储(所有服务都保持无状态),所以默认的 Prometheus + Thanos sidecar 方法不可用,metric 存储必须置于集群之外。此外,集群之间相互隔离,将 Thanos 组件绑定到一组特定的集群是不可能的,必须从“外部”监控集群。

综上所述,考虑到高可用性以及 Thanos 在虚拟机上运行的可能性,我们最终的架构是这样的:

4b55303a-ca1e-11ec-bce3-dac502259ad0.png

如图所示,我们是多数据中心的架构。其中每个中心都有一组 Grafana + Query 服务器,一组存储服务器和三个 Receive 服务器(集群数量的一半)。

Grafana 使用的数据库还有一个 AWS RDS。这个数据库不必很庞大(降低成本),我们团队也不需要管理 MySQL。

在 Thanos 提供的所有组件中,我们实现了其中的 4 个:

Receive:负责 TSDB,还管理所有运行 receive 的服务器和 TSBD 块上传到 S3 之间的复制。

Query:负责查询 receive 数据库。

Store:读取 S3 以获取不再存储在 receive 中的长期 metrics。

Compactor:管理存储在 S3 中的 TSDB 块的数据下采样和压缩。

Data Ingestion

所有集群的 data ingestion 都由集群内运行的专用 Prometheus Pod 管理。它从 control plate(API 服务器、控制器和调度程序)、etcd 集群以及集群内的 Pod 收集指标,这些集群内具有与基础设施和 Kubernetes 本身相关的指标(Kube-proxy、Kubelet、Node Exporter、State Metrics 、Metrics Server 和其他具有 scraping annotation 的 Pod)。

Prometheus Pod 然后将信息发送到使用远程存储配置管理 TSDB 的 receive 服务器之一。

4b932638-ca1e-11ec-bce3-dac502259ad0.png

data ingestion

所有数据都发送到单个服务器,然后复制到其他服务器。Prometheus 使用的 DNS 地址是一个 DNS GSLB,它探测每个 receive 服务器并平衡健康的服务器之间的 DNS 解析,在所有服务器之间分担负载,因为 DNS 解析只为每个 DNS 查询提供一个 IP。

需要强调一下,数据必须发送到单个 receive 实例并让它管理复制,发送相同的 metric 会导致复制失败和行为异常。

在这个层面上,metrics 也会上传到 S3 存储桶进行长期留存。Receive 每 2 小时(当每个 TSDB 块关闭时)上传一次 block,这些 metric 可用于使用 Store 组件进行查询。

还可以设置本地数据的保留时间。在这种情况下,所有本地数据都会保留 30 天以供日常使用和故障排除,这样可以加快查询速度。

超过 30 天的数据仅在 S3 上可用,最长可保留 1 年,用于长期评估和比较。

数据查询

数据被收集并存储在 receiver 中以供查询。这部分也设置为多数据中心可用。

每台服务器都运行 Grafana 和 Query,如果其中一台(或两台)出现故障,我们可以更轻松地从负载均衡器中识别并删除。在 Grafana 中,数据源配置为 localhost,因此它始终使用本地 Query 来获取数据。

对于查询配置,它必须知道所有存储了 metrics 的服务器(Receiver 和 Store)。query 组件知道哪个服务器在线并且能够从它们收集 metrics。

4baaeebc-ca1e-11ec-bce3-dac502259ad0.png

数据查询

它还管理重复数据删除,因为它查询所有服务器并配置了 replication,所有 metrics 都有多个副本。可以使用分配给 metrics 的标签和查询参数 (--query.replica-label=QUERY.REPLICA-LABEL) 来完成。通过这些配置,query 组件知道从 Receiver 和 Store 收集的 metrics 是否重复并仅使用一个数据点。

长期数据

如前所述,数据在本地最多保留 30 天,其他所有内容都存储在 S3 上。这样可以减少 Receiver 上所需的空间量并降低成本,因为块存储比对象存储更贵。更何况查询超过 30 天的数据不是很常见,主要用于资源使用历史和预测。

4bd1a41c-ca1e-11ec-bce3-dac502259ad0.png

远程数据查询

该 Store 还保留存储在 S3 存储桶上的每个 TSDB 块的索引的本地副本,因此如果需要查询超过 30 天的数据,它知道要下载和使用哪些块来提供数据。

数据情况

考虑到所有集群,该监控方案:

监控了 6 个 Kubernetes 集群;

收集了 670 个服务的 metrics;

使用 Node Exporter 监控了 246 个服务器;

每分钟收集约 27w 个指标;

每天 ingest 约 7.3 GB 的数据,或每月 ingest 约 226.3 GB 的数据;

为 Kubernetes 组件创建了 40 个专用仪表盘;

在 Grafana 上创建了 116 个警报。

对于每月费用,由于大部分组件在本地运行,成本降低了 90.61%,从每月 38,421.25 美元降至 3,608.99 美元,其中包括 AWS 服务成本。

总结

配置和设置上述架构大约需要一个月左右的时间,包括测试其他一些解决方案、验证架构、实现、在集群上开启收集以及创建所有仪表盘。

在第一周,好处是显而易见的。监控集群变得更加容易,仪表盘可以快速构建和定制,收集 metrics 几乎是即插即用的,大多数应用程序以 Prometheus 格式导出 metrics,并根据 annotations 自动收集。

此外,通过集成 Grafana 的 LDAP 可以达到更精细的团队权限控制。开发人员和 SRE 可以访问大量仪表盘,其中包含有关其命名空间、ingress 等的相关 metrics。

原文标题:使用 Thanos 和 Prometheus 打造一个高可用的 Kubernetes 监控系统

文章出处:【微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 监控系统
    +关注

    关注

    21

    文章

    3613

    浏览量

    169314
  • kubernetes
    +关注

    关注

    0

    文章

    219

    浏览量

    8568
  • Prometheus
    +关注

    关注

    0

    文章

    26

    浏览量

    1678

原文标题:使用 Thanos 和 Prometheus 打造一个高可用的 Kubernetes 监控系统

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Prometheus的架构原理从“监控”谈起

    Prometheus是继Kubernetes(k8s)之后,CNCF毕业的第二个开源项目,其来源于Google的Borgmon。本文从监控这件事说起,深入浅出Prometheus的架构原理、目标发现
    的头像 发表于 10-10 15:47 4167次阅读
    <b class='flag-5'>Prometheus</b>的架构原理从“<b class='flag-5'>监控</b>”谈起

    Prometheus的基本原理与开发指南

      导读      本文由梯度科技云管研发部高级工程师周宇明撰写,共分为7章,紧密围绕Prometheus的基本原理与开发指南展开介绍: 监控系统概述 Prometheus入门 Pro
    的头像 发表于 11-09 10:45 551次阅读
    <b class='flag-5'>Prometheus</b>的基本原理与开发指南

    阿里云容器Kubernetes监控(二) - 使用Grafana展现Pod监控数据

    摘要: 简介 在kubernetes的监控方案中,Heapster+Influxdb+Grafana的组合相比prometheus等开源方案而言更为简单直接。而且Heapster在
    发表于 05-10 15:28

    prometheus监控服务的整个流程介绍

    最近有个新项目需要搞一套完整的监控告警系统,我们使用了开源监控告警系统Prometheus;其功能强大,可以很方便对其进行扩展,并且可以安装
    发表于 12-23 17:34

    简述linux-arm64 UOS安装开源Grafana的步骤

    (linux-arm64)UOS安装开源Grafana-7.2.0,和CentOS安装步骤一样Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能,支持
    发表于 06-16 15:00

    Prometheus、InfluxDB与Grafana打造监控平台怎么样

    在本文中,我将把几个常用的监控部分给梳理一下。前面我们提到过,在性能监控图谱中,有操作系统、应用服务器、中间件、队列、缓存、数据库、网络、前端、负载均衡、Web 服务器、存储、代码等很多需要
    的头像 发表于 11-01 10:05 1332次阅读
    <b class='flag-5'>Prometheus</b>、InfluxDB与<b class='flag-5'>Grafana</b>打造<b class='flag-5'>监控</b>平台怎么样

    Thanos大规模Prometheus集群解决方案

    thanos.zip
    发表于 04-25 10:58 0次下载
    <b class='flag-5'>Thanos</b>大规模<b class='flag-5'>Prometheus</b>集群解决方案

    Prometheus服务监控系统

    prometheus.zip
    发表于 04-26 10:23 3次下载
    <b class='flag-5'>Prometheus</b>服务<b class='flag-5'>监控</b><b class='flag-5'>系统</b>

    关于Prometheus监控系统相关的知识体系

    今天浩道跟大家分享关于Prometheus监控系统相关的知识体系,让你通过本文可以大体掌握其相关知识体系!
    的头像 发表于 10-20 09:06 882次阅读

    SpringBoot+Prometheus+Grafana实现自定义监控

    为 /actuator/Prometheus 的 HTTP 服务来供 Prometheus 抓取数据,不过默认该服务是关闭的,该配置将打开所有的 Actuator 服务。
    的头像 发表于 12-26 16:02 1057次阅读

    prometheus下载安装教程

    Prometheus 是一个开放性的监控解决方案,用户可以非常方便的安装和使用 Prometheus 并且能够非常方便的对其进行扩展。 在Prometheus的架构设计中,
    的头像 发表于 01-13 16:07 6733次阅读
    <b class='flag-5'>prometheus</b>下载安装教程

    Grafana 9泰酷了吧

    Grafana 9.0 的主要重点是改善 Grafana 的用户体验,使可观察性和数据可视化更易用也更容易获得。无论是通过 Prometheus 和 Loki 可视化查询生成器还是面板和仪表板搜索
    的头像 发表于 05-30 11:30 380次阅读
    <b class='flag-5'>Grafana</b> 9泰酷了吧

    基于kube-prometheus的大数据平台监控系统设计

    本文介绍了如何基于 kube-prometheus 设计一个监控系统, 以灵活简单的方式对 kubernetes 上的应用进行指标采集,并实现监控报警功能。
    的头像 发表于 05-30 17:02 442次阅读

    40个步骤安装部署Prometheus监控系统

    Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。
    的头像 发表于 08-14 11:53 3.2w次阅读
    40个步骤安装部署<b class='flag-5'>Prometheus</b><b class='flag-5'>监控</b><b class='flag-5'>系统</b>

    基于Prometheus开源的完整监控解决方案

    每一个被 Prometheus 监控的服务都是一个 Job,Prometheus 为这些 Job 提供了官方的 SDK ,利用这个 SDK 可以自定义并导出自己的业务指标,也可以
    发表于 10-18 09:15 180次阅读
    基于<b class='flag-5'>Prometheus</b>开源的完整<b class='flag-5'>监控</b>解决方案