fix: prefer cameleer.exchangeId MDC key for log correlation
All checks were successful
CI / cleanup-branch (push) Has been skipped
CI / build (push) Successful in 1m57s
CI / docker (push) Successful in 1m6s
CI / deploy-feature (push) Has been skipped
CI / deploy (push) Successful in 37s

The agent now sets cameleer.exchangeId in MDC (persists across processor
executions, unlike Camel's camel.exchangeId which is scoped to MDCUnitOfWork).
For ON_COMPLETION exchange copies, the agent uses the parent's exchange ID.

Server changes:
- ClickHouseLogStore ingestion: extract exchange_id preferring
  cameleer.exchangeId, falling back to camel.exchangeId
- ClickHouseLogStore search: match exchangeId filter against exchange_id
  column OR cameleer.exchangeId OR camel.exchangeId in MDC
- Update CLAUDE.md with log exchange correlation documentation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-15 22:35:28 +02:00
parent 64af49e0b5
commit 251c88fa63
2 changed files with 8 additions and 4 deletions

View File

@@ -62,7 +62,7 @@ public class ClickHouseLogStore implements LogIndex {
ps.setString(9, entry.getStackTrace() != null ? entry.getStackTrace() : "");
Map<String, String> mdc = entry.getMdc() != null ? entry.getMdc() : Collections.emptyMap();
String exchangeId = mdc.getOrDefault("camel.exchangeId", "");
String exchangeId = mdc.getOrDefault("cameleer.exchangeId", mdc.getOrDefault("camel.exchangeId", ""));
ps.setString(10, exchangeId);
ps.setObject(11, mdc);
ps.setString(12, entry.getSource() != null ? entry.getSource() : "app");
@@ -93,7 +93,7 @@ public class ClickHouseLogStore implements LogIndex {
ps.setString(10, entry.getStackTrace() != null ? entry.getStackTrace() : "");
Map<String, String> mdc = entry.getMdc() != null ? entry.getMdc() : Collections.emptyMap();
String exchangeId = mdc.getOrDefault("camel.exchangeId", "");
String exchangeId = mdc.getOrDefault("cameleer.exchangeId", mdc.getOrDefault("camel.exchangeId", ""));
ps.setString(11, exchangeId);
ps.setObject(12, mdc);
ps.setString(13, entry.getSource() != null ? entry.getSource() : "app");
@@ -126,7 +126,10 @@ public class ClickHouseLogStore implements LogIndex {
}
if (request.exchangeId() != null && !request.exchangeId().isEmpty()) {
baseConditions.add("(exchange_id = ? OR (mapContains(mdc, 'camel.exchangeId') AND mdc['camel.exchangeId'] = ?))");
baseConditions.add("(exchange_id = ?" +
" OR (mapContains(mdc, 'cameleer.exchangeId') AND mdc['cameleer.exchangeId'] = ?)" +
" OR (mapContains(mdc, 'camel.exchangeId') AND mdc['camel.exchangeId'] = ?))");
baseParams.add(request.exchangeId());
baseParams.add(request.exchangeId());
baseParams.add(request.exchangeId());
}