作者:YuanPeng 2022-06-16 13:21:10
云计算
云原生 本文以vivo容器集群监控实践经验为基础,探讨了云原生监控体系架构如何构建、遇到的挑战以及相应的对策。
作者 | vivo 互联网服务器团队-YuanPeng
从容器技术的推广以及 Kubernetes成为容器调度管理领域的事实标准开始,云原生的理念和技术架构体系逐渐在生产环境中得到了越来越广泛的应用实践。在云原生的体系下,面对高度的弹性、动态的应用生命周期管理以及微服务化等特点,传统的监控体系已经难以应对和支撑,因此新一代云原生监控体系应运而生。
当前,以Prometheus为核心的监控系统已成为云原生监控领域的事实标准。Prometheus作为新一代云原生监控系统,拥有强大的查询能力、便捷的操作、高效的存储以及便捷的配置操作等特点,但任何一个系统都不是万能的,面对复杂多样的生产环境,单一的Prometheus系统也无法满足生产环境的各种监控需求,都需要根据环境的特点来构建适合的监控方法和体系。
本文以vivo容器集群监控实践经验为基础,探讨了云原生监控体系架构如何构建、遇到的挑战以及相应的对策。
云原生监控相比于传统监控,有其特征和价值,可归纳为下表:
特征 |
价值 |
监控系统以云原生方式部署 |
|
统一的云原生监控标准 |
|
采集端对业务侵入性极小 |
|
云原生一体化的设计 |
|
完整的社区生态 |
|
CNCF生态全景图中监控相关的项目如下图(参考https://landscape.cncf.io/),下面重点介绍几个项目:
Prometheus(已毕业)
Prometheus是一个强大的监控系统,同时也是一个高效的时序数据库,并且具有完整的围绕它为核心的监控体系解决方案。单台Prometheus就能够高效的处理大量监控数据,并且具备非常友好且强大的PromQL语法,可以用来灵活查询各种监控数据以及告警规则配置。
Prometheus是继Kubernetes之后的第二个CNCF “毕业”项目(也是目前监控方向唯一“毕业”的项目),开源社区活跃,在Github上拥有近4万Stars。
Prometheus的Pull指标采集方式被广泛采用,很多应用都直接实现了基于Prometheus采集标准的metric接口来暴露自身监控指标。即使是没有实现metric接口的应用,大部分在社区里都能找到相应的exporter来间接暴露监控指标。
但Prometheus仍然存在一些不足,比如只支持单机部署,Prometheus自带时序库使用的是本地存储,因此存储空间受限于单机磁盘容量,在大数据量存储的情况下,prometheus的历史数据查询性能会有严重瓶颈。因此在大规模生产场景下,单一prometheus难以存储长期历史数据且不具备高可用能力。
Cortex(孵化中)
Cortex对Prometheus进行了扩展,提供多租户方式,并为Prometheus提供了对接持久化存储的能力,支持Prometheus实例水平扩展,以及提供多个Prometheus数据的统一查询入口。
Thanos(孵化中)
Thanos通过将Prometheus监控数据存储到对象存储,提供了一种长期历史监控数据存储的低成本解决方案。Thanos通过Querier组件给Prometheus集群提供了全局视图(全局查询),并能将Prometheus的样本数据压缩机制应用到对象存储的历史数据中,还能通过降采样功能提升大范围历史数据的查询速度,且不会引起明显的精度损失。
Grafana
Grafana是一个开源的度量分析与可视化套件,主要在监控领域用于时序数据的图标自定义和展示,UI非常灵活,有丰富的插件和强大的扩展能力,支持多种不同的数据源(Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, Druid等等)。Grafana还提供可视化的告警定制能力,能够持续的评估告警指标,发送告警通知。
此外,Grafana社区提供了大量常用系统/组件的监控告警面板配置,可以一键在线下载配置,简单便捷。
VictoriaMetrics
VictoriaMetrics是一个高性能、经济且可扩展的监控解决方案和时序数据库,可以作为Prometheus的长期远程存储方案,支持PromQL查询,并与Grafana兼容,可用于替换Prometheus作为Grafana的数据源。具有安装配置简单、低内存占用、高压缩比、高性能以及支持水平扩展等特性。
AlertManager
AlertManager是一个告警组件,接收Prometheus发来的告警,通过分组、沉默、抑制等策略处理后,通过路由发送给指定的告警接收端。告警可以按照不同的规则发送给不同的接收方,支持多种常见的告警接收端,比如Email,Slack,或通过webhook方式接入企业微信、钉钉等国内IM工具。
上文了解了云原生监控领域的常用工具后,该如何搭建一套简单的云原生监控系统?下图给出了Prometheus社区官方提供的方案:
(出处:Prometheus社区)
上述系统展开阐述如下:
上文展示了社区官方给出的监控系统搭建方案,但该方案在生产环境应用时存在的主要问题:
那么对于大规模复杂生产环境,如何构建能力开放、稳定高效的云原生监控体系?
综合vivo自身容器集群监控实践经验、各类云原生监控相关文档以及技术大会上各家厂商的技术架构分享,可以总结出适合大规模生产场景的云原生监控体系架构,下图展示了体系架构的分层模型。
任何系统的架构设计一定是针对生产环境和业务需求的特点,以满足业务需求和高可用为前提,在综合考虑技术难度、研发投入和运维成本等综合因素后,设计出最符合当前场景的架构方案。因此,在详解vivo容器集群监控架构设计之前,需要先介绍下背景:
生产环境
vivo目前有多个容器化生产集群,分布在若干机房,目前单集群最大规模在1000~2000节点。
监控需求
需要满足生产高可用,监控范围主要包括容器集群指标、物理机运行指标和容器(业务)指标,其中业务监控告警还需要通过公司的基础监控平台来展示和配置。
告警需求
告警需要可视化的配置方式,需要发送给公司的告警中心,并有分级分组等策略规则需求。
数据分析需求
有各类丰富的周、月度、季度统计报表需求。
结合上文说明的环境和需求特点,vivo当前监控架构的设计思路:
前文介绍了社区的Cortex和Thanos高可用监控方案,这两个方案在业界均有生产级的实践经验,但为什么我们选择用Prometheus双副本+VictoriaMetrics的方案?
主要原因有以下几点:
由于Prometheus采用双副本部署高可用方案,数据存储如何去重是需要设计时就考虑的。VictoriaMetrics本身支持存储时去重,因此VictoriaMetrics这一侧的数据去重得到天然解决。但监控数据通过Kafka转发给基础监控平台和OLAP这一侧的去重该如何实现?
我们设计的方案,如下图,是通过自研Adapter “分组选举”方式实现去重。即每个Prometheus副本对应一组Adapter,两组Adapter之间会进行选主,只有选举为Leader的那组Adapter才会转发数据。通过这种方式既实现了去重,也借用K8s service来支持Adapter的负载均衡。
此外,Adapter具备感知Prometheus故障的能力,当Leader Prometheus发生故障时,Leader Adapter会感知到并自动放弃Leader身份,从而切换到另一组Adapter继续传输数据,确保了“双副本高可用+去重”方案的有效性。
我们在容器集群监控实践的过程中,遇到的一些困难和挑战,总结如下:
问题 |
挑战点 |
对策 |
大规模性能问题 |
Prometheus目前人工分组分片,实例的负载是不均衡的 |
社区有开源项目支持自动分片和负载均衡 |
Prometheus在压力大时会出现丢弃少量数据现象,影响OLAP端分析监控数据的准确性 |
| |
时序数据库性能和扩容 |
| |
云原生监控体系落地 |
与公司已有监控体系的融合 |
公司监控体系兼容云原生监控采集端和数据源格式 |
业务全面容器化后,更丰富的监控维度建设 |
|
监控的目标是为了更高效可靠的运维,准确及时的发现问题。更高的目标是基于监控实现自动化的运维,甚至是智能运维(AIOPS)。
基于目前对容器集群监控的经验总结,未来在监控架构上可以做的提升点包括:
没有一种架构设计是一劳永逸的,必须要随着生产环境和需求的变化,以及技术的发展来持续演进。我们在云原生监控这条路上,需要继续不忘初心,砥砺前行。
当前题目:vivo容器集群监控系统架构与实践
转载来于:http://www.shufengxianlan.com/qtweb/news20/450620.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联