Skip to content

Commit ad61a58

Browse files
authored
Added Ztunnel component in the Topology (#13251)
1 parent b55fa2a commit ad61a58

File tree

10 files changed

+68
-16
lines changed

10 files changed

+68
-16
lines changed

docs/en/changes/changes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
* Increase the idle check interval of the message queue to 200ms to reduce CPU usage under low load conditions.
1818
* Limit max attempts of DNS resolution of Istio ServiceEntry to 3, and do not wait for first resolution result in case the DNS is not resolvable at all.
1919
* Support analysis waypoint metrics in Envoy ALS receiver.
20+
* Add Ztunnel component in the topology.
21+
* [Break Change] Change `compomentId` to `componentIds` in the K8SServiceRelation Scope.
2022

2123
#### UI
2224

docs/en/concepts-and-designs/scope-definitions.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -493,15 +493,15 @@ following **package**/**protocol** level metric contents.
493493

494494
##### SCOPE `K8SServiceRelation`
495495

496-
| Name | Remarks | Group Key | Type |
497-
|-------------------|--------------------------------------------------------------------|-----------|--------|
498-
| sourceServiceName | The source service name in kubernetes. | | string |
499-
| sourceLayer | The source layer service in kubernetes. | | string |
500-
| detectPoint | Where the relation is detected. The value may be client or server. | | enum |
501-
| componentId | The ID of component used in this call. | | string |
502-
| tlsMode | The TLS mode of relation. The value may be Plain or TLS. | | enum |
503-
| destServiceName | The dest service name in kubernetes. | | string |
504-
| destLayer | The dest layer service in kubernetes. | | string |
496+
| Name | Remarks | Group Key | Type |
497+
|-------------------|--------------------------------------------------------------------|-----------|--------------|
498+
| sourceServiceName | The source service name in kubernetes. | | string |
499+
| sourceLayer | The source layer service in kubernetes. | | string |
500+
| detectPoint | Where the relation is detected. The value may be client or server. | | enum |
501+
| componentIds | The ID of component used in this call. | | List<string> |
502+
| tlsMode | The TLS mode of relation. The value may be Plain or TLS. | | enum |
503+
| destServiceName | The dest service name in kubernetes. | | string |
504+
| destLayer | The dest layer service in kubernetes. | | string |
505505

506506
##### SCOPE `K8SServiceRelation`
507507

oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/ScriptParserTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,25 @@ public void testParse12() throws IOException {
326326
Assertions.assertEquals("(str->long)", castExp.getAggregationFuncStmt().getFuncArgs().get(0).getCastType());
327327
}
328328

329+
@Test
330+
public void testParse13() throws IOException {
331+
ScriptParser parser = ScriptParser.createFromScriptText(
332+
"ClientCpm = from(K8SServiceRelation.*).filter(componentIds contain 7).cpm();", TEST_SOURCE_PACKAGE);
333+
List<AnalysisResult> results = parser.parse().getMetricsStmts();
334+
AnalysisResult clientCpm = results.get(0);
335+
Assertions.assertEquals("ClientCpm", clientCpm.getMetricsName());
336+
Assertions.assertEquals("K8SServiceRelation", clientCpm.getFrom().getSourceName());
337+
Assertions.assertEquals("[*]", clientCpm.getFrom().getSourceAttribute().toString());
338+
final List<Expression> filterExpressions = clientCpm.getFilters().getFilterExpressions();
339+
Assertions.assertEquals(1, filterExpressions.size());
340+
Assertions.assertEquals("source.getComponentIds()", filterExpressions.get(0).getLeft());
341+
Assertions.assertEquals("7", filterExpressions.get(0).getRight());
342+
Assertions.assertEquals("cpm", clientCpm.getAggregationFuncStmt().getAggregationFunctionName());
343+
EntryMethod entryMethod = clientCpm.getEntryMethod();
344+
List<Object> methodArgsExpressions = entryMethod.getArgsExpressions();
345+
Assertions.assertEquals(1, methodArgsExpressions.size());
346+
}
347+
329348
@Test
330349
public void testParseDecorator() throws IOException {
331350
SourceDecoratorManager.DECORATOR_MAP.put("ServiceDecorator", new ISourceDecorator<ISource>() {

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/K8SServiceCallRelationDispatcher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ private void clientSide(K8SServiceRelation source) {
4242
metrics.setSourceServiceId(source.getSourceServiceId());
4343
metrics.setDestServiceId(source.getDestServiceId());
4444
final IntList componentIds = metrics.getComponentIds();
45-
componentIds.add(source.getComponentId());
45+
source.getComponentIds().forEach(componentIds::add);
4646
metrics.setEntityId(source.getEntityId());
4747
MetricsStreamProcessor.getInstance().in(metrics);
4848
}
@@ -53,7 +53,7 @@ private void serverSide(K8SServiceRelation source) {
5353
metrics.setSourceServiceId(source.getSourceServiceId());
5454
metrics.setDestServiceId(source.getDestServiceId());
5555
final IntList componentIds = metrics.getComponentIds();
56-
componentIds.add(source.getComponentId());
56+
source.getComponentIds().forEach(componentIds::add);
5757
metrics.setEntityId(source.getEntityId());
5858
MetricsStreamProcessor.getInstance().in(metrics);
5959
}

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/ContainMatch.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,16 @@ public boolean match(List<String> left, String right) {
3333
}
3434
return left.contains(right);
3535
}
36+
37+
public boolean match(List<Integer> left, Integer right) {
38+
if (Objects.isNull(left)) {
39+
return false;
40+
}
41+
return left.contains(right);
42+
}
43+
44+
public boolean match(List<Integer> left, int right) {
45+
return match(left, Integer.valueOf(right));
46+
}
47+
3648
}

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/NotContainMatch.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,15 @@ public boolean match(List<String> left, String right) {
3333
}
3434
return !left.contains(right);
3535
}
36+
37+
public boolean match(List<Integer> left, Integer right) {
38+
if (Objects.isNull(left)) {
39+
return false;
40+
}
41+
return !left.contains(right);
42+
}
43+
44+
public boolean match(List<Integer> left, int right) {
45+
return match(left, Integer.valueOf(right));
46+
}
3647
}

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/K8SServiceRelation.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
import org.apache.skywalking.oap.server.core.analysis.IDManager;
2424
import org.apache.skywalking.oap.server.core.analysis.Layer;
2525

26+
import java.util.ArrayList;
27+
import java.util.List;
28+
2629
import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.K8S_SERVICE_RELATION;
2730
import static org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.SERVICE_RELATION_CATALOG_NAME;
2831

@@ -39,7 +42,7 @@ public class K8SServiceRelation extends K8SMetrics {
3942
private Layer sourceLayer;
4043

4144
private DetectPoint detectPoint;
42-
private int componentId;
45+
private final List<Integer> componentIds = new ArrayList<>(3);
4346
private AccessLogConnectionTLSMode tlsMode;
4447

4548
private String destServiceId;

oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/metrics/expression/ContainMatchTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@ public void match() {
3333
assertTrue(containMatch.match(Arrays.asList("http.method:GET", "http.method:POST"), "http.method:GET"));
3434
assertFalse(
3535
containMatch.match(Arrays.asList("http.method:GET", "http.method:POST"), "http.method:PUT"));
36+
assertTrue(containMatch.match(Arrays.asList(1, 2, 3), 2));
37+
assertFalse(containMatch.match(Arrays.asList(1, 2, 3), 4));
3638
}
3739
}

oap-server/server-receiver-plugin/skywalking-ebpf-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/ebpf/provider/handler/AccessLogServiceHandler.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -533,13 +533,13 @@ protected KubernetesProcessAddress buildRemoteAddress(NodeInfo nodeInfo, ObjectI
533533
.build();
534534
}
535535

536-
protected int buildConnectionComponentId(ConnectionInfo connectionInfo) {
536+
protected List<Integer> buildConnectionComponentId(ConnectionInfo connectionInfo) {
537537
final AccessLogConnection originalConnection = connectionInfo.getOriginalConnection();
538538
if (originalConnection.hasAttachment() && originalConnection.getAttachment().hasZTunnel() &&
539539
ZTunnelAttachmentSecurityPolicy.MTLS.equals(originalConnection.getAttachment().getZTunnel().getSecurityPolicy())) {
540-
return 142; // mTLS
540+
return Arrays.asList(142, 162); // mTLS, ztunnel
541541
}
542-
return buildProtocolComponentID(connectionInfo);
542+
return Arrays.asList(buildProtocolComponentID(connectionInfo));
543543
}
544544

545545
protected int buildProtocolComponentID(ConnectionInfo connectionInfo) {
@@ -653,7 +653,7 @@ public K8SServiceRelation toServiceRelation() {
653653
serviceRelation.setSourceLayer(Layer.K8S_SERVICE);
654654

655655
serviceRelation.setDetectPoint(parseToSourceRole());
656-
serviceRelation.setComponentId(buildConnectionComponentId(this));
656+
serviceRelation.getComponentIds().addAll(buildConnectionComponentId(this));
657657
serviceRelation.setTlsMode(tlsMode);
658658

659659
serviceRelation.setDestServiceName(destServiceName);

oap-server/server-starter/src/main/resources/component-libraries.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,9 @@ Caffeine:
535535
ThreadPerTask-executor:
536536
id: 161
537537
languages: Java
538+
ztunnel:
539+
id: 162
540+
languages: ebpf, mesh
538541

539542
# .NET/.NET Core components
540543
# [3000, 4000) for C#/.NET only

0 commit comments

Comments
 (0)