Перейти к содержимому

Snapshots, diff & drift

Every collection produces a snapshot — one immutable, content-hashed capture of a device’s config. Snapshots are what the tracker versions, diffs and watches for drift, and — because Taranac is your AAA server — what it can attribute to the operator who made the change.

Three versions on the rail: v1 the first capture, v2 pinned as the baseline, v3 the latest — drifted from the baseline — with the diff and the operator resolved from TACACS+ accounting.
TermWhat it is
SnapshotOne capture, stored with its content hash, size and capture time. The scrubbed text is stored inline; binary configs are stored hash-only (versioned by hash, no diff).
Version (v{n})A per-config sequence number — v1 is the oldest capture, v{n} the newest. It counts that config’s snapshots in capture order.
Content hashA SHA-256 of the scrubbed body. It’s how the tracker decides whether a capture is a change or a duplicate.
BaselineThe one snapshot per config you declare “known-good.” Drift is measured against it.
DriftThe latest capture’s hash no longer matches the baseline’s hash.
Config statusA derived health value shown on the Configs list (below).
AAA activityWho logged in, which commands they ran, and the session accounting — in the window between two versions.

When a collection completes, Taranac hashes the scrubbed config and compares it to the latest snapshot only:

  • Same hash → nothing is stored. The run records the target as unchanged; no new version is cut.
  • Different hash → a new snapshot is stored and the version number advances (changed).

Because comparison is against the latest snapshot (not the whole history), reverting a device to an older config is correctly recorded as a new change — the hash differs from the current latest, so a new version is cut. Version numbers are per config, so every tracked config has its own clean v1…v{n} timeline.

Any version can be pinned as the baseline — the config you consider correct. From then on, the tracker compares each new capture’s hash to the baseline’s:

  • Latest hash matches baseline → the config is in sync.
  • Latest hash differs → the config is drifted, and it’s flagged the instant the drifting capture lands.

There is exactly one baseline per config: pinning a new one moves the marker off the old version. A config with no baseline is never “drifted” — drift is defined only relative to a baseline you’ve set.

Beyond the baseline, a version can also carry a free-form tag (a label plus an optional note) to mark releases or maintenance windows in the history. Tags are organisational only — they don’t affect drift.

The Configs list shows a derived status per tracked config. It is computed at read time in priority order (the first that applies wins):

StatusMeaning
DisabledThe config is disabled and is not collected.
Collector offlineA collector that serves this config’s addresses is offline.
FailingThe most recent scheduled collection failed (with a failure class — auth, transient or partial).
DriftedThe latest capture’s hash differs from the baseline’s.
Never collectedNothing has been captured yet.
OKCollected, and either matching the baseline or with no baseline set.

Open a config and pick a version on the Versions rail to see a side-by-side diff. By default a version is compared to the one before it; you can also compare against:

Compare modeDiffs the selected version against…
Previous (default)The capture immediately before it.
BaselineThe pinned baseline (shows the full drift).
SnapshotAny other version you pick.

The diff renders as aligned side-by-side rows (and a unified view). Binary configs can’t be diffed — they’re offered as a download instead, versioned by hash.

This is what a standalone backup tool can’t do. Open the diff and choose View AAA activity: Taranac shows who touched that device in the window between the two versions being compared(previous capture time → this capture time]. (For the very first version, it looks back 24 hours.) The drawer has three tabs:

TabShowsSource
AuthenticationWho logged in, from where, and whether it succeeded.TACACS+ and RADIUS
AuthorizationWhich commands were run, permit/deny.TACACS+ only
AccountingSession start/stop and elapsed time.TACACS+ and RADIUS

The honest limit: per-command attribution needs TACACS+ command authorization. A RADIUS-only device still gives you who-logged-in and session accounting — it just can’t tell you the individual commands, because RADIUS device administration doesn’t record them. (802.1X / MAB network-access sessions are excluded — this is device-admin activity only.)

Correlation is by device address: the activity is matched to the config’s addresses against the AAA logs’ NAS-IP. That’s a heuristic on the same network identity, so keep a tracked config’s addresses accurate for the attribution to line up. A user filter and per-tab counts let you narrow to one operator quickly.

Captures happen inside a collection run, listed under Configuration Tracker → Collection Runs:

  • Scheduled — a leader-driven periodic sweep collects every enabled config; the sweep interval is the collection cadence (there’s no per-config schedule).
  • On demand — an operator’s Collect now on a single config.

A run’s status is running, completed, or interrupted (an interrupted run is one whose lease expired mid-flight — e.g. an HA failover — and is never resumed). Each target in a run gets a per-device result: ok (first capture), changed, unchanged or failed.

The Collection Runs journal in the Taranac admin UI The Collection Runs journal: scheduled sweeps and on-demand collects, each with its per-device tally of collected / changed / unchanged / failed. Failed results carry a failure classauth (never retried, to avoid tripping device lockouts), transient (retried with backoff) or partial (holds the last-good). When a config’s scheduled collections fail repeatedly, Taranac escalates a collection-failed alert.

Prove nothing changed overnight. Sort the Configs list by status; anything not OK stands out. For a clean config, the version rail shows no new version since the baseline.

Investigate an unexpected change. Open the drifted config, diff the latest version against the baseline to see the full delta, then View AAA activity to see who logged in and what they ran in that window.

Roll back and record it. Restore the device to a known-good config out-of-band, then Collect now. The revert is captured as a new version (hash differs from the drifted latest), and pinning the restored version as the baseline clears the drift.

You want to…Do this
See what changed between two capturesSide-by-side diff, Previous mode
See everything that drifted from known-goodDiff against Baseline
Compare two arbitrary versionsDiff in Snapshot mode
Find out who made a changeView AAA activity on the diff
Define what “correct” means for a devicePin baseline on the good version
Force a fresh capture nowCollect now

Snapshot facts:

FieldNotes
VersionPer-config sequence number, oldest = v1.
Content hashSHA-256 of the scrubbed body; drives de-dup and drift.
Content kindtext (stored inline) or binary (hash-only, no diff).
Captured atWhen the snapshot was taken.
AttributionThe AAA-derived “who changed it,” computed at capture.
Raw bodyOff by default; encrypted; revealable only with ncm_tracked_configs.reveal_raw.

Compare modes: prev (default) · baseline · snapshot. Run triggers: scheduled · on_demand. Run statuses: running · completed · interrupted. Per-device results: ok · changed · unchanged · failed (classes auth · transient · partial).