整体架构概述

采用集中式监控模式,在监控中心部署VictoriaMetrics集群作为核心时序数据库,在各个 K8S 集群部署vmagent进行数据采集,在中心集群部署Grafana进行数据可视化展示,使用vmalert实现告警规则的灵活配置,利用alertmanager进行报警消息的治理。因alertmanaget推送配置不够灵活,使用python脚本编写一个接口接收alertmanager的消息,再进行进一步的推送。

各 K8S 集群数据采集(vmagent)

数据采集以部署在各个 K8S 集群的 vmagent 为核心,搭配一下工具来获取各类指标:

1.kube-stat-metrics用于获取k8s集群内各类资源的指标数据

2.kubelet获取容器的资源使用数据、node节点资源总量数据等

3.node-export获取node节点资源使用数据

4.blackbos获取端口、TCP链接等连通性

针对java应用

通过JMX Exporter Sidecar实现对原有业务应用的监控,优点:

1.零侵入改造,无需任何业务改造

2.弹性资源隔离,Sidecar崩溃不影响业务容器,资源单独限制

3.支持热更新,不中断原有业务

中心集群数据展示(Grafana)

  • 与 VictoriaMetrics 连接:在 Grafana 中添加数据源,选择 VictoriaMetrics 类型,然后输入 VictoriaMetrics 的访问地址和相关认证信息(如果有),完成数据源的配置。

实现原理

数据流转过程

  1. 数据采集:vmagent 在各个 K8S 集群中,通过访问 K8S 集群的相关接口(如 API Server、cAdvisor 等),采集容器、节点、K8S 组件等的监控指标数据。
  1. 数据传输:vmagent 将采集到的原始数据进行格式化处理后,按照配置的目标地址,通过 HTTP/HTTPS 协议将数据发送到监控中心的 VictoriaMetrics。
  1. 数据存储与处理:VictoriaMetrics 接收到数据后,对数据进行压缩、索引等处理,然后将数据存储在本地的磁盘中,以便后续的查询和分析。
  1. 数据展示:Grafana 通过向 VictoriaMetrics 发送查询请求,获取所需的监控数据,并根据仪表盘的配置,将数据以直观的图表形式展示出来。
  1. 告警触发与通知:vmalert 按照设定的评估周期,从 VictoriaMetrics 中获取监控数据,并与告警规则进行比对。当满足告警条件时,vmalert 触发告警,并将告警信息发送到指定的接收端。

各组件协作机制

  • vmagent 与 VictoriaMetrics:vmagent 作为数据采集和转发的角色,负责将采集到的监控数据发送给 VictoriaMetrics。两者之间通过 HTTP/HTTPS 协议进行通信,vmagent 会根据配置的批量发送策略,将数据批量发送到 VictoriaMetrics,以提高传输效率。
  • VictoriaMetrics 与 Grafana:Grafana 作为数据可视化工具,通过查询 VictoriaMetrics 提供的 API 接口获取数据。VictoriaMetrics 支持 PromQL 查询语言,Grafana 可以利用 PromQL 语句从 VictoriaMetrics 中查询所需的监控数据,并进行展示。
  • VictoriaMetrics 与 vmalert:vmalert 定期从 VictoriaMetrics 中查询监控数据,并根据告警规则对数据进行评估。当评估结果满足告警条件时,vmalert 生成告警事件,并将其发送到配置的告警接收器。

架构优势与优化方向

架构优势

  1. 高性能:VictoriaMetrics 采用了高效的压缩算法和存储引擎,能够处理大量的监控数据,并且查询性能优异,适合多 K8S 集群的大规模监控场景。
  1. 易扩展性:各个组件都可以独立进行扩展。例如,当监控数据量增加时,可以增加 VictoriaMetrics 的实例数量;当数据采集压力增大时,可以增加 vmagent 的数量。
  1. 低成本:VictoriaMetrics 是开源软件,无需支付 licensing 费用,同时其高效的存储机制可以降低存储成本。
  1. 灵活性:可以根据实际需求灵活配置各组件的参数,如数据采集频率、告警规则、图表展示方式等。

优化方向

  1. 数据分片:当监控数据量非常庞大时,可以对 VictoriaMetrics 进行数据分片,将数据分散存储在多个实例中,提高数据处理和查询的效率。
  1. 缓存机制:在 Grafana 与 VictoriaMetrics 之间添加缓存机制,如使用 Redis 作为缓存,减少对 VictoriaMetrics 的查询压力,提高数据展示的响应速度。
  1. 告警优化:对告警规则进行优化,减少不必要的告警,提高告警的准确性和有效性。例如,通过设置告警抑制规则,避免同一类型的告警重复发送。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐