> ## Documentation Index
> Fetch the complete documentation index at: https://docs.automq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Prometheus

> Optimize AutoMQ's scalability and monitoring with Prometheus and VictoriaMetrics. Ensure efficient Kafka-compatible data processing in cloud-native environments.

## 引言

在现代企业中，随着数据处理需求的不断增长，AutoMQ \[1] 作为一种高效、低成本的流处理系统，逐渐成为企业实时数据处理的关键组件。然而，随着集群规模的扩大和业务复杂性的增加，确保 AutoMQ 集群的稳定性、高可用性和性能优化变得尤为重要。因此，集成一个强大而全面的监控系统对于维护 AutoMQ 集群的健康运行至关重要。[Prometheus ](https://prometheus.io/docs/prometheus/latest/getting_started/)\[2] 以其强大的数据采集和查询能力，成为企业监控 AutoMQ 集群的理想选择。而为了应对 Prometheus 在大规模数据存储上的局限性，[VictoriaMetrics ](https://docs.victoriametrics.com/)\[3] 作为高效的时序数据库存储后端，能够提供更强的存储和查询性能。通过集成 Prometheus 和 VictoriaMetrics，企业可以实现对 AutoMQ 集群的全面监控，确保系统的高可用性和性能优化。

### AutoMQ 概述

AutoMQ 是一种基于云重新设计的流处理系统，它在保持与 Apache Kafka 100%兼容的前提下，通过将存储分离至对象存储，显著提升了系统的成本效益和弹性能力。具体来说，AutoMQ 通过构建在 S3 上的流存储库 S3Stream，将存储卸载至云厂商提供的共享云存储 EBS 和 S3，提供低成本、低延时、高可用、高可靠和无限容量的流存储能力。与传统的 Shared Nothing 架构相比，AutoMQ 采用了 Shared Storage 架构，显著降低了存储和运维的复杂性，同时提升了系统的弹性和可靠性。

AutoMQ 的设计理念和技术优势使其成为替换企业现有 Kafka 集群的理想选择。通过采用 AutoMQ，企业可以显著降低存储成本，简化运维，并实现集群的自动扩缩容和流量自平衡，从而更高效地应对业务需求的变化。此外，AutoMQ 的架构支持高效的冷读操作和服务零中断，确保系统在高负载和突发流量情况下的稳定运行。

<img src="https://mintcdn.com/automq/W0CbTmf8Sq7hHZDS/zh/automq/integrations/observability/prometheus/1.gif?s=c62c30cfa9eb29bcaaab86dc0e82c810" width="1424" height="1642" data-path="zh/automq/integrations/observability/prometheus/1.gif" />

### Prometheus 概述

Prometheus 是一款开源的系统监控和报警工具包，最初由SoundCloud开发，并于2012年开源。它具有强大的数据采集、存储和查询能力，能够实时监控系统和应用的性能指标。Prometheus采用多维数据模型，通过标签对监控数据进行标记和查询，支持灵活的查询语言PromQL。Prometheus的主要优势包括高效的数据采集、强大的查询功能和丰富的报警机制，广泛应用于云原生生态系统中。

然而，Prometheus在大规模数据存储上存在一定的局限性，特别是在长期存储和高并发查询的场景下，存储性能和查询效率可能会受到影响。因此，需要引入一个高效的存储后端来解决这些问题。

### VictoriaMetrics 概述

VictoriaMetrics是一款高性能、开源的时序数据库，专为高并发数据写入和查询而设计。它具有高效的数据压缩和存储能力，能够在低硬件资源消耗的情况下，提供高吞吐量的数据写入和查询性能。VictoriaMetrics支持Prometheus的远程存储接口，可以无缝集成到现有的Prometheus监控体系中。下图是 VictoriaMetrics 的架构图：

<img alt="VictoriaMetrics Structure [4]" src="https://mintcdn.com/automq/kFvm7Lwf3ab0EBuj/zh/automq/integrations/observability/prometheus/2.webp?fit=max&auto=format&n=kFvm7Lwf3ab0EBuj&q=85&s=6d1b332cd7445104e47831b592674d25" width="1080" height="730" data-path="zh/automq/integrations/observability/prometheus/2.webp" />

通过将VictoriaMetrics作为Prometheus的存储后端，企业可以显著提升监控系统的存储和查询性能，满足大规模数据存储和高并发查询的需求。VictoriaMetrics的主要优势包括高效的数据压缩、快速的数据查询和低资源消耗，使其成为Prometheus理想的存储后端选择。下面，我将着手进行 AutoMQ，Prometheus 以及 VictoriaMetrics 的部署。

## 前置条件

* 部署一个可用的 AutoMQ 节点/集群，并开放 Metrics 采集端口

* 部署 VictoriaMetrics 作为 Prometheus 的存储后端

* 部署 Prometheus 以获取 Metrics 数据

## 部署 AutoMQ、VictoriaMetrics、Prometheus

### 部署 AutoMQ

参考 AutoMQ 文档： [Linux 主机部署多节点集群▸](/zh/automq/deployment/deploy-multi-nodes-cluster-on-linux)。在部署启动前，添加如下配置参数以开启 Prometheus 的拉取接口。通过以下参数启动 AutoMQ 集群以后，每个节点将会额外开放一个 HTTP 接口供我们拉取 AutoMQ 的监控指标。这些指标的格式均遵循 Prometheus Metrics 的格式。

```bash theme={null}

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` ，响应结果示例如下：

```text theme={null}

....
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 官网文档：[Prometheus Metrics▸](/zh/automq/observability/prometheus-metrics) 。

### 部署 VictoriaMetrics

参考文档：[VictoriaMetrics](https://docs.victoriametrics.com/?_gl=1*196n44l*_ga*NjU0MDAxODA2LjE3MjE3OTA1NTM.*_ga_N9SVT8S3HK*MTcyMTc5MDU1Mi4xLjAuMTcyMTc5MDU1Mi42MC4wLjA.) \[7]。VictoriaMetrics 支持二进制版本、 Docker 镜像和源代码部署。我们这里选择通过 Docker 进行部署。通过执行下面的命令启动 VictoriaMetrics 容器，并映射数据文件到文件夹 `/home/VictoriaMetrics/data` 下，方便查看数据导入变化：

```bash theme={null}

# 新建data文件夹
sudo mkdir -p /home/VictoriaMetrics/data
# docker 启动命令，挂载数据文件夹
docker run -d --name victoria-metrics \
  -p 8428:8428 \
  -v /home/VictoriaMetrics/data:/victoria-metrics-data \
  victoriametrics/victoria-metrics

```

验证是否安装成功，浏览器访问： `http://{client_ip}:8428`

### 部署 Prometheus

Prometheus 可以通过下载二进制包部署，也可以通过 Docker 方式部署。以下是这两种部署方式的介绍。

#### 二进制部署

为了方便使用，你可以新建一个脚本，并根据需要修改 Prometheus 的下载版本，最后执行脚本即可完成部署。首先，新建脚本：

```bash theme={null}

cd /home
vim install_prometheus.sh
# !!! 粘贴下面的脚本内容 并保存退出
# 授予权限
chmod +x install_prometheus.sh
# 执行脚本
./install_prometheus.sh

```

脚本内容如下：

```bash theme={null}

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 可观测数据的任务** ，并**重启**  Prometheus，执行命令：

```bash theme={null}

# config 配置文件内容填下面的
vim /opt/prometheus/prometheus.yml
# 重启 Prometheus
systemctl restart prometheus

```

**配置文件内容参考如下** ，请将下列中的 `client_ip` 修改为 AutoMQ 开放的可观测数据暴露地址：

```yaml theme={null}

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
      
  - job_name: "automq"
    static_configs:
      - targets: ["{client_ip}:8890"]

# config victoriaMetrics IO port
remote_write:
  - url: "http://{client_ip}:8428/api/v1/write"

remote_read:
  - url: "http://{client_ip}:8428/api/v1/read"

```

部署完成后，我们可以通过浏览器访问 Prometheus，查看是否真正采集到了 AutoMQ 的 Metrics数据，访问 `http://{client_ip}:9090/targets` ：

<img src="https://mintcdn.com/automq/kFvm7Lwf3ab0EBuj/zh/automq/integrations/observability/prometheus/3.webp?fit=max&auto=format&n=kFvm7Lwf3ab0EBuj&q=85&s=29d0a43c415cb3eb871122b0b86a6f2f" width="1920" height="648" data-path="zh/automq/integrations/observability/prometheus/3.webp" />

#### Docker 部署

如果你已经有一个在运行的 Prometheus Docker 容器，请先执行命令删除该容器：

```bash theme={null}

docker stop prometheus
docker rm prometheus

```

新建配置文件，并在 Docker 启动时进行挂载：

```bash theme={null}

mkdir -p /opt/prometheus
vim /opt/prometheus/prometheus.yml
# 配置内容参考上述 “二进制部署” 中的配置

```

启动 Docker 容器：

```bash theme={null}

docker run -d \
  --name=prometheus \
  -p 9090:9090 \
  -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  -m 500m \
  prom/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --enable-feature=otlp-write-receiver \
  --web.enable-remote-write-receiver

```

这样你便得到了一个采集 AutoMQ Metrics 的 Prometheus 服务，关于更多 AutoMQ Metrics 与 Prometheus 集成的介绍，可以参考：[将 Metrics 集成到 Prometheus▸](/zh/automq/observability/integrating-metrics-with-prometheus)\[8]。

## 验证集成结果

### VictoriaMetrics 数据验证

VictoriaMetrics 提供的 DashBorad，可以通过 `http://{client_ip}:8428/vmui` 访问可视化面板，其中基础占用为:

<img src="https://mintcdn.com/automq/kFvm7Lwf3ab0EBuj/zh/automq/integrations/observability/prometheus/4.webp?fit=max&auto=format&n=kFvm7Lwf3ab0EBuj&q=85&s=814278f5c7fc490a1d40d34d7f58be06" width="1920" height="869" data-path="zh/automq/integrations/observability/prometheus/4.webp" />

数据文件验证。通过 data 文件夹发现已经存在了相应的数据文件：

```text theme={null}

root@debian: ls /home/VictoriaMetrics/data/small/2024_07/
17E5088F4DC9C068  17E5088F4DC9C073  17E5088F4DC9C0B3  17E509EE0189D399  17E509EE0189D39C  17E509EE0189D39F  17E509EE0189D3A2  17E509EE0189D3A5
17E5088F4DC9C06A  17E5088F4DC9C075  17E509EE0189D38D  17E509EE0189D39A  17E509EE0189D39D  17E509EE0189D3A0  17E509EE0189D3A3  17E509EE0189D3A6
17E5088F4DC9C071  17E5088F4DC9C07B  17E509EE0189D398  17E509EE0189D39B  17E509EE0189D39E  17E509EE0189D3A1  17E509EE0189D3A4  parts.json

```

通过访问状态  `http://{client_ip}:8428/api/v1/status/tsdb` ，可以得到 Json 文件：

```json theme={null}

 "status": "success",
    "data": {
        "totalSeries": 3125,
        "totalLabelValuePairs": 15564,
        "seriesCountByMetricName": [
            {
                "name": "prometheus_http_request_duration_seconds_bucket",
                "value": 150
            },
            {
                "name": "prometheus_http_response_size_bytes_bucket",
                "value": 135
            },
            {
                "name": "kafka_request_queue_time_50p_milliseconds",
                "value": 90
            },
...............

```

### Grafana 仪表盘（可选）

由于我们已经将 VictoriaMetrics 作为 Prometheus 的存储，因此我们可以将其作为 Grafana 的数据源，即 `http://{client_ip}:8428` ，以此来获取 AutoMQ 集群的状态信息。关于 Grafana 的模板文件，可以参考 AutoMQ 官方模板：[grafana](https://github.com/AutoMQ/automq/tree/main/docker/telemetry/grafana/provisioning/dashboards) \[9]。最终演示效果为：

**Cluster Overview：**  提供了集群级别的监控信息，包括节点数量、数据大小、集群流量等指标。此外，还提供了 Topic、Group、Broker 等维度的概览指标，并支持进一步查看详细监控信息的下钻功能。

<img src="https://mintcdn.com/automq/kFvm7Lwf3ab0EBuj/zh/automq/integrations/observability/prometheus/5.webp?fit=max&auto=format&n=kFvm7Lwf3ab0EBuj&q=85&s=5873e3e375df9a06313edb83d2af9024" width="1280" height="633" data-path="zh/automq/integrations/observability/prometheus/5.webp" />

至此，我们的集成过程就结束了，更多可探索的功能可参考 VictoriaMetrics [官方文档](https://docs.victoriametrics.com/?_gl=1*196n44l*_ga*NjU0MDAxODA2LjE3MjE3OTA1NTM.*_ga_N9SVT8S3HK*MTcyMTc5MDU1Mi4xLjAuMTcyMTc5MDU1Mi42MC4wLjA.) \[10]。

## 总结

通过本文的介绍，我们详细探讨了如何集成 AutoMQ、Prometheus 和 VictoriaMetrics，以实现对 AutoMQ 集群的全面监控。我们首先介绍了每个组件的功能和优势，解释了为什么选择 Prometheus 作为监控系统以及为什么需要 VictoriaMetrics 作为 Prometheus 的存储后端。接着，我们逐步讲解了如何部署和配置 AutoMQ、VictoriaMetrics 和 Prometheus，并验证了集成效果。

通过这种集成方案，企业可以实现以下优势：

1. 高效的数据采集和存储：Prometheus 负责高效的数据采集，而 VictoriaMetrics 提供高效的数据存储和压缩能力，确保系统在低硬件资源消耗的情况下，存储大量时序数据。

2. 快速的数据查询：VictoriaMetrics 提供快速的数据查询性能，能够满足高并发查询的需求，确保在大规模数据存储场景下的高效查询。

3. 无缝集成：VictoriaMetrics 支持 Prometheus 的远程存储接口，可以无缝集成到现有的 Prometheus 监控体系中，提升系统的整体性能和稳定性。

通过这种集成，企业可以实现对 AutoMQ 集群的全面监控，确保系统的高可用性和性能优化，及时发现和解决潜在问题，优化系统性能，确保业务的连续性和稳定性。未来，随着业务需求的不断变化和技术的不断进步，我们还可以进一步探索和优化监控方案，以满足更复杂的应用场景和更高的性能要求。

## 引用

\[1] AutoMQ: [https://www.automq.com/](https://www.automq.com/)

\[2] Prometheus：[https://prometheus.io/docs/prometheus/latest/getting\_started/](https://prometheus.io/docs/prometheus/latest/getting_started/)

\[3] VictoriaMetrics: [https://docs.victoriametrics.com/](https://docs.victoriametrics.com/)

\[4] VictoriaMetrics Structure:  [https://docs.victoriametrics.com/cluster-victoriametrics/](https://docs.victoriametrics.com/cluster-victoriametrics/)

\[5] 集群方式部署 | AutoMQ: [Docker 部署多节点测试集群▸](/zh/automq/getting-started/deploy-multi-nodes-test-cluster-on-docker)

\[6] Metrics | AutoMQ: [Prometheus Metrics▸](/zh/automq/observability/prometheus-metrics)

\[7] VictoriaMetrics 安装文档: [https://docs.victoriametrics.com/](https://docs.victoriametrics.com/)

\[8] 将 Metrics 集成到 Prometheus: [将 Metrics 集成到 Prometheus▸](/zh/automq/observability/integrating-metrics-with-prometheus)

\[9] grafana: [https://github.com/AutoMQ/automq/tree/main/docker/telemetry/grafana/provisioning/dashboards](https://github.com/AutoMQ/automq/tree/main/docker/telemetry/grafana/provisioning/dashboards)

\[10] VictoriaMetrics 官方文档：[https://docs.victoriametrics.com/](https://docs.victoriametrics.com/)
