CambrionixDevelopers
Cambrionix CLI

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

OptionDefaultEffect
--services <list>every service that answersrelay, hub, recorder, device, comma-separated
--include <list>, --exclude <list>the default collectorsAdd or remove collectors (below)
--logs-per-service <n>3The newest n log files per service
--since <time>, --until <time>24h, now2h, 7d, an RFC 3339 time, or all
--level <level>everythingKeep only log lines at or above trace, debug, info, warn or error
--max-file-size <size>20MBKeep the end of larger log files
--max-size <size>200MBTotal budget; the oldest log files are dropped first
--redact <level>standardstandard, strict or none
--preset <name>noneLoad options from a preset; flags still override it
--out <path>, -O./cambrionix-support-<host>-<time>.zipA file, a directory, or - for standard output
--upload [--case <id>]offUpload after writing
--strictoffExit 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

CollectorDefaultContents
detailsonEach service's version, directories and capabilities
logsonLog files from each service's log directory
configonEach service's configuration
errorsonErrors each service reports
hubsonHub list, and each hub's state, hardware, ports and schedules
devicesonAttached devices
usbonHost-controller endpoint use and the operating system's USB tree
enrollmentonThe organisation IDs this computer belongs to, never its secrets
updatesonAvailable service updates and update progress
doctoronResults of cambrionix-cli doctor
systemonOS, CPU, memory, disks, clock and proxy settings
clionThe CLI's version and configuration, never credentials
crashoffCrash 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

PresetFor
quickThe last two hours: details, newest log, errors, doctor
standardThe defaults
fullEvery collector, 20 log files per service, 14 days, up to 1 GB
usb-issueHub and Device APIs, hubs, devices and USB, seven days
enrollmentThe 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

LevelRemoves
standardValues of fields named like secrets, tokens, passwords and keys; bearer tokens and JWTs in logs; credentials in URLs; signed URL signatures; email addresses
strictstandard, plus IP addresses, the host name and user names in paths, replaced with consistent placeholders such as ip-1 and host-1
noneNothing. 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.