You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/04/02 10:03:55 UTC

[skywalking] branch master updated: Add template of OpenFunction (#8789)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new bfdbd55  Add template of OpenFunction (#8789)
bfdbd55 is described below

commit bfdbd55285d04aba40fc8a0da2aae07a92e216c0
Author: zhang-wei <zh...@apache.org>
AuthorDate: Sat Apr 2 18:03:43 2022 +0800

    Add template of OpenFunction (#8789)
---
 CHANGES.md                                         |   1 +
 apm-protocol/apm-network/src/main/proto            |   2 +-
 .../trace/parser/listener/RPCAnalysisListener.java |  28 +-
 .../skywalking/oap/server/core/analysis/Layer.java |  15 +-
 .../ui/template/UITemplateInitializer.java         |   1 +
 .../handler/v8/ManagementServiceHandler.java       |  19 +-
 .../parser/listener/RPCAnalysisListenerTest.java   |  18 +-
 .../faas/faas-function-relation.json               | 368 +++++++++++++++
 .../faas/faas-function.json                        | 508 +++++++++++++++++++++
 .../faas/faas-instance-relation.json               | 263 +++++++++++
 .../faas/faas-instance.json                        | 166 +++++++
 .../ui-initialized-templates/faas/faas-root.json   | 239 ++++++++++
 12 files changed, 1601 insertions(+), 27 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index c6eec71..4765afa 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -168,6 +168,7 @@ NOTICE, this sharding concept is NOT just for splitting data into different data
 * Re-implement UI template initialization for Booster UI.
 * Add environment variable `SW_ENABLE_UPDATE_UI_TEMPLATE` to control user edit UI template.
 * Add the Self Observability template of the SkyWalking Satellite.
+* Add the template of OpenFunction observability.
 
 #### Documentation
 
diff --git a/apm-protocol/apm-network/src/main/proto b/apm-protocol/apm-network/src/main/proto
index b7548df..6882545 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit b7548df896330bd4cd0ae42d95df9b9cc511f139
+Subproject commit 68825459980d14702de8fb2303c7997624129991
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
index 8e56c6a..78bff0e 100644
--- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
@@ -286,20 +286,24 @@ public class RPCAnalysisListener extends CommonAnalysisListener implements Entry
             callingIn.prepare();
             sourceReceiver.receive(callingIn.toService());
             sourceReceiver.receive(callingIn.toServiceInstance());
-            sourceReceiver.receive(callingIn.toEndpoint());
             sourceReceiver.receive(callingIn.toServiceRelation());
             sourceReceiver.receive(callingIn.toServiceInstanceRelation());
-            EndpointRelation endpointRelation = callingIn.toEndpointRelation();
-            /*
-             * Parent endpoint could be none, because in SkyWalking Cross Process Propagation Headers Protocol v2,
-             * endpoint in ref could be empty, based on that, endpoint relation maybe can't be established.
-             * So, I am making this source as optional.
-             *
-             * Also, since 6.6.0, source endpoint could be none, if this trace begins by an internal task(local span or exit span), such as Timer,
-             * rather than, normally begin as an entry span, like a RPC server side.
-             */
-            if (endpointRelation != null) {
-                sourceReceiver.receive(endpointRelation);
+            // Service is equivalent to endpoint in FaaS (function as a service)
+            // Don't generate endpoint and endpoint dependency to avoid unnecessary costs.
+            if (Layer.FAAS != callingIn.getDestLayer()) {        
+                sourceReceiver.receive(callingIn.toEndpoint());
+                EndpointRelation endpointRelation = callingIn.toEndpointRelation();
+                /*
+                 * Parent endpoint could be none, because in SkyWalking Cross Process Propagation Headers Protocol v2,
+                 * endpoint in ref could be empty, based on that, endpoint relation maybe can't be established.
+                 * So, I am making this source as optional.
+                 *
+                 * Also, since 6.6.0, source endpoint could be none, if this trace begins by an internal task(local span or exit span), such as Timer,
+                 * rather than, normally begin as an entry span, like a RPC server side.
+                 */
+                if (endpointRelation != null) {
+                    sourceReceiver.receive(endpointRelation);
+                }
             }
         });
 
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
index 4f443c6..584596c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
@@ -21,7 +21,6 @@ package org.apache.skywalking.oap.server.core.analysis;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.stream.Collectors;
 import org.apache.skywalking.oap.server.core.UnexpectedException;
 
 /**
@@ -126,9 +125,13 @@ public enum Layer {
      */
     private final boolean isNormal;
     private static final Map<Integer, Layer> DICTIONARY = new HashMap<>();
+    private static final Map<String, Layer> DICTIONARY_NAME = new HashMap<>();
 
     static {
-        Arrays.stream(Layer.values()).collect(Collectors.toMap(Layer::value, layer -> layer)).forEach(DICTIONARY::put);
+        Arrays.stream(Layer.values()).forEach(l -> {
+            DICTIONARY.put(l.value, l);
+            DICTIONARY_NAME.put(l.name(), l);
+        });
     }
 
     Layer(int value, boolean isNormal) {
@@ -148,6 +151,14 @@ public enum Layer {
         return layer;
     }
 
+    public static Layer nameOf(String name) {
+        Layer layer = DICTIONARY_NAME.get(name);
+        if (layer == null) {
+            throw new UnexpectedException("Unknown Layer name");
+        }
+        return layer;
+    }
+
     public boolean isNormal() {
         return isNormal;
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
index 6101308..7bf5181 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
@@ -52,6 +52,7 @@ public class UITemplateInitializer {
         Layer.VIRTUAL_DATABASE.name(),
         Layer.K8S_SERVICE.name(),
         Layer.SO11Y_SATELLITE.name(),
+        Layer.FAAS.name(),
         "custom"
     };
     private final UITemplateManagementService uiTemplateManagementService;
diff --git a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/ManagementServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/ManagementServiceHandler.java
index 1372d5d..7dbb90b 100644
--- a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/ManagementServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/ManagementServiceHandler.java
@@ -35,6 +35,7 @@ import org.apache.skywalking.oap.server.core.source.ServiceInstanceUpdate;
 import org.apache.skywalking.oap.server.core.source.ServiceMeta;
 import org.apache.skywalking.oap.server.core.source.SourceReceiver;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
 
 public final class ManagementServiceHandler {
     private final SourceReceiver sourceReceiver;
@@ -47,13 +48,24 @@ public final class ManagementServiceHandler {
                                           .getService(NamingControl.class);
     }
 
+    /**
+     * Identify the layer of instance. Such as ${@link Layer#FAAS}.
+     */
+    private Layer identifyInstanceLayer(String layer) {
+        if (StringUtil.isEmpty(layer)) {
+            return Layer.GENERAL;
+        } else {
+            return Layer.nameOf(layer);
+        }
+    }
+
     public Commands reportInstanceProperties(final InstanceProperties request) {
         ServiceInstanceUpdate serviceInstanceUpdate = new ServiceInstanceUpdate();
         final String serviceName = namingControl.formatServiceName(request.getService());
         final String instanceName = namingControl.formatInstanceName(request.getServiceInstance());
         serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(serviceName, true));
         serviceInstanceUpdate.setName(instanceName);
-        serviceInstanceUpdate.setLayer(Layer.GENERAL);
+        serviceInstanceUpdate.setLayer(identifyInstanceLayer(request.getLayer()));
 
         JsonObject properties = new JsonObject();
         List<String> ipv4List = new ArrayList<>();
@@ -77,18 +89,19 @@ public final class ManagementServiceHandler {
         final long timeBucket = TimeBucket.getTimeBucket(System.currentTimeMillis(), DownSampling.Minute);
         final String serviceName = namingControl.formatServiceName(request.getService());
         final String instanceName = namingControl.formatInstanceName(request.getServiceInstance());
+        final Layer layer = identifyInstanceLayer(request.getLayer());
 
         ServiceInstanceUpdate serviceInstanceUpdate = new ServiceInstanceUpdate();
         serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(serviceName, true));
         serviceInstanceUpdate.setName(instanceName);
         serviceInstanceUpdate.setTimeBucket(timeBucket);
-        serviceInstanceUpdate.setLayer(Layer.GENERAL);
+        serviceInstanceUpdate.setLayer(layer);
         sourceReceiver.receive(serviceInstanceUpdate);
 
         ServiceMeta serviceMeta = new ServiceMeta();
         serviceMeta.setName(serviceName);
         serviceMeta.setTimeBucket(timeBucket);
-        serviceMeta.setLayer(Layer.GENERAL);
+        serviceMeta.setLayer(layer);
         sourceReceiver.receive(serviceMeta);
 
         return Commands.newBuilder().build();
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
index 6884430..93f9287 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
@@ -155,9 +155,9 @@ public class RPCAnalysisListenerTest {
         Assert.assertEquals(6, receivedSources.size());
         final Service service = (Service) receivedSources.get(0);
         final ServiceInstance serviceInstance = (ServiceInstance) receivedSources.get(1);
-        final Endpoint endpoint = (Endpoint) receivedSources.get(2);
-        final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(3);
-        final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(4);
+        final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(2);
+        final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(3);
+        final Endpoint endpoint = (Endpoint) receivedSources.get(4);
         final EndpointRelation endpointRelation = (EndpointRelation) receivedSources.get(5);
         Assert.assertEquals("mock-service", service.getName());
         Assert.assertEquals(500, service.getHttpResponseStatusCode());
@@ -220,9 +220,9 @@ public class RPCAnalysisListenerTest {
         Assert.assertEquals(6, receivedSources.size());
         final Service service = (Service) receivedSources.get(0);
         final ServiceInstance serviceInstance = (ServiceInstance) receivedSources.get(1);
-        final Endpoint endpoint = (Endpoint) receivedSources.get(2);
-        final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(3);
-        final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(4);
+        final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(2);
+        final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(3);
+        final Endpoint endpoint = (Endpoint) receivedSources.get(4);
         final EndpointRelation endpointRelation = (EndpointRelation) receivedSources.get(5);
         Assert.assertEquals("mock-service", service.getName());
         Assert.assertEquals("mock-instance", serviceInstance.getName());
@@ -282,9 +282,9 @@ public class RPCAnalysisListenerTest {
         Assert.assertEquals(6, receivedSources.size());
         final Service service = (Service) receivedSources.get(0);
         final ServiceInstance serviceInstance = (ServiceInstance) receivedSources.get(1);
-        final Endpoint endpoint = (Endpoint) receivedSources.get(2);
-        final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(3);
-        final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(4);
+        final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(2);
+        final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(3);
+        final Endpoint endpoint = (Endpoint) receivedSources.get(4);
         final EndpointRelation endpointRelation = (EndpointRelation) receivedSources.get(5);
         Assert.assertEquals("mock-service", service.getName());
         Assert.assertEquals("mock-instance", serviceInstance.getName());
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function-relation.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function-relation.json
new file mode 100644
index 0000000..f1f85ca
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function-relation.json
@@ -0,0 +1,368 @@
+/**
+ * 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.
+ */
+
+[
+  {
+    "id": "FaaS-Function-Relation",
+    "configuration": {
+      "children": [
+        {
+          "x": 0,
+          "y": 0,
+          "w": 24,
+          "h": 52,
+          "i": "0",
+          "type": "Tab",
+          "widget": {
+            "title": "Title"
+          },
+          "graph": {},
+          "metrics": [
+            ""
+          ],
+          "metricTypes": [
+            ""
+          ],
+          "activedTabIndex": 1,
+          "children": [
+            {
+              "name": "Overview",
+              "children": [
+                {
+                  "x": 12,
+                  "y": 24,
+                  "w": 12,
+                  "h": 12,
+                  "i": "0",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Load (Server) (calls / min)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_relation_server_cpm"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false
+                },
+                {
+                  "x": 0,
+                  "y": 24,
+                  "w": 12,
+                  "h": 12,
+                  "i": "1",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Success Rate (Server) (%)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_relation_server_call_sla"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "calculation": "percentage"
+                    }
+                  ]
+                },
+                {
+                  "x": 12,
+                  "y": 0,
+                  "w": 12,
+                  "h": 12,
+                  "i": "2",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Response Time Percentile (Server) (ms)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_relation_server_percentile"
+                  ],
+                  "metricTypes": [
+                    "readLabeledMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "key": "P50, P75, P90, P95, P99",
+                      "labelsIndex": "0,1,2,3,4",
+                      "label": "P50, P75, P90, P95, P99"
+                    }
+                  ]
+                },
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 12,
+                  "h": 12,
+                  "i": "3",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Response Time (Server) (ms)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_relation_server_resp_time"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false
+                },
+                {
+                  "x": 0,
+                  "y": 12,
+                  "w": 12,
+                  "h": 12,
+                  "i": "4",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Response Time (Client) (ms)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_relation_client_resp_time"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false
+                },
+                {
+                  "x": 12,
+                  "y": 12,
+                  "w": 12,
+                  "h": 12,
+                  "i": "5",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Response Time Percentile (Client) (ms)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_relation_client_percentile"
+                  ],
+                  "metricTypes": [
+                    "readLabeledMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "key": "P50, P75, P90, P95, P99",
+                      "labelsIndex": "0,1,2,3,4",
+                      "label": "P50, P75, P90, P95, P99"
+                    }
+                  ]
+                },
+                {
+                  "x": 0,
+                  "y": 36,
+                  "w": 12,
+                  "h": 12,
+                  "i": "6",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Success Rate (Client) (%)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_relation_client_call_sla"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "calculation": "percentage"
+                    }
+                  ]
+                },
+                {
+                  "x": 12,
+                  "y": 36,
+                  "w": 12,
+                  "h": 12,
+                  "i": "7",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Load (Client) (calls / min)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_relation_client_cpm"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false
+                }
+              ]
+            },
+            {
+              "name": "Topology",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 49,
+                  "i": "0",
+                  "type": "Topology",
+                  "widget": {
+                    "title": "Title"
+                  },
+                  "graph": {
+                    "showDepth": true
+                  },
+                  "metrics": [
+                    ""
+                  ],
+                  "metricTypes": [
+                    ""
+                  ],
+                  "moved": false,
+                  "linkDashboard": "FaaS-Instance-Relation",
+                  "nodeDashboard": "FaaS-Instance",
+                  "linkServerMetrics": [
+                    "service_instance_relation_server_resp_time",
+                    "service_instance_relation_server_cpm"
+                  ],
+                  "linkClientMetrics": [
+                    "service_instance_relation_client_resp_time",
+                    "service_instance_relation_client_cpm"
+                  ],
+                  "nodeMetrics": [
+                    "service_instance_sla",
+                    "service_instance_cpm",
+                    "service_instance_resp_time"
+                  ],
+                  "legend": [],
+                  "description": {},
+                  "nodeMetricConfig": [
+                    {
+                      "unit": "%",
+                      "calculation": "percentage",
+                      "label": "Success Rate"
+                    },
+                    {
+                      "unit": "calls / min",
+                      "label": "Load"
+                    },
+                    {
+                      "unit": "ms",
+                      "label": "Latency"
+                    }
+                  ],
+                  "linkServerMetricConfig": [
+                    {
+                      "unit": "ms",
+                      "label": "Server Latency"
+                    },
+                    {
+                      "unit": "calls / min ",
+                      "label": "Server Load"
+                    }
+                  ],
+                  "linkClientMetricConfig": [
+                    {
+                      "unit": "ms",
+                      "label": "Client Latency"
+                    },
+                    {
+                      "unit": "calls / min",
+                      "label": "Client Load"
+                    }
+                  ]
+                }
+              ]
+            }
+          ],
+          "moved": false
+        }
+      ],
+      "layer": "FAAS",
+      "entity": "ServiceRelation",
+      "name": "FaaS-Function-Relation",
+      "id": "FaaS-Function-Relation",
+      "isRoot": false
+    }
+  }
+]
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function.json
new file mode 100644
index 0000000..496e234
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function.json
@@ -0,0 +1,508 @@
+/**
+ * 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.
+ */
+
+[
+  {
+    "id": "FaaS-Function",
+    "configuration": {
+      "children": [
+        {
+          "x": 0,
+          "y": 0,
+          "w": 24,
+          "h": 52,
+          "i": "4",
+          "type": "Tab",
+          "widget": {
+            "title": "Title"
+          },
+          "graph": {},
+          "metrics": [
+            ""
+          ],
+          "metricTypes": [
+            ""
+          ],
+          "activedTabIndex": 0,
+          "children": [
+            {
+              "name": "Overview",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 8,
+                  "h": 5,
+                  "i": "0",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Apdex"
+                  },
+                  "graph": {
+                    "type": "Card",
+                    "fontSize": 14,
+                    "textAlign": "center"
+                  },
+                  "metrics": [
+                    "service_apdex"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValue"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "calculation": "apdex"
+                    }
+                  ]
+                },
+                {
+                  "x": 8,
+                  "y": 0,
+                  "w": 8,
+                  "h": 5,
+                  "i": "1",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Success Rate"
+                  },
+                  "graph": {
+                    "type": "Card",
+                    "fontSize": 14,
+                    "textAlign": "center",
+                    "showUnit": true
+                  },
+                  "metrics": [
+                    "service_sla"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValue"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "calculation": "percentage",
+                      "unit": "%"
+                    }
+                  ]
+                },
+                {
+                  "x": 16,
+                  "y": 0,
+                  "w": 8,
+                  "h": 5,
+                  "i": "2",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Load (calls / min)",
+                    "tips": "For HTTP 1/2, gRPC, RPC functions, this means Calls Per Minute (calls / min)"
+                  },
+                  "graph": {
+                    "type": "Card",
+                    "fontSize": 14,
+                    "textAlign": "center",
+                    "showUnit": true
+                  },
+                  "metrics": [
+                    "service_cpm"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValue"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "unit": "calls / min"
+                    }
+                  ]
+                },
+                {
+                  "x": 0,
+                  "y": 5,
+                  "w": 6,
+                  "h": 11,
+                  "i": "3",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Avg Response Time (ms)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_resp_time"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {}
+                  ]
+                },
+                {
+                  "x": 6,
+                  "y": 5,
+                  "w": 6,
+                  "h": 11,
+                  "i": "5",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Response Time Percentile (ms)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_percentile"
+                  ],
+                  "metricTypes": [
+                    "readLabeledMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "label": "P50, P75, P90, P95, P99",
+                      "labelsIndex": "0, 1, 2, 3, 4"
+                    }
+                  ]
+                },
+                {
+                  "x": 12,
+                  "y": 5,
+                  "w": 6,
+                  "h": 11,
+                  "i": "6",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Success Rate (%)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_sla"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "calculation": "percentage"
+                    }
+                  ]
+                },
+                {
+                  "x": 18,
+                  "y": 5,
+                  "w": 6,
+                  "h": 11,
+                  "i": "7",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Load (calls / min)",
+                    "tips": "For HTTP 1/2, gRPC, RPC functions, this means Calls Per Minute (calls / min)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_cpm"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false
+                },
+                {
+                  "x": 0,
+                  "y": 16,
+                  "w": 8,
+                  "h": 14,
+                  "i": "11",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Instances Load (calls / min)",
+                    "tips": "For HTTP 1/2, gRPC, RPC functions, this means Calls Per Minute (calls / min),"
+                  },
+                  "graph": {
+                    "type": "TopList"
+                  },
+                  "metrics": [
+                    "service_instance_cpm"
+                  ],
+                  "metricTypes": [
+                    "sortMetrics"
+                  ],
+                  "metricConfig": [
+                    {
+                      "sortOrder": "DES",
+                      "calculation": "percentage"
+                    }
+                  ],
+                  "moved": false
+                },
+                {
+                  "x": 8,
+                  "y": 16,
+                  "w": 8,
+                  "h": 14,
+                  "i": "12",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Slow Function Instance (ms)"
+                  },
+                  "graph": {
+                    "type": "TopList",
+                    "topN": "10"
+                  },
+                  "metrics": [
+                    "service_instance_resp_time"
+                  ],
+                  "metricTypes": [
+                    "sortMetrics"
+                  ],
+                  "metricConfig": [
+                    {
+                      "sortOrder": "DES",
+                      "calculation": "percentage"
+                    }
+                  ],
+                  "moved": false
+                },
+                {
+                  "x": 16,
+                  "y": 16,
+                  "w": 8,
+                  "h": 14,
+                  "i": "13",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Instance Success Rate (%)"
+                  },
+                  "graph": {
+                    "type": "TopList",
+                    "topN": "10"
+                  },
+                  "metrics": [
+                    "service_instance_sla"
+                  ],
+                  "metricTypes": [
+                    "sortMetrics"
+                  ],
+                  "metricConfig": [
+                    {
+                      "sortOrder": "ASC",
+                      "calculation": "percentage"
+                    }
+                  ],
+                  "moved": false
+                }
+              ]
+            },
+            {
+              "name": "Instance",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 49,
+                  "i": "0",
+                  "type": "Widget",
+                  "widget": {
+                    "title": ""
+                  },
+                  "graph": {
+                    "type": "InstanceList",
+                    "dashboardName": "FaaS-Instance",
+                    "fontSize": 12
+                  },
+                  "metrics": [
+                    "service_instance_cpm"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "label": "Load",
+                      "unit": "calls / min"
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "name": "Topology",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 48,
+                  "i": "0",
+                  "type": "Topology",
+                  "widget": {
+                    "title": "Title"
+                  },
+                  "graph": {
+                    "showDepth": true
+                  },
+                  "metrics": [
+                    ""
+                  ],
+                  "metricTypes": [
+                    ""
+                  ],
+                  "moved": false,
+                  "linkDashboard": "FaaS-Function-Relation",
+                  "nodeDashboard": [
+                    {
+                      "scope": "Service",
+                      "dashboard": "FaaS-Function"
+                    },
+                    {
+                      "scope": "ServiceInstance",
+                      "dashboard": "FaaS-Instance"
+                    }
+                  ],
+                  "linkServerMetrics": [
+                    "service_relation_server_resp_time",
+                    "service_relation_server_cpm"
+                  ],
+                  "linkClientMetrics": [
+                    "service_relation_client_cpm",
+                    "service_relation_client_resp_time"
+                  ],
+                  "nodeMetrics": [
+                    "service_cpm",
+                    "service_sla",
+                    "service_resp_time"
+                  ],
+                  "legend": [
+                    {
+                      "name": "service_sla",
+                      "condition": "<",
+                      "value": "9500"
+                    },
+                    {
+                      "name": "service_cpm",
+                      "condition": ">",
+                      "value": "1"
+                    }
+                  ],
+                  "description": {
+                    "healthy": "Healthy",
+                    "unhealthy": "Success Rate < 95% and Traffic > 1 call/min"
+                  },
+                  "nodeMetricConfig": [
+                    {
+                      "unit": "calls / min",
+                      "label": "Load"
+                    },
+                    {
+                      "calculation": "percentage",
+                      "unit": "%",
+                      "label": "Success Rate"
+                    },
+                    {
+                      "unit": "ms",
+                      "label": "Latency"
+                    }
+                  ],
+                  "linkServerMetricConfig": [
+                    {
+                      "unit": "ms",
+                      "label": "Server Latency"
+                    },
+                    {
+                      "unit": "calls / min",
+                      "label": "Server Load"
+                    }
+                  ],
+                  "linkClientMetricConfig": [
+                    {
+                      "unit": "calls / min",
+                      "label": "Client Load"
+                    },
+                    {
+                      "unit": "ms",
+                      "label": "Client Latency"
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "name": "Trace",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 48,
+                  "i": "0",
+                  "type": "Trace",
+                  "widget": {
+                    "title": "Title"
+                  },
+                  "graph": {},
+                  "metrics": [
+                    ""
+                  ],
+                  "metricTypes": [
+                    ""
+                  ],
+                  "moved": false
+                }
+              ]
+            }
+          ],
+          "moved": false
+        }
+      ],
+      "layer": "FAAS",
+      "entity": "Service",
+      "name": "FaaS-Function",
+      "id": "FaaS-Function",
+      "isRoot": false
+    }
+  }
+]
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance-relation.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance-relation.json
new file mode 100644
index 0000000..84479ee
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance-relation.json
@@ -0,0 +1,263 @@
+/**
+ * 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.
+ */
+
+[
+  {
+    "id": "FaaS-Instance-Relation",
+    "configuration": {
+      "children": [
+        {
+          "x": 12,
+          "y": 12,
+          "w": 12,
+          "h": 12,
+          "i": "1",
+          "type": "Widget",
+          "widget": {
+            "title": "Response Time Percentile (Client) (ms)"
+          },
+          "graph": {
+            "type": "Line",
+            "step": false,
+            "smooth": false,
+            "showSymbol": false,
+            "showXAxis": true,
+            "showYAxis": true
+          },
+          "metrics": [
+            "service_instance_relation_client_percentile"
+          ],
+          "metricTypes": [
+            "readLabeledMetricsValues"
+          ],
+          "moved": false,
+          "metricConfig": [
+            {
+              "key": "P50, P75, P90, P95, P99",
+              "labelsIndex": "0,1,2,3,4",
+              "label": "P50, P75, P90, P95, P99"
+            }
+          ]
+        },
+        {
+          "x": 0,
+          "y": 24,
+          "w": 12,
+          "h": 12,
+          "i": "2",
+          "type": "Widget",
+          "widget": {
+            "title": "Success Rate (Client) (%)"
+          },
+          "graph": {
+            "type": "Line",
+            "step": false,
+            "smooth": false,
+            "showSymbol": false,
+            "showXAxis": true,
+            "showYAxis": true
+          },
+          "metrics": [
+            "service_instance_relation_client_call_sla"
+          ],
+          "metricTypes": [
+            "readMetricsValues"
+          ],
+          "moved": false,
+          "metricConfig": [
+            {
+              "calculation": "percentage"
+            }
+          ]
+        },
+        {
+          "x": 12,
+          "y": 36,
+          "w": 12,
+          "h": 12,
+          "i": "3",
+          "type": "Widget",
+          "widget": {
+            "title": "Load (Client) (calls / min)"
+          },
+          "graph": {
+            "type": "Line",
+            "step": false,
+            "smooth": false,
+            "showSymbol": false,
+            "showXAxis": true,
+            "showYAxis": true
+          },
+          "metrics": [
+            "service_instance_relation_client_cpm"
+          ],
+          "metricTypes": [
+            "readMetricsValues"
+          ],
+          "moved": false
+        },
+        {
+          "x": 0,
+          "y": 12,
+          "w": 12,
+          "h": 12,
+          "i": "4",
+          "type": "Widget",
+          "widget": {
+            "title": "Response Time (Client) (ms)"
+          },
+          "graph": {
+            "type": "Line",
+            "step": false,
+            "smooth": false,
+            "showSymbol": false,
+            "showXAxis": true,
+            "showYAxis": true
+          },
+          "metrics": [
+            "service_instance_relation_client_resp_time"
+          ],
+          "metricTypes": [
+            "readMetricsValues"
+          ],
+          "moved": false
+        },
+        {
+          "x": 12,
+          "y": 0,
+          "w": 12,
+          "h": 12,
+          "i": "5",
+          "type": "Widget",
+          "widget": {
+            "title": "Response Time Percentile (Server) (ms)"
+          },
+          "graph": {
+            "type": "Line",
+            "step": false,
+            "smooth": false,
+            "showSymbol": false,
+            "showXAxis": true,
+            "showYAxis": true
+          },
+          "metrics": [
+            "service_instance_relation_server_percentile"
+          ],
+          "metricTypes": [
+            "readLabeledMetricsValues"
+          ],
+          "moved": false,
+          "metricConfig": [
+            {
+              "key": "P50, P75, P90, P95, P99",
+              "labelsIndex": "0,1,2,3,4",
+              "label": "P50, P75, P90, P95, P99"
+            }
+          ]
+        },
+        {
+          "x": 0,
+          "y": 36,
+          "w": 12,
+          "h": 12,
+          "i": "6",
+          "type": "Widget",
+          "widget": {
+            "title": "Success Rate (Server) (%)"
+          },
+          "graph": {
+            "type": "Line",
+            "step": false,
+            "smooth": false,
+            "showSymbol": false,
+            "showXAxis": true,
+            "showYAxis": true
+          },
+          "metrics": [
+            "service_instance_relation_server_call_sla"
+          ],
+          "metricTypes": [
+            "readMetricsValues"
+          ],
+          "moved": false,
+          "metricConfig": [
+            {
+              "calculation": "percentage"
+            }
+          ]
+        },
+        {
+          "x": 12,
+          "y": 24,
+          "w": 12,
+          "h": 12,
+          "i": "7",
+          "type": "Widget",
+          "widget": {
+            "title": "Load (Server) (calls / min)"
+          },
+          "graph": {
+            "type": "Line",
+            "step": false,
+            "smooth": false,
+            "showSymbol": false,
+            "showXAxis": true,
+            "showYAxis": true
+          },
+          "metrics": [
+            "service_instance_relation_server_cpm"
+          ],
+          "metricTypes": [
+            "readMetricsValues"
+          ],
+          "moved": false
+        },
+        {
+          "x": 0,
+          "y": 0,
+          "w": 12,
+          "h": 12,
+          "i": "8",
+          "type": "Widget",
+          "widget": {
+            "title": "Response Time (Server) (ms)"
+          },
+          "graph": {
+            "type": "Line",
+            "step": false,
+            "smooth": false,
+            "showSymbol": false,
+            "showXAxis": true,
+            "showYAxis": true
+          },
+          "metrics": [
+            "service_instance_relation_server_resp_time"
+          ],
+          "metricTypes": [
+            "readMetricsValues"
+          ],
+          "moved": false
+        }
+      ],
+      "layer": "FAAS",
+      "entity": "ServiceInstanceRelation",
+      "name": "FaaS-Instance-Relation",
+      "id": "FaaS-Instance-Relation",
+      "isRoot": false
+    }
+  }
+]
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance.json
new file mode 100644
index 0000000..a673c11
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance.json
@@ -0,0 +1,166 @@
+/**
+ * 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.
+ */
+
+[
+  {
+    "id": "FaaS-Instance",
+    "configuration": {
+      "children": [
+        {
+          "x": 0,
+          "y": 0,
+          "w": 24,
+          "h": 52,
+          "i": "0",
+          "type": "Tab",
+          "widget": {
+            "title": "Title"
+          },
+          "graph": {},
+          "metrics": [
+            ""
+          ],
+          "metricTypes": [
+            ""
+          ],
+          "activedTabIndex": 0,
+          "children": [
+            {
+              "name": "Overview",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 29,
+                  "w": 24,
+                  "h": 14,
+                  "i": "0",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Instance Latency (ms)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_instance_resp_time"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false
+                },
+                {
+                  "x": 0,
+                  "y": 14,
+                  "w": 24,
+                  "h": 15,
+                  "i": "1",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Instance Success Rate (%)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_instance_sla"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "calculation": "percentage"
+                    }
+                  ]
+                },
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 14,
+                  "i": "3",
+                  "type": "Widget",
+                  "widget": {
+                    "title": "Function Instance Load (calls / min)",
+                    "tips": "For HTTP 1/2, gRPC, RPC functions, this means Calls Per Minute (calls / min)"
+                  },
+                  "graph": {
+                    "type": "Line",
+                    "step": false,
+                    "smooth": false,
+                    "showSymbol": false,
+                    "showXAxis": true,
+                    "showYAxis": true
+                  },
+                  "metrics": [
+                    "service_instance_cpm"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false
+                }
+              ]
+            },
+            {
+              "name": "Trace",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 49,
+                  "i": "0",
+                  "type": "Trace",
+                  "widget": {
+                    "title": "Title"
+                  },
+                  "graph": {},
+                  "metrics": [
+                    ""
+                  ],
+                  "metricTypes": [
+                    ""
+                  ],
+                  "moved": false
+                }
+              ]
+            }
+          ],
+          "moved": false
+        }
+      ],
+      "layer": "FAAS",
+      "entity": "ServiceInstance",
+      "name": "FaaS-Instance",
+      "id": "FaaS-Instance",
+      "isRoot": false
+    }
+  }
+]
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-root.json
new file mode 100644
index 0000000..b4fd8e9
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-root.json
@@ -0,0 +1,239 @@
+/**
+ * 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.
+ */
+
+[
+  {
+    "id": "FaaS-Root",
+    "configuration": {
+      "children": [
+        {
+          "x": 0,
+          "y": 2,
+          "w": 24,
+          "h": 52,
+          "i": "1",
+          "type": "Tab",
+          "widget": {
+            "title": "Title"
+          },
+          "graph": {},
+          "metrics": [
+            ""
+          ],
+          "metricTypes": [
+            ""
+          ],
+          "activedTabIndex": 0,
+          "children": [
+            {
+              "name": "Function",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 48,
+                  "i": "0",
+                  "type": "Widget",
+                  "widget": {
+                    "title": ""
+                  },
+                  "graph": {
+                    "type": "ServiceList",
+                    "dashboardName": "FaaS-Function",
+                    "fontSize": 12,
+                    "showXAxis": false,
+                    "showYAxis": false,
+                    "showGroup": false
+                  },
+                  "metrics": [
+                    "service_cpm"
+                  ],
+                  "metricTypes": [
+                    "readMetricsValues"
+                  ],
+                  "moved": false,
+                  "metricConfig": [
+                    {
+                      "label": "Load",
+                      "unit": "calls / min"
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "name": "Topology",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 48,
+                  "i": "0",
+                  "type": "Topology",
+                  "widget": {
+                    "title": "Title"
+                  },
+                  "graph": {
+                    "showDepth": true
+                  },
+                  "metrics": [
+                    ""
+                  ],
+                  "metricTypes": [
+                    ""
+                  ],
+                  "moved": false,
+                  "linkDashboard": "Function-Function-Relation",
+                  "nodeDashboard": [
+                    {
+                      "scope": "Service",
+                      "dashboard": "FaaS-Function"
+                    },
+                    {
+                      "scope": "ServiceInstance",
+                      "dashboard": "FaaS-Instance"
+                    }
+                  ],
+                  "linkServerMetrics": [
+                    "service_relation_server_resp_time",
+                    "service_relation_server_cpm"
+                  ],
+                  "linkClientMetrics": [
+                    "service_relation_client_cpm",
+                    "service_relation_client_resp_time"
+                  ],
+                  "nodeMetrics": [
+                    "service_cpm",
+                    "service_sla",
+                    "service_resp_time"
+                  ],
+                  "legend": [
+                    {
+                      "name": "service_sla",
+                      "condition": "<",
+                      "value": "9500"
+                    },
+                    {
+                      "name": "service_cpm",
+                      "condition": ">",
+                      "value": "1"
+                    }
+                  ],
+                  "description": {
+                    "healthy": "Healthy",
+                    "unhealthy": "Success Rate < 95% and Traffic > 1 calls / min"
+                  },
+                  "nodeMetricConfig": [
+                    {
+                      "unit": "calls / min",
+                      "label": "Load"
+                    },
+                    {
+                      "calculation": "percentage",
+                      "unit": "%",
+                      "label": "Success Rate"
+                    },
+                    {
+                      "unit": "ms",
+                      "label": "Latency"
+                    }
+                  ],
+                  "linkServerMetricConfig": [
+                    {
+                      "unit": "ms",
+                      "label": "Server Latency"
+                    },
+                    {
+                      "unit": "calls / min",
+                      "label": "Server Load"
+                    }
+                  ],
+                  "linkClientMetricConfig": [
+                    {
+                      "unit": "calls / min",
+                      "label": "Client Load"
+                    },
+                    {
+                      "unit": "ms",
+                      "label": "Client Latency"
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "name": "Trace",
+              "children": [
+                {
+                  "x": 0,
+                  "y": 0,
+                  "w": 24,
+                  "h": 49,
+                  "i": "0",
+                  "type": "Trace",
+                  "widget": {
+                    "title": "Title"
+                  },
+                  "graph": {},
+                  "standard": {},
+                  "metrics": [
+                    ""
+                  ],
+                  "metricTypes": [
+                    ""
+                  ],
+                  "moved": false
+                }
+              ]
+            }
+          ],
+          "moved": false
+        },
+        {
+          "x": 0,
+          "y": 0,
+          "w": 24,
+          "h": 2,
+          "i": "2",
+          "type": "Text",
+          "metricTypes": [
+            ""
+          ],
+          "metrics": [
+            ""
+          ],
+          "graph": {
+            "fontColor": "black",
+            "backgroundColor": "white",
+            "content": "FaaS (Function-as-a-Service) is a type of cloud-computing service that allows you to execute code in response to events without the complex infrastructure typically associated with building and launching microservices applications. OpenFunction as a FaaS platform, provides out-of-box observability with SkyWalking integration.",
+            "fontSize": 14,
+            "textAlign": "left",
+            "url": "https://github.com/OpenFunction/samples/blob/main/functions/tracing/README.md"
+          },
+          "moved": false
+        }
+      ],
+      "id": "FaaS-Root",
+      "layer": "FAAS",
+      "entity": "All",
+      "name": "FaaS-Root",
+      "isRoot": true
+    }
+  }
+]
\ No newline at end of file