Commit Graph

2487 Commits

Author SHA1 Message Date
Lauri Tulmin 36af04266a
Fix AbstractMethodError in logback instrumentation (#7967)
Resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7949
Replace wrapper class with JDK proxy to ensure that all methods are
implemented and delegated to the underlying event.
2023-03-03 08:32:50 -08:00
Lauri Tulmin dbb1b7ff03
Increase rocketmq request timeout (#7968)
Hopefully avoids exceptions like
`org.apache.rocketmq.shaded.io.grpc.StatusRuntimeException:
DEADLINE_EXCEEDED: deadline exceeded after...` in rocketmq 5 test setup.
2023-03-03 08:31:54 -08:00
Lauri Tulmin b926165fe1
Fix NPE in aws 2 when request instrumentation is suppressed (#7953)
Resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7903
2023-03-03 09:31:01 +02:00
Lauri Tulmin 38f8a9c8a9
Don't run latest dep test suite during regular test run (#7954) 2023-03-03 09:20:35 +02:00
Lauri Tulmin af612859a0
Convert jsf tests to test suites (#7928)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 13:18:54 -08:00
Aaron Ai 88352fb8d3
Support more semantic convention for RocketMQ trace (#7871)
Fixes #7858
2023-03-01 12:48:42 -08:00
Lauri Tulmin f8927a45b2
Convert log4j test to test suites (#7942)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 11:26:15 -08:00
Lauri Tulmin 13c7617be1
Convert aws-sdk tests to test suites (#7943)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 11:25:53 -08:00
Lauri Tulmin 8c1b072682
Convert vaadin tests to test suites (#7944)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 11:24:46 -08:00
Lauri Tulmin 5fa02fd2ab
Add connection timeout to jodd http client tests (#7947) 2023-03-01 11:24:22 -08:00
Lauri Tulmin c721852d5f
Convert spring-jms tests to test suites (#7945)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 11:24:04 -08:00
Lauri Tulmin 0a9466523f
Convert finatra tests to test suites (#7946)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 11:23:43 -08:00
Lauri Tulmin 6f037345e4
Convert hibernate tests to test suites (#7929)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 07:53:01 +02:00
Lauri Tulmin b91d42d22e
Convert play tests to test suites (#7931)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 07:52:43 +02:00
Lauri Tulmin 3cfec95d45
Conver vertx tests to test suites (#7932)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 07:52:25 +02:00
Lauri Tulmin 07f621caf7
Convert jms tests to test suites (#7933)
Part of
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7911
2023-03-01 07:51:15 +02:00
Lauri Tulmin de296bdd0d
Remove test-sets plugin from modules without test sets (#7930) 2023-03-01 07:49:49 +02:00
Lauri Tulmin b937dc478c
Assert user agent when it is present (#7918) 2023-02-27 20:46:39 +00:00
Anurag Agarwal 7bb978d2da
HttpClient 4.0 java tests (#7912)
Converts apache-httpclient-4.0 unit tests in java. Version 4.0 was using
GuardedBy annotation which was interfering with the test cases, hence
the library version was shifted to 4.1.
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7195
2023-02-27 08:53:16 -08:00
Bryan Herbst ba9df3fea8
Make RxJava2 instrumentation Android-friendly (#7895)
Resolves #7894

Replace `MethodHandle` with older `java.lang.reflect.Field`, which is
supported on older Java versions.

Also enables animal sniffer for the RxJava2 instrumentation to prevent
regression.

---------

Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
2023-02-24 13:46:13 +02:00
Lauri Tulmin 64eb58633f
Fix jaxrs annotation instrumentation on openliberty (#7890)
Hopefully resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7870
Jax-rs annotation instrumentation is only enabled when jax-rs api is
found in the class loader. This check does a `ClassLoader.getResource`
call for the resource name corresponding to class
`javax.ws.rs.container.AsyncResponse`. As far as I understand this
particular class is used only because it was added in jax-rs 2.0, any
other class added in jax-rs 2.0 could be used instead of it. On
openliberty we fail to find this class because it should be resolved
through bundle dynamic imports but we disable looking into dynamic
imports in
https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/internal/internal-eclipse-osgi-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/osgi/EclipseOsgiInstrumentation.java
when we do the class presence check. Using a class in `javax.ws.rs.core`
package seems to work better as the import for that package is already
resolved by the time we make the `getResource` call.
2023-02-24 13:00:11 +02:00
Lauri Tulmin cbc616cbff
Fix kotlin coroutine context propagation (#7879)
Resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7837
`org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1` adds a second
`newCoroutineContext` that we shouldn't instrument. When we instrument
it the order of
[`KotlinContextElement`](https://github.com/open-telemetry/opentelemetry-java/blob/main/extensions/kotlin/src/main/java/io/opentelemetry/extension/kotlin/KotlinContextElement.java)
and user added `ThreadContextElement` gets reversed. If user added
`ThreadContextElement` changes opentelemetry context then these changes
will get overwritten by `KotlinContextElement`.
2023-02-24 12:31:43 +02:00
Lauri Tulmin fe263edecf
Fix vaadin14 latest dep test (#7893)
Looks similar to what we had for vaadin 16 recently. Pinning
https://www.npmjs.com/package/@types/node to 18.11.9
2023-02-23 20:39:08 -08:00
Phil fad7b24253
Add Jodd-Http instrumentation (#7868)
This PR resolves #7629 

This adds javaagent instrumentation for the
[jodd-http](https://http.jodd.org/) `HttpRequest`.
It creates `Http Client Spans` and `Http Client Metrics`, the lowest
supported version is `org.jodd:jodd-http:4.2.0` (most recent: `6.3.0`),
since this is the first version of the library supporting java 8, having
follow-redirect capability and `HttpRequest#overwriteHeader()` method.
The instrumented method's signature and return type `HttpRequest#send()`
has not been modified since, and therefore the instrumentation works for
all `jodd-http` versions above `4.2.0`.

Since this is my first contribution/instrumentation, I orientated myself
on the `apache-httpclient-5.0` instrumentation, but obviously I would be
glad to get some feedback on this

---------

Co-authored-by: Mateusz Rzeszutek <mrzeszutek@splunk.com>
2023-02-23 15:54:13 +00:00
Peter Findeisen 98653ef075
7883 ClassCastException when using -Dotel.jmx.target.system=tomcat (#7884)
Using "1" to specify units of plain cardinality.
2023-02-23 12:28:10 +01:00
Gregor Zeitlinger 78e459efa8
fix JMX usage examples (#7877)
If the unit is a number, there's a ClassCastException.

However, I'm not sure if updating the documentation is the right fix

- `1` is also used in some internal config files - e.g.
[tomcat](4db65b6d1f/instrumentation/jmx-metrics/javaagent/src/main/resources/jmx/rules/tomcat.yaml (L4))
- it's an incompatible change for users, such as myself
2023-02-22 15:49:11 -08:00
Aaron Ai 8a7e8a8ca2
Replace InternalLogger of RocketMQ by Slf4j Logger (#7873)
Fixes #7872
2023-02-22 09:38:19 +02:00
Peter Findeisen 630f7513f6
7706 Handle JMX MBean attributes with embedded dots (#7841)
Allowing to use backslash as an escape character within MBean attribute
names.
2023-02-21 12:05:19 -08:00
Lauri Tulmin 85c541ef92
Implement kafka client id and consumer id attributes (#7860)
Resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7771
Adds `messaging.consumer_id` and `messaging.kafka.client_id` attributes
to kafka spans.
2023-02-21 07:31:28 -08:00
Mateusz Rzeszutek 12ea869855
Implement `messaging.kafka.*` attributes spec (part 1) (#7824)
Part 1 of #7771

It's a lot more than I initially expected it to be; I'll introduce the
clientId attribute in part 2
2023-02-16 13:22:17 -08:00
Mateusz Rzeszutek d9b0eee503
Remove deprecated instrumentation-api-semconv code (#7838) 2023-02-16 13:16:52 -08:00
Trask Stalnaker 8f32133430
Rename module from jsf-common to jsf-javax-common (#7812) 2023-02-15 08:39:08 +01:00
Trask Stalnaker 391e881bf4
Remove unused file (#7814) 2023-02-15 08:17:53 +01:00
Mateusz Rzeszutek 4fd52c5a7c
Encode version in library instrumentations' package names (#7764)
Another part of #932

In this PR I changed all the library instrumentation packages -- these
are breaking changes, so I figured the earlier we do this the less
painful it'll be to the users. I know that at least some of them are
actively used, so we'll need to spell this out in the release notes.

---------

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
2023-02-14 23:25:59 +00:00
Lauri Tulmin 4023a59068
Grpc client instrumentation net.sock.peer.addr (#7742)
Currently grpc client instrumentation unreliably fills
`net.sock.peer.addr` which makes tests flaky
https://ge.opentelemetry.io/s/nni57d5zryafk/tests/:instrumentation:grpc-1.6:javaagent:test/io.opentelemetry.javaagent.instrumentation.grpc.v1_6.GrpcStreamingTest/conversation(int,%20int)%5B8%5D?expanded-stacktrace=WyIwIl0&top-execution=1
This pr moves capturing `net.sock.peer.addr` to a later point where it
seems to work reliably.
2023-02-14 12:04:53 -08:00
Oleh Astappiev ae6350bbd3
Add Jakarta JSF 3.0+ instrumentation (#7786)
Hi,

I copied existing JSF 1.2-2 instrumentation, updated dependencies and
namespaces related to JSF 3+.
I don't work with Mojjara implementation, but copied by analogy and
verified that package names are unchanged.

I named new packages by anology with `servlet` packages, but I use
`jsf-jakarta-common` when in servlet we have `servlet-javax-common`.
My idea was to avoid touching existing packages, but perhaps to keep
consistency, I can rename old `jsf-common` to `jsf-javax-common`.

Tested with Tomcat and my app, it's working fine with JSF 4 :)
2023-02-14 12:01:41 -08:00
Mateusz Rzeszutek ea237e3a80
Update HTTP span name extractors (#7730)
Implements
https://github.com/open-telemetry/opentelemetry-specification/issues/2998

---------

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
2023-02-14 07:40:05 -08:00
moznion 7e8d76a83b
Put `http.route` attribute onto `http.server.duration` on Play framework request processing (#7801)
Basically, `akka-http` instrumenter has the responsibility to instrument
the `http.server.duration` for the Play framework application, but the
current implementation has not marked the `http.route` attribute.
ref:
8e8161cb2e/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaHttpServerAttributesGetter.java (L59)

Actually, it's hard to record that attribute by only the akka-http layer
because that library's request object doesn't hold the route
information, e.g. placeholder.

So this patch delegates that job to the `play-mvc` instrumenter and when
that has been able to get the route info, the instrumenter puts
`http.route` attribute onto `http.server.duration`.

For example, when the routes configuration of the Play is like the
following:

```
GET  /foo/:bar  controllers.HomeController.doSomething(bar: String)
```

and when it tries to access that API, then OTEL instruments like so:

```prometheus
http_server_duration_count{otel_scope_name="io.opentelemetry.akka-http-10.0",otel_scope_version="1.23.0-alpha-SNAPSHOT",http_flavor="1.1",http_method="GET",http_route="/foo/$bar<[^/]+>",http_scheme="http",http_status_code="200",net_host_name="localhost",net_host_port="9000"} 1.0 1676078079798
http_server_duration_sum{otel_scope_name="io.opentelemetry.akka-http-10.0",otel_scope_version="1.23.0-alpha-SNAPSHOT",http_flavor="1.1",http_method="GET",http_route="/foo/$bar<[^/]+>",http_scheme="http",http_status_code="200",net_host_name="localhost",net_host_port="9000"} 12183.558843 1676078079798
http_server_duration_bucket{otel_scope_name="io.opentelemetry.akka-http-10.0",otel_scope_version="1.23.0-alpha-SNAPSHOT",http_flavor="1.1",http_method="GET",http_route="/foo/$bar<[^/]+>",http_scheme="http",http_status_code="200",net_host_name="localhost",net_host_port="9000",le="0.0"} 0.0 1676078079798
...
http_server_duration_bucket{otel_scope_name="io.opentelemetry.akka-http-10.0",otel_scope_version="1.23.0-alpha-SNAPSHOT",http_flavor="1.1",http_method="GET",http_route="/foo/$bar<[^/]+>",http_scheme="http",http_status_code="200",net_host_name="localhost",net_host_port="9000",le="+Inf"} 1.0 1676078079798
```

Rel: #1415

---------

Signed-off-by: moznion <moznion@mail.moznion.net>
2023-02-14 14:05:59 +02:00
Lauri Tulmin d847bfcad5
Add instrumentation for hibernate 6 (#7773) 2023-02-13 14:39:27 -08:00
OpenTelemetry Bot f074b93110
Update the OpenTelemetry SDK version to 1.23.0 (#7800)
Update the OpenTelemetry SDK version to `1.23.0`.

---------

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
2023-02-13 20:22:09 +00:00
Helen c61996f5a4
Change Spring Scheduling to not capture span for one-time jobs (only repeated jobs) (#7760)
We are seeing examples where Spring Scheduling INTERNAL spans are
created inside of an existing parent span, which creates unnecessary
noise.

And these spans don't necessary make sense as these are not "background
jobs" (since they occur inside of an existing span).

(see for example
https://github.com/microsoft/ApplicationInsights-Java/issues/2870)

This PR changes Spring Scheduling instrumentation to only instrumenting
repeating jobs, not one-time scheduled jobs (which corresponds to
ScheduledExecutorService behavior where context is not propagated to
runnable)

---------

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
2023-02-13 12:05:06 -08:00
Will Li d3326db0cf
Convert kafka-clients unit test from groovy to java (#7770)
Co-authored-by: Mateusz Rzeszutek <mrzeszutek@splunk.com>
2023-02-13 10:58:55 +01:00
Lauri Tulmin 39e7ed4d6a
Second attempt at fixing serializing kafka configuration (#7789)
Hopefully resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7597
Without reproducing the issue it is hard to tell whether this will help.
Another issue that could arise is that we add our metrics class in
`metric.reporters` property which will probably break if this
configuration is used to build consumer or producer after deserializing
as our classes don't seem to be available there. If this fails we'll
need to ask the issue reporter for instructions how to reproduce and
find a different strategy for fixing this.
2023-02-13 10:47:18 +01:00
Lauri Tulmin 54d7241c05
Fix autoconfigure for spring boot 3 (#7784)
See
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7312
2023-02-13 10:45:23 +01:00
Lauri Tulmin dde140c161
Fix flaky google http client async test (#7805)
https://ge.opentelemetry.io/s/gnwekqhhf3ut6/tests/:instrumentation:google-http-client-1.19:javaagent:test/io.opentelemetry.javaagent.instrumentation.googlehttpclient.GoogleHttpClientAsyncTest/highConcurrency()?page=eyJvdXRwdXQiOnsiMCI6Mn19&top-execution=1
The problem is that the google http client method we use is implemented
like
```
  public Future<HttpResponse> executeAsync() {
    return executeAsync(Executors.newSingleThreadExecutor());
  }
```
as explained in https://bugs.openjdk.org/browse/JDK-8145304 when
`newSingleThreadExecutor` is used in such a way it is possible that this
executor is shut down before it actually manages to execute anything.
2023-02-13 10:11:30 +01:00
Liudmila Molkova 7de0861266
Update Azure SDK instrumentation for new version (#7753)
Fix #7729

This PR adopts Azure SDK tracing API changes from the latest release
(azure-core 1.36.0, azure-core-tracing-opentelemetry 1.0.0-beta.32)

The API changes are not breaking (1.19 instrumentation is still
compatible), but the new instrumentation is slightly more performant and
supports new features. We are also going to break compatibility with
1.19 instrumentation at some point (in 6-12 months).

We now have 3 versions for azure-sdk. We still have about 10% of users
on versions [1.14-1.19), but it's declining and I'll be happy to remove
1.14 in the next few months if this trend continues.

---------

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
2023-02-09 13:52:40 -08:00
Lauri Tulmin c5649cc987
Document spring-rmi latest dep limit (#7774) 2023-02-09 17:07:24 +01:00
Lauri Tulmin 8b552db495
Bridge metrics batch api (#7762)
Resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7454
2023-02-09 07:43:49 -08:00
Lauri Tulmin f887fb870d
Dubbo: don't create spans for calls inside the same jvm (#7761)
Resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7520
Invoking a dubbo service, like in
d7e2417ae7/demo-business-provider/src/main/java/cn/zewade/business/controller/BusinessController.java (L20),
creates a client span (and a server span on the receiving end). If the
caller and service are on the jvm this call doesn't go through remoting
and will be handled with regular java calls. Now when the initially
called service calls another service, like in
https://github.com/zewade/opentelemetry-dubbo-demo/blob/main/demo-business-provider/src/main/java/cn/zewade/business/dubbo/BusinessDubboServiceImpl.java#L25,
that second call will also attempt to create a client span. This second
client span will be suppressed which will also suppress context
propagation.
2023-02-09 08:46:39 +02:00
Lauri Tulmin 5d182557a1
Ensure kafka configuration remains serializable (#7754)
Resolves
https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7597
I wasn't able to reproduce this. Figuring out how to run beam, flink and
kafka together feels like too much effort. Without reproducing it is too
hard to tell why the configuration is serialized, but my hunch is that
it is enough to ensure that the configuration can be serialized.
2023-02-09 08:45:39 +02:00