diff --git a/apps/rabbitmq.yaml b/apps/rabbitmq.yaml index e69a6c60..2f943c13 100644 --- a/apps/rabbitmq.yaml +++ b/apps/rabbitmq.yaml @@ -4,7 +4,7 @@ kind: App name: "rabbitmq" keywords: - Message-broker - - Coming soon + - Available availableVersions: - '3.8' shortDescription: "RabbitMQ is the most widely deployed open source message broker." @@ -12,4 +12,4 @@ description: | RabbitMQ is the most widely deployed open source message broker. icon: https://upload.wikimedia.org/wikipedia/commons/7/71/RabbitMQ_logo.svg website: https://www.rabbitmq.com/ -available: false \ No newline at end of file +available: true \ No newline at end of file diff --git a/resources/rabbitmq/ALERTS.md b/resources/rabbitmq/ALERTS.md new file mode 100644 index 00000000..9dfa96d2 --- /dev/null +++ b/resources/rabbitmq/ALERTS.md @@ -0,0 +1,22 @@ +# Alerts +## RabbitMQClusterOperatorUnavailableReplicas +There are pods that are either running but not yet available or pods that still have not been created. +## InsufficientEstablishedErlangDistributionLinks +There are only `{{ $value }}` established Erlang distribution links +## LowDiskWatermarkPredicted +The predicted free disk space in 24 hours from now is `{{ $value | humanize1024 }}B` +## HighConnectionChurn +Over the last 5 minutes, `{{ $value | humanizePercentage }}` of total connections are closed or opened per second in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`. +## NoMajorityOfNodesReady +Only `{{ $value }}` replicas are ready in StatefulSet `{{ $labels.statefulset }}` of RabbitMQ cluster `{{ $labels.label_app_kubernetes_io_name }}` in namespace `{{ $labels.namespace }}`. +## PersistentVolumeMissing +PersistentVolumeClaim `{{ $labels.persistentvolumeclaim }}` of RabbitMQ cluster `{{ $labels.label_app_kubernetes_io_name }}` in namespace `{{ $labels.namespace }}` is not bound. +## UnroutableMessages +There were `{{ $value | printf "%.0f" }}` unroutable messages within the last 5 minutes in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`. +## FileDescriptorsNearLimit +`{{ $value | humanizePercentage }}` file descriptors of file descriptor limit are used in RabbitMQ node `{{ $labels.rabbitmq_node }}`, pod `{{ $labels.pod }}`, RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`, namespace `{{ $labels.namespace }}`. +## ContainerRestarts +Over the last 10 minutes, container `{{ $labels.container }}` restarted `{{ $value | printf "%.0f" }}` times in pod `{{ $labels.pod }}` of RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`. +## TCPSocketsNearLimit +`{{ $value | humanizePercentage }}` TCP sockets of TCP socket limit are open in RabbitMQ node `{{ $labels.rabbitmq_node }}`, pod `{{ $labels.pod }}`, RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`, namespace `{{ $labels.namespace }}`. +## \ No newline at end of file diff --git a/resources/rabbitmq/INSTALL.md b/resources/rabbitmq/INSTALL.md new file mode 100644 index 00000000..c3eb5ee1 --- /dev/null +++ b/resources/rabbitmq/INSTALL.md @@ -0,0 +1,8 @@ +## Enable Prometheus Metrics +Rabbitmq instruments Prometheus metrics and annotates the metrics API pod with Prometheus annotations. + +Make sure that the prometheus metrics are activated. In case you don't have activated the plugin use the next command: + +```sh +rabbitmq-plugins enable rabbitmq_prometheus +``` diff --git a/resources/rabbitmq/README.md b/resources/rabbitmq/README.md new file mode 100644 index 00000000..05ceaeaa --- /dev/null +++ b/resources/rabbitmq/README.md @@ -0,0 +1,11 @@ +# Rabbitmq +RabbitMQ is the most widely deployed open source message broker. + +With tens of thousands of users, RabbitMQ is one of the most popular open source message brokers. From T-Mobile to Runtastic, RabbitMQ is used worldwide at small startups and large enterprises. + +RabbitMQ is lightweight and easy to deploy on premises and in the cloud. It supports multiple messaging protocols. RabbitMQ can be deployed in distributed and federated configurations to meet high-scale, high-availability requirements. + +# Attributions +Configuration files and dashboards are maintained by [Sysdig team](https://sysdig.com/). + +All dashboards and alerts are modified from the [rabbitmq repository](https://github.com/rabbitmq/cluster-operator/tree/main/observability/) as reference. \ No newline at end of file diff --git a/resources/rabbitmq/alerts.yaml b/resources/rabbitmq/alerts.yaml new file mode 100644 index 00000000..6fab9bac --- /dev/null +++ b/resources/rabbitmq/alerts.yaml @@ -0,0 +1,242 @@ +apiVersion: v1 +kind: Alert +app: "rabbitmq" +version: 1.0.0 +appVersion: +- '3.8' +descriptionFile: ALERTS.md +configurations: +- kind: Prometheus + data: | + groups: + - name: rabbitmq-cluster-operator + rules: + - alert: RabbitMQClusterOperatorUnavailableReplicas + expr: | + kube_deployment_status_replicas_unavailable{deployment="rabbitmq-cluster-operator"} + > + 0 + for: 5m + annotations: + description: | + `{{ $value }}` replicas are unavailable in Deployment `rabbitmq-cluster-operator` + in namespace `{{ $labels.namespace }}`. + summary: | + There are pods that are either running but not yet available or pods that still have not been created. + Check the status of the deployment: `kubectl -n {{ $labels.namespace }} describe deployment rabbitmq-cluster-operator` + Check the status of the pod: `kubectl -n {{ $labels.namespace }} describe pod -l app.kubernetes.io/component=rabbitmq-cluster-operator` + labels: + rulesgroup: rabbitmq-operator + severity: warning + - name: rabbitmq + rules: + - alert: InsufficientEstablishedErlangDistributionLinks + # erlang_vm_dist_node_state: 1=pending, 2=up_pending, 3=up + expr: | + count by (namespace, rabbitmq_cluster) (erlang_vm_dist_node_state * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info == 3) + < + count by (namespace, rabbitmq_cluster) (rabbitmq_build_info * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info) + * + (count by (namespace, rabbitmq_cluster) (rabbitmq_build_info * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info) -1 ) + for: 10m + annotations: + description: | + There are only `{{ $value }}` established Erlang distribution links + in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`. + summary: | + RabbitMQ clusters have a full mesh topology. + All RabbitMQ nodes connect to all other RabbitMQ nodes in both directions. + The expected number of established Erlang distribution links is therefore `n*(n-1)` where `n` is the number of RabbitMQ nodes in the cluster. + Therefore, the expected number of distribution links are `0` for a 1-node cluster, `6` for a 3-node cluster, and `20` for a 5-node cluster. + This alert reports that the number of established distributions links is less than the expected number. + Some reasons for this alert include failed network links, network partitions, failed clustering (i.e. nodes can't join the cluster). + Check the panels `All distribution links`, `Established distribution links`, `Connecting distributions links`, `Waiting distribution links`, and `distribution links` + of the Grafana dashboard `Erlang-Distribution`. + Check the logs of the RabbitMQ nodes: `kubectl -n {{ $labels.namespace }} logs -l app.kubernetes.io/component=rabbitmq,app.kubernetes.io/name={{ $labels.rabbitmq_cluster }}` + labels: + rulesgroup: rabbitmq + severity: warning + - alert: LowDiskWatermarkPredicted + # The 2nd condition ensures that data points are available until 24 hours ago such that no false positive alerts are triggered for newly created RabbitMQ clusters. + expr: | + ( + predict_linear(rabbitmq_disk_space_available_bytes[24h], 60*60*24) * on (instance) group_left(rabbitmq_cluster, rabbitmq_node, pod) rabbitmq_identity_info + < + rabbitmq_disk_space_available_limit_bytes * on (instance) group_left(rabbitmq_cluster, rabbitmq_node, pod) rabbitmq_identity_info + ) + and + ( + count_over_time(rabbitmq_disk_space_available_limit_bytes[2h] offset 22h) * on (instance) group_left(rabbitmq_cluster, rabbitmq_node, pod) rabbitmq_identity_info + > + 0 + ) + for: 60m + annotations: + description: | + The predicted free disk space in 24 hours from now is `{{ $value | humanize1024 }}B` + in RabbitMQ node `{{ $labels.rabbitmq_node }}`, pod `{{ $labels.pod }}`, + RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`, namespace `{{ $labels.namespace }}`. + summary: | + Based on the trend of available disk space over the past 24 hours, it's predicted that, in 24 hours from now, a disk alarm will be triggered since the free disk space will drop below the free disk space limit. + This alert is reported for the partition where the RabbitMQ data directory is stored. + When the disk alarm will be triggered, all publishing connections across all cluster nodes will be blocked. + See + https://www.rabbitmq.com/alarms.html, + https://www.rabbitmq.com/disk-alarms.html, + https://www.rabbitmq.com/production-checklist.html#resource-limits-disk-space, + https://www.rabbitmq.com/persistence-conf.html, + https://www.rabbitmq.com/connection-blocked.html. + labels: + rulesgroup: rabbitmq + severity: warning + - alert: HighConnectionChurn + expr: | + ( + sum(rate(rabbitmq_connections_closed_total[5m]) * on(instance) group_left(rabbitmq_cluster, rabbitmq_node) rabbitmq_identity_info) by(namespace, rabbitmq_cluster) + + + sum(rate(rabbitmq_connections_opened_total[5m]) * on(instance) group_left(rabbitmq_cluster, rabbitmq_node) rabbitmq_identity_info) by(namespace, rabbitmq_cluster) + ) + / + sum (rabbitmq_connections * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info) by (namespace, rabbitmq_cluster) + > 0.1 + unless + sum (rabbitmq_connections * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info) by (namespace, rabbitmq_cluster) + < 100 + for: 10m + annotations: + description: | + Over the last 5 minutes, `{{ $value | humanizePercentage }}` + of total connections are closed or opened per second in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` + in namespace `{{ $labels.namespace }}`. + summary: | + More than 10% of total connections are churning. + This means that client application connections are short-lived instead of long-lived. + Read https://www.rabbitmq.com/connections.html#high-connection-churn to understand why this is an anti-pattern. + labels: + rulesgroup: rabbitmq + severity: warning + - alert: NoMajorityOfNodesReady + expr: | + kube_statefulset_status_replicas_ready * on (namespace, statefulset) group_left(label_app_kubernetes_io_name) kube_statefulset_labels{label_app_kubernetes_io_component="rabbitmq"} + <= + kube_statefulset_replicas * on (namespace, statefulset) group_left(label_app_kubernetes_io_name) kube_statefulset_labels{label_app_kubernetes_io_component="rabbitmq"} + / 2 + unless + kube_statefulset_replicas * on (namespace, statefulset) group_left(label_app_kubernetes_io_name) kube_statefulset_labels{label_app_kubernetes_io_component="rabbitmq"} + == 0 + for: 5m + annotations: + description: | + Only `{{ $value }}` replicas are ready in StatefulSet `{{ $labels.statefulset }}` + of RabbitMQ cluster `{{ $labels.label_app_kubernetes_io_name }}` in namespace `{{ $labels.namespace }}`. + summary: | + No majority of nodes have been ready for the last 5 minutes. + Check the details of the pods: + `kubectl -n {{ $labels.namespace }} describe pods -l app.kubernetes.io/component=rabbitmq,app.kubernetes.io/name={{ $labels.label_app_kubernetes_io_name }}` + labels: + rabbitmq_cluster: '{{ $labels.label_app_kubernetes_io_name }}' + rulesgroup: rabbitmq + severity: warning + - alert: PersistentVolumeMissing + expr: | + kube_persistentvolumeclaim_status_phase{phase="Bound"} * on (namespace, persistentvolumeclaim) group_left(label_app_kubernetes_io_name) kube_persistentvolumeclaim_labels{label_app_kubernetes_io_component="rabbitmq"} + == + 0 + for: 10m + annotations: + description: | + PersistentVolumeClaim `{{ $labels.persistentvolumeclaim }}` of + RabbitMQ cluster `{{ $labels.label_app_kubernetes_io_name }}` in namespace + `{{ $labels.namespace }}` is not bound. + summary: | + RabbitMQ needs a PersistentVolume for its data. + However, there is no PersistentVolume bound to the PersistentVolumeClaim. + This means the requested storage could not be provisioned. + Check the status of the PersistentVolumeClaim: `kubectl -n {{ $labels.namespace }} describe pvc {{ $labels.persistentvolumeclaim }}`. + labels: + rabbitmq_cluster: '{{ $labels.label_app_kubernetes_io_name }}' + rulesgroup: rabbitmq + severity: critical + - alert: UnroutableMessages + expr: | + sum by(namespace, rabbitmq_cluster) (increase(rabbitmq_channel_messages_unroutable_dropped_total[5m]) * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info) + >= 1 + or + sum by(namespace, rabbitmq_cluster) (increase(rabbitmq_channel_messages_unroutable_returned_total[5m]) * on(instance) group_left(rabbitmq_cluster) rabbitmq_identity_info) + >= 1 + annotations: + description: | + There were `{{ $value | printf "%.0f" }}` unroutable messages within the last + 5 minutes in RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}` in namespace + `{{ $labels.namespace }}`. + summary: | + There are messages published into an exchange which cannot be routed and are either dropped silently, or returned to publishers. + Is your routing topology set up correctly? + Check your application code and bindings between exchanges and queues. + See + https://www.rabbitmq.com/publishers.html#unroutable, + https://www.rabbitmq.com/confirms.html#when-publishes-are-confirmed. + labels: + rulesgroup: rabbitmq + severity: warning + - alert: FileDescriptorsNearLimit + expr: | + sum by(namespace, rabbitmq_cluster, pod, rabbitmq_node) (max_over_time(rabbitmq_process_open_fds[5m]) * on(instance) group_left(rabbitmq_cluster, rabbitmq_node, pod) rabbitmq_identity_info) + / + sum by(namespace, rabbitmq_cluster, pod, rabbitmq_node) (rabbitmq_process_max_tcp_sockets * on(instance) group_left(rabbitmq_cluster, rabbitmq_node, pod) rabbitmq_identity_info) + > 0.8 + for: 10m + annotations: + description: | + `{{ $value | humanizePercentage }}` file descriptors of file + descriptor limit are used in RabbitMQ node `{{ $labels.rabbitmq_node }}`, + pod `{{ $labels.pod }}`, RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`, + namespace `{{ $labels.namespace }}`. + summary: | + More than 80% of file descriptors are used on the RabbitMQ node. + When this value reaches 100%, new connections will not be accepted and disk write operations may fail. + Client libraries, peer nodes and CLI tools will not be able to connect when the node runs out of available file descriptors. + See https://www.rabbitmq.com/production-checklist.html#resource-limits-file-handle-limit. + labels: + rulesgroup: rabbitmq + severity: warning + - alert: ContainerRestarts + expr: | + increase(kube_pod_container_status_restarts_total[10m]) * on(namespace, pod, container) group_left(rabbitmq_cluster) rabbitmq_identity_info + >= + 1 + for: 5m + annotations: + description: | + Over the last 10 minutes, container `{{ $labels.container }}` + restarted `{{ $value | printf "%.0f" }}` times in pod `{{ $labels.pod }}` of RabbitMQ cluster + `{{ $labels.rabbitmq_cluster }}` in namespace `{{ $labels.namespace }}`. + summary: | + Investigate why the container got restarted. + Check the logs of the current container: `kubectl -n {{ $labels.namespace }} logs {{ $labels.pod }}` + Check the logs of the previous container: `kubectl -n {{ $labels.namespace }} logs {{ $labels.pod }} --previous` + Check the last state of the container: `kubectl -n {{ $labels.namespace }} get pod {{ $labels.pod }} -o jsonpath='{.status.containerStatuses[].lastState}'` + labels: + rabbitmq_cluster: '{{ $labels.rabbitmq_cluster }}' + rulesgroup: rabbitmq + severity: warning + - alert: TCPSocketsNearLimit + expr: | + sum by(namespace, rabbitmq_cluster, pod, rabbitmq_node) (max_over_time(rabbitmq_process_open_tcp_sockets[5m]) * on(instance) group_left(rabbitmq_cluster, rabbitmq_node, pod) rabbitmq_identity_info) + / + sum by(namespace, rabbitmq_cluster, pod, rabbitmq_node) (rabbitmq_process_max_tcp_sockets * on(instance) group_left(rabbitmq_cluster, rabbitmq_node, pod) rabbitmq_identity_info) + > 0.8 + for: 10m + annotations: + description: | + `{{ $value | humanizePercentage }}` TCP sockets of TCP socket + limit are open in RabbitMQ node `{{ $labels.rabbitmq_node }}`, pod `{{ $labels.pod }}`, + RabbitMQ cluster `{{ $labels.rabbitmq_cluster }}`, namespace `{{ $labels.namespace }}`. + summary: | + More than 80% of TCP sockets are open on the RabbitMQ node. + When this value reaches 100%, new connections will not be accepted. + Client libraries, peer nodes and CLI tools will not be able to connect when the node runs out of available TCP sockets. + See https://www.rabbitmq.com/networking.html. + labels: + rulesgroup: rabbitmq + severity: warning diff --git a/resources/rabbitmq/dashboards.yaml b/resources/rabbitmq/dashboards.yaml new file mode 100644 index 00000000..ae98b0d3 --- /dev/null +++ b/resources/rabbitmq/dashboards.yaml @@ -0,0 +1,29 @@ +apiVersion: v1 +kind: Dashboard +app: "rabbitmq" +version: 1.0.0 +appVersion: +- '3.8' +configurations: +- name: Rabbitmq Overview + kind: Sysdig + image: rabbitmq/images/rabbitmq_overview_sysdig.png + description: | + This dashboard offers information on: + * Node identity, including RabbitMQ & Erlang/OTP version + * Node memory & disk available before publishers blocked (alarm triggers) + * Node file descriptors & TCP sockets available + * Ready & pending messages + file: include/dashboard-Sysdig-rabbitmq-overview.json +- name: Rabbitmq Usage + kind: Sysdig + image: rabbitmq/images/rabbitmq_usage_sysdig.png + description: | + This dashboard offers information on: + * Incoming message rates: published / routed to queues / confirmed / unconfirmed / returned / dropped + * Outgoing message rated: delivered with auto or manual acks / acknowledged / redelivered + * Polling operation with auto or manual acks, as well as empty ops + * Queues, including declaration & deletion rates + * Channels, including open & close rates + * Connections, including open & close rates + file: include/dashboard-Sysdig-rabbitmq-usage.json diff --git a/resources/rabbitmq/description.yaml b/resources/rabbitmq/description.yaml new file mode 100644 index 00000000..53759b5c --- /dev/null +++ b/resources/rabbitmq/description.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Description +app: "rabbitmq" +version: 1.0.0 +appVersion: +- '3.8' +descriptionFile: README.md diff --git a/resources/rabbitmq/images/rabbitmq_overview_sysdig.png b/resources/rabbitmq/images/rabbitmq_overview_sysdig.png new file mode 100644 index 00000000..df2fe121 Binary files /dev/null and b/resources/rabbitmq/images/rabbitmq_overview_sysdig.png differ diff --git a/resources/rabbitmq/images/rabbitmq_usage_sysdig.png b/resources/rabbitmq/images/rabbitmq_usage_sysdig.png new file mode 100644 index 00000000..4f4a712d Binary files /dev/null and b/resources/rabbitmq/images/rabbitmq_usage_sysdig.png differ diff --git a/resources/rabbitmq/include/dashboard-Sysdig-rabbitmq-overview.json b/resources/rabbitmq/include/dashboard-Sysdig-rabbitmq-overview.json new file mode 100644 index 00000000..255c5d10 --- /dev/null +++ b/resources/rabbitmq/include/dashboard-Sysdig-rabbitmq-overview.json @@ -0,0 +1,1364 @@ +{ + "dashboard": { + "description": "", + "eventDisplaySettings": { + "enabled": true, + "queryParams": { + "alertStatuses": [], + "categories": [], + "filter": "", + "severities": [], + "teamScope": false + } + }, + "layout": [ + { + "h": 2, + "panelId": 1, + "w": 4, + "x": 0, + "y": 0 + }, + { + "h": 2, + "panelId": 2, + "w": 4, + "x": 4, + "y": 0 + }, + { + "h": 2, + "panelId": 3, + "w": 4, + "x": 8, + "y": 0 + }, + { + "h": 2, + "panelId": 4, + "w": 4, + "x": 12, + "y": 0 + }, + { + "h": 2, + "panelId": 5, + "w": 4, + "x": 16, + "y": 0 + }, + { + "h": 2, + "panelId": 6, + "w": 4, + "x": 0, + "y": 2 + }, + { + "h": 2, + "panelId": 7, + "w": 4, + "x": 4, + "y": 2 + }, + { + "h": 2, + "panelId": 8, + "w": 4, + "x": 8, + "y": 2 + }, + { + "h": 2, + "panelId": 9, + "w": 4, + "x": 12, + "y": 2 + }, + { + "h": 2, + "panelId": 10, + "w": 4, + "x": 16, + "y": 2 + }, + { + "h": 5, + "panelId": 11, + "w": 6, + "x": 0, + "y": 5 + }, + { + "h": 5, + "panelId": 12, + "w": 6, + "x": 6, + "y": 5 + }, + { + "h": 5, + "panelId": 13, + "w": 6, + "x": 12, + "y": 5 + }, + { + "h": 5, + "panelId": 14, + "w": 6, + "x": 18, + "y": 5 + }, + { + "h": 1, + "panelId": 15, + "w": 24, + "x": 0, + "y": 4 + }, + { + "h": 1, + "panelId": 16, + "w": 24, + "x": 0, + "y": 10 + }, + { + "h": 5, + "panelId": 17, + "w": 12, + "x": 0, + "y": 11 + }, + { + "h": 5, + "panelId": 18, + "w": 12, + "x": 12, + "y": 11 + }, + { + "h": 2, + "panelId": 19, + "w": 4, + "x": 20, + "y": 0 + }, + { + "h": 2, + "panelId": 20, + "w": 4, + "x": 20, + "y": 2 + } + ], + "name": "Rabbitmq Overview", + "panels": [ + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_queue_messages_ready{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 1, + "name": "Ready messages", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_published_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__range]))" + } + ], + "description": "", + "id": 2, + "name": "Incoming messages / s", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_channels{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}) - sum(rabbitmq_channel_consumers{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 3, + "name": "Publishers", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_connections{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 4, + "name": "Connections", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_queues{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 5, + "name": "Queues", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_queue_messages_unacked{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 6, + "name": "Unacknowledged messages", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_redelivered_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__range])) +\nsum(rate(rabbitmq_channel_messages_delivered_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__range])) +\nsum(rate(rabbitmq_channel_messages_delivered_ack_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__range])) +\nsum(rate(rabbitmq_channel_get_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__range])) +\nsum(rate(rabbitmq_channel_get_ack_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__range]))" + } + ], + "description": "", + "id": 7, + "name": "Outgoing messages / s", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_channel_consumers{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 8, + "name": "Consumers", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_channels{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 9, + "name": "Channels", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_build_info{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 10, + "name": "Nodes", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "B", + "nullValueDisplayMode": "nullGap", + "unit": "byte", + "yAxis": "auto" + }, + "query": "(rabbitmq_resident_memory_limit_bytes{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod} ) -\n(rabbitmq_process_resident_memory_bytes{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "B", + "maxValue": null, + "minInputFormat": "B", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "If the value is zero or less, the memory alarm will be triggered and all publishing connections across all cluster nodes will be blocked.", + "id": 11, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Memory available before publishers blocked", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "B", + "nullValueDisplayMode": "nullGap", + "unit": "byte", + "yAxis": "auto" + }, + "query": "rabbitmq_disk_space_available_bytes{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "B", + "maxValue": null, + "minInputFormat": "B", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "This metric is reported for the partition where the RabbitMQ data directory is stored.", + "id": 12, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Disk space available before publishers blocked", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "(rabbitmq_process_max_fds{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}) -\n(rabbitmq_process_open_fds{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod} )" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "When this value reaches zero, new connections will not be accepted and disk write operations may fail.\n", + "id": 13, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "File descriptors available", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "(rabbitmq_process_max_tcp_sockets{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod} ) -\n(rabbitmq_process_open_tcp_sockets{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "When this value reaches zero, new connections will not be accepted.", + "id": 14, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "TCP sockets available", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "description": "", + "id": 15, + "markdownSource": "# RABBITMQ NODES (PODS)", + "name": "Nodes (2)", + "nullValueDisplayText": null, + "panelTitleVisible": false, + "textAutosized": false, + "transparentBackground": false, + "type": "text" + }, + { + "description": "", + "id": 16, + "markdownSource": "# QUEUED MESSAGES", + "name": "Nodes (3)", + "nullValueDisplayText": null, + "panelTitleVisible": false, + "textAutosized": false, + "transparentBackground": false, + "type": "text" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_queue_messages_ready{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}) by(kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "Total number of ready messages ready to be delivered to consumers.", + "id": 17, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages ready to be delivered to consumers", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_queue_messages_unacked{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "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.\n\n* [Queues](https://www.rabbitmq.com/queues.html)\n* [Confirms and Acknowledgements](https://www.rabbitmq.com/confirms.html)\n* [Consumer Prefetch](https://www.rabbitmq.com/consumer-prefetch.html)", + "id": 18, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages pending consumer acknowledgement", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_channel_messages_unroutable_dropped_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 19, + "name": "Messages Unroutable Dropped", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "", + "timeSeriesDisplayNameTemplate": "", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rabbitmq_channel_messages_unroutable_dropped_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod})" + } + ], + "description": "", + "id": 20, + "name": "Messages Unroutable Returned", + "nullValueDisplayText": null, + "numberThresholds": { + "base": { + "displayText": "", + "severity": "none" + }, + "values": [] + }, + "type": "advancedNumber" + } + ], + "publicNotation": false, + "schema": 3, + "scopeExpressionList": [ + { + "descriptor": { + "aggregationForGroup": "none", + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "createdAt": 1631554130089, + "customerId": 1, + "deferred": false, + "documentId": "1--6139949314852700299", + "documentTimestamp": 1631554130089, + "documentType": "metric", + "experimental": false, + "firstSeen": 1612202275360, + "generatedFrom": "com.draios.model.metrics.kubernetes.KubernetesName", + "generator": { + "aggregationForGroup": "none", + "aggregations": [ + "concat", + "distinct", + "count" + ], + "avg": false, + "canCalculate": false, + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "concat": false, + "context": [ + "container" + ], + "count": false, + "countDistinct": false, + "deferred": false, + "experimental": false, + "firstSeen": 1612202275360, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "groupBy": [], + "heuristic": false, + "hidden": false, + "id": "kubernetes.cluster.name", + "identity": false, + "label": true, + "lastSeen": 1631551320996, + "max": false, + "metricType": "none", + "min": false, + "namespaces": [ + "kubernetes.cluster" + ], + "rateOfChange": false, + "scale": 1.0, + "scopes": [], + "sum": false, + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "timeAvg": false, + "type": "string" + }, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "heuristic": false, + "hidden": false, + "id": "kubernetes.cluster.name", + "identity": false, + "lastSeen": 1631551320996, + "metricType": "tag", + "namespaces": [ + "kubernetes.cluster" + ], + "publicId": "kube_cluster_name", + "scale": 1.0, + "scopes": [], + "segment": false, + "segmentations": [], + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "type": "string" + }, + "displayName": "cluster", + "isVariable": true, + "operand": "kubernetes.cluster.name", + "operator": "in", + "value": [], + "variable": true + }, + { + "descriptor": { + "aggregationForGroup": "none", + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "createdAt": 1631554130090, + "customerId": 1, + "deferred": false, + "documentId": "1--7083949535721519842", + "documentTimestamp": 1631554130090, + "documentType": "metric", + "experimental": false, + "firstSeen": 1612202275360, + "generatedFrom": "com.draios.model.metrics.kubernetes.KubernetesName", + "generator": { + "aggregationForGroup": "none", + "aggregations": [ + "concat", + "distinct", + "count" + ], + "avg": false, + "canCalculate": false, + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "concat": false, + "context": [ + "container" + ], + "count": false, + "countDistinct": false, + "deferred": false, + "experimental": false, + "firstSeen": 1612202275360, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "groupBy": [], + "heuristic": false, + "hidden": false, + "id": "kubernetes.namespace.name", + "identity": false, + "label": true, + "lastSeen": 1631551561555, + "max": false, + "metricType": "none", + "min": false, + "namespaces": [ + "kubernetes.namespace" + ], + "rateOfChange": false, + "scale": 1.0, + "scopes": [], + "sum": false, + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "timeAvg": false, + "type": "string" + }, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "heuristic": false, + "hidden": false, + "id": "kubernetes.namespace.name", + "identity": false, + "lastSeen": 1631551561555, + "metricType": "tag", + "namespaces": [ + "kubernetes.namespace" + ], + "publicId": "kube_namespace_name", + "scale": 1.0, + "scopes": [], + "segment": false, + "segmentations": [], + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "type": "string" + }, + "displayName": "namespace", + "isVariable": true, + "operand": "kubernetes.namespace.name", + "operator": "in", + "value": [], + "variable": true + }, + { + "descriptor": { + "aggregationForGroup": "none", + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "createdAt": 1631554130090, + "customerId": 1, + "deferred": false, + "documentId": "1--3678655470823086545", + "documentTimestamp": 1631554130090, + "documentType": "metric", + "experimental": false, + "firstSeen": 1619467970842, + "generatedFrom": "com.draios.model.metrics.kubernetes.KubernetesWorkload", + "generator": { + "aggregationForGroup": "none", + "aggregations": [ + "concat", + "distinct", + "count" + ], + "avg": false, + "canCalculate": false, + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "concat": false, + "context": [ + "container" + ], + "count": false, + "countDistinct": false, + "deferred": false, + "experimental": false, + "firstSeen": 1619467970842, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "groupBy": [], + "heuristic": false, + "hidden": false, + "id": "kubernetes.workload.name", + "identity": false, + "label": true, + "lastSeen": 1631551320996, + "max": false, + "metricType": "none", + "min": false, + "namespaces": [ + "kubernetes.workload.name" + ], + "rateOfChange": false, + "scale": 1.0, + "scopes": [], + "sum": false, + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "timeAvg": false, + "type": "string" + }, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "heuristic": false, + "hidden": false, + "id": "kubernetes.workload.name", + "identity": false, + "lastSeen": 1631551320996, + "metricType": "tag", + "namespaces": [ + "kubernetes.workload.name" + ], + "publicId": "kube_workload_name", + "scale": 1.0, + "scopes": [], + "segment": false, + "segmentations": [], + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "type": "string" + }, + "displayName": "workload", + "isVariable": true, + "operand": "kubernetes.workload.name", + "operator": "in", + "value": [], + "variable": true + }, + { + "descriptor": { + "aggregationForGroup": "none", + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "createdAt": 1631554130090, + "customerId": 1, + "deferred": false, + "documentId": "1--7638853878924989689", + "documentTimestamp": 1631554130090, + "documentType": "metric", + "experimental": false, + "firstSeen": 1612202275360, + "generatedFrom": "com.draios.model.metrics.kubernetes.KubernetesName", + "generator": { + "aggregationForGroup": "none", + "aggregations": [ + "concat", + "distinct", + "count" + ], + "avg": false, + "canCalculate": false, + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "concat": false, + "context": [ + "container" + ], + "count": false, + "countDistinct": false, + "deferred": false, + "experimental": false, + "firstSeen": 1612202275360, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "groupBy": [], + "heuristic": false, + "hidden": false, + "id": "kubernetes.pod.name", + "identity": false, + "label": true, + "lastSeen": 1631551561555, + "max": false, + "metricType": "none", + "min": false, + "namespaces": [ + "kubernetes.pod" + ], + "rateOfChange": false, + "scale": 1.0, + "scopes": [], + "sum": false, + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "timeAvg": false, + "type": "string" + }, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "heuristic": false, + "hidden": false, + "id": "kubernetes.pod.name", + "identity": false, + "lastSeen": 1631551561555, + "metricType": "tag", + "namespaces": [ + "kubernetes.pod" + ], + "publicId": "kube_pod_name", + "scale": 1.0, + "scopes": [], + "segment": false, + "segmentations": [], + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "type": "string" + }, + "displayName": "pod", + "isVariable": true, + "operand": "kubernetes.pod.name", + "operator": "in", + "value": [], + "variable": true + } + ] + } +} \ No newline at end of file diff --git a/resources/rabbitmq/include/dashboard-Sysdig-rabbitmq-usage.json b/resources/rabbitmq/include/dashboard-Sysdig-rabbitmq-usage.json new file mode 100644 index 00000000..d8a117e2 --- /dev/null +++ b/resources/rabbitmq/include/dashboard-Sysdig-rabbitmq-usage.json @@ -0,0 +1,2198 @@ +{ + "dashboard": { + "description": "", + "eventDisplaySettings": { + "enabled": true, + "queryParams": { + "alertStatuses": [], + "categories": [], + "filter": "", + "severities": [], + "teamScope": false + } + }, + "layout": [ + { + "h": 1, + "panelId": 3, + "w": 24, + "x": 0, + "y": 0 + }, + { + "h": 5, + "panelId": 4, + "w": 8, + "x": 0, + "y": 1 + }, + { + "h": 5, + "panelId": 1, + "w": 8, + "x": 8, + "y": 1 + }, + { + "h": 5, + "panelId": 2, + "w": 8, + "x": 16, + "y": 1 + }, + { + "h": 5, + "panelId": 7, + "w": 8, + "x": 0, + "y": 6 + }, + { + "h": 5, + "panelId": 5, + "w": 8, + "x": 8, + "y": 6 + }, + { + "h": 5, + "panelId": 6, + "w": 8, + "x": 16, + "y": 6 + }, + { + "h": 1, + "panelId": 8, + "w": 24, + "x": 0, + "y": 11 + }, + { + "h": 5, + "panelId": 9, + "w": 6, + "x": 0, + "y": 12 + }, + { + "h": 5, + "panelId": 10, + "w": 6, + "x": 6, + "y": 12 + }, + { + "h": 5, + "panelId": 11, + "w": 6, + "x": 12, + "y": 12 + }, + { + "h": 5, + "panelId": 14, + "w": 6, + "x": 18, + "y": 12 + }, + { + "h": 5, + "panelId": 13, + "w": 6, + "x": 0, + "y": 17 + }, + { + "h": 5, + "panelId": 12, + "w": 6, + "x": 6, + "y": 17 + }, + { + "h": 5, + "panelId": 16, + "w": 6, + "x": 12, + "y": 17 + }, + { + "h": 5, + "panelId": 17, + "w": 6, + "x": 18, + "y": 17 + }, + { + "h": 1, + "panelId": 15, + "w": 24, + "x": 0, + "y": 22 + }, + { + "h": 5, + "panelId": 18, + "w": 9, + "x": 0, + "y": 23 + }, + { + "h": 5, + "panelId": 19, + "w": 5, + "x": 9, + "y": 23 + }, + { + "h": 5, + "panelId": 20, + "w": 5, + "x": 14, + "y": 23 + }, + { + "h": 5, + "panelId": 21, + "w": 5, + "x": 19, + "y": 23 + }, + { + "h": 1, + "panelId": 22, + "w": 24, + "x": 0, + "y": 28 + }, + { + "h": 5, + "panelId": 23, + "w": 10, + "x": 0, + "y": 29 + }, + { + "h": 5, + "panelId": 24, + "w": 7, + "x": 10, + "y": 29 + }, + { + "h": 5, + "panelId": 25, + "w": 7, + "x": 17, + "y": 29 + }, + { + "h": 1, + "panelId": 26, + "w": 24, + "x": 0, + "y": 34 + }, + { + "h": 5, + "panelId": 27, + "w": 10, + "x": 0, + "y": 35 + }, + { + "h": 5, + "panelId": 28, + "w": 7, + "x": 10, + "y": 35 + }, + { + "h": 5, + "panelId": 29, + "w": 7, + "x": 17, + "y": 35 + } + ], + "name": "Rabbitmq Usage", + "panels": [ + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_published_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The incoming message rate before any routing rules are applied.", + "id": 1, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages published / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_confirmed_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages confirmed by the broker to publishers. Publishers must opt-in to receive message confirmations.\n\nIf this metric is consistently at zero it may suggest that publisher confirms are not used by clients. The safety of published messages is likely to be at risk.\n\n* [Publisher Confirms](https://www.rabbitmq.com/confirms.html#publisher-confirms)\n* [Publisher Confirms and Data Safety](https://www.rabbitmq.com/publishers.html#data-safety)\n* [When Will Published Messages Be Confirmed by the Broker?](https://www.rabbitmq.com/confirms.html#when-publishes-are-confirmed)", + "id": 2, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages confirmed to publishers / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "description": "", + "id": 3, + "markdownSource": "# INCOMING MESSAGES", + "name": "New Panel", + "nullValueDisplayText": null, + "panelTitleVisible": false, + "textAutosized": false, + "transparentBackground": false, + "type": "text" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_queue_messages_published_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages received from publishers and successfully routed to the master queue replicas.\n\n* [Queues](https://www.rabbitmq.com/queues.html)\n* [Publishers](https://www.rabbitmq.com/publishers.html)", + "id": 4, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages routed to queues / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_unconfirmed{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages received from publishers that have publisher confirms enabled and the broker has not confirmed yet.\n\n* [Publishers](https://www.rabbitmq.com/publishers.html)\n* [Confirms and Acknowledgements](https://www.rabbitmq.com/confirms.html)\n* [When Will Published Messages Be Confirmed by the Broker?](https://www.rabbitmq.com/confirms.html#when-publishes-are-confirmed)", + "id": 5, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages unconfirmed to publishers / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_unroutable_dropped_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages that cannot be routed and are dropped. \n\nAny value above zero means message loss and likely suggests a routing problem on the publisher end.\n\n* [Unroutable Message Handling](https://www.rabbitmq.com/publishers.html#unroutable)", + "id": 6, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Unroutable messages dropped / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_unroutable_returned_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages that cannot be routed and are returned back to publishers.\n\nSustained values above zero may indicate a routing problem on the publisher end.\n\n* [Unroutable Message Handling](https://www.rabbitmq.com/publishers.html#unroutable)\n* [When Will Published Messages Be Confirmed by the Broker?](https://www.rabbitmq.com/confirms.html#when-publishes-are-confirmed)", + "id": 7, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Unroutable messages returned to publishers / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "description": "", + "id": 8, + "markdownSource": "# OUTGOING MESSAGES", + "name": "New Panel (2)", + "nullValueDisplayText": null, + "panelTitleVisible": false, + "textAutosized": false, + "transparentBackground": false, + "type": "text" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(\n (rate(rabbitmq_channel_messages_delivered_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval]) ) +\n (rate(rabbitmq_channel_messages_delivered_ack_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval]) )\n) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages delivered to consumers. It includes messages that have been redelivered.\n\nThis metric does not include messages that have been fetched by consumers using `basic.get` (consumed by polling).\n\n* [Consumers](https://www.rabbitmq.com/consumers.html)", + "id": 9, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages delivered / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_redelivered_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages that have been redelivered to consumers. It includes messages that have been requeued automatically and redelivered due to channel exceptions or connection closures.\n\nHaving some redeliveries is expected, but if this metric is consistently non-zero, it is worth investigating why.\n\n* [Negative Acknowledgement and Requeuing of Deliveries](https://www.rabbitmq.com/confirms.html#consumer-nacks-requeue)\n* [Consumers](https://www.rabbitmq.com/consumers.html)", + "id": 10, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages redelivered / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_delivered_ack_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of message deliveries to consumers that use manual acknowledgement mode.\n\nWhen this mode is used, RabbitMQ waits for consumers to acknowledge messages before more messages can be delivered.\n\nThis is the safest way of consuming messages.\n\n* [Consumer Acknowledgements](https://www.rabbitmq.com/confirms.html)\n* [Consumer Prefetch](https://www.rabbitmq.com/consumer-prefetch.html)\n* [Consumer Acknowledgement Modes, Prefetch and Throughput](https://www.rabbitmq.com/confirms.html#channel-qos-prefetch-throughput)\n* [Consumers](https://www.rabbitmq.com/consumers.html)", + "id": 11, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages delivered with manual ack / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_delivered_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of message deliveries to consumers that use automatic acknowledgement mode.\n\nWhen this mode is used, RabbitMQ does not wait for consumers to acknowledge message deliveries.\n\nThis mode is fire-and-forget and does not offer any delivery safety guarantees. It tends to provide higher throughput and it may lead to consumer overload and higher consumer memory usage.\n\n* [Consumer Acknowledgement Modes, Prefetch and Throughput](https://www.rabbitmq.com/confirms.html#channel-qos-prefetch-throughput)\n* [Consumers](https://www.rabbitmq.com/consumers.html)", + "id": 12, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages delivered auto ack / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_messages_acked_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of message acknowledgements coming from consumers that use manual acknowledgement mode.\n\n* [Consumer Acknowledgements](https://www.rabbitmq.com/confirms.html)\n* [Consumer Prefetch](https://www.rabbitmq.com/consumer-prefetch.html)\n* [Consumer Acknowledgement Modes, Prefetch and Throughput](https://www.rabbitmq.com/confirms.html#channel-qos-prefetch-throughput)\n* [Consumers](https://www.rabbitmq.com/consumers.html)", + "id": 13, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Messages acknowledged / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_get_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages delivered to polling consumers that use automatic acknowledgement mode.\n\nThe use of polling consumers is highly inefficient and therefore strongly discouraged.\n\n* [Fetching individual messages](https://www.rabbitmq.com/consumers.html#fetching)\n* [Consumers](https://www.rabbitmq.com/consumers.html)", + "id": 14, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Polling operations with auto ack / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "description": "", + "id": 15, + "markdownSource": "# QUEUES", + "name": "New Panel (3)", + "nullValueDisplayText": null, + "panelTitleVisible": false, + "textAutosized": false, + "transparentBackground": false, + "type": "text" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_get_empty_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of polling consumer operations that yield no result.\n\nAny value above zero means that RabbitMQ resources are wasted by polling consumers.\n\nCompare this metric to the other polling consumer metrics to see the inefficiency rate.\n\nThe use of polling consumers is highly inefficient and therefore strongly discouraged.\n\n* [Fetching individual messages](https://www.rabbitmq.com/consumers.html#fetching)\n* [Consumers](https://www.rabbitmq.com/consumers.html)", + "id": 16, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Polling operations that yield no result / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channel_get_ack_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of messages delivered to polling consumers that use manual acknowledgement mode.\n\nThe use of polling consumers is highly inefficient and therefore strongly discouraged.\n\n* [Fetching individual messages](https://www.rabbitmq.com/consumers.html#fetching)\n* [Consumers](https://www.rabbitmq.com/consumers.html)", + "id": 17, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Polling operations with manual ack / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "rabbitmq_queues{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "Total number of queue masters per node. \n\nThis metric makes it easy to see sub-optimal queue distribution in a cluster.\n\n* [Queue Masters, Data Locality](https://www.rabbitmq.com/ha.html#master-migration-data-locality)\n* [Queues](https://www.rabbitmq.com/queues.html)", + "id": 18, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Total queues", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_queues_declared_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of queue declarations performed by clients.\n\nLow sustained values above zero are to be expected. High rates may be indicative of queue churn or high rates of connection recovery. Confirm connection recovery rates by using the _Connections opened_ metric.\n\n* [Queues](https://www.rabbitmq.com/queues.html)", + "id": 19, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Queues declared / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_queues_created_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of new queues created (as opposed to redeclarations).\n\nLow sustained values above zero are to be expected. High rates may be indicative of queue churn or high rates of connection recovery. Confirm connection recovery rates by using the _Connections opened_ metric.\n\n* [Queues](https://www.rabbitmq.com/queues.html)", + "id": 20, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Queues created / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_queues_deleted_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of queues deleted.\n\nLow sustained values above zero are to be expected. High rates may be indicative of queue churn or high rates of connection recovery. Confirm connection recovery rates by using the _Connections opened_ metric.\n\n* [Queues](https://www.rabbitmq.com/queues.html)", + "id": 21, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Queues deleted / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "description": "", + "id": 22, + "markdownSource": "# CHANNELS\n", + "name": "New Panel (4)", + "nullValueDisplayText": null, + "panelTitleVisible": false, + "textAutosized": false, + "transparentBackground": false, + "type": "text" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "rabbitmq_channels{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "Total number of channels on all currently opened connections.\n\nIf this metric grows monotonically it is highly likely a channel leak in one of the applications. Confirm channel leaks by using the _Channels opened_ and _Channels closed_ metrics.\n\n* [Channel Leak](https://www.rabbitmq.com/channels.html#channel-leaks)\n* [Channels](https://www.rabbitmq.com/channels.html)", + "id": 23, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Total channels", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channels_opened_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of new channels opened by applications across all connections. Channels are expected to be long-lived.\n\nLow sustained values above zero are to be expected. High rates may be indicative of channel churn or mass connection recovery. Confirm connection recovery rates by using the _Connections opened_ metric.\n\n* [High Channel Churn](https://www.rabbitmq.com/channels.html#high-channel-churn)\n* [Channels](https://www.rabbitmq.com/channels.html)", + "id": 24, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Channels opened / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_channels_closed_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of channels closed by applications across all connections. Channels are expected to be long-lived.\n\nLow sustained values above zero are to be expected. High rates may be indicative of channel churn or mass connection recovery. Confirm connection recovery rates by using the _Connections opened_ metric.\n\n* [High Channel Churn](https://www.rabbitmq.com/channels.html#high-channel-churn)\n* [Channels](https://www.rabbitmq.com/channels.html)", + "id": 25, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Channels closed / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "description": "", + "id": 26, + "markdownSource": "# CONNECTIONS\n", + "name": "New Panel (5)", + "nullValueDisplayText": null, + "panelTitleVisible": false, + "textAutosized": false, + "transparentBackground": false, + "type": "text" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "rabbitmq_connections{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "Total number of client connections.\n\nIf this metric grows monotonically it is highly likely a connection leak in one of the applications. Confirm connection leaks by using the _Connections opened_ and _Connections closed_ metrics.\n\n* [Connection Leak](https://www.rabbitmq.com/connections.html#monitoring)\n* [Connections](https://www.rabbitmq.com/connections.html)", + "id": 27, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Total connections", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_connections_opened_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of new connections opened by clients. Connections are expected to be long-lived.\n\nLow sustained values above zero are to be expected. High rates may be indicative of connection churn or mass connection recovery.\n\n* [Connection Leak](https://www.rabbitmq.com/connections.html#monitoring)\n* [Connections](https://www.rabbitmq.com/connections.html)", + "id": 28, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Connections opened / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + }, + { + "advancedQueries": [ + { + "displayInfo": { + "displayName": "Pod < Workload < Namespace < Cluster", + "timeSeriesDisplayNameTemplate": "{{kube_pod_name}} < {{kube_workload_name}} < {{kube_namespace_name}} < {{kube_cluster_name}}", + "type": "lines" + }, + "enabled": true, + "format": { + "decimals": null, + "displayFormat": "auto", + "inputFormat": "1", + "nullValueDisplayMode": "nullGap", + "unit": "number", + "yAxis": "auto" + }, + "query": "sum(rate(rabbitmq_connections_closed_total{kube_cluster_name=~$cluster,kube_namespace_name=~$namespace,kube_workload_name=~$workload, kube_pod_name=~$pod}[$__interval])) by (kube_pod_name, kube_cluster_name,kube_namespace_name, kube_workload_name)" + } + ], + "axesConfiguration": { + "bottom": { + "enabled": true + }, + "left": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + }, + "right": { + "decimals": null, + "displayFormat": "auto", + "displayName": null, + "enabled": true, + "maxInputFormat": "1", + "maxValue": null, + "minInputFormat": "1", + "minValue": 0.0, + "scale": "linear", + "unit": "auto" + } + }, + "description": "The rate of connections closed. Connections are expected to be long-lived.\n\nLow sustained values above zero are to be expected. High rates may be indicative of connection churn or mass connection recovery.\n\n* [Connections](https://www.rabbitmq.com/connections.html)", + "id": 29, + "legendConfiguration": { + "enabled": true, + "height": null, + "layout": "table", + "position": "bottom", + "showCurrent": true, + "width": null + }, + "name": "Connections closed / s", + "nullValueDisplayText": null, + "type": "advancedTimechart" + } + ], + "publicNotation": false, + "schema": 3, + "scopeExpressionList": [ + { + "descriptor": { + "aggregationForGroup": "none", + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "createdAt": 1631554131026, + "customerId": 1, + "deferred": false, + "documentId": "1--6139949314852700299", + "documentTimestamp": 1631554131026, + "documentType": "metric", + "experimental": false, + "firstSeen": 1612202275360, + "generatedFrom": "com.draios.model.metrics.kubernetes.KubernetesName", + "generator": { + "aggregationForGroup": "none", + "aggregations": [ + "concat", + "distinct", + "count" + ], + "avg": false, + "canCalculate": false, + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "concat": false, + "context": [ + "container" + ], + "count": false, + "countDistinct": false, + "deferred": false, + "experimental": false, + "firstSeen": 1612202275360, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "groupBy": [], + "heuristic": false, + "hidden": false, + "id": "kubernetes.cluster.name", + "identity": false, + "label": true, + "lastSeen": 1631551320996, + "max": false, + "metricType": "none", + "min": false, + "namespaces": [ + "kubernetes.cluster" + ], + "rateOfChange": false, + "scale": 1.0, + "scopes": [], + "sum": false, + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "timeAvg": false, + "type": "string" + }, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "heuristic": false, + "hidden": false, + "id": "kubernetes.cluster.name", + "identity": false, + "lastSeen": 1631551320996, + "metricType": "tag", + "namespaces": [ + "kubernetes.cluster" + ], + "publicId": "kube_cluster_name", + "scale": 1.0, + "scopes": [], + "segment": false, + "segmentations": [], + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "type": "string" + }, + "displayName": "cluster", + "isVariable": true, + "operand": "kubernetes.cluster.name", + "operator": "in", + "value": [], + "variable": true + }, + { + "descriptor": { + "aggregationForGroup": "none", + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "createdAt": 1631554131026, + "customerId": 1, + "deferred": false, + "documentId": "1--7083949535721519842", + "documentTimestamp": 1631554131026, + "documentType": "metric", + "experimental": false, + "firstSeen": 1612202275360, + "generatedFrom": "com.draios.model.metrics.kubernetes.KubernetesName", + "generator": { + "aggregationForGroup": "none", + "aggregations": [ + "concat", + "distinct", + "count" + ], + "avg": false, + "canCalculate": false, + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "concat": false, + "context": [ + "container" + ], + "count": false, + "countDistinct": false, + "deferred": false, + "experimental": false, + "firstSeen": 1612202275360, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "groupBy": [], + "heuristic": false, + "hidden": false, + "id": "kubernetes.namespace.name", + "identity": false, + "label": true, + "lastSeen": 1631551561555, + "max": false, + "metricType": "none", + "min": false, + "namespaces": [ + "kubernetes.namespace" + ], + "rateOfChange": false, + "scale": 1.0, + "scopes": [], + "sum": false, + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "timeAvg": false, + "type": "string" + }, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "heuristic": false, + "hidden": false, + "id": "kubernetes.namespace.name", + "identity": false, + "lastSeen": 1631551561555, + "metricType": "tag", + "namespaces": [ + "kubernetes.namespace" + ], + "publicId": "kube_namespace_name", + "scale": 1.0, + "scopes": [], + "segment": false, + "segmentations": [], + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "type": "string" + }, + "displayName": "namespace", + "isVariable": true, + "operand": "kubernetes.namespace.name", + "operator": "in", + "value": [], + "variable": true + }, + { + "descriptor": { + "aggregationForGroup": "none", + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "createdAt": 1631554131026, + "customerId": 1, + "deferred": false, + "documentId": "1--3678655470823086545", + "documentTimestamp": 1631554131026, + "documentType": "metric", + "experimental": false, + "firstSeen": 1619467970842, + "generatedFrom": "com.draios.model.metrics.kubernetes.KubernetesWorkload", + "generator": { + "aggregationForGroup": "none", + "aggregations": [ + "concat", + "distinct", + "count" + ], + "avg": false, + "canCalculate": false, + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "concat": false, + "context": [ + "container" + ], + "count": false, + "countDistinct": false, + "deferred": false, + "experimental": false, + "firstSeen": 1619467970842, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "groupBy": [], + "heuristic": false, + "hidden": false, + "id": "kubernetes.workload.name", + "identity": false, + "label": true, + "lastSeen": 1631551320996, + "max": false, + "metricType": "none", + "min": false, + "namespaces": [ + "kubernetes.workload.name" + ], + "rateOfChange": false, + "scale": 1.0, + "scopes": [], + "sum": false, + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "timeAvg": false, + "type": "string" + }, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "heuristic": false, + "hidden": false, + "id": "kubernetes.workload.name", + "identity": false, + "lastSeen": 1631551320996, + "metricType": "tag", + "namespaces": [ + "kubernetes.workload.name" + ], + "publicId": "kube_workload_name", + "scale": 1.0, + "scopes": [], + "segment": false, + "segmentations": [], + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "type": "string" + }, + "displayName": "workload", + "isVariable": true, + "operand": "kubernetes.workload.name", + "operator": "in", + "value": [], + "variable": true + }, + { + "descriptor": { + "aggregationForGroup": "none", + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "createdAt": 1631554131026, + "customerId": 1, + "deferred": false, + "documentId": "1--7638853878924989689", + "documentTimestamp": 1631554131026, + "documentType": "metric", + "experimental": false, + "firstSeen": 1612202275360, + "generatedFrom": "com.draios.model.metrics.kubernetes.KubernetesName", + "generator": { + "aggregationForGroup": "none", + "aggregations": [ + "concat", + "distinct", + "count" + ], + "avg": false, + "canCalculate": false, + "canFilter": true, + "canGroupBy": true, + "canMonitor": false, + "category": "kubernetes", + "concat": false, + "context": [ + "container" + ], + "count": false, + "countDistinct": false, + "deferred": false, + "experimental": false, + "firstSeen": 1612202275360, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "groupBy": [], + "heuristic": false, + "hidden": false, + "id": "kubernetes.pod.name", + "identity": false, + "label": true, + "lastSeen": 1631551561555, + "max": false, + "metricType": "none", + "min": false, + "namespaces": [ + "kubernetes.pod" + ], + "rateOfChange": false, + "scale": 1.0, + "scopes": [], + "sum": false, + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "timeAvg": false, + "type": "string" + }, + "groupAggregations": [ + "concat", + "distinct", + "count" + ], + "heuristic": false, + "hidden": false, + "id": "kubernetes.pod.name", + "identity": false, + "lastSeen": 1631551561555, + "metricType": "tag", + "namespaces": [ + "kubernetes.pod" + ], + "publicId": "kube_pod_name", + "scale": 1.0, + "scopes": [], + "segment": false, + "segmentations": [], + "timeAggregations": [ + "concat", + "distinct", + "count" + ], + "type": "string" + }, + "displayName": "pod", + "isVariable": true, + "operand": "kubernetes.pod.name", + "operator": "in", + "value": [], + "variable": true + } + ] + } +} \ No newline at end of file diff --git a/resources/rabbitmq/include/sysdig-agent.yaml b/resources/rabbitmq/include/sysdig-agent.yaml new file mode 100644 index 00000000..3a0f41a6 --- /dev/null +++ b/resources/rabbitmq/include/sysdig-agent.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: sysdig-agent + namespace: sysdig-agent +data: + dragent.yaml: |- + metrics_excess_log: true + k8s_cluster_name: YourClusterName + 10s_flush_enable: true + app_checks_enabled: false + use_promscrape: true + new_k8s: true + promscrape_fastproto: true + prometheus: + enabled: true + prom_service_discovery: true + log_errors: true + max_metrics: 200000 + max_metrics_per_process: 200000 + max_tags_per_metric: 100 + ingest_raw: true + ingest_calculated: false \ No newline at end of file diff --git a/resources/rabbitmq/setup-guide.yaml b/resources/rabbitmq/setup-guide.yaml new file mode 100644 index 00000000..5884d1f1 --- /dev/null +++ b/resources/rabbitmq/setup-guide.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: SetupGuide +app: "rabbitmq" +version: 1.0.0 +appVersion: +- '3.8' +configurations: +- name: sysdig-agent.yaml + file: include/sysdig-agent.yaml +descriptionFile: INSTALL.md diff --git a/test/test_resources.py b/test/test_resources.py index c72db4be..48bd2270 100644 --- a/test/test_resources.py +++ b/test/test_resources.py @@ -21,7 +21,7 @@ kinds_with_description = ['Description','SetupGuide', 'Alert', 'RecordingRule'] kinds_with_configurations = ['Dashboard', 'Alert', 'SetupGuide', 'RecordingRule'] -sysdig_dashboard_keys_level_1 = ['description','layout','name','panels','schema','scopeExpressionList','eventDisplaySettings'] +sysdig_dashboard_keys_level_1 = ['description','layout','name','panels','schema','scopeExpressionList','eventDisplaySettings','publicNotation'] compulsory_fields_all = ["apiVersion", "kind", "app", "version", "appVersion"]