原文出自:https://blog.mickeyzzc.tech/posts/opentelemetry/prometheus-evolution-history-two/
前情概述:
在《监控系统企业架构演进史-初入Prometheus》中,监控系统已经从单体架构升级到单IDC
分布式架构了。
前一篇文章的内容是适用于虚拟机部署和容器部署的。Prometheus
是云原生时代的产物,一般和Kubernetes
配套使用,但是Prometheus
本身也能在非Kubernetes
取替传统监控如Zabbix
使用的。
在该篇文章中,开始以Kubernetes
的部署来升级整个监控系统架构,使之在跨地域混合云的业务场景中更具灵活性。
架构设计
跨地域的三层结构设计
设计三层区域结构,同时规范区域命名标签化来实现快速辨识服务的地域详细信息。 在第三层中的Cluster和VPC是同级,分别代表集群内或者某网段的隔离服务。
前端查询入口逻辑架构
用Thanos Query
实现前期的层级架构
利用Thanos
内的GRPC
通讯协议和聚合查询能力来实现递级数据汇聚到最上层Thanos Query
组件,再聚合计算时间线结果集前端展示。
引入Thanos Query Frontend
完成统一前端查询入口
Thanos Query Frontend
组件有以下配置能力优化查询,需根据实际情况调整:
- 时间线的纵向切割查询
比如查15天的数据,由于样本量的数据庞大,会在原始数据读取到内存时导致OOM问题。通过纵向切割比如把15天的聚合查询逻辑拆分成每6小时的聚合查询。
Thanos Query
组件就会得到4 * 15
个并发查询去完成样本查询并聚合成不同时间段的结果集再拼接展示,且每完成一个子查询聚合均及时释放内存高效优化了资源利用率。 - 查询结果集缓存
通过对查询语句和时间周期的
HASH KEY
缓存结果集到内存或者Redis
以重复利用,减轻上游压力。
利用Kubernetes
赋予更具弹性的冗余能力
自研架构组件
在基于原生开源项目的基础架构下,已基本实现对跨地域混合云的能力。但是要做到企业日常管理还远远不够,需要完善管理架构和前台能力才称得上企业服务。
基础设计逻辑
为了让整个架构具备灵活性和通用性,分别设计了几个组件:
Self-research service discovery
用于对接第三方系统,比如CMDB
,CICD
等收集业务系统和资产信息,并计算各个业务系统和基建关联关系,通过地域信息来调度资源信息同步给P-sidcar
组件。P-sidcar
用于在边缘管理Prometheus
,从Self-research service discovery
得到就近采集器的信息,以http_sd
方式给Prometheus
发现exporter
采集的同时实现精细化label
注入。msg route agent
用于对接飞书、钉钉等通讯服务,同时从Conf/Rule Sync
同步告警的责任人以实现高效的最后一公里定向信息推送。A-sidcar
用于对Alertmanger
集群的配置管理,并准实时同步抑制策略来对告警实现更精确的管理。Conf/Rule Sync
对接各个边缘组件。准实时同步状态信息和后台管理策略。
进阶扩展
底座设计尽量精而简,又不能失去灵活性。在此之上通过自研前台服务、中间件和边缘组件逐步丰富企业能力。
- 服务发现组件主打和各种三方系统对接,不限于CMDB/CICD系统,还可以对接工单系统或作业系统。
- 告警组件逐步升级为统一告警系统平台,和服务发现组件联动实现更高级的动态调度告警能力。
- 配置同步组件和Grafana逐步融合成前台系统,集管理和展示一体。
整个系统的用户侧切面逻辑如下图
到这个阶段,平台已经具备一定的复杂性了,但是对用户而言需要简化他们的理解。
统一告警系统
基本上监控平台发展到一定阶段,告警风暴问题必然会开始困扰企业内部各个技术支撑部门。告警收敛治理就会优先提上日程。 这个时候,告警的组件就可以从一开始的只是告警定向推送能力逐步丰富周边能力了。