引言
在现代企业中,随着数据处理需求的不断增长,AutoMQ [1] 作为一种高效、低成本的流处理系统,逐渐成为企业实时数据处理的关键组件。然而,随着集群规模的扩大和业务复杂性的增加,确保 AutoMQ 集群的稳定性、高可用性和性能优化变得尤为重要。因此,集成一个强大而全面的监控系统对于维护 AutoMQ 集群的健康运行至关重要。Prometheus [2] 以其强大的数据采集和查询能力,成为企业监控 AutoMQ 集群的理想选择。而为了应对 Prometheus 在大规模数据存储上的局限性,VictoriaMetrics [3] 作为高效的时序数据库存储后端,能够提供更强的存储和查询性能。通过集成 Prometheus 和 VictoriaMetrics,企业可以实现对 AutoMQ 集群的全面监控,确保系统的高可用性和性能优化。
AutoMQ 概述
AutoMQ 是一种基于云重新设计的流处理系统,它在保持与 Apache Kafka 100%兼容的前提下,通过将存储分离至对象存储,显著提升了系统的成本效益和弹性能力。具体来说,AutoMQ 通过构建在 S3 上的流存储库 S3Stream,将存储卸载至云厂商提供的共享云存储 EBS 和 S3,提供低成本、低延时、高可用、高可靠和无限容量的流存储能力。与传统的 Shared Nothing 架构相比,AutoMQ 采用了 Shared Storage 架构,显著降低了存储和运维的复杂性,同时提升了系统的弹性和可靠性。
AutoMQ 的设计理念和技术优势使其成为替换企业现有 Kafka 集群的理想选择。通过采用 AutoMQ,企业可以显著降低存储成本,简化运维,并实现集群的自动扩缩容和流量自平衡,从而更高效地应对业务需求的变化。此外,AutoMQ 的架构支持高效的冷读操作和服务零中断,确保系统在高负载和突发流量情况下的稳定运行。
Prometheus 概述
Prometheus 是一款开源的系统监控和报警工具包,最初由SoundCloud开发,并于2012年开源。它具有强大的数据采集、存储和查询能力,能够实时监控系统和应用的性能指标。Prometheus采用多维数据模型,通过标签对监控数据进行标记和查询,支持灵活的查询语言PromQL。Prometheus的主要优势包括高效的数据采集、强大的查询功能和丰富的报警机制,广泛应用于云原生生态系统中。
然而,Prometheus在大规模数据存储上存在一定的局限性,特别是在长期存储和高并发查询的场景下,存储性能和查询效率可能会受到影响。因此,需要引入一个高效的存储后端来解决这些问题。
VictoriaMetrics 概述
VictoriaMetrics是一款高性能、开源的时序数据库,专为高并发数据写入和查询而设计。它具有高效的数据压缩和存储能力,能够在低硬件资源消耗的情况下,提供高吞吐量的数据写入和查询性能。VictoriaMetrics支持Prometheus的远程存储接口,可以无缝集成到现有的Prometheus监控体系中。下图是 VictoriaMetrics 的架构图:
通过将VictoriaMetrics作为Prometheus的存储后端,企业可以显著提升监控系统的存储和查询性能,满足大规模数据存储和高并发查询的需求。VictoriaMetrics的主要优势包括高效的数据压缩、快速的数据查询和低资源消耗,使其成为Prometheus理想的存储后端选择。下面,我将着手进行 AutoMQ,Prometheus 以及 VictoriaMetrics 的部署。
前置条件
-
部署一个可用的 AutoMQ 节点/集群,并开放 Metrics 采集端口
-
部署 VictoriaMetrics 作为 Prometheus 的存储后端
-
部署 Prometheus 以获取 Metrics 数据
部署 AutoMQ、VictoriaMetrics、Prometheus
部署 AutoMQ
参考 AutoMQ 文档:集群方式部署 | AutoMQ [5] 。在部署启动前,添加如下配置参数以开启 Prometheus 的拉取接口。通过以下参数启动 AutoMQ 集群以后,每个节点将会额外开放一个 HTTP 接口供我们拉取 AutoMQ 的监控指标。这些指标的格式均遵循 Prometheus Metrics 的格式。
bin/kafka-server-start.sh ...\
--override s3.telemetry.metrics.exporter.type=prometheus \
--override s3.metrics.exporter.prom.host=0.0.0.0 \
--override s3.metrics.exporter.prom.port=8890 \
....
当启用 AutoMQ 监控指标后,可以在任意一台节点上通过 HTTP 协议拉取到 Prometheus 格式的监控指标,地址为:http://{node_ip}:8890
,响应结果示例如下:
....
kafka_request_time_mean_milliseconds{
otel_scope_name=