You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by pe...@apache.org on 2019/03/20 12:53:49 UTC

[incubator-skywalking] branch master updated: Add CLR_Receiver plugin (#2385)

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

pengys pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 7047c97  Add CLR_Receiver plugin (#2385)
7047c97 is described below

commit 7047c97e8befa997ea2b2b7d4a4fc19e35042068
Author: Lemon <li...@hotmail.com>
AuthorDate: Wed Mar 20 20:53:42 2019 +0800

    Add CLR_Receiver plugin (#2385)
---
 .../server/core/source/ServiceInstanceCLRGC.java   |  6 +-
 oap-server/server-receiver-plugin/pom.xml          |  1 +
 .../skywalking-clr-receiver-plugin/pom.xml         | 40 +++++++++
 .../oap/server/receiver/clr/module/CLRModule.java  | 35 ++++++++
 .../receiver/clr/provider/CLRModuleProvider.java   | 65 +++++++++++++++
 .../handler/CLRMetricReportServiceHandler.java     | 59 +++++++++++++
 .../clr/provider/handler/CLRSourceDispatcher.java  | 97 ++++++++++++++++++++++
 ...ywalking.oap.server.library.module.ModuleDefine | 19 +++++
 ...alking.oap.server.library.module.ModuleProvider | 19 +++++
 .../src/main/assembly/application.yml              |  2 +
 .../src/main/resources/application.yml             |  2 +
 11 files changed, 342 insertions(+), 3 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceCLRGC.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceCLRGC.java
index 904f2f9..f72127d 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceCLRGC.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceCLRGC.java
@@ -40,8 +40,8 @@ public class ServiceInstanceCLRGC extends Source {
     @Getter @Setter private String name;
     @Getter @Setter private String serviceName;
     @Getter @Setter private int serviceId;
-    @Getter @Setter private int gen0CollectCount;
-    @Getter @Setter private int gen1CollectCount;
-    @Getter @Setter private int gen2CollectCount;
+    @Getter @Setter private long gen0CollectCount;
+    @Getter @Setter private long gen1CollectCount;
+    @Getter @Setter private long gen2CollectCount;
     @Getter @Setter private long heapMemory;
 }
\ No newline at end of file
diff --git a/oap-server/server-receiver-plugin/pom.xml b/oap-server/server-receiver-plugin/pom.xml
index e276a5a..8c32601 100644
--- a/oap-server/server-receiver-plugin/pom.xml
+++ b/oap-server/server-receiver-plugin/pom.xml
@@ -36,6 +36,7 @@
         <module>skywalking-jvm-receiver-plugin</module>
         <module>envoy-metrics-receiver-plugin</module>
         <module>skywalking-sharing-server-plugin</module>
+        <module>skywalking-clr-receiver-plugin</module>
     </modules>
 
     <dependencies>
diff --git a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/pom.xml b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/pom.xml
new file mode 100644
index 0000000..b32d1d2
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>server-receiver-plugin</artifactId>
+        <groupId>org.apache.skywalking</groupId>
+        <version>6.1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>skywalking-clr-receiver-plugin</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>skywalking-sharing-server-plugin</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/module/CLRModule.java b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/module/CLRModule.java
new file mode 100644
index 0000000..dacc436
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/module/CLRModule.java
@@ -0,0 +1,35 @@
+/*
+ * 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.receiver.clr.module;
+
+import org.apache.skywalking.oap.server.library.module.ModuleDefine;
+
+/**
+ *  @author liuhaoyang
+ **/
+public class CLRModule extends ModuleDefine {
+
+    public CLRModule() {
+        super("receiver-clr");
+    }
+
+    @Override public Class[] services() {
+        return new Class[0];
+    }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/CLRModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/CLRModuleProvider.java
new file mode 100644
index 0000000..505cb0d
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/CLRModuleProvider.java
@@ -0,0 +1,65 @@
+/*
+ * 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.receiver.clr.provider;
+
+import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
+import org.apache.skywalking.oap.server.library.module.ModuleConfig;
+import org.apache.skywalking.oap.server.library.module.ModuleDefine;
+import org.apache.skywalking.oap.server.library.module.ModuleProvider;
+import org.apache.skywalking.oap.server.library.module.ModuleStartException;
+import org.apache.skywalking.oap.server.library.module.ServiceNotProvidedException;
+import org.apache.skywalking.oap.server.receiver.clr.module.CLRModule;
+import org.apache.skywalking.oap.server.receiver.clr.provider.handler.CLRMetricReportServiceHandler;
+import org.apache.skywalking.oap.server.receiver.sharing.server.SharingServerModule;
+
+/**
+ *  @author liuhaoyang
+ **/
+public class CLRModuleProvider extends ModuleProvider {
+
+    @Override public String name() {
+        return "default";
+    }
+
+    @Override public Class<? extends ModuleDefine> module() {
+        return CLRModule.class;
+    }
+
+    @Override public ModuleConfig createConfigBeanIfAbsent() {
+        return null;
+    }
+
+    @Override public void prepare() throws ServiceNotProvidedException, ModuleStartException {
+
+    }
+
+    @Override public void start() throws ServiceNotProvidedException, ModuleStartException {
+        GRPCHandlerRegister grpcHandlerRegister = getManager().find(SharingServerModule.NAME).provider().getService(GRPCHandlerRegister.class);
+        grpcHandlerRegister.addHandler(new CLRMetricReportServiceHandler(getManager()));
+    }
+
+    @Override public void notifyAfterCompleted() throws ServiceNotProvidedException, ModuleStartException {
+
+    }
+
+    @Override public String[] requiredModules() {
+        return new String[] {CoreModule.NAME, SharingServerModule.NAME};
+    }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRMetricReportServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRMetricReportServiceHandler.java
new file mode 100644
index 0000000..da7f66d
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRMetricReportServiceHandler.java
@@ -0,0 +1,59 @@
+/*
+ * 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.receiver.clr.provider.handler;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.skywalking.apm.network.common.Commands;
+import org.apache.skywalking.apm.network.language.agent.v2.CLRMetricCollection;
+import org.apache.skywalking.apm.network.language.agent.v2.CLRMetricReportServiceGrpc;
+import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
+import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author liuhaoyang
+ **/
+public class CLRMetricReportServiceHandler extends CLRMetricReportServiceGrpc.CLRMetricReportServiceImplBase implements GRPCHandler {
+
+    private static final Logger logger = LoggerFactory.getLogger(CLRMetricReportServiceHandler.class);
+
+    private final CLRSourceDispatcher clrSourceDispatcher;
+
+    public CLRMetricReportServiceHandler(ModuleManager moduleManager) {
+        clrSourceDispatcher = new CLRSourceDispatcher(moduleManager);
+    }
+
+    @Override public void collect(CLRMetricCollection request, StreamObserver<Commands> responseObserver) {
+        int serviceInstanceId = request.getServiceInstanceId();
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("receive the clr metric from service instance, id: {}", serviceInstanceId);
+        }
+
+        request.getMetricsList().forEach(metric -> {
+            long minuteTimeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(metric.getTime());
+            clrSourceDispatcher.sendMetric(serviceInstanceId, minuteTimeBucket, metric);
+        });
+
+        responseObserver.onNext(Commands.newBuilder().build());
+        responseObserver.onCompleted();
+    }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRSourceDispatcher.java b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRSourceDispatcher.java
new file mode 100644
index 0000000..62f4620
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/clr/provider/handler/CLRSourceDispatcher.java
@@ -0,0 +1,97 @@
+/*
+ * 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.receiver.clr.provider.handler;
+
+import org.apache.skywalking.apm.network.common.CPU;
+import org.apache.skywalking.apm.network.language.agent.CLRMetric;
+import org.apache.skywalking.apm.network.language.agent.ClrGC;
+import org.apache.skywalking.apm.network.language.agent.ClrThread;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
+import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
+import org.apache.skywalking.oap.server.core.source.ServiceInstanceCLRCPU;
+import org.apache.skywalking.oap.server.core.source.ServiceInstanceCLRGC;
+import org.apache.skywalking.oap.server.core.source.ServiceInstanceCLRThread;
+import org.apache.skywalking.oap.server.core.source.SourceReceiver;
+import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author liuhaoyang
+ **/
+public class CLRSourceDispatcher {
+
+    private static final Logger logger = LoggerFactory.getLogger(CLRSourceDispatcher.class);
+    private final SourceReceiver sourceReceiver;
+    private final ServiceInstanceInventoryCache instanceInventoryCache;
+
+    public CLRSourceDispatcher(ModuleManager moduleManager) {
+        sourceReceiver = moduleManager.find(CoreModule.NAME).provider().getService(SourceReceiver.class);
+        instanceInventoryCache = moduleManager.find(CoreModule.NAME).provider().getService(ServiceInstanceInventoryCache.class);
+    }
+
+    void sendMetric(int serviceInstanceId, long minuteTimeBucket, CLRMetric metric) {
+        ServiceInstanceInventory serviceInstanceInventory = instanceInventoryCache.get(serviceInstanceId);
+        int serviceId;
+        if (serviceInstanceInventory == null) {
+            serviceId = serviceInstanceInventory.getServiceId();
+        } else {
+            logger.warn("Can't found service by service instance id from cache, service instance id is: {}", serviceInstanceId);
+            return;
+        }
+
+        CPU cpu = metric.getCpu();
+        ServiceInstanceCLRCPU serviceInstanceCLRCPU = new ServiceInstanceCLRCPU();
+        serviceInstanceCLRCPU.setUsePercent(cpu.getUsagePercent());
+        serviceInstanceCLRCPU.setTimeBucket(minuteTimeBucket);
+        serviceInstanceCLRCPU.setId(serviceInstanceId);
+        serviceInstanceCLRCPU.setName(Const.EMPTY_STRING);
+        serviceInstanceCLRCPU.setServiceId(serviceId);
+        serviceInstanceCLRCPU.setServiceName(Const.EMPTY_STRING);
+        sourceReceiver.receive(serviceInstanceCLRCPU);
+
+        ClrGC gc = metric.getGc();
+        ServiceInstanceCLRGC serviceInstanceCLRGC = new ServiceInstanceCLRGC();
+        serviceInstanceCLRGC.setGen0CollectCount(gc.getGen0CollectCount());
+        serviceInstanceCLRGC.setGen1CollectCount(gc.getGen1CollectCount());
+        serviceInstanceCLRGC.setGen2CollectCount(gc.getGen2CollectCount());
+        serviceInstanceCLRGC.setHeapMemory(gc.getHeapMemory());
+        serviceInstanceCLRGC.setTimeBucket(minuteTimeBucket);
+        serviceInstanceCLRGC.setId(serviceInstanceId);
+        serviceInstanceCLRGC.setName(Const.EMPTY_STRING);
+        serviceInstanceCLRGC.setServiceId(serviceId);
+        serviceInstanceCLRGC.setServiceName(Const.EMPTY_STRING);
+        sourceReceiver.receive(serviceInstanceCLRGC);
+
+        ClrThread thread = metric.getThread();
+        ServiceInstanceCLRThread serviceInstanceCLRThread = new ServiceInstanceCLRThread();
+        serviceInstanceCLRThread.setAvailableCompletionPortThreads(thread.getAvailableCompletionPortThreads());
+        serviceInstanceCLRThread.setAvailableWorkerThreads(thread.getAvailableWorkerThreads());
+        serviceInstanceCLRThread.setMaxCompletionPortThreads(thread.getMaxCompletionPortThreads());
+        serviceInstanceCLRThread.setMaxWorkerThreads(thread.getMaxWorkerThreads());
+        serviceInstanceCLRThread.setTimeBucket(minuteTimeBucket);
+        serviceInstanceCLRThread.setId(serviceInstanceId);
+        serviceInstanceCLRThread.setName(Const.EMPTY_STRING);
+        serviceInstanceCLRThread.setServiceId(serviceId);
+        serviceInstanceCLRThread.setServiceName(Const.EMPTY_STRING);
+        sourceReceiver.receive(serviceInstanceCLRThread);
+    }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine
new file mode 100644
index 0000000..340e044
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+#
+
+org.apache.skywalking.oap.server.receiver.clr.module.CLRModule
\ No newline at end of file
diff --git a/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider
new file mode 100644
index 0000000..1d6ef7a
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-clr-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+#
+
+org.apache.skywalking.oap.server.receiver.clr.provider.CLRModuleProvider
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/assembly/application.yml b/oap-server/server-starter/src/main/assembly/application.yml
index 758d849..a732675 100644
--- a/oap-server/server-starter/src/main/assembly/application.yml
+++ b/oap-server/server-starter/src/main/assembly/application.yml
@@ -84,6 +84,8 @@ receiver-trace:
     slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms.
 receiver-jvm:
   default:
+receiver-clr:
+  default:
 service-mesh:
   default:
     bufferPath: ${SW_SERVICE_MESH_BUFFER_PATH:../mesh-buffer/}  # Path to trace buffer files, suggest to use absolute path
diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml
index bf0d748..0fdfe45 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -84,6 +84,8 @@ receiver-trace:
     slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms.
 receiver-jvm:
   default:
+receiver-clr:
+  default:
 service-mesh:
   default:
     bufferPath: ${SW_SERVICE_MESH_BUFFER_PATH:../mesh-buffer/}  # Path to trace buffer files, suggest to use absolute path