mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-19 21:30:56 +00:00
fix(telemetry): keep filelog offset storage out of the shared collector config
The file_storage extension was added to otel-collector-config.yaml, which every stack mounts. That made the extension mandatory: the collector image runs as 10001:10001 and ships no writable directory, so any stack without a prepared volume would fail to start rather than merely lose offsets. The workload-validation stack mounts this same config and has no such volume. Offset persistence is only useful where logs outlive a restart. The workload harness creates a fresh log directory per run, so it has nothing to resume from. Move the extension, the receiver's storage reference and the extended service.extensions list into otel-collector-filestorage.yaml, layered as a second --config by the developer stack alone. The base config keeps start_at: beginning, which is what actually fixes the reported defect, and stays self-sufficient for every other stack. Verified against the pinned collector image: the base config validates and runs on its own with no volume mounted and still ingests a line written before startup; base plus overlay validates, preserves the base receiver's operators through the merge, and re-ingests that line zero times on a second run against the same volume.
This commit is contained in:
@@ -823,6 +823,8 @@ Log files are ingested by the OTel Collector's `filelog` receiver, which tails `
|
||||
|
||||
The receiver tails `/var/log/xrpld/*/debug.log` inside the collector container. docker-compose bind-mounts the host log root there; the source defaults to the repo-relative `docker/telemetry/data/logs`, which the telemetry configs write to (`data/logs/<network>/debug.log`) and which needs no root. To tail logs from elsewhere, set `XRPLD_LOG_DIR` before `docker compose up` (the integration test does this to point at its own workdir). The single trailing `*` matches one per-network or per-node subdirectory.
|
||||
|
||||
Each file is read from the beginning, because the receiver's own default (`end`) would skip anything a node wrote before the collector's first poll and would never read a log that has stopped being written to. Read offsets are held in memory by default, so a restarted collector re-reads the files it already ingested. The developer stack avoids that by layering `otel-collector-filestorage.yaml` as a second `--config`, which adds a `file_storage` extension that keeps the offsets on a named volume; a one-shot init service prepares that volume, because the collector runs as a non-root user and a fresh Docker volume is owned by root. Ephemeral stacks such as the workload validation harness create a fresh log directory per run, so they have nothing to resume from and deliberately omit the overlay.
|
||||
|
||||
### LogQL Query Examples
|
||||
|
||||
```logql
|
||||
|
||||
Reference in New Issue
Block a user