From 3984d61916b331bc1c318babee919a9dde03e6a7 Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Wed, 24 Apr 2024 11:25:03 +0200 Subject: [PATCH 1/8] Added config --- .../UniversalProfilingConfiguration.java | 51 +++++++++++++++++++ ....configuration.ConfigurationOptionProvider | 1 + 2 files changed, 52 insertions(+) create mode 100644 apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/UniversalProfilingConfiguration.java diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/UniversalProfilingConfiguration.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/UniversalProfilingConfiguration.java new file mode 100644 index 0000000000..eca67d7818 --- /dev/null +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/UniversalProfilingConfiguration.java @@ -0,0 +1,51 @@ +package co.elastic.apm.agent.configuration; + +import org.stagemonitor.configuration.ConfigurationOption; +import org.stagemonitor.configuration.ConfigurationOptionProvider; + +public class UniversalProfilingConfiguration extends ConfigurationOptionProvider { + + private static final String PROFILING_CATEGORY = "Profiling"; + + private final ConfigurationOption enabled = ConfigurationOption.booleanOption() + .key("universal_profiling_integration_enabled") + .tags("added[1.50.0]") + .configurationCategory(PROFILING_CATEGORY) + .description("If enabled, the apm agent will correlate it's transaction with the profiling data from elastic universal profiling running on the same host.") + .buildWithDefault(false); + + private final ConfigurationOption bufferSize = ConfigurationOption.longOption() + .key("universal_profiling_integration_buffer_size") + .tags("added[1.50.0]") + .configurationCategory(PROFILING_CATEGORY) + .description("The feature needs to buffer ended local-root spans for a short duration to ensure that all of its profiling data has been received." + + "This configuration option configures the buffer size in number of spans. " + + "The higher the number of local root spans per second, the higher this buffer size should be set.\n" + + "The agent will log a warning if it is not capable of buffering a span due to insufficient buffer size. " + + "This will cause the span to be exported immediately instead with possibly incomplete profiling correlation data.") + .buildWithDefault(4096L); + + private final ConfigurationOption socketDir = ConfigurationOption.stringOption() + .key("universal_profiling_integration_socket_dir") + .tags("added[1.50.0]") + .configurationCategory(PROFILING_CATEGORY) + .description("The extension needs to bind a socket to a file for communicating with the universal profiling host agent." + + "This configuration option can be used to change the location. " + + "Note that the total path name (including the socket) must not exceed 100 characters due to OS restrictions.\n" + + "If unset, the value of the `java.io.tmpdir` system property will be used.") + .build(); + + public boolean isEnabled() { + return enabled.get(); + } + + public long getBufferSize() { + return bufferSize.get(); + } + + public String getSocketDir() { + String dir = socketDir.get(); + return dir == null || dir.isEmpty() ? System.getProperty("java.io.tmpdir") : dir; + } + +} diff --git a/apm-agent-core/src/main/resources/META-INF/services/org.stagemonitor.configuration.ConfigurationOptionProvider b/apm-agent-core/src/main/resources/META-INF/services/org.stagemonitor.configuration.ConfigurationOptionProvider index 389c99067e..878419acfb 100644 --- a/apm-agent-core/src/main/resources/META-INF/services/org.stagemonitor.configuration.ConfigurationOptionProvider +++ b/apm-agent-core/src/main/resources/META-INF/services/org.stagemonitor.configuration.ConfigurationOptionProvider @@ -7,3 +7,4 @@ co.elastic.apm.agent.impl.circuitbreaker.CircuitBreakerConfiguration co.elastic.apm.agent.configuration.MetricsConfiguration co.elastic.apm.agent.configuration.ServerlessConfiguration co.elastic.apm.agent.configuration.SpanConfiguration +co.elastic.apm.agent.configuration.UniversalProfilingConfiguration From 636cca8203fbecf94beefc77df7340bf9f318bf4 Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Wed, 24 Apr 2024 11:34:58 +0200 Subject: [PATCH 2/8] Added shared memory writer --- apm-agent-core/pom.xml | 5 + .../apm/agent/impl/transaction/Id.java | 4 + .../ProfilerSharedMemoryWriter.java | 93 +++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 apm-agent-core/src/main/java/co/elastic/apm/agent/universalprofiling/ProfilerSharedMemoryWriter.java diff --git a/apm-agent-core/pom.xml b/apm-agent-core/pom.xml index cb04140691..4ef4dfe617 100644 --- a/apm-agent-core/pom.xml +++ b/apm-agent-core/pom.xml @@ -100,6 +100,11 @@ HdrHistogram 2.1.11 + + co.elastic.otel + jvmti-access + 0.1.1-SNAPSHOT +