Skip to content

Commit cd4020c

Browse files
authored
Merge branch 'open-telemetry:main' into cc/add-config-based-mdc-attribute
2 parents f8efe85 + 60b6548 commit cd4020c

File tree

101 files changed

+1612
-429
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+1612
-429
lines changed

.github/renovate.json5

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"groupName": "guava packages"
1515
},
1616
{
17-
"matchPackageNames": ["io.quarkus", "io.quarkus:quarkus-bom"],
17+
"matchPackagePrefixes": ["io.quarkus"],
1818
"groupName": "quarkus packages"
1919
},
2020
{
@@ -37,6 +37,10 @@
3737
"matchPackagePrefixes": ["net.bytebuddy:"],
3838
"groupName": "byte buddy packages"
3939
},
40+
{
41+
"matchPackagePrefixes": ["com.fasterxml.jackson"],
42+
"groupName": "jackson packages"
43+
},
4044
{
4145
// prevent update to 2.4-groovy-4.0-SNAPSHOT
4246
"matchPackageNames": ["org.spockframework:spock-bom"],

CHANGELOG.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,69 @@
22

33
## Unreleased
44

5+
## Version 1.31.0 (2023-10-12)
6+
7+
### 🌟 New javaagent instrumentation
8+
9+
- Apache Pekko
10+
([#9527](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9527))
11+
12+
### 📈 Enhancements
13+
14+
- Add instrumentation for vert.x sql client withTransaction method
15+
([#9462](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9462))
16+
- Improve hibernate reactive instrumentation
17+
([#9486](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9486))
18+
- Support application.yaml files in SpringBootServiceNameDetector
19+
([#9515](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9515))
20+
- Add Spring Boot service version finder / ResourceProvider
21+
([#9480](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9480))
22+
- Split hibernate reactive instrumentation
23+
([#9531](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9531))
24+
- Rework reactor netty context tracking
25+
([#9286](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9286))
26+
- Improve spring data reactive instrumentation
27+
([#9561](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9561))
28+
- Support akka http latest version
29+
([#9573](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9573))
30+
- Enhance AWS SDK Instrumentation with Detailed HTTP Error Information
31+
([#9448](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9448))
32+
- Update HTTP metrics' descriptions
33+
([#9635](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9635))
34+
- Remove server.socket.address from HTTP/RPC metrics
35+
([#9633](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9633))
36+
- Remove 0 bucket from stable HTTP metrics
37+
([#9631](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9631))
38+
- Suppress nested http client spans in aws2 instrumentation
39+
([#9634](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9634))
40+
- Implement spec changes for grpc server span error status
41+
([#9641](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9641))
42+
- Improve vertx-sql client context propagation
43+
([#9640](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9640))
44+
- Add url.scheme to HTTP client metrics
45+
([#9642](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9642))
46+
- Add support for newVirtualThreadPerTaskExecutor
47+
([#9616](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9616))
48+
- Implement error.type attribute in HTTP semconv
49+
([#9466](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9466))
50+
- Emit package events
51+
([#9301](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9301))
52+
- Added Automatic-Module-Name header to MANIFEST.MF in instrumentation libraries
53+
([#9140](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9140))
54+
- Support paths in `peer.service` mappings
55+
([#9061](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9061))
56+
- Compile ktor library instrumentation for earlier kotlin version
57+
([#9661](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9661))
58+
59+
### 🛠️ Bug fixes
60+
61+
- Fix NPE happening when .headersWhen() is used (reactor-netty)
62+
([#9511](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9511))
63+
- Spring webflux: add user spans as children of the controller span
64+
([#9572](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9572))
65+
- Make netty ChannelPipeline removeLast return user handler
66+
([#9584](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/9584))
67+
568
## Version 1.30.0 (2023-09-14)
669

770
### Migration notes

benchmark-overhead/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ dependencies {
2222
testImplementation("org.testcontainers:postgresql:1.19.1")
2323
testImplementation("org.junit.jupiter:junit-jupiter-api")
2424
testImplementation("org.junit.jupiter:junit-jupiter-params")
25-
testImplementation("com.squareup.okhttp3:okhttp:4.11.0")
25+
testImplementation("com.squareup.okhttp3:okhttp:4.12.0")
2626
testImplementation("org.jooq:joox:2.0.0")
2727
testImplementation("com.jayway.jsonpath:json-path:2.8.0")
2828
testImplementation("org.slf4j:slf4j-simple:2.0.9")

conventions/src/main/kotlin/otel.jacoco-conventions.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ plugins {
33
}
44

55
jacoco {
6-
toolVersion = "0.8.10"
6+
toolVersion = "0.8.11"
77
}
88

99
tasks {

dependencyManagement/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ val groovyVersion = "4.0.15"
2626
// configurations.testRuntimeClasspath.resolutionStrategy.force "com.google.guava:guava:19.0"
2727

2828
val DEPENDENCY_BOMS = listOf(
29-
"com.fasterxml.jackson:jackson-bom:2.15.2",
29+
"com.fasterxml.jackson:jackson-bom:2.15.3",
3030
"com.squareup.okio:okio-bom:3.6.0", // see https://github.com/open-telemetry/opentelemetry-java/issues/5637
3131
"com.google.guava:guava-bom:32.1.3-jre",
3232
"org.apache.groovy:groovy-bom:${groovyVersion}",

examples/distro/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ buildscript {
1414
dependencies {
1515
classpath "com.diffplug.spotless:spotless-plugin-gradle:6.22.0"
1616
classpath "gradle.plugin.com.github.johnrengelman:shadow:8.0.0"
17-
classpath "io.opentelemetry.instrumentation:gradle-plugins:1.31.0-alpha-SNAPSHOT"
17+
classpath "io.opentelemetry.instrumentation:gradle-plugins:1.32.0-alpha-SNAPSHOT"
1818
}
1919
}
2020

@@ -30,8 +30,8 @@ subprojects {
3030
opentelemetrySdk : "1.31.0",
3131

3232
// these lines are managed by .github/scripts/update-version.sh
33-
opentelemetryJavaagent : "1.31.0-SNAPSHOT",
34-
opentelemetryJavaagentAlpha: "1.31.0-alpha-SNAPSHOT",
33+
opentelemetryJavaagent : "1.32.0-SNAPSHOT",
34+
opentelemetryJavaagentAlpha: "1.32.0-alpha-SNAPSHOT",
3535

3636
autoservice : "1.1.1",
3737
junit : "5.10.0"

examples/distro/instrumentation/servlet-3/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ dependencies {
2727
exclude group: 'org.eclipse.jetty', module: 'jetty-server'
2828
}
2929

30-
testImplementation "com.squareup.okhttp3:okhttp:4.11.0"
30+
testImplementation "com.squareup.okhttp3:okhttp:4.12.0"
3131
testImplementation "javax.servlet:javax.servlet-api:3.0.1"
3232
testImplementation "org.eclipse.jetty:jetty-server:8.2.0.v20160908"
3333
testImplementation "org.eclipse.jetty:jetty-servlet:8.2.0.v20160908"

examples/distro/smoke-tests/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ plugins {
44

55
dependencies {
66
testImplementation("org.testcontainers:testcontainers:1.19.1")
7-
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.15.2")
7+
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.15.3")
88
testImplementation("com.google.protobuf:protobuf-java-util:3.24.4")
9-
testImplementation("com.squareup.okhttp3:okhttp:4.11.0")
9+
testImplementation("com.squareup.okhttp3:okhttp:4.12.0")
1010
testImplementation("io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha")
1111
testImplementation("io.opentelemetry:opentelemetry-api")
1212

examples/extension/build.gradle

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ plugins {
1313
id "com.github.johnrengelman.shadow" version "8.1.1"
1414
id "com.diffplug.spotless" version "6.22.0"
1515

16-
id "io.opentelemetry.instrumentation.muzzle-generation" version "1.31.0-alpha-SNAPSHOT"
17-
id "io.opentelemetry.instrumentation.muzzle-check" version "1.31.0-alpha-SNAPSHOT"
16+
id "io.opentelemetry.instrumentation.muzzle-generation" version "1.32.0-alpha-SNAPSHOT"
17+
id "io.opentelemetry.instrumentation.muzzle-check" version "1.32.0-alpha-SNAPSHOT"
1818
}
1919

2020
group 'io.opentelemetry.example'
@@ -26,8 +26,8 @@ ext {
2626
opentelemetrySdk : "1.31.0",
2727

2828
// these lines are managed by .github/scripts/update-version.sh
29-
opentelemetryJavaagent : "1.31.0-SNAPSHOT",
30-
opentelemetryJavaagentAlpha: "1.31.0-alpha-SNAPSHOT",
29+
opentelemetryJavaagent : "1.32.0-SNAPSHOT",
30+
opentelemetryJavaagentAlpha: "1.32.0-alpha-SNAPSHOT",
3131

3232
junit : "5.10.0"
3333
]
@@ -100,9 +100,9 @@ dependencies {
100100

101101
//All dependencies below are only for tests
102102
testImplementation("org.testcontainers:testcontainers:1.19.1")
103-
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.15.2")
103+
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.15.3")
104104
testImplementation("com.google.protobuf:protobuf-java-util:3.24.4")
105-
testImplementation("com.squareup.okhttp3:okhttp:4.11.0")
105+
testImplementation("com.squareup.okhttp3:okhttp:4.12.0")
106106
testImplementation("io.opentelemetry:opentelemetry-api")
107107
testImplementation("io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha")
108108

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.instrumenter.http;
7+
8+
import io.opentelemetry.api.common.AttributesBuilder;
9+
import io.opentelemetry.context.Context;
10+
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
11+
import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceResolver;
12+
import io.opentelemetry.instrumentation.api.instrumenter.url.UrlParser;
13+
import io.opentelemetry.semconv.SemanticAttributes;
14+
import java.util.function.Supplier;
15+
import javax.annotation.Nullable;
16+
17+
/**
18+
* Extractor of the {@code peer.service} span attribute, described in <a
19+
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/span-general.md#general-remote-service-attributes">the
20+
* specification</a>.
21+
*/
22+
public final class HttpClientPeerServiceAttributesExtractor<REQUEST, RESPONSE>
23+
implements AttributesExtractor<REQUEST, RESPONSE> {
24+
25+
private final HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter;
26+
private final PeerServiceResolver peerServiceResolver;
27+
28+
// visible for tests
29+
HttpClientPeerServiceAttributesExtractor(
30+
HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter,
31+
PeerServiceResolver peerServiceResolver) {
32+
this.attributesGetter = attributesGetter;
33+
this.peerServiceResolver = peerServiceResolver;
34+
}
35+
36+
/**
37+
* Returns a new {@link HttpClientPeerServiceAttributesExtractor} that will use the passed {@code
38+
* attributesGetter} instance to determine the value of the {@code peer.service} attribute.
39+
*/
40+
public static <REQUEST, RESPONSE>
41+
HttpClientPeerServiceAttributesExtractor<REQUEST, RESPONSE> create(
42+
HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter,
43+
PeerServiceResolver peerServiceResolver) {
44+
return new HttpClientPeerServiceAttributesExtractor<>(attributesGetter, peerServiceResolver);
45+
}
46+
47+
@Override
48+
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {}
49+
50+
@Override
51+
public void onEnd(
52+
AttributesBuilder attributes,
53+
Context context,
54+
REQUEST request,
55+
@Nullable RESPONSE response,
56+
@Nullable Throwable error) {
57+
58+
if (peerServiceResolver.isEmpty()) {
59+
// optimization for common case
60+
return;
61+
}
62+
63+
String serverAddress = attributesGetter.getServerAddress(request);
64+
Integer serverPort = attributesGetter.getServerPort(request);
65+
Supplier<String> pathSupplier = () -> getUrlPath(attributesGetter, request);
66+
String peerService = mapToPeerService(serverAddress, serverPort, pathSupplier);
67+
if (peerService == null) {
68+
String serverSocketDomain = attributesGetter.getServerSocketDomain(request, response);
69+
Integer serverSocketPort = attributesGetter.getServerSocketPort(request, response);
70+
peerService = mapToPeerService(serverSocketDomain, serverSocketPort, null);
71+
}
72+
if (peerService != null) {
73+
attributes.put(SemanticAttributes.PEER_SERVICE, peerService);
74+
}
75+
}
76+
77+
@Nullable
78+
private String mapToPeerService(
79+
@Nullable String host, @Nullable Integer port, @Nullable Supplier<String> pathSupplier) {
80+
if (host == null) {
81+
return null;
82+
}
83+
return peerServiceResolver.resolveService(host, port, pathSupplier);
84+
}
85+
86+
@Nullable
87+
private String getUrlPath(
88+
HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter, REQUEST request) {
89+
String urlFull = attributesGetter.getUrlFull(request);
90+
if (urlFull == null) {
91+
return null;
92+
}
93+
return UrlParser.getPath(urlFull);
94+
}
95+
}

instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/PeerServiceAttributesExtractor.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.opentelemetry.instrumentation.api.instrumenter.network.ServerAttributesGetter;
1212
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
1313
import io.opentelemetry.semconv.SemanticAttributes;
14-
import java.util.Map;
1514
import javax.annotation.Nullable;
1615

1716
/**
@@ -23,24 +22,24 @@ public final class PeerServiceAttributesExtractor<REQUEST, RESPONSE>
2322
implements AttributesExtractor<REQUEST, RESPONSE> {
2423

2524
private final ServerAttributesGetter<REQUEST, RESPONSE> attributesGetter;
26-
private final Map<String, String> peerServiceMapping;
25+
private final PeerServiceResolver peerServiceResolver;
2726

2827
// visible for tests
2928
PeerServiceAttributesExtractor(
3029
ServerAttributesGetter<REQUEST, RESPONSE> attributesGetter,
31-
Map<String, String> peerServiceMapping) {
30+
PeerServiceResolver peerServiceResolver) {
3231
this.attributesGetter = attributesGetter;
33-
this.peerServiceMapping = peerServiceMapping;
32+
this.peerServiceResolver = peerServiceResolver;
3433
}
3534

3635
/**
3736
* Returns a new {@link PeerServiceAttributesExtractor} that will use the passed {@code
38-
* netAttributesExtractor} instance to determine the value of the {@code peer.service} attribute.
37+
* attributesGetter} instance to determine the value of the {@code peer.service} attribute.
3938
*/
4039
public static <REQUEST, RESPONSE> AttributesExtractor<REQUEST, RESPONSE> create(
4140
ServerAttributesGetter<REQUEST, RESPONSE> attributesGetter,
42-
Map<String, String> peerServiceMapping) {
43-
return new PeerServiceAttributesExtractor<>(attributesGetter, peerServiceMapping);
41+
PeerServiceResolver peerServiceResolver) {
42+
return new PeerServiceAttributesExtractor<>(attributesGetter, peerServiceResolver);
4443
}
4544

4645
@Override
@@ -54,27 +53,29 @@ public void onEnd(
5453
@Nullable RESPONSE response,
5554
@Nullable Throwable error) {
5655

57-
if (peerServiceMapping.isEmpty()) {
56+
if (peerServiceResolver.isEmpty()) {
5857
// optimization for common case
5958
return;
6059
}
6160

6261
String serverAddress = attributesGetter.getServerAddress(request);
63-
String peerService = mapToPeerService(serverAddress);
62+
Integer serverPort = attributesGetter.getServerPort(request);
63+
String peerService = mapToPeerService(serverAddress, serverPort);
6464
if (peerService == null && SemconvStability.emitOldHttpSemconv()) {
6565
String serverSocketDomain = attributesGetter.getServerSocketDomain(request, response);
66-
peerService = mapToPeerService(serverSocketDomain);
66+
Integer serverSocketPort = attributesGetter.getServerSocketPort(request, response);
67+
peerService = mapToPeerService(serverSocketDomain, serverSocketPort);
6768
}
6869
if (peerService != null) {
6970
attributes.put(SemanticAttributes.PEER_SERVICE, peerService);
7071
}
7172
}
7273

7374
@Nullable
74-
private String mapToPeerService(@Nullable String endpoint) {
75-
if (endpoint == null) {
75+
private String mapToPeerService(@Nullable String host, @Nullable Integer port) {
76+
if (host == null) {
7677
return null;
7778
}
78-
return peerServiceMapping.get(endpoint);
79+
return peerServiceResolver.resolveService(host, port, null);
7980
}
8081
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.instrumenter.net;
7+
8+
import java.util.Map;
9+
import java.util.function.Supplier;
10+
import javax.annotation.Nullable;
11+
12+
public interface PeerServiceResolver {
13+
14+
public boolean isEmpty();
15+
16+
@Nullable
17+
public String resolveService(
18+
String host, @Nullable Integer port, @Nullable Supplier<String> pathSupplier);
19+
20+
static PeerServiceResolver create(Map<String, String> mapping) {
21+
return new PeerServiceResolverImpl(mapping);
22+
}
23+
}

0 commit comments

Comments
 (0)