diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 3a27fb4e29db..e229cead837d 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -7,6 +7,9 @@ * Fix wrong layer of metric `user error` in DynamoDB monitoring. * ElasticSearch storage does not check field types when OAP running in `no-init` mode. +* Support to bind TLS status as a part of component for service topology. +* Fix component ID priority bug. +* Fix component ID of topology overlap due to storage layer bugs. #### Documentation diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java index 84f57eeb5669..d61ead60d23e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/Const.java @@ -41,4 +41,12 @@ public class Const { public static final String POINT = "."; public static final String DOUBLE_COLONS_SPLIT = "::"; public static final String BLANK_ENTITY_NAME = "_blank"; + + public static final class TLS_MODE { + public static final String NON_TLS = "NONE"; + + public static final String M_TLS = "mTLS"; + + public static final String TLS = "TLS"; + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationClientSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationClientSideMetrics.java index a05a7e17272a..79a943ccf8af 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationClientSideMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationClientSideMetrics.java @@ -86,7 +86,7 @@ protected StorageID id0() { @Override public boolean combine(Metrics metrics) { final ProcessRelationClientSideMetrics processRelationClientSideMetrics = (ProcessRelationClientSideMetrics) metrics; - if (!ComponentLibraryCatalogUtil.get().compare(this.componentId, processRelationClientSideMetrics.getComponentId())) { + if (ComponentLibraryCatalogUtil.get().compare(this.componentId, processRelationClientSideMetrics.getComponentId())) { this.setComponentId(processRelationClientSideMetrics.getComponentId()); return true; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationServerSideMetrics.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationServerSideMetrics.java index 04aed49a0b91..09d8d3f7ccb8 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationServerSideMetrics.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationServerSideMetrics.java @@ -84,7 +84,7 @@ protected StorageID id0() { @Override public boolean combine(Metrics metrics) { final ProcessRelationServerSideMetrics processRelationServerSideMetrics = (ProcessRelationServerSideMetrics) metrics; - if (!ComponentLibraryCatalogUtil.get().compare(this.componentId, processRelationServerSideMetrics.getComponentId())) { + if (ComponentLibraryCatalogUtil.get().compare(this.componentId, processRelationServerSideMetrics.getComponentId())) { this.setComponentId(processRelationServerSideMetrics.getComponentId()); return true; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceCallRelationDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceCallRelationDispatcher.java index 2f87bce5d554..e2aa91f5dbea 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceCallRelationDispatcher.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceCallRelationDispatcher.java @@ -18,12 +18,15 @@ package org.apache.skywalking.oap.server.core.analysis.manual.relation.service; +import java.util.Optional; +import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; +import org.apache.skywalking.oap.server.core.analysis.metrics.IntList; import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor; import org.apache.skywalking.oap.server.core.source.ServiceRelation; +import org.apache.skywalking.oap.server.library.util.StringUtil; public class ServiceCallRelationDispatcher implements SourceDispatcher { - @Override public void dispatch(ServiceRelation source) { switch (source.getDetectPoint()) { @@ -41,7 +44,9 @@ private void serverSide(ServiceRelation source) { metrics.setTimeBucket(source.getTimeBucket()); metrics.setSourceServiceId(source.getSourceServiceId()); metrics.setDestServiceId(source.getDestServiceId()); - metrics.getComponentIds().add(source.getComponentId()); + final IntList componentIds = metrics.getComponentIds(); + componentIds.add(source.getComponentId()); + tlsStatus(source.getTlsMode()).ifPresent(componentIds::add); metrics.setEntityId(source.getEntityId()); MetricsStreamProcessor.getInstance().in(metrics); } @@ -51,8 +56,27 @@ private void clientSide(ServiceRelation source) { metrics.setTimeBucket(source.getTimeBucket()); metrics.setSourceServiceId(source.getSourceServiceId()); metrics.setDestServiceId(source.getDestServiceId()); - metrics.getComponentIds().add(source.getComponentId()); + final IntList componentIds = metrics.getComponentIds(); + componentIds.add(source.getComponentId()); + tlsStatus(source.getTlsMode()).ifPresent(componentIds::add); metrics.setEntityId(source.getEntityId()); MetricsStreamProcessor.getInstance().in(metrics); } + + private Optional tlsStatus(String tlsMode) { + if (StringUtil.isBlank(tlsMode)) { + return Optional.empty(); + } + switch (tlsMode) { + case Const.TLS_MODE.M_TLS: + // component ID, mtls = 142 + return Optional.of(142); + case Const.TLS_MODE.TLS: + // component ID, tls = 130 + return Optional.of(130); + case Const.TLS_MODE.NON_TLS: + default: + return Optional.empty(); + } + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/TCPServiceCallRelationDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/TCPServiceCallRelationDispatcher.java index c3f2804e618d..ff08425e1700 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/TCPServiceCallRelationDispatcher.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/TCPServiceCallRelationDispatcher.java @@ -18,9 +18,13 @@ package org.apache.skywalking.oap.server.core.analysis.manual.relation.service; +import java.util.Optional; +import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher; +import org.apache.skywalking.oap.server.core.analysis.metrics.IntList; import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor; import org.apache.skywalking.oap.server.core.source.TCPServiceRelation; +import org.apache.skywalking.oap.server.library.util.StringUtil; public class TCPServiceCallRelationDispatcher implements SourceDispatcher { @@ -41,7 +45,9 @@ private void serverSide(TCPServiceRelation source) { metrics.setTimeBucket(source.getTimeBucket()); metrics.setSourceServiceId(source.getSourceServiceId()); metrics.setDestServiceId(source.getDestServiceId()); - metrics.getComponentIds().add(source.getComponentId()); + final IntList componentIds = metrics.getComponentIds(); + componentIds.add(source.getComponentId()); + tlsStatus(source.getTlsMode()).ifPresent(componentIds::add); metrics.setEntityId(source.getEntityId()); MetricsStreamProcessor.getInstance().in(metrics); } @@ -51,8 +57,27 @@ private void clientSide(TCPServiceRelation source) { metrics.setTimeBucket(source.getTimeBucket()); metrics.setSourceServiceId(source.getSourceServiceId()); metrics.setDestServiceId(source.getDestServiceId()); - metrics.getComponentIds().add(source.getComponentId()); + final IntList componentIds = metrics.getComponentIds(); + componentIds.add(source.getComponentId()); + tlsStatus(source.getTlsMode()).ifPresent(componentIds::add); metrics.setEntityId(source.getEntityId()); MetricsStreamProcessor.getInstance().in(metrics); } + + private Optional tlsStatus(String tlsMode) { + if (StringUtil.isBlank(tlsMode)) { + return Optional.empty(); + } + switch (tlsMode) { + case Const.TLS_MODE.M_TLS: + // component ID, mtls = 142 + return Optional.of(142); + case Const.TLS_MODE.TLS: + // component ID, tls = 130 + return Optional.of(130); + case Const.TLS_MODE.NON_TLS: + default: + return Optional.empty(); + } + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogService.java index c10e77c05898..7a17b950158b 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogService.java @@ -128,6 +128,6 @@ private void init() throws InitialComponentCatalogException { public boolean compare(int componentA, int componentB) { final Integer priorityA = componentIDPriorities.getOrDefault(componentA, 50); final Integer priorityB = componentIDPriorities.getOrDefault(componentB, 50); - return priorityA.compareTo(priorityB) > 0; + return priorityA.compareTo(priorityB) < 0; } } diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/MockModuleManager.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/MockModuleManager.java new file mode 100644 index 000000000000..7a7acbdee205 --- /dev/null +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/MockModuleManager.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core; + +import com.google.common.collect.Maps; +import java.util.Map; +import org.apache.skywalking.oap.server.library.module.ModuleManager; +import org.apache.skywalking.oap.server.library.module.ModuleNotFoundRuntimeException; +import org.apache.skywalking.oap.server.library.module.ModuleProviderHolder; + +public abstract class MockModuleManager extends ModuleManager { + private final Map moduleProviderHolderMap = Maps.newHashMap(); + + public MockModuleManager() { + init(); + } + + protected abstract void init(); + + protected void register(String name, ModuleProviderHolder provider) { + moduleProviderHolderMap.put(name, provider); + } + + @Override + public boolean has(String moduleName) { + return moduleProviderHolderMap.containsKey(moduleName); + } + + @Override + public ModuleProviderHolder find(String moduleName) throws ModuleNotFoundRuntimeException { + if (!moduleProviderHolderMap.containsKey(moduleName)) { + throw new ModuleNotFoundRuntimeException("ModuleProviderHolder[" + moduleName + "] cannot found in MOCK."); + } + return moduleProviderHolderMap.get(moduleName); + } +} diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/MockModuleProvider.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/MockModuleProvider.java new file mode 100644 index 000000000000..a148848f1f87 --- /dev/null +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/MockModuleProvider.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core; + +import com.google.common.collect.Maps; +import java.util.Map; +import org.apache.skywalking.oap.server.library.module.ModuleServiceHolder; +import org.apache.skywalking.oap.server.library.module.Service; +import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException; + +public abstract class MockModuleProvider implements ModuleServiceHolder { + protected Map, Service> serviceMap = Maps.newHashMap(); + + public MockModuleProvider() { + register(); + } + + protected abstract void register(); + + @Override + public void registerServiceImplementation(final Class serviceType, + final Service service) throws ServiceNotProvidedException { + serviceMap.put(serviceType, service); + } + + @Override + public T getService(final Class serviceType) throws ServiceNotProvidedException { + return (T) serviceMap.get(serviceType); + } +} diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogFileTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogFileTest.java index 6181490fc633..e53ccea35617 100644 --- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogFileTest.java +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/config/ComponentLibraryCatalogFileTest.java @@ -37,12 +37,13 @@ public void testInitAndSettings() { @Test public void testPriority() { ComponentLibraryCatalogService service = new ComponentLibraryCatalogService(); - Assertions.assertEquals(false, service.compare(service.getComponentId("Unknown"), service.getComponentId("tcp"))); - Assertions.assertEquals(false, service.compare(service.getComponentId("tcp"), service.getComponentId("tls"))); - Assertions.assertEquals(false, service.compare(service.getComponentId("tls"), service.getComponentId("rpc"))); - Assertions.assertEquals(false, service.compare(service.getComponentId("rpc"), service.getComponentId("http"))); - Assertions.assertEquals(false, service.compare(service.getComponentId("http"), service.getComponentId("https"))); - Assertions.assertEquals(false, service.compare(service.getComponentId("https"), service.getComponentId("SpringMVC"))); + Assertions.assertEquals(true, service.compare(service.getComponentId("Unknown"), service.getComponentId("tcp"))); + Assertions.assertEquals(true, service.compare(service.getComponentId("tcp"), service.getComponentId("tls"))); + Assertions.assertEquals(true, service.compare(service.getComponentId("tcp"), service.getComponentId("mtls"))); + Assertions.assertEquals(true, service.compare(service.getComponentId("tls"), service.getComponentId("rpc"))); + Assertions.assertEquals(true, service.compare(service.getComponentId("rpc"), service.getComponentId("http"))); + Assertions.assertEquals(true, service.compare(service.getComponentId("http"), service.getComponentId("https"))); + Assertions.assertEquals(true, service.compare(service.getComponentId("https"), service.getComponentId("SpringMVC"))); // Equal priority Assertions.assertEquals(false, service.compare(service.getComponentId("Dubbo"), service.getComponentId("SpringMVC"))); diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilderTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilderTest.java new file mode 100644 index 000000000000..f5905fd7436f --- /dev/null +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilderTest.java @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core.query; + +import java.util.ArrayList; +import java.util.List; +import org.apache.skywalking.oap.server.core.CoreModule; +import org.apache.skywalking.oap.server.core.CoreModuleConfig; +import org.apache.skywalking.oap.server.core.CoreModuleProvider; +import org.apache.skywalking.oap.server.core.MockModuleManager; +import org.apache.skywalking.oap.server.core.MockModuleProvider; +import org.apache.skywalking.oap.server.core.analysis.IDManager; +import org.apache.skywalking.oap.server.core.cache.NetworkAddressAliasCache; +import org.apache.skywalking.oap.server.core.config.ComponentLibraryCatalogService; +import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService; +import org.apache.skywalking.oap.server.core.query.type.Call; +import org.apache.skywalking.oap.server.core.query.type.Node; +import org.apache.skywalking.oap.server.core.query.type.Topology; +import org.apache.skywalking.oap.server.core.source.DetectPoint; +import org.apache.skywalking.oap.server.library.module.ModuleManager; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +public class ServiceTopologyBuilderTest { + private CoreModuleProvider moduleProvider; + private ModuleManager moduleManager; + + @BeforeEach + public void setupMetrics() throws Throwable { + moduleProvider = Mockito.mock(CoreModuleProvider.class); + moduleManager = new MockModuleManager() { + @Override + protected void init() { + register(CoreModule.NAME, () -> new MockModuleProvider() { + @Override + protected void register() { + registerServiceImplementation( + IComponentLibraryCatalogService.class, new ComponentLibraryCatalogService()); + registerServiceImplementation( + NetworkAddressAliasCache.class, new NetworkAddressAliasCache(new CoreModuleConfig())); + } + }); + } + }; + } + + @Test + public void testServiceTopologyBuild() { + final ServiceTopologyBuilder serviceTopologyBuilder = new ServiceTopologyBuilder(moduleManager); + List serviceRelationClientCalls = new ArrayList<>(); + Call.CallDetail call1 = new Call.CallDetail(); + call1.buildFromServiceRelation( + IDManager.ServiceID.buildRelationId( + new IDManager.ServiceID.ServiceRelationDefine( + IDManager.ServiceID.buildId("SvrA", true), + IDManager.ServiceID.buildId("SvrB", true) + ) + ), + // mtls + 142, + DetectPoint.CLIENT + ); + serviceRelationClientCalls.add(call1); + Call.CallDetail call2 = new Call.CallDetail(); + call2.buildFromServiceRelation( + IDManager.ServiceID.buildRelationId( + new IDManager.ServiceID.ServiceRelationDefine( + IDManager.ServiceID.buildId("SvrA", true), + IDManager.ServiceID.buildId("SvrB", true) + ) + ), + // http + 49, + DetectPoint.CLIENT + ); + serviceRelationClientCalls.add(call2); + + List serviceRelationServerCalls = new ArrayList<>(); + Call.CallDetail call3 = new Call.CallDetail(); + call3.buildFromServiceRelation( + IDManager.ServiceID.buildRelationId( + new IDManager.ServiceID.ServiceRelationDefine( + IDManager.ServiceID.buildId("SvrA", true), + IDManager.ServiceID.buildId("SvrB", true) + ) + ), + // mtls + 142, + DetectPoint.SERVER + ); + serviceRelationServerCalls.add(call3); + Call.CallDetail call4 = new Call.CallDetail(); + call4.buildFromServiceRelation( + IDManager.ServiceID.buildRelationId( + new IDManager.ServiceID.ServiceRelationDefine( + IDManager.ServiceID.buildId("SvrA", true), + IDManager.ServiceID.buildId("SvrB", true) + ) + ), + // http + 49, + DetectPoint.SERVER + ); + serviceRelationServerCalls.add(call4); + final Topology topology = serviceTopologyBuilder.build(serviceRelationClientCalls, serviceRelationServerCalls); + Assertions.assertEquals(2, topology.getNodes().size()); + for (final Node node : topology.getNodes()) { + if (node.getName().equals("SvrB")) { + Assertions.assertEquals("http", node.getType()); + } else if (node.getName().equals("SvrA")) { + Assertions.assertEquals(null, node.getType()); + } + } + for (final Call call : topology.getCalls()) { + Assertions.assertEquals(2, call.getSourceComponents().size()); + Assertions.assertEquals(List.of("mtls", "http"), call.getTargetComponents()); + } + } +} diff --git a/oap-server/server-core/src/test/resources/component-libraries.yml b/oap-server/server-core/src/test/resources/component-libraries.yml index 0079d6deaff3..3ca016e39dc7 100755 --- a/oap-server/server-core/src/test/resources/component-libraries.yml +++ b/oap-server/server-core/src/test/resources/component-libraries.yml @@ -471,6 +471,11 @@ AWSSQS: Micrometer: id: 141 languages: Java + languages: Java +mtls: + id: 142 + languages: ebpf, mesh + priority: 12 # .NET/.NET Core components # [3000, 4000) for C#/.NET only diff --git a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/LogEntry2MetricsAdapter.java b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/LogEntry2MetricsAdapter.java index 00316258d881..fe018eca39f8 100644 --- a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/LogEntry2MetricsAdapter.java +++ b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/LogEntry2MetricsAdapter.java @@ -35,19 +35,15 @@ import org.apache.skywalking.apm.network.servicemesh.v3.Protocol; import static com.google.common.base.Strings.isNullOrEmpty; +import static org.apache.skywalking.oap.server.core.Const.TLS_MODE.M_TLS; +import static org.apache.skywalking.oap.server.core.Const.TLS_MODE.NON_TLS; +import static org.apache.skywalking.oap.server.core.Const.TLS_MODE.TLS; /** * Adapt {@link HTTPAccessLogEntry} objects to {@link HTTPServiceMeshMetric} builders. */ @RequiredArgsConstructor public class LogEntry2MetricsAdapter { - - public static final String NON_TLS = "NONE"; - - public static final String M_TLS = "mTLS"; - - public static final String TLS = "TLS"; - /** * The access log entry that is to be adapted into metrics builders. */ diff --git a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/k8s/K8sALSServiceMeshHTTPAnalysis.java b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/k8s/K8sALSServiceMeshHTTPAnalysis.java index 0552b809e2be..2d8771eb4bfe 100644 --- a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/k8s/K8sALSServiceMeshHTTPAnalysis.java +++ b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/k8s/K8sALSServiceMeshHTTPAnalysis.java @@ -18,9 +18,13 @@ package org.apache.skywalking.oap.server.receiver.envoy.als.k8s; -import static org.apache.skywalking.oap.server.library.util.StringUtil.isBlank; -import static org.apache.skywalking.oap.server.receiver.envoy.als.LogEntry2MetricsAdapter.NON_TLS; -import static org.apache.skywalking.oap.server.receiver.envoy.als.k8s.Addresses.isValid; +import io.envoyproxy.envoy.config.core.v3.Address; +import io.envoyproxy.envoy.config.core.v3.SocketAddress; +import io.envoyproxy.envoy.data.accesslog.v3.AccessLogCommon; +import io.envoyproxy.envoy.data.accesslog.v3.HTTPAccessLogEntry; +import io.envoyproxy.envoy.service.accesslog.v3.StreamAccessLogsMessage; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.network.servicemesh.v3.HTTPServiceMeshMetric; import org.apache.skywalking.apm.network.servicemesh.v3.HTTPServiceMeshMetrics; import org.apache.skywalking.apm.network.servicemesh.v3.ServiceMeshMetrics; @@ -30,13 +34,10 @@ import org.apache.skywalking.oap.server.receiver.envoy.als.AbstractALSAnalyzer; import org.apache.skywalking.oap.server.receiver.envoy.als.Role; import org.apache.skywalking.oap.server.receiver.envoy.als.ServiceMetaInfo; -import io.envoyproxy.envoy.config.core.v3.Address; -import io.envoyproxy.envoy.config.core.v3.SocketAddress; -import io.envoyproxy.envoy.data.accesslog.v3.AccessLogCommon; -import io.envoyproxy.envoy.data.accesslog.v3.HTTPAccessLogEntry; -import io.envoyproxy.envoy.service.accesslog.v3.StreamAccessLogsMessage; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; + +import static org.apache.skywalking.oap.server.core.Const.TLS_MODE.NON_TLS; +import static org.apache.skywalking.oap.server.library.util.StringUtil.isBlank; +import static org.apache.skywalking.oap.server.receiver.envoy.als.k8s.Addresses.isValid; /** * Analysis log based on ingress and mesh scenarios. diff --git a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/mx/MetaExchangeALSHTTPAnalyzer.java b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/mx/MetaExchangeALSHTTPAnalyzer.java index 65f543c79010..10410f3f3dfa 100644 --- a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/mx/MetaExchangeALSHTTPAnalyzer.java +++ b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/mx/MetaExchangeALSHTTPAnalyzer.java @@ -18,10 +18,15 @@ package org.apache.skywalking.oap.server.receiver.envoy.als.mx; -import static org.apache.skywalking.oap.server.receiver.envoy.als.LogEntry2MetricsAdapter.NON_TLS; +import com.google.protobuf.Any; +import com.google.protobuf.TextFormat; +import io.envoyproxy.envoy.data.accesslog.v3.AccessLogCommon; +import io.envoyproxy.envoy.data.accesslog.v3.HTTPAccessLogEntry; +import io.envoyproxy.envoy.service.accesslog.v3.StreamAccessLogsMessage; import java.util.Base64; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.network.servicemesh.v3.HTTPServiceMeshMetric; import org.apache.skywalking.apm.network.servicemesh.v3.HTTPServiceMeshMetrics; import org.apache.skywalking.apm.network.servicemesh.v3.ServiceMeshMetrics; @@ -31,12 +36,8 @@ import org.apache.skywalking.oap.server.receiver.envoy.als.AbstractALSAnalyzer; import org.apache.skywalking.oap.server.receiver.envoy.als.Role; import org.apache.skywalking.oap.server.receiver.envoy.als.ServiceMetaInfo; -import com.google.protobuf.Any; -import com.google.protobuf.TextFormat; -import io.envoyproxy.envoy.data.accesslog.v3.AccessLogCommon; -import io.envoyproxy.envoy.data.accesslog.v3.HTTPAccessLogEntry; -import io.envoyproxy.envoy.service.accesslog.v3.StreamAccessLogsMessage; -import lombok.extern.slf4j.Slf4j; + +import static org.apache.skywalking.oap.server.core.Const.TLS_MODE.NON_TLS; @Slf4j public class MetaExchangeALSHTTPAnalyzer extends AbstractALSAnalyzer { diff --git a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/k8s/K8sALSServiceMeshTCPAnalysis.java b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/k8s/K8sALSServiceMeshTCPAnalysis.java index c3ce4ad41672..3661b72ca2a4 100644 --- a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/k8s/K8sALSServiceMeshTCPAnalysis.java +++ b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/k8s/K8sALSServiceMeshTCPAnalysis.java @@ -18,7 +18,13 @@ package org.apache.skywalking.oap.server.receiver.envoy.als.tcp.k8s; -import static org.apache.skywalking.oap.server.receiver.envoy.als.LogEntry2MetricsAdapter.NON_TLS; +import io.envoyproxy.envoy.config.core.v3.Address; +import io.envoyproxy.envoy.config.core.v3.SocketAddress; +import io.envoyproxy.envoy.data.accesslog.v3.AccessLogCommon; +import io.envoyproxy.envoy.data.accesslog.v3.TCPAccessLogEntry; +import io.envoyproxy.envoy.service.accesslog.v3.StreamAccessLogsMessage; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.network.servicemesh.v3.ServiceMeshMetrics; import org.apache.skywalking.apm.network.servicemesh.v3.TCPServiceMeshMetric; import org.apache.skywalking.apm.network.servicemesh.v3.TCPServiceMeshMetrics; @@ -29,13 +35,8 @@ import org.apache.skywalking.oap.server.receiver.envoy.als.ServiceMetaInfo; import org.apache.skywalking.oap.server.receiver.envoy.als.k8s.K8SServiceRegistry; import org.apache.skywalking.oap.server.receiver.envoy.als.tcp.AbstractTCPAccessLogAnalyzer; -import io.envoyproxy.envoy.config.core.v3.Address; -import io.envoyproxy.envoy.config.core.v3.SocketAddress; -import io.envoyproxy.envoy.data.accesslog.v3.AccessLogCommon; -import io.envoyproxy.envoy.data.accesslog.v3.TCPAccessLogEntry; -import io.envoyproxy.envoy.service.accesslog.v3.StreamAccessLogsMessage; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; + +import static org.apache.skywalking.oap.server.core.Const.TLS_MODE.NON_TLS; /** * Analysis log based on ingress and mesh scenarios. diff --git a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/mx/MetaExchangeTCPAccessLogAnalyzer.java b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/mx/MetaExchangeTCPAccessLogAnalyzer.java index 5aa120a8376c..e1a6cd6c7ba4 100644 --- a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/mx/MetaExchangeTCPAccessLogAnalyzer.java +++ b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/tcp/mx/MetaExchangeTCPAccessLogAnalyzer.java @@ -18,12 +18,15 @@ package org.apache.skywalking.oap.server.receiver.envoy.als.tcp.mx; -import static org.apache.skywalking.oap.server.receiver.envoy.als.LogEntry2MetricsAdapter.NON_TLS; -import static org.apache.skywalking.oap.server.receiver.envoy.als.mx.MetaExchangeALSHTTPAnalyzer.DOWNSTREAM_KEY; -import static org.apache.skywalking.oap.server.receiver.envoy.als.mx.MetaExchangeALSHTTPAnalyzer.UPSTREAM_KEY; +import com.google.protobuf.Any; +import com.google.protobuf.TextFormat; +import io.envoyproxy.envoy.data.accesslog.v3.AccessLogCommon; +import io.envoyproxy.envoy.data.accesslog.v3.TCPAccessLogEntry; +import io.envoyproxy.envoy.service.accesslog.v3.StreamAccessLogsMessage; import java.util.Base64; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.apm.network.servicemesh.v3.ServiceMeshMetrics; import org.apache.skywalking.apm.network.servicemesh.v3.TCPServiceMeshMetric; import org.apache.skywalking.apm.network.servicemesh.v3.TCPServiceMeshMetrics; @@ -35,12 +38,10 @@ import org.apache.skywalking.oap.server.receiver.envoy.als.mx.FieldsHelper; import org.apache.skywalking.oap.server.receiver.envoy.als.mx.ServiceMetaInfoAdapter; import org.apache.skywalking.oap.server.receiver.envoy.als.tcp.AbstractTCPAccessLogAnalyzer; -import com.google.protobuf.Any; -import com.google.protobuf.TextFormat; -import io.envoyproxy.envoy.data.accesslog.v3.AccessLogCommon; -import io.envoyproxy.envoy.data.accesslog.v3.TCPAccessLogEntry; -import io.envoyproxy.envoy.service.accesslog.v3.StreamAccessLogsMessage; -import lombok.extern.slf4j.Slf4j; + +import static org.apache.skywalking.oap.server.core.Const.TLS_MODE.NON_TLS; +import static org.apache.skywalking.oap.server.receiver.envoy.als.mx.MetaExchangeALSHTTPAnalyzer.DOWNSTREAM_KEY; +import static org.apache.skywalking.oap.server.receiver.envoy.als.mx.MetaExchangeALSHTTPAnalyzer.UPSTREAM_KEY; @Slf4j public class MetaExchangeTCPAccessLogAnalyzer extends AbstractTCPAccessLogAnalyzer { diff --git a/oap-server/server-starter/src/main/resources/component-libraries.yml b/oap-server/server-starter/src/main/resources/component-libraries.yml index f8ce803b2127..ef0ebab69729 100644 --- a/oap-server/server-starter/src/main/resources/component-libraries.yml +++ b/oap-server/server-starter/src/main/resources/component-libraries.yml @@ -438,7 +438,7 @@ https: priority: 46 tls: id: 130 - languages: ebpf + languages: ebpf, mesh priority: 11 Micronaut: id: 131 @@ -473,6 +473,10 @@ AWSSQS: Micrometer: id: 141 languages: Java +mtls: + id: 142 + languages: ebpf, mesh + priority: 12 # .NET/.NET Core components # [3000, 4000) for C#/.NET only diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java index 89c31bf45ef8..c754b5883bef 100644 --- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBTopologyQueryDAO.java @@ -136,8 +136,8 @@ List queryServiceRelation(Duration duration, final String entityId = dataPoint.getTagValue(Metrics.ENTITY_ID); final IntList componentIds = new IntList( dataPoint.getTagValue(ServiceRelationClientSideMetrics.COMPONENT_IDS)); - final Call.CallDetail call = new Call.CallDetail(); for (int i = 0; i < componentIds.size(); i++) { + final Call.CallDetail call = new Call.CallDetail(); call.buildFromServiceRelation(entityId, componentIds.get(i), detectPoint); calls.add(call); } diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java index 2417779f2cc7..0d4f47a1f00b 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TopologyQueryEsDAO.java @@ -316,8 +316,8 @@ private List buildServiceRelation(SearchBuilder sourceBuilder, (List>) componentTerms.get("buckets"); final IntList componentIds = new IntList((String) subAgg.iterator().next().get("key")); - Call.CallDetail call = new Call.CallDetail(); for (int i = 0; i < componentIds.size(); i++) { + Call.CallDetail call = new Call.CallDetail(); call.buildFromServiceRelation(entityId, componentIds.get(i), detectPoint); calls.add(call); } diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCTopologyQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCTopologyQueryDAO.java index a4b7ce8b3c18..15a9a8e51766 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCTopologyQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCTopologyQueryDAO.java @@ -271,11 +271,11 @@ private List loadProcessFromSide(Duration duration, private void buildServiceCalls(ResultSet resultSet, List calls, DetectPoint detectPoint) throws SQLException { while (resultSet.next()) { - Call.CallDetail call = new Call.CallDetail(); String entityId = resultSet.getString(Metrics.ENTITY_ID); final IntList componentIds = new IntList( resultSet.getString(ServiceRelationServerSideMetrics.COMPONENT_IDS)); for (int i = 0; i < componentIds.size(); i++) { + Call.CallDetail call = new Call.CallDetail(); call.buildFromServiceRelation(entityId, componentIds.get(i), detectPoint); calls.add(call); }