Skip to content

Commit 9b72101

Browse files
committed
enable gathering spans from more modules
1 parent a939b59 commit 9b72101

File tree

15 files changed

+270
-69
lines changed

15 files changed

+270
-69
lines changed

docs/instrumentation-list.yaml

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,49 @@ libraries:
1414
target_versions:
1515
javaagent:
1616
- io.activej:activej-http:[6.0,)
17+
telemetry:
18+
- when: default
19+
metrics:
20+
- name: http.server.request.duration
21+
description: Duration of HTTP server requests.
22+
type: HISTOGRAM
23+
unit: s
24+
attributes:
25+
- name: http.request.method
26+
type: STRING
27+
- name: http.response.status_code
28+
type: LONG
29+
- name: network.protocol.version
30+
type: STRING
31+
- name: url.scheme
32+
type: STRING
33+
spans:
34+
- span_kind: SERVER
35+
attributes:
36+
- name: client.address
37+
type: STRING
38+
- name: error.type
39+
type: STRING
40+
- name: http.request.method
41+
type: STRING
42+
- name: http.response.status_code
43+
type: LONG
44+
- name: network.peer.address
45+
type: STRING
46+
- name: network.protocol.version
47+
type: STRING
48+
- name: server.address
49+
type: STRING
50+
- name: server.port
51+
type: LONG
52+
- name: url.path
53+
type: STRING
54+
- name: url.query
55+
type: STRING
56+
- name: url.scheme
57+
type: STRING
58+
- name: user_agent.original
59+
type: STRING
1760
akka:
1861
- name: akka-actor-2.3
1962
source_path: instrumentation/akka/akka-actor-2.3
@@ -214,6 +257,9 @@ libraries:
214257
type: STRING
215258
apache:
216259
- name: apache-dbcp-2.0
260+
description: |
261+
Provides OpenTelemetry auto-instrumentation for Apache DBCP.
262+
This auto-instrumentation uses `MBeanRegistration` methods for lifecycle detection, therefore it only activates if the `BasicDataSource` is registered to an `MBeanServer`. If using Spring Boot, this happens automatically as all Spring beans that support JMX registration are automatically registered by default.
217263
source_path: instrumentation/apache-dbcp-2.0
218264
scope:
219265
name: io.opentelemetry.apache-dbcp-2.0
@@ -334,6 +380,8 @@ libraries:
334380
- name: rpc.system
335381
type: STRING
336382
- name: apache-httpasyncclient-4.1
383+
description: This instrumentation provides CLIENT spans and metrics for the Apache
384+
HttpAsyncClient.
337385
source_path: instrumentation/apache-httpasyncclient-4.1
338386
scope:
339387
name: io.opentelemetry.apache-httpasyncclient-4.1
@@ -358,21 +406,116 @@ libraries:
358406
type: STRING
359407
- name: server.port
360408
type: LONG
409+
spans:
410+
- span_kind: CLIENT
411+
attributes:
412+
- name: error.type
413+
type: STRING
414+
- name: http.request.method
415+
type: STRING
416+
- name: http.request.method_original
417+
type: STRING
418+
- name: http.response.status_code
419+
type: LONG
420+
- name: network.protocol.version
421+
type: STRING
422+
- name: server.address
423+
type: STRING
424+
- name: server.port
425+
type: LONG
426+
- name: url.full
427+
type: STRING
361428
- name: apache-httpclient-2.0
429+
description: This instrumentation provides CLIENT spans and metrics for versions
430+
2 and 3 of the Apache HttpClient.
362431
source_path: instrumentation/apache-httpclient/apache-httpclient-2.0
363432
scope:
364433
name: io.opentelemetry.apache-httpclient-2.0
365434
target_versions:
366435
javaagent:
367436
- commons-httpclient:commons-httpclient:[2.0,4.0)
437+
telemetry:
438+
- when: default
439+
metrics:
440+
- name: http.client.request.duration
441+
description: Duration of HTTP client requests.
442+
type: HISTOGRAM
443+
unit: s
444+
attributes:
445+
- name: http.request.method
446+
type: STRING
447+
- name: http.response.status_code
448+
type: LONG
449+
- name: network.protocol.version
450+
type: STRING
451+
- name: server.address
452+
type: STRING
453+
- name: server.port
454+
type: LONG
455+
spans:
456+
- span_kind: CLIENT
457+
attributes:
458+
- name: error.type
459+
type: STRING
460+
- name: http.request.method
461+
type: STRING
462+
- name: http.response.status_code
463+
type: LONG
464+
- name: network.protocol.version
465+
type: STRING
466+
- name: server.address
467+
type: STRING
468+
- name: server.port
469+
type: LONG
470+
- name: url.full
471+
type: STRING
368472
- name: apache-httpclient-4.0
473+
description: This instrumentation provides CLIENT spans and metrics for versions
474+
2 and 3 of the Apache HttpClient.
369475
source_path: instrumentation/apache-httpclient/apache-httpclient-4.0
370476
scope:
371477
name: io.opentelemetry.apache-httpclient-4.0
372478
target_versions:
373479
javaagent:
374480
- io.dropwizard:dropwizard-client:(,3.0.0)
375481
- org.apache.httpcomponents:httpclient:[4.0,)
482+
telemetry:
483+
- when: default
484+
metrics:
485+
- name: http.client.request.duration
486+
description: Duration of HTTP client requests.
487+
type: HISTOGRAM
488+
unit: s
489+
attributes:
490+
- name: http.request.method
491+
type: STRING
492+
- name: http.response.status_code
493+
type: LONG
494+
- name: network.protocol.version
495+
type: STRING
496+
- name: server.address
497+
type: STRING
498+
- name: server.port
499+
type: LONG
500+
spans:
501+
- span_kind: CLIENT
502+
attributes:
503+
- name: error.type
504+
type: STRING
505+
- name: http.request.method
506+
type: STRING
507+
- name: http.request.method_original
508+
type: STRING
509+
- name: http.response.status_code
510+
type: LONG
511+
- name: network.protocol.version
512+
type: STRING
513+
- name: server.address
514+
type: STRING
515+
- name: server.port
516+
type: LONG
517+
- name: url.full
518+
type: STRING
376519
- name: apache-httpclient-4.3
377520
source_path: instrumentation/apache-httpclient/apache-httpclient-4.3
378521
scope:

instrumentation-docs/collect.sh

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -14,60 +14,63 @@ fi
1414

1515
readonly INSTRUMENTATIONS=(
1616
# <module path (colon-separated)> : <javaagent|library> : [ gradle-task-suffix ]
17-
"akka:akka-http-10.0:javaagent:test"
18-
"apache-httpasyncclient-4.1:javaagent:test"
19-
"alibaba-druid-1.0:javaagent:test"
20-
"alibaba-druid-1.0:javaagent:testStableSemconv"
21-
"apache-dbcp-2.0:javaagent:test"
22-
"apache-dbcp-2.0:javaagent:testStableSemconv"
23-
"apache-httpclient:apache-httpclient-5.0:javaagent:test"
24-
"apache-dubbo-2.7:javaagent:testDubbo"
25-
"c3p0-0.9:javaagent:test"
26-
"c3p0-0.9:javaagent:testStableSemconv"
27-
"clickhouse-client-0.5:javaagent:test"
28-
"clickhouse-client-0.5:javaagent:testStableSemconv"
29-
"aws-sdk:aws-sdk-1.11:javaagent:test"
30-
"google-http-client-1.19:javaagent:test"
31-
"http-url-connection:javaagent:test"
32-
"java-http-client:javaagent:test"
33-
"jetty-httpclient:jetty-httpclient-9.2:javaagent:test"
34-
"jetty-httpclient:jetty-httpclient-12.0:javaagent:test"
35-
"jodd-http-4.2:javaagent:test"
36-
"netty:netty-3.8:javaagent:test"
37-
"netty:netty-4.0:javaagent:test"
38-
"netty:netty-4.1:javaagent:test"
39-
"okhttp:okhttp-2.2:javaagent:test"
40-
"okhttp:okhttp-3.0:javaagent:test"
41-
"pekko:pekko-http-1.0:javaagent:test"
42-
"play:play-ws:play-ws-1.0:javaagent:test"
43-
"play:play-ws:play-ws-2.0:javaagent:test"
44-
"play:play-ws:play-ws-2.1:javaagent:test"
45-
"reactor:reactor-netty:reactor-netty-0.9:javaagent:test"
46-
"reactor:reactor-netty:reactor-netty-1.0:javaagent:test"
47-
"spring:spring-webflux:spring-webflux-5.0:javaagent:test"
48-
"vertx:vertx-http-client:vertx-http-client-3.0:javaagent:test"
49-
"vertx:vertx-http-client:vertx-http-client-4.0:javaagent:test"
50-
"vertx:vertx-http-client:vertx-http-client-5.0:javaagent:test"
51-
"vertx:vertx-redis-client-4.0:javaagent:test"
52-
"vertx:vertx-redis-client-4.0:javaagent:testStableSemconv"
53-
"vertx:vertx-sql-client:vertx-sql-client-4.0:javaagent:test"
54-
"vertx:vertx-sql-client:vertx-sql-client-4.0:javaagent:testStableSemconv"
55-
"vertx:vertx-sql-client:vertx-sql-client-5.0:javaagent:test"
56-
"vertx:vertx-sql-client:vertx-sql-client-5.0:javaagent:testStableSemconv"
57-
"aws-sdk:aws-sdk-1.11:javaagent:testStableSemconv"
58-
"aws-sdk:aws-sdk-2.2:javaagent:test"
59-
"aws-sdk:aws-sdk-2.2:javaagent:testStableSemconv"
60-
"aws-sdk:aws-sdk-2.2:javaagent:testBedrockRuntime"
61-
"hikaricp-3.0:javaagent:test"
62-
"hikaricp-3.0:javaagent:testStableSemconv"
63-
"tomcat:tomcat-jdbc:javaagent:test"
64-
"tomcat:tomcat-jdbc:javaagent:testStableSemconv"
65-
"oracle-ucp-11.2:javaagent:test"
66-
"oracle-ucp-11.2:javaagent:testStableSemconv"
67-
"oshi:javaagent:test"
68-
"oshi:javaagent:testExperimental"
69-
"vibur-dbcp-11.0:javaagent:test"
70-
"vibur-dbcp-11.0:javaagent:testStableSemconv"
17+
# "activej-http-6.0:javaagent:test"
18+
# "akka:akka-http-10.0:javaagent:test"
19+
# "apache-httpasyncclient-4.1:javaagent:test"
20+
# "alibaba-druid-1.0:javaagent:test"
21+
# "alibaba-druid-1.0:javaagent:testStableSemconv"
22+
# "apache-dbcp-2.0:javaagent:test"
23+
# "apache-dbcp-2.0:javaagent:testStableSemconv"
24+
# "apache-httpclient:apache-httpclient-2.0:javaagent:test"
25+
"apache-httpclient:apache-httpclient-4.0:javaagent:test"
26+
# "apache-httpclient:apache-httpclient-5.0:javaagent:test"
27+
# "apache-dubbo-2.7:javaagent:testDubbo"
28+
# "c3p0-0.9:javaagent:test"
29+
# "c3p0-0.9:javaagent:testStableSemconv"
30+
# "clickhouse-client-0.5:javaagent:test"
31+
# "clickhouse-client-0.5:javaagent:testStableSemconv"
32+
# "aws-sdk:aws-sdk-1.11:javaagent:test"
33+
# "google-http-client-1.19:javaagent:test"
34+
# "http-url-connection:javaagent:test"
35+
# "java-http-client:javaagent:test"
36+
# "jetty-httpclient:jetty-httpclient-9.2:javaagent:test"
37+
# "jetty-httpclient:jetty-httpclient-12.0:javaagent:test"
38+
# "jodd-http-4.2:javaagent:test"
39+
# "netty:netty-3.8:javaagent:test"
40+
# "netty:netty-4.0:javaagent:test"
41+
# "netty:netty-4.1:javaagent:test"
42+
# "okhttp:okhttp-2.2:javaagent:test"
43+
# "okhttp:okhttp-3.0:javaagent:test"
44+
# "pekko:pekko-http-1.0:javaagent:test"
45+
# "play:play-ws:play-ws-1.0:javaagent:test"
46+
# "play:play-ws:play-ws-2.0:javaagent:test"
47+
# "play:play-ws:play-ws-2.1:javaagent:test"
48+
# "reactor:reactor-netty:reactor-netty-0.9:javaagent:test"
49+
# "reactor:reactor-netty:reactor-netty-1.0:javaagent:test"
50+
# "spring:spring-webflux:spring-webflux-5.0:javaagent:test"
51+
# "vertx:vertx-http-client:vertx-http-client-3.0:javaagent:test"
52+
# "vertx:vertx-http-client:vertx-http-client-4.0:javaagent:test"
53+
# "vertx:vertx-http-client:vertx-http-client-5.0:javaagent:test"
54+
# "vertx:vertx-redis-client-4.0:javaagent:test"
55+
# "vertx:vertx-redis-client-4.0:javaagent:testStableSemconv"
56+
# "vertx:vertx-sql-client:vertx-sql-client-4.0:javaagent:test"
57+
# "vertx:vertx-sql-client:vertx-sql-client-4.0:javaagent:testStableSemconv"
58+
# "vertx:vertx-sql-client:vertx-sql-client-5.0:javaagent:test"
59+
# "vertx:vertx-sql-client:vertx-sql-client-5.0:javaagent:testStableSemconv"
60+
# "aws-sdk:aws-sdk-1.11:javaagent:testStableSemconv"
61+
# "aws-sdk:aws-sdk-2.2:javaagent:test"
62+
# "aws-sdk:aws-sdk-2.2:javaagent:testStableSemconv"
63+
# "aws-sdk:aws-sdk-2.2:javaagent:testBedrockRuntime"
64+
# "hikaricp-3.0:javaagent:test"
65+
# "hikaricp-3.0:javaagent:testStableSemconv"
66+
# "tomcat:tomcat-jdbc:javaagent:test"
67+
# "tomcat:tomcat-jdbc:javaagent:testStableSemconv"
68+
# "oracle-ucp-11.2:javaagent:test"
69+
# "oracle-ucp-11.2:javaagent:testStableSemconv"
70+
# "oshi:javaagent:test"
71+
# "oshi:javaagent:testExperimental"
72+
# "vibur-dbcp-11.0:javaagent:test"
73+
# "vibur-dbcp-11.0:javaagent:testStableSemconv"
7174
)
7275

7376
readonly TELEMETRY_DIR_NAME=".telemetry"

instrumentation-docs/readme.md

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ Run the analysis to update the instrumentation-list.yaml:
88

99
`./gradlew :instrumentation-docs:runAnalysis`
1010

11-
### Metric collection
11+
### Telemetry collection
1212

1313
Until this process is ready for all instrumentations, each module will be modified to include a
14-
system property feature flag configured for when the tests run:
14+
system property feature flag configured for when the tests run. By enabling the following flag you
15+
will enable metric collection:
1516

1617
```kotlin
1718
tasks {
@@ -22,6 +23,18 @@ tasks {
2223
}
2324
```
2425

26+
27+
In order to collect spans, add the `collectSpans` property (along with `collectMetadata`):
28+
29+
```kotlin
30+
tasks {
31+
test {
32+
systemProperty("collectMetadata", collectMetadata)
33+
systemProperty("collectSpans", true)
34+
}
35+
}
36+
```
37+
2538
Sometimes instrumentation will behave differently based on configuration options, and we can
2639
differentiate between these configurations by using the `metaDataConfig` system property. When the
2740
telemetry is written to a file, the value of this property will be included, or it will default to
@@ -130,6 +143,9 @@ public class SpringWebInstrumentationModule extends InstrumentationModule
130143
* metrics
131144
* List of metrics that the instrumentation module collects, including the metric name, description, type, and attributes.
132145
* Separate lists for the metrics emitted by default vs via configuration options.
146+
* spans
147+
* List of spans kinds the instrumentation module generates, including the attributes and their types.
148+
* Separate lists for the spans emitted by default vs via configuration options.
133149

134150
## Methodology
135151

@@ -168,16 +184,16 @@ name is determined by the instrumentation module name: `io.opentelemetry.{instr
168184
We will implement gatherers for the schemaUrl and scope attributes when instrumentations start
169185
implementing them.
170186

171-
### Metrics
187+
### Spans and Metrics
172188

173-
In order to identify what metrics are emitted from instrumentations, we can hook into the
174-
`InstrumentationTestRunner` class and collect the metrics generated during runs. We can then
189+
In order to identify what telemetry is emitted from instrumentations, we can hook into the
190+
`InstrumentationTestRunner` class and collect the metrics and spans generated during runs. We can then
175191
leverage the `afterTestClass()` in the Agent and library test runners to then write this information
176192
into temporary files. When we analyze the instrumentation modules, we can read these files and
177-
generate the metrics section of the instrumentation-list.yaml file.
193+
generate the telemetry section of the instrumentation-list.yaml file.
178194

179195
The data is written into a `.telemetry` directory in the root of each instrumentation module. This
180196
data will be excluded from git and just generated on demand.
181197

182-
Each file has a `when` value along with the list of metrics that indicates whether the telemetry is emitted by default or via a
183-
configuration option.
198+
Each file has a `when` value along with the list of metrics that indicates whether the telemetry is
199+
emitted by default or via a configuration option.

instrumentation-docs/src/main/java/io/opentelemetry/instrumentation/docs/DocGeneratorApplication.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,5 +107,15 @@ private static String getPercentage(String label, long numerator, long denominat
107107
+ "%)";
108108
}
109109

110+
@SuppressWarnings("unused") // helper method used for project tracking
111+
private static String listModules(List<InstrumentationModule> modules) {
112+
// Create a checklist of all modules sorted by name
113+
return modules.stream()
114+
.map(InstrumentationModule::getInstrumentationName)
115+
.sorted()
116+
.map(name -> "- [ ] " + name)
117+
.collect(Collectors.joining("\n"));
118+
}
119+
110120
private DocGeneratorApplication() {}
111121
}

0 commit comments

Comments
 (0)