diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 379208e42ad6..bd17f2e32ef1 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -99,6 +99,7 @@ * Enhance VNode logic and support multiple Trace IDs in span's ref. * Add the layers filed and associate layers dashboards for the service topology nodes. * Fix `Nginx-Instance` metrics to instance level. +* Update tabs of the Kubernetes service page. #### Documentation diff --git a/oap-server/server-starter/src/main/resources/oal/ebpf.oal b/oap-server/server-starter/src/main/resources/oal/ebpf.oal index 6d1685807dde..ce8d95069dc6 100644 --- a/oap-server/server-starter/src/main/resources/oal/ebpf.oal +++ b/oap-server/server-starter/src/main/resources/oal/ebpf.oal @@ -115,6 +115,7 @@ kubernetes_service_instance_read_netfilter_duration = from(K8SServiceInstance.re kubernetes_service_instance_http_call_cpm = from(K8SServiceInstance.*).filter(detectPoint == DetectPoint.SERVER).filter(type == "protocol").filter(protocol.type == "http").cpm(); kubernetes_service_instance_http_call_duration = from(K8SServiceInstance.protocol.http.latency).filter(detectPoint == DetectPoint.SERVER).filter(type == "protocol").filter(protocol.type == "http").sum(); +kubernetes_service_instance_http_call_success_count = from(K8SServiceInstance.*).filter(detectPoint == DetectPoint.SERVER).filter(type == "protocol").filter(protocol.type == "http").filter(protocol.success == true).cpm(); kubernetes_service_instance_http_req_header_size = from(K8SServiceInstance.protocol.http.sizeOfRequestHeader).filter(detectPoint == DetectPoint.SERVER).filter(type == "protocol").filter(protocol.type == "http").sum(); kubernetes_service_instance_http_req_body_size = from(K8SServiceInstance.protocol.http.sizeOfRequestBody).filter(detectPoint == DetectPoint.SERVER).filter(type == "protocol").filter(protocol.type == "http").sum(); kubernetes_service_instance_http_resp_header_size = from(K8SServiceInstance.protocol.http.sizeOfResponseHeader).filter(detectPoint == DetectPoint.SERVER).filter(type == "protocol").filter(protocol.type == "http").sum(); diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-root.json index 2093d99a5b5e..cc554c058546 100644 --- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-root.json +++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-root.json @@ -47,6 +47,8 @@ "type": "Widget", "metricMode": "Expression", "typesOfMQE": [ + "TIME_SERIES_VALUES", + "TIME_SERIES_VALUES", "TIME_SERIES_VALUES", "TIME_SERIES_VALUES", "TIME_SERIES_VALUES" @@ -54,7 +56,9 @@ "expressions": [ "latest(k8s_service_pod_total)", "latest(k8s_service_cpu_cores_requests)", - "latest(k8s_service_cpu_cores_limits)" + "latest(k8s_service_cpu_cores_limits)", + "latest(kubernetes_service_http_call_cpm)", + "latest(kubernetes_service_http_call_success_count/kubernetes_service_http_call_cpm*100)" ], "graph": { "type": "ServiceList", @@ -75,6 +79,14 @@ { "label": "CPU Limits", "unit": "m" + }, + { + "label": "HTTP Load", + "unit": "calls / min" + }, + { + "label": "HTTP Success Rate", + "unit": "%" } ] } @@ -211,4 +223,4 @@ "path": "/Kubernetes/Service" } } -] +] \ No newline at end of file diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-service.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-service.json index b6b4ed27d92a..ec6ad8b0ddb1 100644 --- a/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-service.json +++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/k8s_service/k8s-service-service.json @@ -236,106 +236,118 @@ ] }, { - "name": "eBPF Profiling", - "children": [ - { - "x": 0, - "y": 2, - "w": 24, - "h": 47, - "i": "0", - "type": "Ebpf" - }, - { - "x": 0, - "y": 0, - "w": 24, - "h": 2, - "i": "2", - "type": "Text", - "graph": { - "fontColor": "theme", - "backgroundColor": "theme", - "content": "eBPF Profiling support services written in C, C++, Golang, and Rust. SkyWalking Rover provides this profiling capability. ", - "fontSize": 14, - "textAlign": "left", - "url": "https://skywalking.apache.org/docs/skywalking-rover/next/readme/" - } - } - ] - }, - { - "name": "Pods", + "name": "Topology", "children": [ { "x": 0, "y": 0, "w": 24, - "h": 31, - "i": "1", - "type": "Widget", - "graph": { - "type": "InstanceList", - "dashboardName": "K8S-Service-Pods", - "fontSize": 12 - } - } - ] - }, - { - "name": "Endpoint", - "children": [ - { - "x": 0, - "y": 0, - "w": 24, - "h": 49, + "h": 41, "i": "0", - "type": "Widget", + "type": "Topology", "graph": { - "type": "EndpointList", - "dashboardName": "K8S-Endpoint", - "fontSize": 12, - "showXAxis": false, - "showYAxis": false + "showDepth": true }, - "metricConfig": [ + "metricMode": "Expression", + "linkDashboard": "K8S-Service-Relation", + "nodeDashboard": [ + + ], + "linkServerMetrics": [ + + ], + "linkClientMetrics": [ + + ], + "nodeMetrics": [ + + ], + "linkServerExpressions": [ + "avg(kubernetes_service_relation_server_write_package_size)/60", + "avg(kubernetes_service_relation_server_read_package_size)/60", + "avg(kubernetes_service_relation_server_http_call_cpm)/60", + "avg(kubernetes_service_relation_server_http_call_duration/kubernetes_service_relation_client_http_call_cpm)/1000000" + ], + "linkClientExpressions": [ + "avg(kubernetes_service_relation_client_write_package_size)/60", + "avg(kubernetes_service_relation_client_read_package_size)/60", + "avg(kubernetes_service_relation_client_http_call_cpm)/60", + "avg(kubernetes_service_relation_client_http_call_duration/kubernetes_service_relation_server_http_call_cpm)/1000000" + ], + "nodeExpressions": [ + "avg(kubernetes_service_write_package_size)/60", + "avg(kubernetes_service_read_package_size)/60", + "avg(kubernetes_service_http_call_cpm)", + "avg(kubernetes_service_http_call_duration/kubernetes_service_http_call_cpm)/1000000", + "avg(kubernetes_service_http_call_success_count / kubernetes_service_http_call_cpm*100)" + ], + "legend": [ + + ], + "legendMQE": { + "expression": "avg(kubernetes_service_http_call_success_count / kubernetes_service_http_call_cpm*100) < 95 and avg(kubernetes_service_http_call_cpm) > 1" + }, + "description": { + "healthy": "Healthy", + "unhealthy": "HTTP Success Rate < 95% and HTTP Traffic > 1 calls / min" + }, + "linkServerMetricConfig": [ { - "label": "Load", - "detailLabel": "load", - "unit": "calls / min" + "label": "Server Write", + "unit": "bytes / s" }, { - "label": "Success Rate", - "detailLabel": "success_rate", - "unit": "%" + "label": "Server Read", + "unit": "bytes / s" }, { - "label": "Latency", - "detailLabel": "latency", + "label": "Server HTTP Load", + "unit": "calls / min" + }, + { + "label": "Server HTTP Latency", "unit": "ms" } ], - "metricMode": "Expression", - "expressions": [ - "avg(kubernetes_service_endpoint_call_cpm)", - "avg(kubernetes_service_endpoint_call_success_cpm/kubernetes_service_endpoint_call_cpm*100)", - "avg(kubernetes_service_endpoint_call_duration/kubernetes_service_endpoint_call_cpm/1000000)" - ], - "subExpressions": [ - "kubernetes_service_endpoint_call_cpm", - "kubernetes_service_endpoint_call_success_cpm/kubernetes_service_endpoint_call_cpm*100", - "kubernetes_service_endpoint_call_duration/kubernetes_service_endpoint_call_cpm/1000000" - ], - "subTypesOfMQE": [ - "", - "", - "" + "linkClientMetricConfig": [ + { + "label": "Client Write", + "unit": "bytes / s" + }, + { + "label": "Client Read", + "unit": "bytes / s" + }, + { + "label": "Client HTTP Load", + "unit": "calls / min" + }, + { + "label": "Client HTTP Latency", + "unit": "ms" + } ], - "typesOfMQE": [ - "", - "", - "" + "nodeMetricConfig": [ + { + "label": "Write", + "unit": "bytes / s" + }, + { + "label": "Read", + "unit": "bytes / s" + }, + { + "label": "HTTP Load", + "unit": "calls / min" + }, + { + "label": "HTTP Latency", + "unit": "ms" + }, + { + "label": "HTTP Success Rate", + "unit": "%" + } ] } ] @@ -1930,6 +1942,131 @@ ] } ] + }, + { + "name": "Pods", + "children": [ + { + "x": 0, + "y": 0, + "w": 24, + "h": 31, + "i": "1", + "type": "Widget", + "graph": { + "type": "InstanceList", + "dashboardName": "K8S-Service-Pods", + "fontSize": 12 + }, + "metricMode": "Expression", + "metricConfig": [ + { + "label": "HTTP Load", + "unit": "calls / min" + }, + { + "label": "HTTP Latency", + "unit": "ms" + }, + { + "label": "HTTP Success Rate", + "unit": "%" + } + ], + "expressions": [ + "latest(kubernetes_service_instance_http_call_cpm)", + "latest(kubernetes_service_instance_http_call_duration/kubernetes_service_instance_http_call_cpm)/1000000", + "latest(kubernetes_service_instance_http_call_success_count/kubernetes_service_instance_http_call_cpm*100)" + ] + } + ] + }, + { + "name": "Endpoint", + "children": [ + { + "x": 0, + "y": 0, + "w": 24, + "h": 49, + "i": "0", + "type": "Widget", + "graph": { + "type": "EndpointList", + "dashboardName": "K8S-Endpoint", + "fontSize": 12, + "showXAxis": false, + "showYAxis": false + }, + "metricConfig": [ + { + "label": "Load", + "detailLabel": "load", + "unit": "calls / min" + }, + { + "label": "Success Rate", + "detailLabel": "success_rate", + "unit": "%" + }, + { + "label": "Latency", + "detailLabel": "latency", + "unit": "ms" + } + ], + "metricMode": "Expression", + "expressions": [ + "avg(kubernetes_service_endpoint_call_cpm)", + "avg(kubernetes_service_endpoint_call_success_cpm/kubernetes_service_endpoint_call_cpm*100)", + "avg(kubernetes_service_endpoint_call_duration/kubernetes_service_endpoint_call_cpm/1000000)" + ], + "subExpressions": [ + "kubernetes_service_endpoint_call_cpm", + "kubernetes_service_endpoint_call_success_cpm/kubernetes_service_endpoint_call_cpm*100", + "kubernetes_service_endpoint_call_duration/kubernetes_service_endpoint_call_cpm/1000000" + ], + "subTypesOfMQE": [ + "", + "", + "" + ], + "typesOfMQE": [ + "", + "", + "" + ] + } + ] + }, + { + "name": "eBPF Profiling", + "children": [ + { + "x": 0, + "y": 2, + "w": 24, + "h": 47, + "i": "0", + "type": "Ebpf" + }, + { + "x": 0, + "y": 0, + "w": 24, + "h": 2, + "i": "2", + "type": "Text", + "graph": { + "fontColor": "theme", + "backgroundColor": "theme", + "content": "eBPF Profiling support services written in C, C++, Golang, and Rust. SkyWalking Rover provides this profiling capability. ", + "fontSize": 14, + "textAlign": "left", + "url": "https://skywalking.apache.org/docs/skywalking-rover/next/readme/" + } + } + ] } ] } @@ -1937,50 +2074,7 @@ "layer": "K8S_SERVICE", "entity": "Service", "name": "K8S-Service-Service", - "isDefault": true, - "expressions": [ - "latest(k8s_service_pod_total)", - "latest(k8s_service_cpu_cores_requests)", - "latest(k8s_service_cpu_cores_limits)", - "avg(kubernetes_service_write_package_size)/60", - "avg(kubernetes_service_read_package_size)/60", - "avg(kubernetes_service_http_call_cpm)", - "avg(kubernetes_service_http_call_duration/kubernetes_service_http_call_cpm/1000000)", - "avg(kubernetes_service_http_call_success_count / kubernetes_service_http_call_cpm*100)" - ], - "expressionsConfig": [ - { - "label": "Pod Total" - }, - { - "unit": "m", - "label": "CPU Requests" - }, - { - "unit": "m", - "label": "CPU Limits" - }, - { - "unit": "bytes / s", - "label": "Write" - }, - { - "unit": "bytes / s", - "label": "Read" - }, - { - "label": "HTTP Load", - "unit": "calls / min" - }, - { - "label": "HTTP Latency", - "unit": "ms" - }, - { - "label": "HTTP Success Rate", - "unit": "%" - } - ] + "id": "K8S-Service-Service" } } -] +] \ No newline at end of file