elastic / elastic/apm-agent-java

Improve process instrumentation for Java 9

Open
#966 1 comment 0 reactions 0 assignees View on GitHub
enhancement instrumentation
Dominant language
Java
Stars
594
Forks
338
Avg merge
1d 13h
Merged PRs (30d)
25

Description

**Problem description**

This is an improvement on elastic/apm-agent-java#903 (external process execution instrumentation).

Starting from Java 9, there is a new API available for process execution `ProcessHandle`, which is not covered by #903.
As a result, any usage of this API will not result in spans be created.

**Proposed solution**

Instrument `Process.toHandle()` to wrap returned `ProcessHandle` instance.

Wrapped `ProcessHandle` should end current process span on those methods
- `ProcessHandle.destroy()`
- `ProcessHandle.destroyForcibly()`
- `ProcessHandle.onExit()` > returns a `CompletableFuture` which should be wrapped and terminate span

This would also allow to use `ProcessHandle.Info` and capture program arguments, PID or other attributes.

Alternatively, we could also use `CompletableFuture.thenApply(...)` to chain a task that will terminate the process span.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.