This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch fix/lifecycle-self-identity-resolution
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git

commit d0c28db76ca23c963e46d8e97bc5278e3f5e9922
Author: Hongtao Gao <[email protected]>
AuthorDate: Fri Jun 12 10:54:31 2026 +0000

    docs(observability): split lifecycle traffic into its own dashboard row
    
    Add a dedicated "Migration Flows — Tier Migrations (lifecycle)" panel
    that pairs banyandb_lifecycle_migration_* (sender side, sharing its data
    pod's pod_name) with the receiver's queue_sub remote_role="lifecycle"
    series. The pre-existing combined panels conflated request and migration
    traffic, making it hard to spot lifecycle wire-label regressions visually.
    
    Add remote_role!~"lifecycle" filters to the request-traffic panels so
    the two views don't double-count.
    
    Drive-by: switch [$__rate_interval] → [$__range] in the affected panels
    for window-stability across long inspection ranges.
---
 docs/operation/grafana-fodc-nodes.json | 574 +++++++++++++++++++++++++++++++--
 1 file changed, 549 insertions(+), 25 deletions(-)

diff --git a/docs/operation/grafana-fodc-nodes.json 
b/docs/operation/grafana-fodc-nodes.json
index deedcac49..404b0fa91 100644
--- a/docs/operation/grafana-fodc-nodes.json
+++ b/docs/operation/grafana-fodc-nodes.json
@@ -659,7 +659,7 @@
         "type": "prometheus",
         "uid": "${DS_PROMETHEUS}"
       },
-      "description": "Each row is one directed flow source→target (bare pod 
names) per operation, with the PUBLISHER’s view and the SUBSCRIBER’s view of 
the SAME traffic side by side — never sum the two. Request edges pair 
banyandb_queue_pub_* (sender) with banyandb_queue_sub_* (receiver); 
tier-migration edges pair banyandb_lifecycle_migration_* (lifecycle sidecar, 
sharing its data pod’s pod_name) with the receiver’s queue_sub 
remote_role=\"lifecycle\" series. The two sides are joined on [...]
+      "description": "Streaming pod-to-pod flows (excludes tier-migration 
edges; see the Migration Flows panel below for those). Each row is one directed 
source→target per (group, operation). Pub side is the publisher container; Sub 
side is the receiver. Units are per-second (rate over $__range). Pub msg/s and 
Sub msg/s should match side-to-side; a populated Pub cell with an empty Sub 
cell is signal — an uninstrumented side or missing scrape target. p99 latencies 
are histogram-quantile o [...]
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -895,7 +895,7 @@
           },
           "editorMode": "code",
           "exemplar": false,
-          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_pub_total_finished{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_queue_pub_total_finished{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__rate_interval]) or 
rate(banyandb_lifecycle_migration_total_finished{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_lifecyc [...]
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_pub_total_finished{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__range]) or 
rate(banyandb_queue_pub_total_finished{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__range]), \"source\", \"$1\", \"pod_name\", 
\"(.*)\"), \"target\", \"$1\", \"remote_node\", \"([^.:]+).*\"))",
           "format": "table",
           "instant": true,
           "legendFormat": "__auto",
@@ -909,7 +909,7 @@
           },
           "editorMode": "code",
           "exemplar": false,
-          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_started{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_queue_sub_total_started{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__rate_interval]), \"source\", \"$1\", 
\"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", \"pod_name\", \"(.*)\"))",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_started{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\", 
remote_role!~\"lifecycle\"}[$__range]) or 
rate(banyandb_queue_sub_total_started{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\", remote_role!~\"lifecycle\"}[$__range]), 
\"source\", \"$1\", \"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", 
\"pod_name\", \"(.*)\"))",
           "format": "table",
           "instant": true,
           "legendFormat": "__auto",
@@ -923,7 +923,7 @@
           },
           "editorMode": "code",
           "exemplar": false,
-          "expr": "histogram_quantile(0.99, sum by (le, source, target, 
operation) 
(label_replace(label_replace(rate(banyandb_queue_pub_total_latency_bucket{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_queue_pub_total_latency_bucket{job=~\"$job\", 
remote_role=~\"$role\", remote_node=~\"($pod)\\\\..*\"}[$__rate_interval]) or 
rate(banyandb_lifecycle_migration_total_latency_bucket{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod [...]
+          "expr": "histogram_quantile(0.99, sum by (le, source, target, 
operation) 
(label_replace(label_replace(rate(banyandb_queue_pub_total_latency_bucket{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__range]) or 
rate(banyandb_queue_pub_total_latency_bucket{job=~\"$job\", 
remote_role=~\"$role\", remote_node=~\"($pod)\\\\..*\"}[$__range]), \"source\", 
\"$1\", \"pod_name\", \"(.*)\"), \"target\", \"$1\", \"remote_node\", 
\"([^.:]+).*\")))",
           "format": "table",
           "instant": true,
           "legendFormat": "__auto",
@@ -937,7 +937,7 @@
           },
           "editorMode": "code",
           "exemplar": false,
-          "expr": "histogram_quantile(0.99, sum by (le, source, target, 
operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_latency_bucket{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_queue_sub_total_latency_bucket{job=~\"$job\", 
remote_role=~\"$role\", remote_node=~\"($pod)\\\\..*\"}[$__rate_interval]), 
\"source\", \"$1\", \"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", 
\"pod_name\", \"(.*)\")))",
+          "expr": "histogram_quantile(0.99, sum by (le, source, target, 
operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_latency_bucket{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\", 
remote_role!~\"lifecycle\"}[$__range]) or 
rate(banyandb_queue_sub_total_latency_bucket{job=~\"$job\", 
remote_role=~\"$role\", remote_node=~\"($pod)\\\\..*\", 
remote_role!~\"lifecycle\"}[$__range]), \"source\", \"$1\", \"remote_node\", 
\"([^.:]+).*\"), \"target\", \"$1\", \ [...]
           "format": "table",
           "instant": true,
           "legendFormat": "__auto",
@@ -951,7 +951,7 @@
           },
           "editorMode": "code",
           "exemplar": false,
-          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_pub_total_err{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_queue_pub_total_err{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__rate_interval]) or 
rate(banyandb_lifecycle_migration_total_err{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_lifecycle_migration_to [...]
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_pub_total_err{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\"}[$__range]) or 
rate(banyandb_queue_pub_total_err{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__range]), \"source\", \"$1\", \"pod_name\", 
\"(.*)\"), \"target\", \"$1\", \"remote_node\", \"([^.:]+).*\"))",
           "format": "table",
           "instant": true,
           "legendFormat": "__auto",
@@ -965,7 +965,7 @@
           },
           "editorMode": "code",
           "exemplar": false,
-          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_err{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_queue_sub_total_err{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__rate_interval]), \"source\", \"$1\", 
\"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", \"pod_name\", \"(.*)\"))",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_err{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\", 
remote_role!~\"lifecycle\"}[$__range]) or 
rate(banyandb_queue_sub_total_err{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\", remote_role!~\"lifecycle\"}[$__range]), 
\"source\", \"$1\", \"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", 
\"pod_name\", \"(.*)\"))",
           "format": "table",
           "instant": true,
           "legendFormat": "__auto",
@@ -979,7 +979,7 @@
           },
           "editorMode": "code",
           "exemplar": false,
-          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_pub_sent_bytes{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_queue_pub_sent_bytes{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__rate_interval]) or 
rate(banyandb_lifecycle_migration_sent_bytes{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_lifecycle_migration [...]
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_pub_sent_bytes{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\"}[$__range]) or 
rate(banyandb_queue_pub_sent_bytes{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__range]), \"source\", \"$1\", \"pod_name\", 
\"(.*)\"), \"target\", \"$1\", \"remote_node\", \"([^.:]+).*\"))",
           "format": "table",
           "instant": true,
           "legendFormat": "__auto",
@@ -993,7 +993,7 @@
           },
           "editorMode": "code",
           "exemplar": false,
-          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_received_bytes{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__rate_interval]) or 
rate(banyandb_queue_sub_received_bytes{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\"}[$__rate_interval]), \"source\", \"$1\", 
\"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", \"pod_name\", \"(.*)\"))",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_received_bytes{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\", 
remote_role!~\"lifecycle\"}[$__range]) or 
rate(banyandb_queue_sub_received_bytes{job=~\"$job\", remote_role=~\"$role\", 
remote_node=~\"($pod)\\\\..*\", remote_role!~\"lifecycle\"}[$__range]), 
\"source\", \"$1\", \"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", 
\"pod_name\", \"(.*)\"))",
           "format": "table",
           "instant": true,
           "legendFormat": "__auto",
@@ -1044,13 +1044,537 @@
       ],
       "type": "table"
     },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Cross-tier lifecycle migration flows (hot→warm, 
warm→cold). Each row is one directed source→target per (group, operation). Pub 
side is the lifecycle sidecar inside the SOURCE data pod (publishes via 
banyandb_lifecycle_migration_*); Sub side is the data pod RECEIVING (records 
via banyandb_queue_sub_total_started{remote_role=\"lifecycle\"}). 
Counts/bytes/errors are per-day (rate × 86400) because tier migration is a 
daily-batch workload and an instant per-second rate i [...]
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "custom": {
+            "align": "auto",
+            "cellOptions": {
+              "type": "auto"
+            },
+            "filterable": false,
+            "inspect": false
+          },
+          "decimals": 2,
+          "mappings": [
+            {
+              "type": "special",
+              "options": {
+                "match": "nan",
+                "result": {
+                  "text": "-",
+                  "index": 0
+                }
+              }
+            }
+          ],
+          "noValue": "-",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "text",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short",
+          "overrides": [
+            {
+              "matcher": {
+                "id": "byName",
+                "options": "Pub msg/day"
+              },
+              "properties": [
+                {
+                  "id": "unit",
+                  "value": "short"
+                },
+                {
+                  "id": "decimals",
+                  "value": 2
+                }
+              ]
+            },
+            {
+              "matcher": {
+                "id": "byName",
+                "options": "Sub msg/day"
+              },
+              "properties": [
+                {
+                  "id": "unit",
+                  "value": "short"
+                },
+                {
+                  "id": "decimals",
+                  "value": 2
+                }
+              ]
+            },
+            {
+              "matcher": {
+                "id": "byName",
+                "options": "Pub err/day"
+              },
+              "properties": [
+                {
+                  "id": "unit",
+                  "value": "short"
+                },
+                {
+                  "id": "decimals",
+                  "value": 2
+                },
+                {
+                  "id": "thresholds",
+                  "value": {
+                    "mode": "absolute",
+                    "steps": [
+                      {
+                        "color": "text",
+                        "value": null
+                      },
+                      {
+                        "color": "red",
+                        "value": 1e-06
+                      }
+                    ]
+                  }
+                },
+                {
+                  "id": "custom.cellOptions",
+                  "value": {
+                    "type": "color-text"
+                  }
+                }
+              ]
+            },
+            {
+              "matcher": {
+                "id": "byName",
+                "options": "Sub err/day"
+              },
+              "properties": [
+                {
+                  "id": "unit",
+                  "value": "short"
+                },
+                {
+                  "id": "decimals",
+                  "value": 2
+                },
+                {
+                  "id": "thresholds",
+                  "value": {
+                    "mode": "absolute",
+                    "steps": [
+                      {
+                        "color": "text",
+                        "value": null
+                      },
+                      {
+                        "color": "red",
+                        "value": 1e-06
+                      }
+                    ]
+                  }
+                },
+                {
+                  "id": "custom.cellOptions",
+                  "value": {
+                    "type": "color-text"
+                  }
+                }
+              ]
+            },
+            {
+              "matcher": {
+                "id": "byName",
+                "options": "Pub B/day"
+              },
+              "properties": [
+                {
+                  "id": "unit",
+                  "value": "bytes"
+                }
+              ]
+            },
+            {
+              "matcher": {
+                "id": "byName",
+                "options": "Sub B/day"
+              },
+              "properties": [
+                {
+                  "id": "unit",
+                  "value": "bytes"
+                }
+              ]
+            }
+          ]
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Pub p99"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "s"
+              },
+              {
+                "id": "decimals",
+                "value": 3
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Sub p99"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "s"
+              },
+              {
+                "id": "decimals",
+                "value": 3
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Pub B/s"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "Bps"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Sub B/s"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "Bps"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Pub err/s"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "ops"
+              },
+              {
+                "id": "custom.cellOptions",
+                "value": {
+                  "type": "color-text"
+                }
+              },
+              {
+                "id": "thresholds",
+                "value": {
+                  "mode": "absolute",
+                  "steps": [
+                    {
+                      "color": "text",
+                      "value": null
+                    },
+                    {
+                      "color": "red",
+                      "value": 1e-06
+                    }
+                  ]
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Sub err/s"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "ops"
+              },
+              {
+                "id": "custom.cellOptions",
+                "value": {
+                  "type": "color-text"
+                }
+              },
+              {
+                "id": "thresholds",
+                "value": {
+                  "mode": "absolute",
+                  "steps": [
+                    {
+                      "color": "text",
+                      "value": null
+                    },
+                    {
+                      "color": "red",
+                      "value": 1e-06
+                    }
+                  ]
+                }
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Source"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Target"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Operation"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 13,
+        "w": 24,
+        "x": 0,
+        "y": 30
+      },
+      "id": 62,
+      "options": {
+        "cellHeight": "sm",
+        "footer": {
+          "countRows": false,
+          "fields": "",
+          "reducer": [
+            "sum"
+          ],
+          "show": false
+        },
+        "showHeader": true,
+        "sortBy": [
+          {
+            "desc": true,
+            "displayName": "Pub msg/s"
+          }
+        ]
+      },
+      "pluginVersion": "11.2.0",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "exemplar": false,
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "A",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_lifecycle_migration_total_finished{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__range]) * 86400 or 
rate(banyandb_lifecycle_migration_total_finished{job=~\"$job\", 
remote_role=~\"$role\", remote_node=~\"($pod)\\\\..*\"}[$__range]) * 86400, 
\"source\", \"$1\", \"pod_name\", \"(.*)\"), \"target\", \"$1\", 
\"remote_node\", \"([^.:]+).*\"))"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "exemplar": false,
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "B",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_started{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\", 
remote_role=\"lifecycle\"}[$__range]) * 86400 or 
rate(banyandb_queue_sub_total_started{job=~\"$job\", remote_role=\"lifecycle\", 
remote_node=~\"($pod)\\\\..*\"}[$__range]) * 86400, \"source\", \"$1\", 
\"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", \"pod_name\", \"(.*)\"))"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "exemplar": false,
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "C",
+          "expr": "histogram_quantile(0.99, sum by (le, source, target, 
operation) 
(label_replace(label_replace(rate(banyandb_lifecycle_migration_total_latency_bucket{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__range]) or 
rate(banyandb_lifecycle_migration_total_latency_bucket{job=~\"$job\", 
remote_role=~\"$role\", remote_node=~\"($pod)\\\\..*\"}[$__range]), \"source\", 
\"$1\", \"pod_name\", \"(.*)\"), \"target\", \"$1\", \"remote_node\", 
\"([^.:]+).*\")))"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "exemplar": false,
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "D",
+          "expr": "histogram_quantile(0.99, sum by (le, source, target, 
operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_latency_bucket{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\", 
remote_role=\"lifecycle\"}[$__range]) or 
rate(banyandb_queue_sub_total_latency_bucket{job=~\"$job\", 
remote_role=\"lifecycle\", remote_node=~\"($pod)\\\\..*\"}[$__range]), 
\"source\", \"$1\", \"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", 
\"pod_name\", \"(.*)\")))"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "exemplar": false,
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "E",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_lifecycle_migration_total_err{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__range]) * 86400 or 
rate(banyandb_lifecycle_migration_total_err{job=~\"$job\", 
remote_role=~\"$role\", remote_node=~\"($pod)\\\\..*\"}[$__range]) * 86400, 
\"source\", \"$1\", \"pod_name\", \"(.*)\"), \"target\", \"$1\", 
\"remote_node\", \"([^.:]+).*\"))"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "exemplar": false,
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "F",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_total_err{job=~\"$job\", 
container_name=~\"$role\", pod_name=~\"$pod\", 
remote_role=\"lifecycle\"}[$__range]) * 86400 or 
rate(banyandb_queue_sub_total_err{job=~\"$job\", remote_role=\"lifecycle\", 
remote_node=~\"($pod)\\\\..*\"}[$__range]) * 86400, \"source\", \"$1\", 
\"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", \"pod_name\", \"(.*)\"))"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "exemplar": false,
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "G",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_lifecycle_migration_sent_bytes{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\"}[$__range]) * 86400 or 
rate(banyandb_lifecycle_migration_sent_bytes{job=~\"$job\", 
remote_role=~\"$role\", remote_node=~\"($pod)\\\\..*\"}[$__range]) * 86400, 
\"source\", \"$1\", \"pod_name\", \"(.*)\"), \"target\", \"$1\", 
\"remote_node\", \"([^.:]+).*\"))"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "editorMode": "code",
+          "exemplar": false,
+          "format": "table",
+          "instant": true,
+          "legendFormat": "__auto",
+          "range": false,
+          "refId": "H",
+          "expr": "sum by (source, target, operation) 
(label_replace(label_replace(rate(banyandb_queue_sub_received_bytes{job=~\"$job\",
 container_name=~\"$role\", pod_name=~\"$pod\", 
remote_role=\"lifecycle\"}[$__range]) * 86400 or 
rate(banyandb_queue_sub_received_bytes{job=~\"$job\", 
remote_role=\"lifecycle\", remote_node=~\"($pod)\\\\..*\"}[$__range]) * 86400, 
\"source\", \"$1\", \"remote_node\", \"([^.:]+).*\"), \"target\", \"$1\", 
\"pod_name\", \"(.*)\"))"
+        }
+      ],
+      "title": "Migration Flows — Tier Migrations (lifecycle)",
+      "transformations": [
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Time": true
+            },
+            "indexByName": {
+              "source": 0,
+              "target": 1,
+              "operation": 2,
+              "Value #A": 3,
+              "Value #B": 4,
+              "Value #C": 5,
+              "Value #D": 6,
+              "Value #E": 7,
+              "Value #F": 8,
+              "Value #G": 9,
+              "Value #H": 10
+            },
+            "renameByName": {
+              "source": "Source",
+              "target": "Target",
+              "operation": "Operation",
+              "Value #A": "Pub msg/day",
+              "Value #B": "Sub msg/day",
+              "Value #C": "Pub p99",
+              "Value #D": "Sub p99",
+              "Value #E": "Pub err/day",
+              "Value #F": "Sub err/day",
+              "Value #G": "Pub B/day",
+              "Value #H": "Sub B/day"
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
     {
       "collapsed": false,
       "gridPos": {
         "h": 1,
         "w": 24,
         "x": 0,
-        "y": 16
+        "y": 43
       },
       "id": 13,
       "panels": [],
@@ -1119,7 +1643,7 @@
         "h": 8,
         "w": 12,
         "x": 0,
-        "y": 17
+        "y": 44
       },
       "id": 14,
       "options": {
@@ -1220,7 +1744,7 @@
         "h": 8,
         "w": 12,
         "x": 12,
-        "y": 17
+        "y": 44
       },
       "id": 15,
       "options": {
@@ -1325,7 +1849,7 @@
         "h": 8,
         "w": 12,
         "x": 0,
-        "y": 25
+        "y": 52
       },
       "id": 16,
       "options": {
@@ -1430,7 +1954,7 @@
         "h": 8,
         "w": 12,
         "x": 12,
-        "y": 25
+        "y": 52
       },
       "id": 17,
       "options": {
@@ -1531,7 +2055,7 @@
         "h": 8,
         "w": 24,
         "x": 0,
-        "y": 33
+        "y": 60
       },
       "id": 18,
       "options": {
@@ -1588,7 +2112,7 @@
         "h": 1,
         "w": 24,
         "x": 0,
-        "y": 41
+        "y": 68
       },
       "id": 19,
       "panels": [],
@@ -1657,7 +2181,7 @@
         "h": 8,
         "w": 12,
         "x": 0,
-        "y": 42
+        "y": 69
       },
       "id": 20,
       "options": {
@@ -1758,7 +2282,7 @@
         "h": 8,
         "w": 12,
         "x": 12,
-        "y": 42
+        "y": 69
       },
       "id": 21,
       "options": {
@@ -1863,7 +2387,7 @@
         "h": 8,
         "w": 24,
         "x": 0,
-        "y": 50
+        "y": 77
       },
       "id": 22,
       "options": {
@@ -1908,7 +2432,7 @@
         "h": 1,
         "w": 24,
         "x": 0,
-        "y": 58
+        "y": 85
       },
       "id": 50,
       "panels": [],
@@ -1977,7 +2501,7 @@
         "h": 8,
         "w": 12,
         "x": 0,
-        "y": 59
+        "y": 86
       },
       "id": 51,
       "options": {
@@ -2078,7 +2602,7 @@
         "h": 8,
         "w": 12,
         "x": 12,
-        "y": 59
+        "y": 86
       },
       "id": 52,
       "options": {
@@ -2179,7 +2703,7 @@
         "h": 8,
         "w": 12,
         "x": 0,
-        "y": 67
+        "y": 94
       },
       "id": 53,
       "options": {
@@ -2293,7 +2817,7 @@
         "h": 8,
         "w": 12,
         "x": 12,
-        "y": 67
+        "y": 94
       },
       "id": 54,
       "options": {
@@ -2440,7 +2964,7 @@
     ]
   },
   "time": {
-    "from": "now-1h",
+    "from": "now-24h",
     "to": "now"
   },
   "timepicker": {},

Reply via email to