You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wa...@apache.org on 2024/11/12 06:32:38 UTC

(skywalking) 01/01: Polish mesh data dispatcher: don't generate Instance/Endpoint metrics if they are empty.

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

wankai pushed a commit to branch polish-mesh-dispatcher
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 48f2dfbada9caf3b0558915c03d9350a207f5b61
Author: wankai123 <wa...@foxmail.com>
AuthorDate: Tue Nov 12 14:31:13 2024 +0800

    Polish mesh data dispatcher: don't generate Instance/Endpoint metrics if they are empty.
---
 docs/en/changes/changes.md                         |  1 +
 .../receiver/mesh/TelemetryDataDispatcher.java     | 29 ++++++++++++++++------
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 5402732691..0617ec035e 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -18,6 +18,7 @@
 * The index type `BanyanDB.IndexRule.IndexType#TREE` is removed. All indices are using `IndexType#INVERTED` now.
 * Add max query size settings to BanyanDB.
 * Fix "BanyanDBTraceQueryDAO.queryBasicTraces" doesn't support querying by "trace_id".
+* Polish mesh data dispatcher: don't generate Instance/Endpoint metrics if they are empty.
 
 #### UI
 
diff --git a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
index 11cdf191ac..e72f28e368 100644
--- a/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
+++ b/oap-server/server-receiver-plugin/skywalking-mesh-receiver-plugin/src/main/java/org/apache/skywalking/aop/server/receiver/mesh/TelemetryDataDispatcher.java
@@ -167,15 +167,21 @@ public class TelemetryDataDispatcher {
 
         if (org.apache.skywalking.apm.network.common.v3.DetectPoint.server.equals(metrics.getDetectPoint())) {
             toTCPService(metrics, minuteTimeBucket);
-            toTCPServiceInstance(metrics, minuteTimeBucket);
-            toTCPServiceInstanceTraffic(metrics, minuteTimeBucket);
+            // Don't generate instance metrics, if no dest instance.
+            if (StringUtil.isNotEmpty(metrics.getDestServiceInstance())) {
+                toTCPServiceInstance(metrics, minuteTimeBucket);
+                toTCPServiceInstanceTraffic(metrics, minuteTimeBucket);
+            }
         }
 
         String sourceService = metrics.getSourceServiceName();
         // Don't generate relation, if no source.
         if (StringUtil.isNotEmpty(sourceService)) {
             toTCPServiceRelation(metrics, minuteTimeBucket);
-            toTCPServiceInstanceRelation(metrics, minuteTimeBucket);
+            // Don't generate instance relation, if no source instance.
+            if (StringUtil.isNotEmpty(metrics.getSourceServiceInstance())) {
+                toTCPServiceInstanceRelation(metrics, minuteTimeBucket);
+            }
         }
     }
 
@@ -184,16 +190,25 @@ public class TelemetryDataDispatcher {
 
         if (org.apache.skywalking.apm.network.common.v3.DetectPoint.server.equals(metrics.getDetectPoint())) {
             toService(metrics, minuteTimeBucket);
-            toServiceInstance(metrics, minuteTimeBucket);
-            toServiceInstanceTraffic(metrics, minuteTimeBucket);
-            toEndpoint(metrics, minuteTimeBucket);
+            // Don't generate instance metrics, if no dest instance.
+            if (StringUtil.isNotEmpty(metrics.getDestServiceInstance())) {
+                toServiceInstance(metrics, minuteTimeBucket);
+                toServiceInstanceTraffic(metrics, minuteTimeBucket);
+            }
+            // Don't generate endpoint metrics, if no endpoint.
+            if (StringUtil.isNotEmpty(metrics.getEndpoint())) {
+                toEndpoint(metrics, minuteTimeBucket);
+            }
         }
 
         String sourceService = metrics.getSourceServiceName();
         // Don't generate relation, if no source.
         if (StringUtil.isNotEmpty(sourceService)) {
             toServiceRelation(metrics, minuteTimeBucket);
-            toServiceInstanceRelation(metrics, minuteTimeBucket);
+            // Don't generate instance relation, if no source instance.
+            if (StringUtil.isNotEmpty(metrics.getSourceServiceInstance())) {
+                toServiceInstanceRelation(metrics, minuteTimeBucket);
+            }
         }
     }