Support bundles and logs
Collect logs, configuration and live state into one redacted archive for Cambrionix support.
A support bundle gives Cambrionix support everything they need in one file: the services' logs,
their configuration and errors, live hub and device state, USB topology, system details and
doctor results. Secrets are always removed before anything is written.
cambrionix-cli support bundle # sensible defaults
cambrionix-cli support bundle --dry-run # see what would be collected, and its size
cambrionix-cli support bundle --upload --case CS-48213 --yes
Choosing what to collect
| Option | Default | Effect |
|---|---|---|
--services <list> | every service that answers | relay, hub, recorder, device, comma-separated |
--include <list>, --exclude <list> | the default collectors | Add or remove collectors (below) |
--logs-per-service <n> | 3 | The newest n log files per service |
--since <time>, --until <time> | 24h, now | 2h, 7d, an RFC 3339 time, or all |
--level <level> | everything | Keep only log lines at or above trace, debug, info, warn or error |
--max-file-size <size> | 20MB | Keep the end of larger log files |
--max-size <size> | 200MB | Total budget; the oldest log files are dropped first |
--redact <level> | standard | standard, strict or none |
--preset <name> | none | Load options from a preset; flags still override it |
--out <path>, -O | ./cambrionix-support-<host>-<time>.zip | A file, a directory, or - for standard output |
--upload [--case <id>] | off | Upload after writing |
--strict | off | Exit with code 6 if any collector failed |
For example, everything about USB problems on the Hub and Device APIs over the last three days:
cambrionix-cli support bundle --services hub,device --logs-per-service 10 --since 72h
Collectors
| Collector | Default | Contents |
|---|---|---|
details | on | Each service's version, directories and capabilities |
logs | on | Log files from each service's log directory |
config | on | Each service's configuration |
errors | on | Errors each service reports |
hubs | on | Hub list, and each hub's state, hardware, ports and schedules |
devices | on | Attached devices |
usb | on | Host-controller endpoint use and the operating system's USB tree |
enrollment | on | The organisation IDs this computer belongs to, never its secrets |
updates | on | Available service updates and update progress |
doctor | on | Results of cambrionix-cli doctor |
system | on | OS, CPU, memory, disks, clock and proxy settings |
cli | on | The CLI's version and configuration, never credentials |
crash | off | Crash dumps from the log directories |
A collector that can't run, for example because the Device API isn't installed, is recorded as skipped and the bundle carries on.
Presets
| Preset | For |
|---|---|
quick | The last two hours: details, newest log, errors, doctor |
standard | The defaults |
full | Every collector, 20 log files per service, 14 days, up to 1 GB |
usb-issue | Hub and Device APIs, hubs, devices and USB, seven days |
enrollment | The relay's details and logs for the last two hours, strict redaction |
Define your own in config.toml. A preset with the same name as a built-in one replaces it:
[support.presets.overnight]
services = ["hub"]
include = ["logs", "hubs", "usb", "doctor"]
logs_per_service = 5
since = "16h"
level = "warn"
Redaction
| Level | Removes |
|---|---|
standard | Values of fields named like secrets, tokens, passwords and keys; bearer tokens and JWTs in logs; credentials in URLs; signed URL signatures; email addresses |
strict | standard, plus IP addresses, the host name and user names in paths, replaced with consistent placeholders such as ip-1 and host-1 |
none | Nothing. The CLI asks for confirmation first |
Hub serial numbers and device identifiers are kept, because support needs them. The manifest counts what was replaced, without the values.
What's inside
cambrionix-support-build-07-20261113T230142Z/
├── manifest.json what was collected, file sizes and SHA-256 hashes, redaction counts
├── SUMMARY.md collector results, failed doctor checks and error lines per log file
├── doctor.json
├── cli.json
├── system/ os.json, usb-tree.txt
├── services/<service>/ details.json, config.json, errors.json, logs/
└── hubs/<serial>/ state.json, hardware.json, ports.json, schedules.json
cambrionix-cli support inspect <bundle.zip> prints the summary; add --json for the manifest.
Uploading
--upload, or support upload <bundle.zip>, sends the bundle to Cambrionix and prints a
reference to quote to support. The CLI uses your sign-in if you're signed in, otherwise this
computer's enrollment. Uploading needs the Organization.SupportBundle.Write permission, which
enrolled computers have.
Connect checks each upload: a file whose size doesn't match what the CLI declared, or that isn't a zip archive, is deleted. To prevent misuse, an organisation can have at most 5 uploads in progress, 20 uploads a day and 10 GB of bundles stored. The CLI reports which limit was reached.
Uploaded bundles appear in Connect under Settings → Support Bundles, and on each computer's
Support bundles tab, for anyone with Organization.SupportBundle.Read. From there you can
download a bundle or, with Organization.SupportBundle.Delete, delete it. Bundles are deleted
automatically after 90 days.
Reading logs
cambrionix-cli logs tail -f # follow every service
cambrionix-cli logs show -s hub --level warn --since 2h
cambrionix-cli logs show --grep 'port 4' -n 50
cambrionix-cli logs tail -f --json | jq . # one JSON object per line
Lines from different services are merged in time order and prefixed with the service name. Log
directories are usually readable only by administrators, so run these commands with sudo (or
an elevated PowerShell) if you see a permission error. If the services aren't running, set
CAMBRIONIX_LOG_DIR to the log directory.