Repository: apache/skywalking (language: python)

Issue:
[Feature] Support RabbitMQ Server Monitoring
### Search before asking

- [X] I had searched in the [issues](https://github.com/apache/skywalking/issues?q=is%3Aissue) and found no similar feature requirement.


### Description

Support the RabbitMQ server-side monitoring. @innerpeacez had added the menu for this(https://github.com/apache/skywalking-booster-ui/pull/262). He will take the rest.

### Use case

_No response_

### Related issues

_No response_

### Are you willing to submit a PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct)



Discussion / hints:

Fix patch:
diff --git a/.github/workflows/skywalking.yaml b/.github/workflows/skywalking.yaml
index 5a75037ed756..8e2bfcc7bd6c 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -681,6 +681,8 @@ jobs:
             config: test/e2e-v2/cases/redis/redis-exporter/e2e.yaml
           - name: Elasticsearch
             config: test/e2e-v2/cases/elasticsearch/e2e.yaml
+          - name: RabbitMQ
+            config: test/e2e-v2/cases/rabbitmq/e2e.yaml
     steps:
       - uses: actions/checkout@v3
         with:
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index f533cac61bd2..bacc6d4f8ce6 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -44,6 +44,7 @@
 * Add component ID for Grizzly.
 * Fix potential NPE in Zipkin receiver when the `Span` is missing some fields.
 * Filter out unknown_cluster metric data.
+* Support RabbitMQ Monitoring.
 
 #### UI
 * Revert: cpm5d function. This feature is cancelled from backend.
diff --git a/docs/en/setup/backend/backend-rabbitmq-monitoring.md b/docs/en/setup/backend/backend-rabbitmq-monitoring.md
new file mode 100644
index 000000000000..f64a41a189a0
--- /dev/null
+++ b/docs/en/setup/backend/backend-rabbitmq-monitoring.md
@@ -0,0 +1,91 @@
+# RabbitMQ monitoring
+
+SkyWalking leverages `rabbitmq_prometheus` plugin for collecting metrics data from RabbitMQ. It leverages OpenTelemetry
+Collector to transfer the metrics to
+[OpenTelemetry receiver](opentelemetry-receiver.md) and into the [Meter System](./../../concepts-and-designs/meter.md).
+
+## Data flow
+
+1. The `rabbitmq_prometheus` plugin collect metrics data from RabbitMQ. Note: The RabbitMQ version is required to be
+   3.8.0+.
+   The `rabbitmq_prometheus` plugin is built-in since RabbitMQ v3.8.0.
+2. OpenTelemetry Collector fetches metrics from `rabbitmq_prometheus` plugin via Prometheus Receiver and pushes metrics
+   to
+   SkyWalking OAP Server via OpenTelemetry gRPC exporter.
+3. The SkyWalking OAP Server parses the expression with [MAL](../../concepts-and-designs/mal.md) to
+   filter/calculate/aggregate and store the results.
+
+## Setup
+
+1. Setup [rabbitmq_prometheus](https://www.rabbitmq.com/prometheus.html#installation).
+2. Set up [OpenTelemetry Collector ](https://opentelemetry.io/docs/collector/getting-started/#kubernetes). The example
+   for OpenTelemetry Collector configuration, refer
+   to [here](../../../../test/e2e-v2/cases/rabbitmq/otel-collector-config.yaml).
+3. Config SkyWalking [OpenTelemetry receiver](opentelemetry-receiver.md).
+
+## RabbitMQ Monitoring
+
+RabbitMQ monitoring provides multidimensional metrics monitoring of RabbitMQ cluster as `Layer: RABBITMQ` `Service` in
+the OAP. In each cluster, the nodes are represented as `Instance`.
+
+### RabbitMQ Cluster Supported Metrics
+
+| Monitoring Panel                                    | Metric Name                                                  | Description                                                                                                                                                                                                                                                                                  | Data Source                |
+|-----------------------------------------------------|--------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------|
+| Memory Available Before Publishers Blocked (MB)     | meter_rabbitmq_memory_available_before_publisher_blocked     | If the value is zero or less, the memory alarm will be triggered and all publishing connections across all cluster nodes will be blocked.                                                                                                                                                    | rabbitmq_prometheus plugin |
+| Disk Space Available Before Publishers Blocked (GB) | meter_rabbitmq_disk_space_available_before_publisher_blocked | This metric is reported for the partition where the RabbitMQ data directory is stored.                                                                                                                                                                                                       | rabbitmq_prometheus plugin |
+| File Descriptors Available                          | meter_rabbitmq_file_descriptors_available                    | When this value reaches zero, new connections will not be accepted and disk write operations may fail.                                                                                                                                                                                       | rabbitmq_prometheus plugin |
+| TCP Sockets Available                               | meter_rabbitmq_tcp_socket_available                          | When this value reaches zero, new connections will not be accepted.                                                                                                                                                                                                                          | rabbitmq_prometheus plugin |
+| Messages Ready To Be Delivered To Consumers         | meter_rabbitmq_message_ready_delivered_consumers             | Total number of ready messages ready to be delivered to consumers.                                                                                                                                                                                                                           | rabbitmq_prometheus plugin |
+| Messages Pending Consumer Acknowledgement           | meter_rabbitmq_message_unacknowledged_delivered_consumers    | The total number of messages that are either in-flight to consumers, currently being processed by consumers or simply waiting for the consumer acknowledgements to be processed by the queue. Until the queue processes the message acknowledgement, the message will remain unacknowledged. | rabbitmq_prometheus plugin |
+| Messages Published                                  | meter_rabbitmq_messages_published                            | The incoming message rate before any routing rules are applied.                                                                                                                                                                                                                              | rabbitmq_prometheus plugin |
+| Messages Confirmed To Publishers                    | meter_rabbitmq_messages_confirmed                            | The rate of messages confirmed by the broker to publishers. Publishers must opt-in to receive message confirmations.                                                                                                                                                                         | rabbitmq_prometheus plugin |
+| Messages Unconfirmed To Publishers                  | meter_rabbitmq_messages_unconfirmed                          | The rate of messages received from publishers that have publisher confirms enabled and the broker has not confirmed yet.                                                                                                                                                                     | rabbitmq_prometheus plugin |
+| Messages Routed To Queues                           | meter_rabbitmq_messages_routed                               | The rate of messages received from publishers and successfully routed to the master queue replicas.                                                                                                                                                                                          | rabbitmq_prometheus plugin |
+| Unroutable Messages Returned To Publishers          | meter_rabbitmq_messages_unroutable_returned                  | The rate of messages that cannot be routed and are returned back to publishers.                                                                                                                                                                                                              | rabbitmq_prometheus plugin |
+| Unroutable Messages Dropped                         | meter_rabbitmq_messages_unroutable_dropped                   | The rate of messages that cannot be routed and are dropped.                                                                                                                                                                                                                                  | rabbitmq_prometheus plugin |
+| Queues Total                                        | meter_rabbitmq_cluster_relocating_shards_total               | Total number of queue masters per node.                                                                                                                                                                                                                                                      | rabbitmq_prometheus plugin |
+| Queues Declared                                     | meter_rabbitmq_cluster_unassigned_shards_total               | The rate of queue declarations performed by clients.                                                                                                                                                                                                                                         | rabbitmq_prometheus plugin |
+| Queues Created                                      | meter_rabbitmq_cluster_unassigned_shards_total               | The rate of new queues created (as opposed to redeclarations).                                                                                                                                                                                                                               | rabbitmq_prometheus plugin |
+| Queues Deleted                                      | meter_rabbitmq_cluster_unassigned_shards_total               | The rate of queues deleted.                                                                                                                                                                                                                                                                  | rabbitmq_prometheus plugin |
+| Channels Total                                      | meter_rabbitmq_cluster_unassigned_shards_total               | Total number of channels on all currently opened connections.                                                                                                                                                                                                                                | rabbitmq_prometheus plugin |
+| Channels Opened                                     | meter_rabbitmq_cluster_unassigned_shards_total               | The rate of new channels opened by applications across all connections. Channels are expected to be long-lived.                                                                                                                                                                              | rabbitmq_prometheus plugin |
+| Channels Closed                                     | meter_rabbitmq_cluster_unassigned_shards_total               | The rate of channels closed by applications across all connections. Channels are expected to be long-lived.                                                                                                                                                                                  | rabbitmq_prometheus plugin |
+| Connections Total                                   | meter_rabbitmq_cluster_unassigned_shards_total               | Total number of client connections.                                                                                                                                                                                                                                                          | rabbitmq_prometheus plugin |
+| Connections Opened                                  | meter_rabbitmq_cluster_unassigned_shards_total               | The rate of new connections opened by clients. Connections are expected to be long-lived.                                                                                                                                                                                                    | rabbitmq_prometheus plugin |
+| Connections Closed                                  | meter_rabbitmq_cluster_unassigned_shards_total               | The rate of connections closed. Connections are expected to be long-lived.                                                                                                                                                                                                                   | rabbitmq_prometheus plugin |
+
+### RabbitMQ Node Supported Metrics
+
+| Monitoring Panel        | Unit | Metric Name                                                                                                                                         | Description                                                        | Data Source                |
+|-------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|----------------------------|
+| Ready Messages          |      | meter_rabbitmq_node_queue_messages_ready                                                                                                            | Total number of ready messages ready to be delivered to consumers. | rabbitmq_prometheus plugin |
+| Unacknowledged Messages |      | meter_rabbitmq_node_unacknowledged_messages                                                                                                         | Messages delivered to consumers but not yet acknowledged           | rabbitmq_prometheus plugin |
+| Incoming Messages       |      | meter_rabbitmq_node_incoming_messages                                                                                                               | The incoming message rate before any routing rules are applied.    | rabbitmq_prometheus plugin |
+| Outgoing Messages       |      | meter_rabbitmq_node_outgoing_messages_total                                                                                                         | The outgoing message rate before any routing rules are applied.    | rabbitmq_prometheus plugin |
+| Publishers              |      | meter_rabbitmq_node_publisher_total                                                                                                                 | Publishers                                                         | rabbitmq_prometheus plugin |
+| Consumers               |      | meter_rabbitmq_node_consumer_total                                                                                                                  | Consumers currently connect                                        | rabbitmq_prometheus plugin |
+| Collections             |      | meter_rabbitmq_node_connections_total                                                                                                               | Connections currently open                                         | rabbitmq_prometheus plugin |
+| Channels                |      | meter_rabbitmq_node_channel_total                                                                                                                   | Channels currently open                                            | rabbitmq_prometheus plugin |
+| Queues                  |      | meter_rabbitmq_node_queue_total                                                                                                                     | Queues available                                                   | rabbitmq_prometheus plugin |
+| Allocated Used          | %    | meter_rabbitmq_node_allocated_used_percent                                                                                                          | Erlang VM memory utilisation from erts_alloc perspective           | rabbitmq_prometheus plugin |
+| Allocated Unused        | %    | meter_rabbitmq_node_allocated_unused_percent                                                                                                        | Erlang VM memory utilisation from erts_alloc perspective           | rabbitmq_prometheus plugin |
+| Allocated Used          | MB   | meter_rabbitmq_node_allocated_used_bytes                                                                                                            | Erlang VM memory utilisation from erts_alloc perspective           | rabbitmq_prometheus plugin |
+| Allocated Unused        | MB   | meter_rabbitmq_node_allocated_unused_bytes                                                                                                          | Erlang VM memory utilisation from erts_alloc perspective           | rabbitmq_prometheus plugin |
+| Allocated Total         | MB   | meter_rabbitmq_node_allocated_total_bytes                                                                                                           | Erlang VM memory utilisation from erts_alloc perspective           | rabbitmq_prometheus plugin |
+| Resident Set Size       | MB   | meter_rabbitmq_node_process_resident_memory_bytes                                                                                                   | Erlang VM Resident Set Size (RSS) As reported by the OS            | rabbitmq_prometheus plugin |
+| Allocators              | MB   | meter_rabbitmq_node_allocated_unused_bytes <br />meter_rabbitmq_node_allocated_total_bytes <br /> meter_rabbitmq_node_process_resident_memory_bytes |                                                                    | rabbitmq_prometheus plugin |
+| Allocated By Type       | MB   | meter_rabbitmq_node_allocated_by_type                                                                                                               | Allocated by allocator type                                        | rabbitmq_prometheus plugin |
+| Multiblock Used         | MB   | meter_rabbitmq_node_allocated_multiblock_used                                                                                                       | Multi block used                                                   | rabbitmq_prometheus plugin |
+| Multiblock Unused       | MB   | meter_rabbitmq_node_allocated_multiblock_unused                                                                                                     | Multi block used                                                   | rabbitmq_prometheus plugin |
+| Multiblock Pool Used    | MB   | meter_rabbitmq_node_allocated_multiblock_pool_used                                                                                                  | Multi block pool used                                              | rabbitmq_prometheus plugin |
+| Multiblock Pool Unused  | MB   | meter_rabbitmq_node_allocated_multiblock_pool_unused                                                                                                | Multi block pool unused                                            | rabbitmq_prometheus plugin |
+| Singleblock Used        | MB   | meter_rabbitmq_node_allocated_singleblock_used                                                                                                      | Single block used                                                  | rabbitmq_prometheus plugin |
+| Singleblock Unused      | MB   | meter_rabbitmq_node_allocated_singleblock_unused                                                                                                    | Single block unused                                                | rabbitmq_prometheus plugin |
+
+## Customizations
+
+You can customize your own metrics/expression/dashboard panel.
+The metrics definition and expression rules are found
+in `/config/otel-rules/rabbitmq/rabbitmq-cluster.yaml，/config/otel-rules/rabbitmq/rabbitmq-node.yaml`.
+The RabbitMQ dashboard panel configurations are found in `/config/ui-initialized-templates/rabbitmq`.
diff --git a/docs/menu.yml b/docs/menu.yml
index e3b04bd858a6..25b93f08a1c6 100644
--- a/docs/menu.yml
+++ b/docs/menu.yml
@@ -235,6 +235,10 @@ catalog:
                 path: "/en/setup/backend/backend-redis-monitoring"
               - name: "Elasticsearch"
                 path: "/en/setup/backend/backend-elasticsearch-monitoring"
+          - name: "MQ Monitoring"
+            catalog:
+              - name: "RabbitMQ"
+                path: "/en/setup/backend/backend-rabbitmq-monitoring"
           - name: "Self Observability"
             catalog:
               - name: "OAP self telemetry"
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
index 68d7abd0c0bc..babc65114832 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
@@ -166,17 +166,23 @@ public enum Layer {
      */
     AWS_GATEWAY(26, true),
 
-    /*
+    /**
      * Redis is an open source (BSD licensed), in-memory data structure store,
      * used as a database, cache, and message broker.
      */
     REDIS(27, true),
 
-    /*
+    /**
      * Elasticsearch is a distributed, open source search and analytics engine for all types of data,
      * including textual, numerical, geospatial, structured, and unstructured.
      */
-    ELASTICSEARCH(28, true);
+    ELASTICSEARCH(28, true),
+
+    /**
+     * RabbitMQ is one of the most popular open source message brokers. RabbitMQ is lightweight and easy to deploy
+     * on premises and in the cloud. It supports multiple messaging protocols.
+     */
+    RABBITMQ(29, true);
 
     private final int value;
     /**
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
index 8986e7f8f466..75192555411f 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
@@ -67,6 +67,7 @@ public class UITemplateInitializer {
         Layer.AWS_GATEWAY.name(),
         Layer.REDIS.name(),
         Layer.ELASTICSEARCH.name(),
+        Layer.RABBITMQ.name(),
         "custom"
     };
     private final UITemplateManagementService uiTemplateManagementService;
diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml
index ca4512dde923..aaaa25a52d8c 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -332,7 +332,7 @@ receiver-otel:
   selector: ${SW_OTEL_RECEIVER:default}
   default:
     enabledHandlers: ${SW_OTEL_RECEIVER_ENABLED_HANDLERS:"otlp"}
-    enabledOtelRules: ${SW_OTEL_RECEIVER_ENABLED_OTEL_RULES:"apisix,k8s/*,istio-controlplane,vm,mysql/*,postgresql/*,oap,aws-eks/*,windows,aws-s3/*,aws-dynamodb/*,aws-gateway/*,redis/*,elasticsearch/*"}
+    enabledOtelRules: ${SW_OTEL_RECEIVER_ENABLED_OTEL_RULES:"apisix,k8s/*,istio-controlplane,vm,mysql/*,postgresql/*,oap,aws-eks/*,windows,aws-s3/*,aws-dynamodb/*,aws-gateway/*,redis/*,elasticsearch/*,rabbitmq/*"}
 
 receiver-zipkin:
   selector: ${SW_RECEIVER_ZIPKIN:-}
diff --git a/oap-server/server-starter/src/main/resources/otel-rules/rabbitmq/rabbitmq-cluster.yaml b/oap-server/server-starter/src/main/resources/otel-rules/rabbitmq/rabbitmq-cluster.yaml
new file mode 100644
index 000000000000..9ac04d9ac75b
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/otel-rules/rabbitmq/rabbitmq-cluster.yaml
@@ -0,0 +1,86 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This will parse a textual representation of a duration. The formats
+# accepted are based on the ISO-8601 duration format {@code PnDTnHnMn.nS}
+# with days considered to be exactly 24 hours.
+# <p>
+# Examples:
+# <pre>
+#    "PT20.345S" -- parses as "20.345 seconds"
+#    "PT15M"     -- parses as "15 minutes" (where a minute is 60 seconds)
+#    "PT10H"     -- parses as "10 hours" (where an hour is 3600 seconds)
+#    "P2D"       -- parses as "2 days" (where a day is 24 hours or 86400 seconds)
+#    "P2DT3H4M"  -- parses as "2 days, 3 hours and 4 minutes"
+#    "P-6H3M"    -- parses as "-6 hours and +3 minutes"
+#    "-P6H3M"    -- parses as "-6 hours and -3 minutes"
+#    "-P-6H+3M"  -- parses as "+6 hours and -3 minutes"
+# </pre>
+filter: "{ tags -> tags.job_name == 'rabbitmq-monitoring' }" # The OpenTelemetry job name
+expSuffix: tag({tags -> tags.cluster = 'rabbitmq::' + tags.cluster}).service(['cluster'], Layer.RABBITMQ)
+metricPrefix: meter_rabbitmq
+metricsRules:
+  - name: memory_available_before_publisher_blocked
+    exp: rabbitmq_resident_memory_limit_bytes.sum(['cluster', 'node']) - rabbitmq_process_resident_memory_bytes.sum(['cluster', 'node'])
+  - name: disk_space_available_before_publisher_blocked
+    exp: rabbitmq_disk_space_available_bytes.sum(['cluster', 'node'])
+  - name: file_descriptors_available
+    exp: rabbitmq_process_max_fds.sum(['cluster', 'node']) - rabbitmq_process_open_fds.sum(['cluster', 'node'])
+  - name: tcp_socket_available
+    exp: rabbitmq_process_max_tcp_sockets.sum(['cluster', 'node']) - rabbitmq_process_open_tcp_sockets.sum(['cluster', 'node'])
+
+  - name: message_ready_delivered_consumers
+    exp: rabbitmq_queue_messages_ready.sum(['cluster', 'node'])
+  - name: message_unacknowledged_delivered_consumers
+    exp: rabbitmq_queue_messages_unacked.sum(['cluster', 'node'])
+
+  - name: messages_published
+    exp: rabbitmq_global_messages_received_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: messages_confirmed
+    exp: rabbitmq_global_messages_confirmed_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: messages_routed
+    exp: rabbitmq_global_messages_routed_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: messages_unconfirmed
+    exp: rabbitmq_global_messages_received_confirm_total.sum(['cluster', 'node']).rate('PT1M') - rabbitmq_global_messages_confirmed_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: messages_unroutable_dropped
+    exp: rabbitmq_global_messages_unroutable_dropped_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: messages_unroutable_returned
+    exp: rabbitmq_global_messages_unroutable_returned_total.sum(['cluster', 'node']).rate('PT1M')
+
+  # queues
+  - name: queues
+    exp: rabbitmq_queues.sum(['cluster', 'node'])
+  - name: queues_declared_total
+    exp: rabbitmq_queues_declared_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: queues_created_total
+    exp: rabbitmq_queues_created_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: queues_deleted_total
+    exp: rabbitmq_queues_deleted_total.sum(['cluster', 'node']).rate('PT1M')
+
+  # channels
+  - name: channels
+    exp: rabbitmq_channels.sum(['cluster', 'node'])
+  - name: channels_opened_total
+    exp: rabbitmq_channels_opened_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: channels_closed_total
+    exp: rabbitmq_channels_closed_total.sum(['cluster', 'node']).rate('PT1M')
+
+  # connections
+  - name: connections
+    exp: rabbitmq_connections.sum(['cluster', 'node'])
+  - name: connections_opened_total
+    exp: rabbitmq_connections_opened_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: connections_closed_total
+    exp: rabbitmq_connections_closed_total.sum(['cluster', 'node']).rate('PT1M')
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/otel-rules/rabbitmq/rabbitmq-node.yaml b/oap-server/server-starter/src/main/resources/otel-rules/rabbitmq/rabbitmq-node.yaml
new file mode 100644
index 000000000000..c1edc7380d73
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/otel-rules/rabbitmq/rabbitmq-node.yaml
@@ -0,0 +1,80 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This will parse a textual representation of a duration. The formats
+# accepted are based on the ISO-8601 duration format {@code PnDTnHnMn.nS}
+# with days considered to be exactly 24 hours.
+# <p>
+# Examples:
+# <pre>
+#    "PT20.345S" -- parses as "20.345 seconds"
+#    "PT15M"     -- parses as "15 minutes" (where a minute is 60 seconds)
+#    "PT10H"     -- parses as "10 hours" (where an hour is 3600 seconds)
+#    "P2D"       -- parses as "2 days" (where a day is 24 hours or 86400 seconds)
+#    "P2DT3H4M"  -- parses as "2 days, 3 hours and 4 minutes"
+#    "P-6H3M"    -- parses as "-6 hours and +3 minutes"
+#    "-P6H3M"    -- parses as "-6 hours and -3 minutes"
+#    "-P-6H+3M"  -- parses as "+6 hours and -3 minutes"
+# </pre>
+filter: "{ tags -> tags.job_name == 'rabbitmq-monitoring' }" # The OpenTelemetry job name
+expSuffix: tag({tags -> tags.cluster = 'rabbitmq::' + tags.cluster}).instance(['cluster'], ['node'], Layer.RABBITMQ)
+metricPrefix: meter_rabbitmq_node
+metricsRules:
+  - name: queue_messages_ready
+    exp: rabbitmq_queue_messages_ready.sum(['cluster', 'node'])
+  - name: incoming_messages
+    exp: rabbitmq_global_messages_received_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: publisher_total
+    exp: rabbitmq_channels.sum(['cluster', 'node']) - rabbitmq_channel_consumers.sum(['cluster', 'node'])
+  - name: connections_total
+    exp: rabbitmq_connections.sum(['cluster', 'node'])
+  - name: queue_total
+    exp: rabbitmq_queues.sum(['cluster', 'node'])
+  - name: unacknowledged_messages
+    exp: rabbitmq_queue_messages_unacked.sum(['cluster', 'node'])
+  - name: outgoing_messages_total
+    exp: rabbitmq_global_messages_redelivered_total.sum(['cluster', 'node']).rate('PT1M') + rabbitmq_global_messages_delivered_consume_auto_ack_total.sum(['cluster', 'node']).rate('PT1M') + rabbitmq_global_messages_delivered_consume_manual_ack_total.sum(['cluster', 'node']).rate('PT1M') + rabbitmq_global_messages_delivered_get_auto_ack_total.sum(['cluster', 'node']).rate('PT1M') + rabbitmq_global_messages_delivered_get_auto_ack_total.sum(['cluster', 'node']).rate('PT1M') + rabbitmq_global_messages_delivered_get_manual_ack_total.sum(['cluster', 'node']).rate('PT1M')
+  - name: consumer_total
+    exp: rabbitmq_consumers.sum(['cluster', 'node'])
+  - name: channel_total
+    exp: rabbitmq_channels.sum(['cluster', 'node'])
+
+  - name: allocated_used_percent
+    exp: erlang_vm_allocators.tagEqual('usage' , 'blocks_size').sum(['cluster', 'node']) / erlang_vm_allocators.tagEqual('usage' , 'carriers_size').sum(['cluster', 'node']) * 10000
+  - name: allocated_unused_percent
+    exp: (erlang_vm_allocators.tagEqual('usage' , 'carriers_size').sum(['cluster', 'node']) - erlang_vm_allocators.tagEqual('usage' , 'blocks_size').sum(['cluster', 'node'])) / erlang_vm_allocators.tagEqual('usage' , 'carriers_size').sum(['cluster', 'node']) * 10000
+  - name: allocated_used_bytes
+    exp: erlang_vm_allocators.tagEqual('usage' , 'blocks_size').sum(['cluster', 'node'])
+  - name: allocated_unused_bytes
+    exp: erlang_vm_allocators.tagEqual('usage' , 'carriers_size').sum(['cluster', 'node']) - erlang_vm_allocators.tagEqual('usage' , 'blocks_size').sum(['cluster', 'node'])
+  - name: allocated_total_bytes
+    exp: erlang_vm_allocators.tagEqual('usage' , 'carriers_size').sum(['cluster', 'node'])
+  - name: process_resident_memory_bytes
+    exp: rabbitmq_process_resident_memory_bytes.sum(['cluster', 'node'])
+
+  - name: allocated_by_type
+    exp: erlang_vm_allocators.tagEqual('usage' , 'carriers_size').sum(['cluster', 'node', 'alloc'])
+  - name: allocated_multiblock_used
+    exp: erlang_vm_allocators.tagEqual('usage' , 'blocks_size' , 'kind', 'mbcs').sum(['cluster', 'node', 'alloc'])
+  - name: allocated_multiblock_unused
+    exp: erlang_vm_allocators.tagEqual('usage' , 'carriers_size' , 'kind', 'mbcs').sum(['cluster', 'node', 'alloc'])
+  - name: allocated_multiblock_pool_used
+    exp: erlang_vm_allocators.tagEqual('usage' , 'blocks_size' , 'kind', 'mbcs_pool').sum(['cluster', 'node', 'alloc'])
+  - name: allocated_multiblock_pool_unused
+    exp: erlang_vm_allocators.tagEqual('usage' , 'carriers_size' , 'kind', 'mbcs_pool').sum(['cluster', 'node', 'alloc'])
+  - name: allocated_singleblock_used
+    exp: erlang_vm_allocators.tagEqual('usage' , 'blocks_size' , 'kind', 'mbcs').sum(['cluster', 'node', 'alloc'])
+  - name: allocated_singleblock_unused
+    exp: erlang_vm_allocators.tagEqual('usage' , 'carriers_size' , 'kind', 'mbcs').sum(['cluster', 'node', 'alloc'])
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-cluster.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-cluster.json
new file mode 100644
index 000000000000..b7f4cc760f3f
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-cluster.json
@@ -0,0 +1,683 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+[
+  {
+    "id": "RabbitMQ-Cluster",
+    "configuration": {
+      "children":[
+        {
+          "x":0,
+          "y":0,
+          "w":24,
+          "h":59,
+          "i":"16",
+          "type":"Tab",
+          "children":[
+            {
+              "name":"Overview",
+              "children":[
+                {
+                  "x":0,
+                  "y":0,
+                  "w":6,
+                  "h":12,
+                  "i":"13",
+                  "type":"Widget",
+                  "id":"16-0-13",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_memory_available_before_publisher_blocked"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "metricConfig":[
+                    {
+                      "calculation":"byteToMB"
+                    }
+                  ],
+                  "widget":{
+                    "title":"Memory Available Before Publishers Blocked (MB)"
+                  }
+                },
+                {
+                  "x":6,
+                  "y":0,
+                  "w":6,
+                  "h":12,
+                  "i":"14",
+                  "type":"Widget",
+                  "id":"16-0-14",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_disk_space_available_before_publisher_blocked"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "metricConfig":[
+                    {
+                      "calculation":"byteToGB"
+                    }
+                  ],
+                  "widget":{
+                    "title":"Disk Space Available Before Publishers Blocked (GB)"
+                  }
+                },
+                {
+                  "x":0,
+                  "y":12,
+                  "w":12,
+                  "h":12,
+                  "i":"15",
+                  "type":"Widget",
+                  "id":"16-0-15",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_message_ready_delivered_consumers"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Messages Ready To Be Delivered To Consumers"
+                  }
+                },
+                {
+                  "x":12,
+                  "y":12,
+                  "w":12,
+                  "h":12,
+                  "i":"16",
+                  "type":"Widget",
+                  "id":"16-0-16",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_message_unacknowledged_delivered_consumers"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Messages Pending Consumer Acknowledgement"
+                  }
+                },
+                {
+                  "x":12,
+                  "y":0,
+                  "w":6,
+                  "h":12,
+                  "i":"17",
+                  "type":"Widget",
+                  "id":"16-0-17",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_file_descriptors_available"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"File Descriptors Available",
+                    "tips":"File descriptor count and limit, as reported by the operating system. The count includes network sockets and file handles."
+                  }
+                },
+                {
+                  "x":18,
+                  "y":0,
+                  "w":6,
+                  "h":12,
+                  "i":"18",
+                  "type":"Widget",
+                  "id":"16-0-18",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_tcp_socket_available"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"TCP Sockets Available",
+                    "tips":"The network sockets count and limit managed by RabbitMQ. When the limit is exhausted RabbitMQ will stop accepting new network connections."
+                  }
+                },
+                {
+                  "x":0,
+                  "y":24,
+                  "w":8,
+                  "h":12,
+                  "i":"19",
+                  "type":"Widget",
+                  "id":"16-0-19",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_messages_published"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Messages Published"
+                  }
+                },
+                {
+                  "x":8,
+                  "y":24,
+                  "w":8,
+                  "h":12,
+                  "i":"20",
+                  "type":"Widget",
+                  "id":"16-0-20",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_messages_confirmed"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Messages Confirmed To Publishers"
+                  }
+                },
+                {
+                  "x":0,
+                  "y":36,
+                  "w":8,
+                  "h":12,
+                  "i":"21",
+                  "type":"Widget",
+                  "id":"16-0-21",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_messages_routed"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Messages Routed To Queues"
+                  }
+                },
+                {
+                  "x":16,
+                  "y":24,
+                  "w":8,
+                  "h":12,
+                  "i":"22",
+                  "type":"Widget",
+                  "id":"16-0-22",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_messages_unconfirmed"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Messages Unconfirmed To Publishers"
+                  }
+                },
+                {
+                  "x":16,
+                  "y":36,
+                  "w":8,
+                  "h":12,
+                  "i":"23",
+                  "type":"Widget",
+                  "id":"16-0-23",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_messages_unroutable_dropped"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Unroutable Messages Dropped"
+                  }
+                },
+                {
+                  "x":8,
+                  "y":36,
+                  "w":8,
+                  "h":12,
+                  "i":"24",
+                  "type":"Widget",
+                  "id":"16-0-24",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_messages_unroutable_returned"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Unroutable Messages Returned To Publishers"
+                  }
+                },
+                {
+                  "x":0,
+                  "y":48,
+                  "w":6,
+                  "h":12,
+                  "i":"25",
+                  "type":"Widget",
+                  "id":"16-0-25",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_queues"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Queues Total"
+                  }
+                },
+                {
+                  "x":18,
+                  "y":48,
+                  "w":6,
+                  "h":12,
+                  "i":"26",
+                  "type":"Widget",
+                  "id":"16-0-26",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_queues_deleted_total"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Queues Deleted"
+                  }
+                },
+                {
+                  "x":6,
+                  "y":48,
+                  "w":6,
+                  "h":12,
+                  "i":"27",
+                  "type":"Widget",
+                  "id":"16-0-27",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_queues_declared_total"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Queues Declared"
+                  }
+                },
+                {
+                  "x":12,
+                  "y":48,
+                  "w":6,
+                  "h":12,
+                  "i":"28",
+                  "type":"Widget",
+                  "id":"16-0-28",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_queues_created_total"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Queues Created"
+                  }
+                },
+                {
+                  "x":0,
+                  "y":60,
+                  "w":8,
+                  "h":12,
+                  "i":"29",
+                  "type":"Widget",
+                  "id":"16-0-29",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_channels"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Channels Total"
+                  }
+                },
+                {
+                  "x":8,
+                  "y":60,
+                  "w":8,
+                  "h":12,
+                  "i":"30",
+                  "type":"Widget",
+                  "id":"16-0-30",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_channels_opened_total"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Channels Opened"
+                  }
+                },
+                {
+                  "x":16,
+                  "y":60,
+                  "w":8,
+                  "h":12,
+                  "i":"31",
+                  "type":"Widget",
+                  "id":"16-0-31",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_channels_closed_total"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Channels Closed"
+                  }
+                },
+                {
+                  "x":16,
+                  "y":72,
+                  "w":8,
+                  "h":12,
+                  "i":"32",
+                  "type":"Widget",
+                  "id":"16-0-32",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_connections_closed_total"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Connections Closed"
+                  }
+                },
+                {
+                  "x":0,
+                  "y":72,
+                  "w":8,
+                  "h":12,
+                  "i":"33",
+                  "type":"Widget",
+                  "id":"16-0-33",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_connections"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Connections Total"
+                  }
+                },
+                {
+                  "x":8,
+                  "y":72,
+                  "w":8,
+                  "h":12,
+                  "i":"34",
+                  "type":"Widget",
+                  "id":"16-0-34",
+                  "metricTypes":[
+                    "readLabeledMetricsValues"
+                  ],
+                  "metrics":[
+                    "meter_rabbitmq_connections_opened_total"
+                  ],
+                  "moved":false,
+                  "graph":{
+                    "type":"Line",
+                    "step":false,
+                    "smooth":false,
+                    "showSymbol":true,
+                    "showXAxis":true,
+                    "showYAxis":true
+                  },
+                  "widget":{
+                    "title":"Connections Opened"
+                  }
+                }
+              ]
+            },
+            {
+              "name":"Node",
+              "children":[
+                {
+                  "x":0,
+                  "y":0,
+                  "w":24,
+                  "h":48,
+                  "i":"0",
+                  "type":"Widget",
+                  "graph":{
+                    "type":"InstanceList",
+                    "dashboardName":"RabbitMQ-Node",
+                    "fontSize":12
+                  },
+                  "metrics":[
+
+                  ],
+                  "metricTypes":[
+
+                  ],
+                  "metricConfig":[
+
+                  ],
+                  "id":"16-1-0"
+                }
+              ]
+            }
+          ],
+          "id":"16",
+          "activedTabIndex":0,
+          "moved":false
+        }
+      ],
+      "layer":"RABBITMQ",
+      "entity":"Service",
+      "name":"RabbitMQ-Cluster",
+      "id":"RabbitMQ-Cluster",
+      "isRoot":false
+    }
+  }
+]
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-node.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-node.json
new file mode 100644
index 000000000000..3e89b5194432
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-node.json
@@ -0,0 +1,712 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+[
+  {
+    "id": "RabbitMQ-Node",
+    "configuration": {
+      "children":[
+        {
+          "x":0,
+          "y":0,
+          "w":3,
+          "h":6,
+          "i":"8",
+          "type":"Widget",
+          "id":"8",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_queue_messages_ready"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Ready Messages"
+          }
+        },
+        {
+          "x":6,
+          "y":0,
+          "w":3,
+          "h":6,
+          "i":"10",
+          "type":"Widget",
+          "id":"10",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_incoming_messages"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Incoming Messages"
+          }
+        },
+        {
+          "x":3,
+          "y":0,
+          "w":3,
+          "h":6,
+          "i":"11",
+          "type":"Widget",
+          "id":"11",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_unacknowledged_messages"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Unacknowledged Messages"
+          }
+        },
+        {
+          "x":9,
+          "y":0,
+          "w":3,
+          "h":6,
+          "i":"12",
+          "type":"Widget",
+          "id":"12",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_outgoing_messages_total"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Outgoing Messages"
+          }
+        },
+        {
+          "x":18,
+          "y":0,
+          "w":2,
+          "h":6,
+          "i":"13",
+          "type":"Widget",
+          "id":"13",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_connections_total"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Collections"
+          }
+        },
+        {
+          "x":12,
+          "y":0,
+          "w":3,
+          "h":6,
+          "i":"14",
+          "type":"Widget",
+          "id":"14",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_publisher_total"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Publishers"
+          }
+        },
+        {
+          "x":15,
+          "y":0,
+          "w":3,
+          "h":6,
+          "i":"15",
+          "type":"Widget",
+          "id":"15",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_consumer_total"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Consumers"
+          }
+        },
+        {
+          "x":20,
+          "y":0,
+          "w":2,
+          "h":6,
+          "i":"16",
+          "type":"Widget",
+          "id":"16",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_channel_total"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Channels"
+          }
+        },
+        {
+          "x":22,
+          "y":0,
+          "w":2,
+          "h":6,
+          "i":"17",
+          "type":"Widget",
+          "id":"17",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_queue_total"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Queues"
+          }
+        },
+        {
+          "x":0,
+          "y":6,
+          "w":4,
+          "h":5,
+          "i":"0",
+          "type":"Widget",
+          "id":"0",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_used_percent"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Allocated Used"
+          },
+          "metricConfig":[
+            {
+              "unit":"%",
+              "calculation":"percentage"
+            }
+          ]
+        },
+        {
+          "x":8,
+          "y":6,
+          "w":4,
+          "h":5,
+          "i":"1",
+          "type":"Widget",
+          "id":"1",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_used_bytes"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Allocated Used"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB",
+              "unit":"MB"
+            }
+          ]
+        },
+        {
+          "x":12,
+          "y":6,
+          "w":4,
+          "h":5,
+          "i":"2",
+          "type":"Widget",
+          "id":"2",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_unused_bytes"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Allocated Unused"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB",
+              "unit":"MB"
+            }
+          ]
+        },
+        {
+          "x":20,
+          "y":6,
+          "w":4,
+          "h":5,
+          "i":"3",
+          "type":"Widget",
+          "id":"3",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_process_resident_memory_bytes"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Resident Set Size"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB",
+              "unit":"MB"
+            }
+          ]
+        },
+        {
+          "x":4,
+          "y":6,
+          "w":4,
+          "h":5,
+          "i":"4",
+          "type":"Widget",
+          "id":"4",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_unused_percent"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Allocated Unused"
+          },
+          "metricConfig":[
+            {
+              "unit":"%",
+              "calculation":"percentage"
+            }
+          ]
+        },
+        {
+          "x":16,
+          "y":6,
+          "w":4,
+          "h":5,
+          "i":"5",
+          "type":"Widget",
+          "id":"5",
+          "metricTypes":[
+            "readMetricsValue"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_total_bytes"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Card",
+            "fontSize":14,
+            "textAlign":"center",
+            "showUnit":true
+          },
+          "widget":{
+            "title":"Allocated Total"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB",
+              "unit":"MB"
+            }
+          ]
+        },
+        {
+          "x":0,
+          "y":11,
+          "w":12,
+          "h":14,
+          "i":"6",
+          "type":"Widget",
+          "id":"6",
+          "metricTypes":[
+            "readMetricsValues",
+            "readMetricsValues",
+            "readMetricsValues",
+            "readMetricsValues"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_used_bytes",
+            "meter_rabbitmq_node_allocated_unused_bytes",
+            "meter_rabbitmq_node_process_resident_memory_bytes"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Line",
+            "step":false,
+            "smooth":false,
+            "showSymbol":true,
+            "showXAxis":true,
+            "showYAxis":true
+          },
+          "widget":{
+            "title":"Allocators (MB)"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB",
+              "label":"allocated_used"
+            },
+            {
+              "calculation":"byteToMB",
+              "label":"allocated_unused"
+            },
+            {
+              "calculation":"byteToMB",
+              "label":"resident_set_size"
+            }
+          ]
+        },
+        {
+          "x":12,
+          "y":11,
+          "w":12,
+          "h":14,
+          "i":"7",
+          "type":"Widget",
+          "id":"7",
+          "metricTypes":[
+            "readLabeledMetricsValues"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_by_type"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Line",
+            "step":false,
+            "smooth":false,
+            "showSymbol":true,
+            "showXAxis":true,
+            "showYAxis":true
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB"
+            }
+          ],
+          "widget":{
+            "title":"Allocated By Type (MB)"
+          }
+        },
+        {
+          "x":0,
+          "y":25,
+          "w":8,
+          "h":14,
+          "i":"18",
+          "type":"Widget",
+          "id":"18",
+          "metricTypes":[
+            "readLabeledMetricsValues"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_multiblock_used"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Line",
+            "step":false,
+            "smooth":false,
+            "showSymbol":true,
+            "showXAxis":true,
+            "showYAxis":true
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB"
+            }
+          ],
+          "widget":{
+            "title":"Multiblock Used （MB）"
+          }
+        },
+        {
+          "x":0,
+          "y":39,
+          "w":8,
+          "h":14,
+          "i":"19",
+          "type":"Widget",
+          "id":"19",
+          "metricTypes":[
+            "readLabeledMetricsValues"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_multiblock_unused"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Line",
+            "step":false,
+            "smooth":false,
+            "showSymbol":true,
+            "showXAxis":true,
+            "showYAxis":true
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB"
+            }
+          ],
+          "widget":{
+            "title":"Multiblock Unused (MB)"
+          }
+        },
+        {
+          "x":8,
+          "y":25,
+          "w":8,
+          "h":14,
+          "i":"20",
+          "type":"Widget",
+          "id":"20",
+          "metricTypes":[
+            "readLabeledMetricsValues"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_multiblock_pool_used"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Line",
+            "step":false,
+            "smooth":false,
+            "showSymbol":true,
+            "showXAxis":true,
+            "showYAxis":true
+          },
+          "widget":{
+            "title":"Multiblock Pool Used (MB)"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB",
+              "unit":""
+            }
+          ]
+        },
+        {
+          "x":8,
+          "y":39,
+          "w":8,
+          "h":14,
+          "i":"21",
+          "type":"Widget",
+          "id":"21",
+          "metricTypes":[
+            "readLabeledMetricsValues"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_multiblock_pool_unused"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Line",
+            "step":false,
+            "smooth":false,
+            "showSymbol":true,
+            "showXAxis":true,
+            "showYAxis":true
+          },
+          "widget":{
+            "title":"Multiblock Pool Unused (MB)"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB"
+            }
+          ]
+        },
+        {
+          "x":16,
+          "y":25,
+          "w":8,
+          "h":14,
+          "i":"22",
+          "type":"Widget",
+          "id":"22",
+          "metricTypes":[
+            "readLabeledMetricsValues"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_singleblock_used"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Line",
+            "step":false,
+            "smooth":false,
+            "showSymbol":true,
+            "showXAxis":true,
+            "showYAxis":true
+          },
+          "widget":{
+            "title":"Singleblock Used (MB)"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB"
+            }
+          ]
+        },
+        {
+          "x":16,
+          "y":39,
+          "w":8,
+          "h":14,
+          "i":"23",
+          "type":"Widget",
+          "id":"23",
+          "metricTypes":[
+            "readLabeledMetricsValues"
+          ],
+          "metrics":[
+            "meter_rabbitmq_node_allocated_singleblock_unused"
+          ],
+          "moved":false,
+          "graph":{
+            "type":"Line",
+            "step":false,
+            "smooth":false,
+            "showSymbol":true,
+            "showXAxis":true,
+            "showYAxis":true
+          },
+          "widget":{
+            "title":"Singleblock Unused (MB)"
+          },
+          "metricConfig":[
+            {
+              "calculation":"byteToMB"
+            }
+          ]
+        }
+      ],
+      "layer":"RABBITMQ",
+      "entity":"ServiceInstance",
+      "name":"RabbitMQ-Node",
+      "id":"RabbitMQ-Node"
+    }
+  }
+]
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-root.json
new file mode 100644
index 000000000000..fe9894d33452
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/rabbitmq/rabbitmq-root.json
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+[
+  {
+    "id": "RabbitMQ-Root",
+    "configuration": {
+      "children": [
+        {
+          "x": 0,
+          "y": 0,
+          "w": 24,
+          "h": 29,
+          "i": "0",
+          "type": "Widget",
+          "id": "0",
+          "metricTypes": [
+            ""
+          ],
+          "metrics": [
+            ""
+          ],
+          "moved": false,
+          "graph": {
+            "type": "ServiceList",
+            "dashboardName": "RabbitMQ-Cluster",
+            "fontSize": 12,
+            "showXAxis": false,
+            "showYAxis": false,
+            "showGroup": true
+          }
+        }
+      ],
+      "layer": "RABBITMQ",
+      "entity": "All",
+      "name": "RabbitMQ-Root",
+      "isRoot": true
+    }
+  }
+]


Test patch:
diff --git a/test/e2e-v2/cases/rabbitmq/docker-compose.yml b/test/e2e-v2/cases/rabbitmq/docker-compose.yml
new file mode 100644
index 000000000000..3af9505cf8dc
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/docker-compose.yml
@@ -0,0 +1,191 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+version: '2.1'
+
+services:
+  oap:
+    extends:
+      file: ../../script/docker-compose/base-compose.yml
+      service: oap
+    ports:
+      - "12800:12800"
+    networks:
+      - e2e
+  rmq0: &rabbitmq
+    image: rabbitmq:3.11.14-management
+    networks:
+      - "e2e"
+    ports:
+      - "15673:15672"
+      - "15693:15692"
+    cap_add:
+      - ALL
+    hostname: rmq0
+    environment:
+      RABBITMQ_ERLANG_COOKIE: rabbitmq-prometheus
+    volumes:
+      - ./rabbitmq-overview.conf:/etc/rabbitmq/rabbitmq.conf:ro
+      - ./rabbitmq-overview-definitions.json:/etc/rabbitmq/rabbitmq-definitions.json:ro
+    ulimits:
+      nofile:
+        soft: 2000
+        hard: 2000
+  rmq1:
+    << : *rabbitmq
+    hostname: rmq1
+    ports:
+      - "15674:15672"
+      - "15694:15692"
+  rmq2:
+    << : *rabbitmq
+    hostname: rmq2
+    ports:
+      - "15675:15672"
+      - "15695:15692"
+
+  # The following services are used for mocking test data
+  basic-get:
+    image: &perf-test-image pivotalrabbitmq/perf-test:2.15.0-ubuntu
+    networks:
+      - "e2e"
+    environment:
+      URI: "amqp://guest:guest@rmq0:5672/%2f"
+      QUEUE: basic-get
+      ROUTING_KEY: basic-get
+      VARIABLE_RATE: "1:1,0:30"
+      POLLING: "true"
+      POLLING_INTERVAL: 5000
+      AUTOACK: "false"
+      SERVERS_STARTUP_TIMEOUT: &startup_timeout 60
+      METRICS_PROMETHEUS: "true"
+  basic-get-auto:
+    image: *perf-test-image
+    networks:
+      - "e2e"
+    environment:
+      URI: "amqp://guest:guest@rmq0:5672/%2f"
+      QUEUE: basic-get
+      ROUTING_KEY: basic-get
+      PRODUCERS: 0
+      POLLING: "true"
+      POLLING_INTERVAL: 5000
+      AUTOACK: "true"
+      SERVERS_STARTUP_TIMEOUT: *startup_timeout
+      METRICS_PROMETHEUS: "true"
+  greedy-consumer:
+    image: *perf-test-image
+    networks:
+      - "e2e"
+    environment:
+      URI: "amqp://guest:guest@rmq0:5672/%2f"
+      QUEUE: greedy-consumer
+      ROUTING_KEY: greedy-consumer
+      VARIABLE_RATE: "100:20,0:20"
+      CONSUMER_RATE: 50
+      QOS: 2000
+      AUTOACK: "false"
+      SERVERS_STARTUP_TIMEOUT: *startup_timeout
+      METRICS_PROMETHEUS: "true"
+  publisher-confirms:
+    image: *perf-test-image
+    networks:
+      - "e2e"
+    environment:
+      URI: "amqp://guest:guest@rmq1:5672/%2f"
+      QUEUE: publisher-confirms
+      ROUTING_KEY: publisher-confirms
+      AUTOACK: "true"
+      VARIABLE_RATE: "12:30,25:30,50:30,100:30"
+      CONFIRM: 1
+      CONFIRM_TIMEOUT: 1
+      SERVERS_STARTUP_TIMEOUT: *startup_timeout
+      METRICS_PROMETHEUS: "true"
+  slow-consumer-persistent:
+    image: *perf-test-image
+    networks:
+      - "e2e"
+    environment:
+      URI: "amqp://guest:guest@rmq1:5672/%2f"
+      QUEUE: ha3-slow-consumer-persistent
+      ROUTING_KEY: slow-consumer-persistent
+      QUEUE_ARGS: x-max-length=10000
+      FLAG: persistent
+      AUTO_DELETE: "false"
+      SIZE: 51200
+      VARIABLE_RATE: "100:20,0:20"
+      CONSUMER_RATE: 50
+      QOS: 50
+      AUTOACK: "false"
+      SERVERS_STARTUP_TIMEOUT: *startup_timeout
+      METRICS_PROMETHEUS: "true"
+  nack:
+    image: *perf-test-image
+    networks:
+      - "e2e"
+    entrypoint: []
+    command: /bin/bash -c "while true; do bin/runjava com.rabbitmq.perf.PerfTest; sleep 10; done"
+    environment:
+      TIME: 60
+      URI: "amqp://guest:guest@rmq2:5672/%2f"
+      VARIABLE_RATE: "1:10,0:20"
+      QUEUE: nack
+      QUEUE_ARGS: x-max-length=100
+      ROUTING_KEY: nack
+      AUTOACK: "false"
+      NACK: "true"
+      QOS: 5
+      CONSUMER_LATENCY: 3000000
+      SERVERS_STARTUP_TIMEOUT: *startup_timeout
+      METRICS_PROMETHEUS: "true"
+  unroutable-return:
+    image: *perf-test-image
+    networks:
+      - "e2e"
+    environment:
+      URI: "amqp://guest:guest@rmq2:5672/%2f"
+      VARIABLE_RATE: "2:30,4:30,10:30"
+      VARIABLE_SIZE: "100:30,200:30"
+      CONSUMERS: 0
+      FLAG: mandatory
+      SERVERS_STARTUP_TIMEOUT: *startup_timeout
+      METRICS_PROMETHEUS: "true"
+  unroutable-drop:
+    image: *perf-test-image
+    networks:
+      - "e2e"
+    environment:
+      URI: "amqp://guest:guest@rmq2:5672/%2f"
+      VARIABLE_RATE: "5:30,10:30,20:30"
+      VARIABLE_SIZE: "100:30,200:30"
+      CONSUMERS: 0
+      SERVERS_STARTUP_TIMEOUT: *startup_timeout
+      METRICS_PROMETHEUS: "true"
+
+  otel-collector:
+    image: otel/opentelemetry-collector:0.72.0
+    networks:
+      - e2e
+    command: [ "--config=/etc/otel-collector-config.yaml" ]
+    volumes:
+      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
+    expose:
+      - 55678
+    depends_on:
+      oap:
+        condition: service_healthy
+
+networks:
+  e2e:
diff --git a/test/e2e-v2/cases/rabbitmq/e2e.yaml b/test/e2e-v2/cases/rabbitmq/e2e.yaml
new file mode 100644
index 000000000000..71b604b08b0d
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/e2e.yaml
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file is used to show how to write configuration files and can be used to test.
+
+setup:
+  env: compose
+  file: docker-compose.yml
+  timeout: 20m
+  init-system-environment: ../../script/env
+  steps:
+    - name: set PATH
+      command: export PATH=/tmp/skywalking-infra-e2e/bin:$PATH
+    - name: install yq
+      command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh yq
+    - name: install swctl
+      command: bash test/e2e-v2/script/prepare/setup-e2e-shell/install.sh swctl
+
+verify:
+  retry:
+    count: 60
+    interval: 3s
+  cases:
+    - includes:
+        - ./rabbitmq-cases.yaml
diff --git a/test/e2e-v2/cases/rabbitmq/expected/instance.yml b/test/e2e-v2/cases/rabbitmq/expected/instance.yml
new file mode 100644
index 000000000000..27fe61761a79
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/expected/instance.yml
@@ -0,0 +1,32 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{{- contains . }}
+- id: {{ notEmpty .id }}
+  name: rmq0:15692
+  instanceuuid: {{ notEmpty .instanceuuid }}
+  attributes: []
+  language: UNKNOWN
+- id: {{ notEmpty .id }}
+  name: rmq1:15692
+  instanceuuid: {{ notEmpty .instanceuuid }}
+  attributes: []
+  language: UNKNOWN
+- id: {{ notEmpty .id }}
+  name: rmq2:15692
+  instanceuuid: {{ notEmpty .instanceuuid }}
+  attributes: []
+  language: UNKNOWN
+{{- end }}
diff --git a/test/e2e-v2/cases/rabbitmq/expected/metrics-has-value-label.yml b/test/e2e-v2/cases/rabbitmq/expected/metrics-has-value-label.yml
new file mode 100644
index 000000000000..0c957c3c779b
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/expected/metrics-has-value-label.yml
@@ -0,0 +1,25 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{{- contains . }}
+- key: {{ notEmpty .key }}
+  value:
+  {{- contains .value }}
+  - key: {{ notEmpty .key }}
+    value:
+      value: {{ ge .value.value 0 }}
+      isemptyvalue: false
+  {{- end }}
+{{- end }}
diff --git a/test/e2e-v2/cases/rabbitmq/expected/metrics-has-value.yml b/test/e2e-v2/cases/rabbitmq/expected/metrics-has-value.yml
new file mode 100644
index 000000000000..441165535245
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/expected/metrics-has-value.yml
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{{- contains . }}
+- key: {{ notEmpty .key }}
+  value:
+    value: {{ ge .value.value 0 }}
+    isemptyvalue: false
+{{- end }}
diff --git a/test/e2e-v2/cases/rabbitmq/expected/service.yml b/test/e2e-v2/cases/rabbitmq/expected/service.yml
new file mode 100644
index 000000000000..6365b9e23a14
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/expected/service.yml
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{{- contains . }}
+- id: {{ b64enc "rabbitmq::rabbitmq-cluster" }}.1
+  name: rabbitmq::rabbitmq-cluster
+  group: rabbitmq
+  shortname: rabbitmq-cluster
+  layers:
+    - RABBITMQ
+  normal: true
+{{- end }}
\ No newline at end of file
diff --git a/test/e2e-v2/cases/rabbitmq/otel-collector-config.yaml b/test/e2e-v2/cases/rabbitmq/otel-collector-config.yaml
new file mode 100644
index 000000000000..2b01c217b194
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/otel-collector-config.yaml
@@ -0,0 +1,80 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+receivers:
+  prometheus:
+    config:
+      scrape_configs:
+        - job_name: 'rabbitmq-monitoring'
+          scrape_interval: 30s
+          static_configs:
+            - targets:
+                - rmq0:15692
+                - rmq1:15692
+                - rmq2:15692
+          relabel_configs:
+            - source_labels: [ ]
+              target_label: cluster
+              replacement: rabbitmq-cluster
+            - source_labels: [ __address__ ]
+              regex: (.+)
+              target_label: node
+              replacement: $$1
+
+########################################################################################
+# If you want to use kubernetes_sd_configs, please reference to the following cases.   #
+########################################################################################
+
+#        - job_name: rabbitmq-monitoring
+#          scrape_interval: 30s
+#          kubernetes_sd_configs:
+#            - role: pod
+#              namespaces:
+#                names:
+#                  - default
+#          relabel_configs:
+#            - source_labels: [ __meta_kubernetes_pod_container_name, __meta_kubernetes_pod_container_port_name ]
+#              action: keep
+#              regex: rabbitmq;metrics
+#            - source_labels: [ ]
+#              target_label: cluster
+#              replacement: rabbitmq-cluster
+#            - source_labels: [ __address__ ]
+#              target_label: node
+#              regex: (.+)
+#              replacement: $$1
+#              action: replace
+
+processors:
+  batch:
+
+exporters:
+  ####################################################################################
+  # If you want to use otlp exporter please ensure that your OAP version is >= 9.2.0 #
+  ####################################################################################
+  otlp:
+    endpoint: oap:11800
+    tls:
+      insecure: true
+
+service:
+  pipelines:
+    metrics:
+      receivers:
+        - prometheus
+      processors:
+        - batch
+      exporters:
+        - otlp
\ No newline at end of file
diff --git a/test/e2e-v2/cases/rabbitmq/rabbitmq-cases.yaml b/test/e2e-v2/cases/rabbitmq/rabbitmq-cases.yaml
new file mode 100644
index 000000000000..16e5cba88dea
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/rabbitmq-cases.yaml
@@ -0,0 +1,115 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This file is used to show how to write configuration files and can be used to test.
+
+cases:
+  # service cases
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql service ls
+    expected: expected/service.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_memory_available_before_publisher_blocked --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_disk_space_available_before_publisher_blocked --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_file_descriptors_available --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_tcp_socket_available --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_message_ready_delivered_consumers --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_message_unacknowledged_delivered_consumers --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_messages_published --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_messages_confirmed --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_messages_routed --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_messages_unconfirmed --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_messages_unroutable_dropped --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_messages_unroutable_returned --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_queues --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_queues_declared_total --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_queues_created_total --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_queues_deleted_total --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_channels --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_channels_opened_total --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_channels_closed_total --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_connections --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_connections_opened_total --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_connections_closed_total --service-name=rabbitmq::rabbitmq-cluster | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+
+  # instance cases
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql instance ls --service-name=rabbitmq::rabbitmq-cluster
+    expected: expected/instance.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_queue_messages_ready --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_incoming_messages --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_publisher_total --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_connections_total --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_queue_total --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_unacknowledged_messages --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_outgoing_messages_total --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_consumer_total --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_channel_total --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_allocated_used_percent --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_allocated_unused_percent --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_allocated_used_bytes --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_allocated_unused_bytes --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_allocated_total_bytes --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics linear --name=meter_rabbitmq_node_process_resident_memory_bytes --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries' -
+    expected: expected/metrics-has-value.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_node_allocated_by_type --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_node_allocated_multiblock_used --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_node_allocated_multiblock_unused --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_node_allocated_multiblock_pool_used --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_node_allocated_multiblock_pool_unused --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_node_allocated_singleblock_used --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+  - query: swctl --display yaml --base-url=http://${oap_host}:${oap_12800}/graphql metrics multiple-linear --name=meter_rabbitmq_node_allocated_singleblock_unused --service-name=rabbitmq::rabbitmq-cluster --instance-name=rmq0:15692 | yq e 'to_entries | with(.[] ; .value=(.value | to_entries))' -
+    expected: expected/metrics-has-value-label.yml
+
+
diff --git a/test/e2e-v2/cases/rabbitmq/rabbitmq-overview-definitions.json b/test/e2e-v2/cases/rabbitmq/rabbitmq-overview-definitions.json
new file mode 100644
index 000000000000..0d58b235be0d
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/rabbitmq-overview-definitions.json
@@ -0,0 +1,49 @@
+{
+  "global_parameters": [
+    {"name": "cluster_name", "value": "rabbitmq-overview"}
+  ],
+  "permissions": [
+    {
+      "configure": ".*",
+      "read": ".*",
+      "user": "guest",
+      "vhost": "/",
+      "write": ".*"
+    }
+  ],
+  "policies": [
+    {
+      "apply-to": "queues",
+      "definition": {"ha-mode": "exactly", "ha-params": 1},
+      "name": "ha1",
+      "pattern": "ha1.*",
+      "priority": 0,
+      "vhost": "/"
+    },
+    {
+      "apply-to": "queues",
+      "definition": {"ha-mode": "exactly", "ha-params": 2},
+      "name": "ha2",
+      "pattern": "ha2.*",
+      "priority": 0,
+      "vhost": "/"
+    },
+    {
+      "apply-to": "queues",
+      "definition": {"ha-mode": "exactly", "ha-params": 3},
+      "name": "ha3",
+      "pattern": "ha3.*",
+      "priority": 0,
+      "vhost": "/"
+    }
+  ],
+  "users": [
+    {
+      "hashing_algorithm": "rabbit_password_hashing_sha256",
+      "name": "guest",
+      "password_hash": "hENva+fxJ7gnmaBK/WhwNHOYbvB53/QjNcqhtF4KqF7p21+x",
+      "tags": "administrator"
+    }
+  ],
+  "vhosts": [{"name": "/"}]
+}
diff --git a/test/e2e-v2/cases/rabbitmq/rabbitmq-overview.conf b/test/e2e-v2/cases/rabbitmq/rabbitmq-overview.conf
new file mode 100644
index 000000000000..2a53fe728beb
--- /dev/null
+++ b/test/e2e-v2/cases/rabbitmq/rabbitmq-overview.conf
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example
+loopback_users.guest = false
+listeners.tcp.default = 5672
+management.listener.port = 15672
+management.listener.ssl = false
+
+vm_memory_high_watermark.absolute = 768MiB
+vm_memory_high_watermark_paging_ratio = 0.2
+
+cluster_name = rabbitmq-overview
+
+cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
+cluster_formation.classic_config.nodes.1 = rabbit@rmq0
+cluster_formation.classic_config.nodes.2 = rabbit@rmq1
+cluster_formation.classic_config.nodes.3 = rabbit@rmq2
+
+load_definitions = /etc/rabbitmq/rabbitmq-definitions.json
+
+collect_statistics_interval = 10000