Add template of OpenFunction (#8789)

This commit is contained in:
zhang-wei 2022-04-02 18:03:43 +08:00 committed by GitHub
parent f8feaa97b7
commit bfdbd55285
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 1601 additions and 27 deletions

View File

@ -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

@ -1 +1 @@
Subproject commit b7548df896330bd4cd0ae42d95df9b9cc511f139
Subproject commit 68825459980d14702de8fb2303c7997624129991

View File

@ -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);
}
}
});

View File

@ -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;
}

View File

@ -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;

View File

@ -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();

View File

@ -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());

View File

@ -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
}
}
]

View File

@ -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
}
}
]

View File

@ -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
}
}
]

View File

@ -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
}
}
]

View File

@ -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
}
}
]