From 4b24b7d7956240a1968ebfdf313082dac6158a94 Mon Sep 17 00:00:00 2001 From: Brandon Fergerson Date: Mon, 9 May 2022 11:00:56 +0400 Subject: [PATCH] Add log endpoint name (#171) --- CHANGES.md | 1 + .../apm/agent/core/context/AbstractTracerContext.java | 5 +++++ .../skywalking/apm/agent/core/context/ContextManager.java | 8 ++++++++ .../apm/agent/core/context/IgnoredTracerContext.java | 5 +++++ .../skywalking/apm/agent/core/context/TracingContext.java | 5 +++++ .../log/log4j/v1/x/log/GRPCLogAppenderInterceptor.java | 6 ++++++ .../log/log4j/v2/x/log/GRPCLogAppenderInterceptor.java | 6 ++++++ .../log/logback/v1/x/log/GRPCLogAppenderInterceptor.java | 6 ++++++ test/e2e/case/expected/logs-list.yml | 6 +++--- 9 files changed, 45 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 47a99d733..e45e028d2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,6 +15,7 @@ Release Notes. * Fix NPE in elasticsearch plugin. * Grpc plugin support trace client async generic call(without grpc stubs), support Method type: `UNARY`、`SERVER_STREAMING`. * Enhance Apache ShenYu (incubating) plugin: support trace `grpc`,`sofarpc`,`motan`,`tars` rpc proxy. +* Add primary endpoint name to log events. #### Documentation diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java index da83f37c2..a212e126e 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java @@ -133,4 +133,9 @@ public interface AbstractTracerContext { * Get current correlation context */ CorrelationContext getCorrelationContext(); + + /** + * Get current primary endpoint name + */ + String getPrimaryEndpointName(); } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java index 44dc57575..c1ed28fd9 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java @@ -93,6 +93,14 @@ public class ContextManager implements BootService { return Objects.nonNull(context) ? context.getSpanId() : -1; } + /** + * @return the current primary endpoint name. Otherwise, the value is null. + */ + public static String getPrimaryEndpointName() { + AbstractTracerContext context = CONTEXT.get(); + return Objects.nonNull(context) ? context.getPrimaryEndpointName() : null; + } + public static AbstractSpan createEntrySpan(String operationName, ContextCarrier carrier) { AbstractSpan span; AbstractTracerContext context; diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java index c795014a1..5433b1417 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java @@ -126,6 +126,11 @@ public class IgnoredTracerContext implements AbstractTracerContext { return this.correlationContext; } + @Override + public String getPrimaryEndpointName() { + return null; + } + public static class ListenerManager { private static List LISTENERS = new LinkedList<>(); diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java index 5e60b4cff..574ccd6a4 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java @@ -410,6 +410,11 @@ public class TracingContext implements AbstractTracerContext { return this.correlationContext; } + @Override + public String getPrimaryEndpointName() { + return primaryEndpoint.getName(); + } + /** * Re-check current trace need profiling, encase third part plugin change the operation name. * diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v1/x/log/GRPCLogAppenderInterceptor.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v1/x/log/GRPCLogAppenderInterceptor.java index 21508ae25..642cbe8e7 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v1/x/log/GRPCLogAppenderInterceptor.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v1/x/log/GRPCLogAppenderInterceptor.java @@ -96,6 +96,12 @@ public class GRPCLogAppenderInterceptor implements InstanceMethodsAroundIntercep .build()) .setBody(LogDataBody.newBuilder().setType(LogDataBody.ContentCase.TEXT.name()) .setText(TextLog.newBuilder().setText(transformLogText(appender, event)).build()).build()); + + String primaryEndpointName = ContextManager.getPrimaryEndpointName(); + if (primaryEndpointName != null) { + builder.setEndpoint(primaryEndpointName); + } + return -1 == ContextManager.getSpanId() ? builder.build() : builder.setTraceContext(TraceContext.newBuilder() .setTraceId(ContextManager.getGlobalTraceId()) diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v2/x/log/GRPCLogAppenderInterceptor.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v2/x/log/GRPCLogAppenderInterceptor.java index 9b7bbdfe6..fa28e19ff 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v2/x/log/GRPCLogAppenderInterceptor.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-log4j-2.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/log4j/v2/x/log/GRPCLogAppenderInterceptor.java @@ -108,6 +108,12 @@ public class GRPCLogAppenderInterceptor implements InstanceMethodsAroundIntercep .setTags(logTags.build()) .setBody(LogDataBody.newBuilder().setType(LogDataBody.ContentCase.TEXT.name()) .setText(TextLog.newBuilder().setText(transformLogText(appender, event)).build()).build()); + + String primaryEndpointName = ContextManager.getPrimaryEndpointName(); + if (primaryEndpointName != null) { + builder.setEndpoint(primaryEndpointName); + } + return -1 == ContextManager.getSpanId() ? builder.build() : builder.setTraceContext(TraceContext.newBuilder() .setTraceId(ContextManager.getGlobalTraceId()) diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/log/GRPCLogAppenderInterceptor.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/log/GRPCLogAppenderInterceptor.java index 1a6b0053e..b81b36da7 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/log/GRPCLogAppenderInterceptor.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/log/GRPCLogAppenderInterceptor.java @@ -112,6 +112,12 @@ public class GRPCLogAppenderInterceptor implements InstanceMethodsAroundIntercep .setTags(logTags.build()) .setBody(LogDataBody.newBuilder().setType(LogDataBody.ContentCase.TEXT.name()) .setText(TextLog.newBuilder().setText(transformLogText(appender, event)).build()).build()); + + String primaryEndpointName = ContextManager.getPrimaryEndpointName(); + if (primaryEndpointName != null) { + builder.setEndpoint(primaryEndpointName); + } + return -1 == ContextManager.getSpanId() ? builder.build() : builder.setTraceContext(TraceContext.newBuilder() .setTraceId(ContextManager.getGlobalTraceId()) diff --git a/test/e2e/case/expected/logs-list.yml b/test/e2e/case/expected/logs-list.yml index cb0aa0429..23de580d2 100644 --- a/test/e2e/case/expected/logs-list.yml +++ b/test/e2e/case/expected/logs-list.yml @@ -19,8 +19,8 @@ logs: serviceid: {{ b64enc "e2e-service-provider" }}.1 serviceinstancename: provider1 serviceinstanceid: {{ b64enc "e2e-service-provider" }}.1_{{ b64enc "provider1" }} - endpointname: null - endpointid: null + endpointname: POST:/info + endpointid: {{ b64enc "e2e-service-provider" }}.1_{{ b64enc "POST:/info" }} traceid: {{ notEmpty .traceid }} timestamp: {{ gt .timestamp 0 }} contenttype: TEXT @@ -36,4 +36,4 @@ logs: value: {{ notEmpty .value }} {{- end }} {{- end }} -total: {{ gt .total 0 }} \ No newline at end of file +total: {{ gt .total 0 }}