分布式系统的可观测性分为metrics(指标)、链路和日志。指标监控基于基础指标数据(例如CPU、内存、响应时间,调用量等)进行监控,是较为传统和应用范围最广的监控手段;链路追踪解决服务间的复杂调用和性能耗时分析问题;日志监控对系统运行过程数据:如关键统计信息,警告、错误等进行监控,这三种手段共同配合完成分布式系统的全面监控。链路监控和日志监控是分布式日志中心的建设范畴,本文主要针对分布式系统的指标监控展开,下文所提到的分布式监控仅限于分布式指标监控范畴。
当前统一监控平台使用的传统监控工具比如Zabbix、ITM、Nagios难以实现在容器云及其他分布式动态环境下进行监控,因此亟待采用一种新技术解决分布式系统监控问题。
开展分布式监控,重点需要解决如下几个问题:
下面我们会逐一介绍。
在分布式监控标准梳理过程中,我们采用如下四个原则,产出如下图所示的分布式指标体系:
分布式指标体系层级图
具体每个层级,每个组件的监控指标,由于篇幅原因,在此不再展开。
分布式监控平台是统一监控平台的子系统,负责分布式和云原生系统的监控。平台主要分为四层:监控工具层、存储层、处理层和管理平台层,如下图所示:
分布式监控平台逻辑架构图
监控工具层主要是由Prometheus工具组成,接收处理层的驱动指令,进行监控对象的自动发现、数据采集、告警判断、性能数据进行本地存储的同时,实时送入存储层的Kafka,为后继的数据分析提供数据源。
处理层负责连接监控管理层和工具层,主要包括工具驱动、实时数据处理、告警处理、Prometheus本地数据实时查询四大功能模块。
工具管理和驱动:将监控管理层的指令转换成Prometheus Operator接口API,进行相应Prometheus工具的驱动,如自动发现配置、采集指标配置、采集频率、告警配置(指标、阈值、告警持续时间),告警等级,性能数据存储配置等。
实时数据处理:对性能数据进行实时时间戳转换,异常清洗,数据格式化和标准化处理,InfluxDB存储格式适配等,最后送入存储层的InfluxDB进行历史存储,供后继的监控视图展示和问题定位查询使用。
告警处理:通过搭建AlertManager集群和自研的告警处理模块,二者互相配合,实现告警的统一集中处理。
Prometheus本地数据实时查询:接收管理平台请求,获取相应Prometheus本地性能数据,按需提取字段,采样点稀释,数据聚合等。
管理平台层由接口层、指标&指标实现管理、策略管理、规则管理、标签管理、工具管理、驱动管理、监控评价、监控视图展示、告警管理组成,其中接口层提供统一门户实现监控信息的全貌展示,提供便捷的管理支持与任务派发。
调研当前业界众多的开源监控系统例如Prometheus、OpenFalcon和夜莺等,最终选型Prometheus,原因是:
当然Prometheus也有他的不足,那就是:
我们对Prometheus的不足做了一些扩展与整合:
建立标准化的分布式监控标准管理模型。基于标签在K8s和Prometheus中的重要作用(K8s基于标签分类管理资源对象;PromQL基于标签做数据聚合;Prometheus Operator基于标签匹配监控对象和监控规则),因此以标签为核心,构建了一套分布式管理模型,具体包括监控标签、监控工具、指标实现、指标、监控策略、监控规则,如下图所示。通过在分布式监控平台落地实现了同类对象的标准化监控。
分布式监控标准模型图
打通运维和研发壁垒,实现代码即监控。监控管理员提前内置下发监控规则,研发投产时,只需要做两点就可实现监控:
驱动模块根据Service yml驱动Prometheus实现投产对象的配置和发现,并基于预置的规则进行监控,示例如下图所示:
标准化和自服务化配置下发监控规则过程示例图
集中告警处理集群搭建:搭建AlertManager告警处理集群,实现告警的集中统一管理。通过AlertManager的分组、抑制、静默实现告警的初步处理,但是AlertManager现有功能不满足如下实际生产需求:
告警二次处理模块:基于go语言自研高性能告警处理模块,提供webhook接口供AlertManger调用。接口实现的功能有:告警字段丰富、告警压缩、告警升级、告警总结、告警根因提示、告警转syslog发送统一监控平台。
Adapter改造:基于开源Prometheus Kafka Adapter进行改造,确保海量性能数据实时写入Kafka,供后继的数据分析和数据价值利用,比如动态基线计算和异常检测等。
Adapter工作示意图
适配当前Kafka SASL/PLAINTEXT认证模式,对采集数据进行压缩以节约带宽,对Kafka写入性能参数调优以应对大并发数据量的实时写入。
设计Adapter主备模式,避免数据重复。如果主Adapter健康检查能通过且主Adapter对应的Prometheus正常运行,则利用主Adapter传递数据送入Kafka,备Adapter暂停工作;如果主Adapter或者主Adapter对应的Prometheus健康检查不通过,则使用备用Adapter进行传递数据,并通知管理人员Prometheus和主Adapter故障。
流处理模块:基于Flink自研流处理模块,确保海量性能数据的实时处理和入库。流处理的内容包括:时间戳处理(Prometheus默认采用UTC时间)、异常数据清洗、数据格式化和标准化处理,InfluxDB存储格式适配。
告警和性能数据集中处理架构图
在平台建设中,借鉴同业及互联网企业容器云K8s相关建设经验,基于开源技术自主研发,构建了立体化、集中化、平台化、标准化的分布式监控平台,系统具有如下特点:
目前分布式监控平台已于11月初在G行投产,实现G行容器云生产集群的全面监控,实现海量对象的秒级处理,日均处理T级数据,告警准确率和召回率均为100%,系统运行稳定,监控效果符合预期。
平台一期建设实现了容器云及云上应用和服务的监控,接下来会扩大分布式监控的纳管范围,实现分布式数据库、全栈云管理平台、分布式消息等的监控纳管。
监控自服务化能力建设,封装有一些自服务监控场景:比如监控的上下线、监控规则修改、个性化监控配置等。
监控评价功能,以量化的方式展示分布式系统的监控覆盖率和标准化率,以评促改,形成闭环。
分布式监控工具自身优化,比如Prometheus负载的自动平衡,基于一些预警数据,智能扩缩Prometheus的实例个数,自动分配采集对象,达到最佳的监控能力。
与自动化运维操作平台进行联动,实现一些场景的自动化处置。
本文标题:基于Prometheus的分布式监控平台落地与实践
本文来源:http://www.mswzjz.cn/qtweb/news49/353399.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能