Skip to content

Commit 74e6360

Browse files
authored
Added RPC metrics collection for Apache Dubbo (#14690)
1 parent 233d7d8 commit 74e6360

File tree

3 files changed

+277
-4
lines changed

3 files changed

+277
-4
lines changed

instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetryBuilder.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
import io.opentelemetry.api.common.AttributeKey;
1111
import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboClientNetworkAttributesGetter;
1212
import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientAttributesExtractor;
13+
import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientMetrics;
1314
import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcServerAttributesExtractor;
15+
import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcServerMetrics;
1416
import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcSpanNameExtractor;
1517
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
1618
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
@@ -102,15 +104,17 @@ public DubboTelemetry build() {
102104
openTelemetry, INSTRUMENTATION_NAME, serverSpanNameExtractor)
103105
.addAttributesExtractor(RpcServerAttributesExtractor.create(rpcAttributesGetter))
104106
.addAttributesExtractor(NetworkAttributesExtractor.create(netServerAttributesGetter))
105-
.addAttributesExtractors(attributesExtractors);
107+
.addAttributesExtractors(attributesExtractors)
108+
.addOperationMetrics(RpcServerMetrics.get());
106109

107110
InstrumenterBuilder<DubboRequest, Result> clientInstrumenterBuilder =
108111
Instrumenter.<DubboRequest, Result>builder(
109112
openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor)
110113
.addAttributesExtractor(RpcClientAttributesExtractor.create(rpcAttributesGetter))
111114
.addAttributesExtractor(ServerAttributesExtractor.create(netClientAttributesGetter))
112115
.addAttributesExtractor(NetworkAttributesExtractor.create(netClientAttributesGetter))
113-
.addAttributesExtractors(attributesExtractors);
116+
.addAttributesExtractors(attributesExtractors)
117+
.addOperationMetrics(RpcClientMetrics.get());
114118

115119
if (peerService != null) {
116120
clientInstrumenterBuilder.addAttributesExtractor(

instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java

Lines changed: 119 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.instrumentation.apachedubbo.v2_7;
77

88
import static io.opentelemetry.instrumentation.testing.GlobalTraceUtil.runWithSpan;
9+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
910
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1011
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
1112
import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS;
@@ -16,7 +17,6 @@
1617
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD;
1718
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE;
1819
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SYSTEM;
19-
import static org.assertj.core.api.Assertions.assertThat;
2020

2121
import io.opentelemetry.api.trace.SpanKind;
2222
import io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService;
@@ -176,6 +176,65 @@ void testApacheDubboBase() throws ReflectiveOperationException {
176176
satisfies(NETWORK_PEER_ADDRESS, k -> k.isInstanceOf(String.class)),
177177
satisfies(NETWORK_PEER_PORT, k -> k.isInstanceOf(Long.class)),
178178
satisfies(NETWORK_TYPE, AbstractAssert::isNull))));
179+
180+
testing()
181+
.waitAndAssertMetrics(
182+
"io.opentelemetry.apache-dubbo-2.7",
183+
"rpc.server.duration",
184+
metrics ->
185+
metrics.anySatisfy(
186+
metric ->
187+
assertThat(metric)
188+
.hasUnit("ms")
189+
.hasHistogramSatisfying(
190+
histogram ->
191+
histogram.hasPointsSatisfying(
192+
point ->
193+
point.hasAttributesSatisfyingExactly(
194+
equalTo(
195+
RPC_SYSTEM,
196+
RpcIncubatingAttributes
197+
.RpcSystemIncubatingValues.APACHE_DUBBO),
198+
equalTo(
199+
RPC_SERVICE,
200+
"io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"),
201+
equalTo(RPC_METHOD, "hello"))))));
202+
203+
testing()
204+
.waitAndAssertMetrics(
205+
"io.opentelemetry.apache-dubbo-2.7",
206+
"rpc.client.duration",
207+
metrics ->
208+
metrics.anySatisfy(
209+
metric ->
210+
assertThat(metric)
211+
.hasUnit("ms")
212+
.hasHistogramSatisfying(
213+
histogram ->
214+
histogram.hasPointsSatisfying(
215+
point ->
216+
point.hasAttributesSatisfyingExactly(
217+
equalTo(
218+
RPC_SYSTEM,
219+
RpcIncubatingAttributes
220+
.RpcSystemIncubatingValues.APACHE_DUBBO),
221+
equalTo(
222+
RPC_SERVICE,
223+
"org.apache.dubbo.rpc.service.GenericService"),
224+
equalTo(RPC_METHOD, "$invoke"),
225+
equalTo(SERVER_ADDRESS, "localhost"),
226+
satisfies(
227+
SERVER_PORT, k -> k.isInstanceOf(Long.class)),
228+
satisfies(
229+
NETWORK_TYPE,
230+
k ->
231+
k.satisfiesAnyOf(
232+
val -> assertThat(val).isNull(),
233+
val ->
234+
assertThat(val).isEqualTo("ipv4"),
235+
val ->
236+
assertThat(val)
237+
.isEqualTo("ipv6"))))))));
179238
}
180239

181240
@Test
@@ -274,5 +333,64 @@ void testApacheDubboTest()
274333
val -> assertThat(val).isNull(),
275334
val -> assertThat(val).isEqualTo("ipv4"),
276335
val -> assertThat(val).isEqualTo("ipv6"))))));
336+
337+
testing()
338+
.waitAndAssertMetrics(
339+
"io.opentelemetry.apache-dubbo-2.7",
340+
"rpc.server.duration",
341+
metrics ->
342+
metrics.anySatisfy(
343+
metric ->
344+
assertThat(metric)
345+
.hasUnit("ms")
346+
.hasHistogramSatisfying(
347+
histogram ->
348+
histogram.hasPointsSatisfying(
349+
point ->
350+
point.hasAttributesSatisfyingExactly(
351+
equalTo(
352+
RPC_SYSTEM,
353+
RpcIncubatingAttributes
354+
.RpcSystemIncubatingValues.APACHE_DUBBO),
355+
equalTo(
356+
RPC_SERVICE,
357+
"io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"),
358+
equalTo(RPC_METHOD, "hello"))))));
359+
360+
testing()
361+
.waitAndAssertMetrics(
362+
"io.opentelemetry.apache-dubbo-2.7",
363+
"rpc.client.duration",
364+
metrics ->
365+
metrics.anySatisfy(
366+
metric ->
367+
assertThat(metric)
368+
.hasUnit("ms")
369+
.hasHistogramSatisfying(
370+
histogram ->
371+
histogram.hasPointsSatisfying(
372+
point ->
373+
point.hasAttributesSatisfyingExactly(
374+
equalTo(
375+
RPC_SYSTEM,
376+
RpcIncubatingAttributes
377+
.RpcSystemIncubatingValues.APACHE_DUBBO),
378+
equalTo(
379+
RPC_SERVICE,
380+
"org.apache.dubbo.rpc.service.GenericService"),
381+
equalTo(RPC_METHOD, "$invokeAsync"),
382+
equalTo(SERVER_ADDRESS, "localhost"),
383+
satisfies(
384+
SERVER_PORT, k -> k.isInstanceOf(Long.class)),
385+
satisfies(
386+
NETWORK_TYPE,
387+
k ->
388+
k.satisfiesAnyOf(
389+
val -> assertThat(val).isNull(),
390+
val ->
391+
assertThat(val).isEqualTo("ipv4"),
392+
val ->
393+
assertThat(val)
394+
.isEqualTo("ipv6"))))))));
277395
}
278396
}

0 commit comments

Comments
 (0)