This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 1230bf4d4b Support RabbitMQ monitoring (#10814)
1230bf4d4b is described below
commit 1230bf4d4b42b6a281a9ca58966c562ca1f960b0
Author: innerpeacez <[email protected]>
AuthorDate: Wed May 17 11:56:44 2023 +0800
Support RabbitMQ monitoring (#10814)
---
.github/workflows/skywalking.yaml | 2 +
docs/en/changes/changes.md | 1 +
.../setup/backend/backend-rabbitmq-monitoring.md | 91 +++
docs/menu.yml | 4 +
.../skywalking/oap/server/core/analysis/Layer.java | 12 +-
.../ui/template/UITemplateInitializer.java | 1 +
.../src/main/resources/application.yml | 2 +-
.../otel-rules/rabbitmq/rabbitmq-cluster.yaml | 86 +++
.../otel-rules/rabbitmq/rabbitmq-node.yaml | 80 +++
.../rabbitmq/rabbitmq-cluster.json | 683 ++++++++++++++++++++
.../rabbitmq/rabbitmq-node.json | 712 +++++++++++++++++++++
.../rabbitmq/rabbitmq-root.json | 54 ++
test/e2e-v2/cases/rabbitmq/docker-compose.yml | 191 ++++++
test/e2e-v2/cases/rabbitmq/e2e.yaml | 37 ++
test/e2e-v2/cases/rabbitmq/expected/instance.yml | 32 +
.../rabbitmq/expected/metrics-has-value-label.yml | 25 +
.../cases/rabbitmq/expected/metrics-has-value.yml | 21 +
test/e2e-v2/cases/rabbitmq/expected/service.yml | 24 +
.../cases/rabbitmq/otel-collector-config.yaml | 80 +++
test/e2e-v2/cases/rabbitmq/rabbitmq-cases.yaml | 115 ++++
.../rabbitmq/rabbitmq-overview-definitions.json | 49 ++
test/e2e-v2/cases/rabbitmq/rabbitmq-overview.conf | 34 +
22 files changed, 2332 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/skywalking.yaml
b/.github/workflows/skywalking.yaml
index 5a75037ed7..8e2bfcc7bd 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 f533cac61b..bacc6d4f8c 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 0000000000..f64a41a189
--- /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 e3b04bd858..25b93f08a1 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 68d7abd0c0..babc651148 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 8986e7f8f4..7519255541 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 ca4512dde9..aaaa25a52d 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 0000000000..9ac04d9ac7
--- /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 0000000000..c1edc7380d
--- /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_globa [...]
+ - 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 0000000000..b7f4cc760f
--- /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 0000000000..3e89b51944
--- /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 0000000000..fe9894d334
--- /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
+ }
+ }
+]
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 0000000000..3af9505cf8
--- /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 0000000000..71b604b08b
--- /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 0000000000..27fe61761a
--- /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 0000000000..0c957c3c77
--- /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 0000000000..4411655352
--- /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 0000000000..6365b9e23a
--- /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 0000000000..2b01c217b1
--- /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 0000000000..16e5cba88d
--- /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 0000000000..0d58b235be
--- /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 0000000000..2a53fe728b
--- /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