From 9ef656fc41b8b85f2a5e7f5063f4053ceb2ae4ea Mon Sep 17 00:00:00 2001 From: nisiyong Date: Fri, 2 Dec 2022 11:39:01 +0800 Subject: [PATCH 1/6] Add tags `message.keys` and `message.tags` for RocketMQ producer span --- CHANGES.md | 1 + .../apm/plugin/rocketMQ/v3/MessageSendInterceptor.java | 3 +++ .../apm/plugin/rocketMQ/v4/MessageSendInterceptor.java | 3 +++ .../scenarios/rocketmq-scenario/config/expectedData.yaml | 2 ++ test/plugin/scenarios/rocketmq-scenario/pom.xml | 2 ++ .../apm/testcase/rocketmq/controller/CaseController.java | 1 + 6 files changed, 12 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 376dbd9ee2..a80f728ce9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -16,6 +16,7 @@ Release Notes. * Report the agent version to OAP as an instance attribute * Polish jedis-4.x-plugin to change command to lowercase, which is consistent with jedis-2.x-3.x-plugin * Add micronauthttpclient,micronauthttpserver,memcached,ehcache,guavacache,jedis,redisson plugin config properties to agent.config +* Add tags `message.keys` and `message.tags` for RocketMQ producer span #### Documentation diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java index 2313bcf49d..e461fbfd3b 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java @@ -59,6 +59,9 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr span.setComponent(ComponentsDefine.ROCKET_MQ_PRODUCER); Tags.MQ_BROKER.set(span, (String) allArguments[0]); Tags.MQ_TOPIC.set(span, message.getTopic()); + span.tag(Tags.ofKey("message.keys"), message.getKeys()); + span.tag(Tags.ofKey("message.tags"), message.getTags()); + contextCarrier.extensionInjector().injectSendingTimestamp(); SpanLayer.asMQ(span); diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java index b27e438f6b..62af907b88 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java @@ -59,6 +59,9 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr span.setComponent(ComponentsDefine.ROCKET_MQ_PRODUCER); Tags.MQ_BROKER.set(span, (String) allArguments[0]); Tags.MQ_TOPIC.set(span, message.getTopic()); + span.tag(Tags.ofKey("message.keys"), message.getKeys()); + span.tag(Tags.ofKey("message.tags"), message.getTags()); + contextCarrier.extensionInjector().injectSendingTimestamp(); SpanLayer.asMQ(span); diff --git a/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml b/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml index 3d669b5f2d..bf9d47dd97 100644 --- a/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml @@ -32,6 +32,8 @@ segmentItems: tags: - {key: mq.broker, value: not null} - {key: mq.topic, value: TopicTest} + - {key: message.tags, value: TagA} + - {key: message.keys, value: KeyA} skipAnalysis: 'false' - operationName: GET:/case/rocketmq-scenario parentSpanId: -1 diff --git a/test/plugin/scenarios/rocketmq-scenario/pom.xml b/test/plugin/scenarios/rocketmq-scenario/pom.xml index 71cec225a5..91358a0001 100644 --- a/test/plugin/scenarios/rocketmq-scenario/pom.xml +++ b/test/plugin/scenarios/rocketmq-scenario/pom.xml @@ -30,6 +30,7 @@ UTF-8 1.8 + 3.8.1 4.9.4 2.1.6.RELEASE 1.18.20 @@ -97,6 +98,7 @@ maven-compiler-plugin + ${maven-compiler-plugin.version} ${compiler.version} ${compiler.version} diff --git a/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java b/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java index 3ce019c59d..091ca6f265 100644 --- a/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java +++ b/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java @@ -60,6 +60,7 @@ public String testcase() { // send msg Message msg = new Message("TopicTest", "TagA", + "KeyA", ("Hello RocketMQ sendMsg " + new Date()).getBytes(RemotingHelper.DEFAULT_CHARSET) ); SendResult sendResult = producer.send(msg); From 3e80bdae9a49ff0611929a58969343264642aaa9 Mon Sep 17 00:00:00 2001 From: nisiyong Date: Sat, 3 Dec 2022 09:48:11 +0800 Subject: [PATCH 2/6] Ignore tags when the value is blank --- .../apm/plugin/rocketMQ/v3/MessageSendInterceptor.java | 10 ++++++++-- .../apm/plugin/rocketMQ/v4/MessageSendInterceptor.java | 10 ++++++++-- .../testcase/rocketmq/controller/CaseController.java | 4 ++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java index e461fbfd3b..f3e5df692e 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java @@ -59,8 +59,14 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr span.setComponent(ComponentsDefine.ROCKET_MQ_PRODUCER); Tags.MQ_BROKER.set(span, (String) allArguments[0]); Tags.MQ_TOPIC.set(span, message.getTopic()); - span.tag(Tags.ofKey("message.keys"), message.getKeys()); - span.tag(Tags.ofKey("message.tags"), message.getTags()); + String keys = message.getKeys(); + if (StringUtil.isNotBlank(keys)) { + span.tag(Tags.ofKey("message.keys"), keys); + } + String tags = message.getTags(); + if (StringUtil.isNotBlank(tags)) { + span.tag(Tags.ofKey("message.tags"), tags); + } contextCarrier.extensionInjector().injectSendingTimestamp(); SpanLayer.asMQ(span); diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java index 62af907b88..d15f6f9bdd 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java @@ -59,8 +59,14 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr span.setComponent(ComponentsDefine.ROCKET_MQ_PRODUCER); Tags.MQ_BROKER.set(span, (String) allArguments[0]); Tags.MQ_TOPIC.set(span, message.getTopic()); - span.tag(Tags.ofKey("message.keys"), message.getKeys()); - span.tag(Tags.ofKey("message.tags"), message.getTags()); + String keys = message.getKeys(); + if (StringUtil.isNotBlank(keys)) { + span.tag(Tags.ofKey("message.keys"), keys); + } + String tags = message.getTags(); + if (StringUtil.isNotBlank(tags)) { + span.tag(Tags.ofKey("message.tags"), tags); + } contextCarrier.extensionInjector().injectSendingTimestamp(); SpanLayer.asMQ(span); diff --git a/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java b/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java index 091ca6f265..7ecda106ed 100644 --- a/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java +++ b/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java @@ -59,10 +59,10 @@ public String testcase() { // send msg Message msg = new Message("TopicTest", - "TagA", - "KeyA", ("Hello RocketMQ sendMsg " + new Date()).getBytes(RemotingHelper.DEFAULT_CHARSET) ); + msg.setTags("TagA"); + msg.setKeys("KeyA"); SendResult sendResult = producer.send(msg); System.out.printf("%s send msg: %s%n", new Date(), sendResult); From 6c47ea0d2ce8d19a48913cbd391170339e2fac26 Mon Sep 17 00:00:00 2001 From: nisiyong Date: Sat, 3 Dec 2022 10:21:23 +0800 Subject: [PATCH 3/6] Fix test, do not generate segment when health check --- apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml | 2 +- .../apm/testcase/rocketmq/controller/CaseController.java | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml index 7a9d75d297..f26d77d6a0 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml @@ -30,7 +30,7 @@ UTF-8 - 4.1.0-incubating + 4.3.1 diff --git a/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java b/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java index 7ecda106ed..ab96fd6a7c 100644 --- a/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java +++ b/test/plugin/scenarios/rocketmq-scenario/src/main/java/test/apache/skywalking/apm/testcase/rocketmq/controller/CaseController.java @@ -103,14 +103,6 @@ public String healthCheck() throws Exception { producer.setNamesrvAddr(namerServer); producer.start(); System.out.printf("HealthCheck Provider Started.%n"); - - // send msg - Message msg = new Message("HealthCheckTopicTest", - "TagA", - ("Hello RocketMQ sendMsg " + new Date()).getBytes(RemotingHelper.DEFAULT_CHARSET) - ); - SendResult sendResult = producer.send(msg); - System.out.printf("healthCheck %s send msg: %s%n", new Date(), sendResult); return SUCCESS; } From 37857be586f05881e72ec6b941493fa65d4022ae Mon Sep 17 00:00:00 2001 From: nisiyong Date: Sat, 3 Dec 2022 11:11:08 +0800 Subject: [PATCH 4/6] Fix test --- .../plugin/scenarios/rocketmq-scenario/config/expectedData.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml b/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml index bf9d47dd97..02fbe14d95 100644 --- a/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml @@ -32,8 +32,8 @@ segmentItems: tags: - {key: mq.broker, value: not null} - {key: mq.topic, value: TopicTest} - - {key: message.tags, value: TagA} - {key: message.keys, value: KeyA} + - {key: message.tags, value: TagA} skipAnalysis: 'false' - operationName: GET:/case/rocketmq-scenario parentSpanId: -1 From b3f0f05832f1628e00cf999ac4575d790ce75310 Mon Sep 17 00:00:00 2001 From: nisiyong Date: Sat, 3 Dec 2022 12:26:09 +0800 Subject: [PATCH 5/6] Revert rocketmq-client.version --- apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml index f26d77d6a0..7a9d75d297 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/pom.xml @@ -30,7 +30,7 @@ UTF-8 - 4.3.1 + 4.1.0-incubating From 477423a1e61af5a069e13f34df8bb4a59f76879f Mon Sep 17 00:00:00 2001 From: nisiyong Date: Sat, 3 Dec 2022 22:45:24 +0800 Subject: [PATCH 6/6] Rename span tags --- CHANGES.md | 2 +- .../apm/plugin/rocketMQ/v3/MessageSendInterceptor.java | 4 ++-- .../apm/plugin/rocketMQ/v4/MessageSendInterceptor.java | 4 ++-- .../scenarios/rocketmq-scenario/config/expectedData.yaml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a80f728ce9..ab70ca9621 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -16,7 +16,7 @@ Release Notes. * Report the agent version to OAP as an instance attribute * Polish jedis-4.x-plugin to change command to lowercase, which is consistent with jedis-2.x-3.x-plugin * Add micronauthttpclient,micronauthttpserver,memcached,ehcache,guavacache,jedis,redisson plugin config properties to agent.config -* Add tags `message.keys` and `message.tags` for RocketMQ producer span +* Add tags `mq.message.keys` and `mq.message.tags` for RocketMQ producer span #### Documentation diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java index f3e5df692e..42898d3577 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v3/MessageSendInterceptor.java @@ -61,11 +61,11 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr Tags.MQ_TOPIC.set(span, message.getTopic()); String keys = message.getKeys(); if (StringUtil.isNotBlank(keys)) { - span.tag(Tags.ofKey("message.keys"), keys); + span.tag(Tags.ofKey("mq.message.keys"), keys); } String tags = message.getTags(); if (StringUtil.isNotBlank(tags)) { - span.tag(Tags.ofKey("message.tags"), tags); + span.tag(Tags.ofKey("mq.message.tags"), tags); } contextCarrier.extensionInjector().injectSendingTimestamp(); diff --git a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java index d15f6f9bdd..acb175b747 100644 --- a/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/rocketMQ-4.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/rocketMQ/v4/MessageSendInterceptor.java @@ -61,11 +61,11 @@ public void beforeMethod(EnhancedInstance objInst, Method method, Object[] allAr Tags.MQ_TOPIC.set(span, message.getTopic()); String keys = message.getKeys(); if (StringUtil.isNotBlank(keys)) { - span.tag(Tags.ofKey("message.keys"), keys); + span.tag(Tags.ofKey("mq.message.keys"), keys); } String tags = message.getTags(); if (StringUtil.isNotBlank(tags)) { - span.tag(Tags.ofKey("message.tags"), tags); + span.tag(Tags.ofKey("mq.message.tags"), tags); } contextCarrier.extensionInjector().injectSendingTimestamp(); diff --git a/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml b/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml index 02fbe14d95..9eeff18822 100644 --- a/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml +++ b/test/plugin/scenarios/rocketmq-scenario/config/expectedData.yaml @@ -32,8 +32,8 @@ segmentItems: tags: - {key: mq.broker, value: not null} - {key: mq.topic, value: TopicTest} - - {key: message.keys, value: KeyA} - - {key: message.tags, value: TagA} + - {key: mq.message.keys, value: KeyA} + - {key: mq.message.tags, value: TagA} skipAnalysis: 'false' - operationName: GET:/case/rocketmq-scenario parentSpanId: -1