Fix APM configuration file delete#91058
Conversation
When we launch Elasticsearch with the APM monitoring agent, we create a temporary configuration file to securely pass the API key or secret. This temporary file is cleaned up on Elasticsearch Node creation. After we renamed the APM module, the delete logic didn't get updated, which means we never delete the file anymore. This commit: - fixes the APM module pattern match when we delete - adds additional delete safety net on failed node start - adds tests for ensuring the naming dependency isn't broken again.
|
Pinging @elastic/es-core-infra (Team:Core/Infra) |
|
Hi @grcevski, I've created a changelog YAML for you. |
| */ | ||
| @Nullable | ||
| private static Path findAgentJar() throws IOException, UserException { | ||
| final Path apmModule = Path.of(System.getProperty("user.dir")).resolve("modules/apm"); |
There was a problem hiding this comment.
I did resolve("modules").resolve("apm") to be Windows friendly.
| final String agentArg = inputArgument.substring(11); | ||
| final String[] parts = agentArg.split("=", 2); | ||
| if (parts[0].matches("modules/x-pack-apm-integration/elastic-apm-agent-\\d+\\.\\d+\\.\\d+\\.jar")) { | ||
| if (parts[0].matches(".*modules/apm/elastic-apm-agent-\\d+\\.\\d+\\.\\d+\\.jar")) { |
There was a problem hiding this comment.
I had to add .* to make sure this works with absolute paths.
| return options; | ||
| } | ||
|
|
||
| // package private for testing |
There was a problem hiding this comment.
These small methods are extracted so that I can prove the tests use whatever is used in the code (given we have the cross file dependency with Node).
|
Hi @grcevski, I've updated the changelog YAML for you. |
pugnascotia
left a comment
There was a problem hiding this comment.
LGTM, apologies for the break 🙏
| Node.deleteTemporaryApmConfig(jvmInfo, (e, p) -> fail("Shouldn't hit an exception")); | ||
| assertFalse(Files.exists(tempFile)); | ||
|
|
||
| Files.delete(agentPath); |
There was a problem hiding this comment.
Should this be done regardless of test status? Or maybe in test class cleanup?
|
@elasticsearchmachine run CLA |
|
@elasticsearchmachine test this please |
💚 Backport successful
|
When we launch Elasticsearch with the APM monitoring agent, we create a temporary configuration file to securely pass the API key or secret. This temporary file is cleaned up on Elasticsearch Node creation. After we renamed the APM module, the delete logic didn't get updated, which means we never delete the file anymore. This commit: - fixes the APM module pattern match when we delete - adds additional delete safety net on failed node start - adds tests for ensuring the naming dependency isn't broken again.
When we launch Elasticsearch with the APM monitoring agent, we create a temporary configuration file to securely pass the API key or secret. This temporary file is cleaned up on Elasticsearch Node creation. After we renamed the APM module, the delete logic didn't get updated, which means we never delete the file anymore. This commit: - fixes the APM module pattern match when we delete - adds additional delete safety net on failed node start - adds tests for ensuring the naming dependency isn't broken again.
* main: (1300 commits) update c2id/c2id-server-demo docker image to support ARM (elastic#91144) Allow legacy index settings on legacy indices (elastic#90264) Skip prevoting if single-node discovery (elastic#91255) Chunked encoding for snapshot status API (elastic#90801) Allow different decay values depending on the score function (elastic#91195) Fix handling indexed envelopes crossing the dateline in mvt API (elastic#91105) Ensure cleanups succeed in JoinValidationService (elastic#90601) Add overflow behaviour test for RecyclerBytesStreamOutput (elastic#90638) More actionable error for ancient indices (elastic#91243) Fix APM configuration file delete (elastic#91058) Clean up handshake test class (elastic#90966) Improve H3#hexRing logic and add H3#areNeighborCells method (elastic#91140) Restrict direct use of `ApplicationPrivilege` constructor (elastic#91176) [ML] Allow NLP truncate option to be updated when span is set (elastic#91224) Support multi-intersection for FieldPermissions (elastic#91169) Support intersecting multi-sets of queries with DocumentPermissions (elastic#91151) Ensure TermsEnum action works correctly with API keys (elastic#91170) Fix NPE in auditing authenticationSuccess for non-existing run-as user (elastic#91171) Ensure PKI's delegated_by_realm metadata respect run-as (elastic#91173) [ML] Update API documentation for anomaly score explanation (elastic#91177) ... # Conflicts: # x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackClientPlugin.java # x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/downsample/RollupShardIndexer.java # x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/downsample/TransportRollupIndexerAction.java # x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/rollup/v2/RollupActionSingleNodeTests.java
When we launch Elasticsearch with the APM monitoring agent, we create a temporary configuration file to securely pass the API key or secret. This temporary file is cleaned up on Elasticsearch Node creation.
After we renamed the APM module, the delete logic didn't get updated, which means we never delete the file anymore.
This PR:
After reviewing the possible ways to pass options to the APM agent, I think the current design is the best way to pass options to the APM Java agent at the moment. Even if we worked around the issues with the Security manager and we attached the agent instead of using the command line, the agent upon attach seems to be writing a configuration file anyway: https://github.com/elastic/apm-agent-java/blob/main/apm-agent-attach/src/main/java/co/elastic/apm/attach/ElasticApmAttacher.java#L115.
Closes #89439