01 引言
在现代企业中,随着数据处理需求的不断增长,AutoMQ [1] 作为一种高效、低成本的流处理系统,逐渐成为企业实时数据处理的关键组件。然而,随着集群规模的扩大和业务复杂性的增加,确保 AutoMQ 集群的稳定性、高可用性和性能优化变得尤为重要。因此,集成一个强大而全面的监控系统对于维护 AutoMQ 集群的健康运行至关重要。夜莺监控系统(Nightingale)[2] 以其高效的数据采集、灵活的告警管理和丰富的可视化能力,成为企业监控AutoMQ 集群的理想选择。通过使用夜莺监控系统,企业可以实时掌握 AutoMQ 集群的运行状态,及时发现和解决潜在问题,优化系统性能,确保业务的连续性和稳定性。
AutoMQ 概述
AutoMQ 是一种基于云重新设计的流处理系统,它在保持与 Apache Kafka 100% 兼容的前提下,通过将存储分离至对象存储,显著提升了系统的成本效益和弹性能力。具体来说,AutoMQ 通过构建在 S3 上的流存储库 S3Stream,将存储卸载至云厂商提供的共享云存储 EBS 和 S3,提供低成本、低延时、高可用、高可靠和无限容量的流存储能力。与传统的 Shared Nothing 架构相比,AutoMQ 采用了 Shared Storage 架构,显著降低了存储和运维的复杂性,同时提升了系统的弹性和可靠性。AutoMQ 的设计理念和技术优势使其成为替换企业现有 Kafka 集群的理想选择。通过采用 AutoMQ,企业可以显著降低存储成本,简化运维,并实现集群的自动扩缩容和流量自平衡,从而更高效地应对业务需求的变化。此外,AutoMQ 的架构支持高效的冷读操作和服务零中断,确保系统在高负载和突发流量情况下的稳定运行。它的存储结构如下:
AutoMQ 存储结构
夜莺概述
夜莺监控系统(Nightingale)是一款开源的云原生观测分析工具,采用 All-in-One 设计理念,集数据采集、可视化、监控告警和数据分析于一体。其主要优势包括高效的数据采集能力、灵活的告警策略和丰富的可视化功能。夜莺与多种云原生生态紧密集成,支持多种数据源和存储后端,提供低延迟、高可靠性的监控服务。通过使用夜莺,企业可以实现对复杂分布式系统的全面监控和管理,快速定位和解决问题,从而优化系统性能和提高业务连续性。
02 前置条件
为了实现集群状态的监控,你需要如下环境:
- 部署一个可用的 AutoMQ 节点/集群,并开放 Metrics 采集端口
- 部署夜莺监控及其依赖环境
- 部署 Prometheus [4] 以获取 Metrics 数据
03 部署 AutoMQ、Prometheus 以及夜莺监控
部署 AutoMQ
参考 AutoMQ 文档:集群方式部署 | AutoMQ [5] 。在部署启动前,添加如下配置参数以开启 Prometheu 的拉取接口。通过以下参数启动 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="io.opentelemetry.jmx",type="DescribeDelegationToken"} 0.0 1720520709290
kafka_request_time_mean_milliseconds{otel_scope_name="io.opentelemetry.jmx",type="CreatePartitions"} 0.0 1720520709290
...
关于指标介绍,可以参考 AutoMQ 官网文档:Metrics | AutoMQ [6] 。
部署 Prometheus
Prometheus 可以通过下载二进制包部署,也可以通过 Docker 方式部署。以下是这两种部署方式的介绍。
二进制部署
为了方便使用,你可以新建一个脚本,并根据需要修改 Prometheus 的下载版本,最后执行脚本即可完成部署。首先,新建脚本:
cd /home
vim install_prometheus.sh
# !!! 粘贴下面的脚本内容 并保存退出
# 授予权限
chmod +x install_prometheus.sh
# 执行脚本
./install_prometheus.sh
脚本内容如下:
version=2.45.3
filename=prometheus-${version}.linux-amd64
mkdir -p /opt/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v${version}/${filename}.tar.gz
tar xf ${filename}.tar.gz
cp -far ${filename}/* /opt/prometheus/
# config as a service
cat <<EOF >/etc/systemd/system/prometheus.service
[Unit]
Description="prometheus"
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/opt/prometheus/data --web.enable-lifecycle --web.enable-remote-write-receiver
Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=prometheus
[Install]
WantedBy=multi-user.target
EOF
systemctl enable prometheus
systemctl restart prometheus
systemctl status prometheus
随后修改 Prometheus 的配置文件,增加采集 AutoMQ 可观测数据的任务,并<