Skip to main content

Episode fields

Follow severity and lifecycle changes. Observation fields qualify when a condition began or cleared.

FieldTypeUnitMeaning
sparklogs.episode.idstringUnique episode ID, retained throughout the condition's lifecycle.
sparklogs.episode.event_seqintegercountCounts this episode's events from 1. Survives an agent restart, so a consumer can tell whether an event is newer than what it holds without trusting a clock.
sparklogs.episode.occurrenceintegercountWhich time this is that the condition has opened on this subject on this agent. Counted locally and kept across a reinstall; a wiped host resets it.
sparklogs.episode.phasestringWhere the episode stands: onset, held, recovering, recovered or ended.
sparklogs.episode.transitionstringLifecycle change: opened, recovering, relapsed, closed, ended, severity_raised or severity_lowered. Absent without a transition.
sparklogs.episode.first_observed_tsstringtimestampWhen the episode opened.
sparklogs.episode.age_basisstringonset: start watched live. observed: already present when first noticed, making age a lower bound. unknown_ongoing: no meaningful onset time.
sparklogs.episode.last_confirmed_tsstringtimestampThe last time an observed reading found the condition still true, on a rung or held there by its hold level. A reading that could not tell, one below the ladder, or one at its exit does not move it.
sparklogs.episode.max_observation_gap_sintegersecondsLongest single span, in seconds, the condition went unobserved between two observed readings that placed it: asleep, not capturing, or read without a usable reading.
sparklogs.episode.observed_sintegersecondsSeconds since the episode opened that the agent was observing: awake and capturing, outside low-power idle and the settle after a resume. Episodes opened before 1.13.0 count their earlier time from the older agent's observed age, an upper bound.
sparklogs.episode.unobserved_sintegersecondsSeconds since the episode opened that nobody observed: asleep, in low-power idle or its settle, not capturing, or across an agent restart. With observed_s it adds up to the time since first_observed_ts, within one capture interval.
sparklogs.episode.last_observed_tsstringtimestampWhen an observed reading last placed the condition, on a rung, below it or at its exit. Unlike last_confirmed_ts, a reading below the ladder or at its exit moves this too.
sparklogs.episode.post_gap_sintegersecondsTotal unobserved seconds in the interval preceding this event (may span several gaps); present when at least 30 s.
sparklogs.episode.presence_seen_countintegercountSamples containing this subject during its tracked lifetime. Present only with presence_observed_count, the denominator.
sparklogs.episode.presence_observed_countintegercountSamples in which this subject could have been observed. Denominator for presence_seen_count.
sparklogs.episode.recovery_attemptsintegercountNumber of recovery attempts during this episode. An attempt does not establish that recovery completed.
sparklogs.episode.recovering_total_sintegersecondsHow long, in total observed time, the episode has spent recovering.
sparklogs.episode.last_transition_tsstringtimestampWhen this episode last emitted a transition, whatever it was. Answers how long it has been at this severity without scanning its other events.
sparklogs.episode.peak_severityintegerThe highest severity this episode has carried, as the SparkLogs integer level (the scale thresholds bars use for severity), so one closing event can say it peaked here and lasted this long. The integer form starts in 1.13.0; agents 1.11.2 through 1.12.x sent the lowercase severity name.
sparklogs.episode.pending_transitionstringThe transition a debounce window is currently accumulating toward. Present only while one is running, and what explains readings sitting under the severity the episode still asserts.
sparklogs.episode.pending_since_tsstringtimestampWhen the running debounce window started holding. Rides with the transition it is accumulating toward or not at all.
sparklogs.episode.replaced_idstringThe episode this one superseded, linking a chain where one condition gave way to another on the same subject. Only episodes opened before 1.13.0 carry it.
sparklogs.episode.cleared_tsstringtimestampWhen the condition stopped being true. Closure only.
sparklogs.episode.clear_time_basisstringobserved: the agent watched the condition clear; every recovery carries it. unobserved_gap: only on an administrative ended closure, whose time is clamped back to the last confirmation.
sparklogs.episode.end_reasonstringWhy tracking stopped rather than why the condition cleared, for an episode that ended without recovering. subject_removed: the subject went away. detector_disabled, module_removed, condition_removed: the condition was turned off or retired. evidence_unreadable: the input it decides on kept failing to read. no_longer_applicable: the condition stopped applying to the subject for its exit dwell, such as a network adapter that disconnected.
sparklogs.episode.input_topicsstring_arrayThe topics whose captures the condition decides on, its own topic first.
sparklogs.episode.thresholdsobjectWhat this report measured, so one event stands alone. legs: one per field the condition decides on, each with field, kind (threshold, flag, one_of or custom), value when measured, unit, deciding, and clock (wall or observed) only when the value itself grows with time. A count over a trailing window adds window_s and window_clock. A threshold leg lists bars in order: enter, each escalate from mildest to worst, then clear; each bar has kind, op, value in the leg's unit, and severity (the unclamped level reached) except on clear; when several legs carry a bar at one severity, each of those bars has combine (all or any), the same on all of them. A flag leg has opens_when; a one_of leg has opens_in when a rung names the opening codes and clears_in when the exit names the recovering codes, both in the codes value uses. custom legs are plain facts. A leg that counts discrete events can add counts: reason, the occurrence reason whose events the count covers, with instance, the counted events' sparklogs.instance, when they are this episode's subject's (no instance means every event of that reason on the device); and last_ts, when the newest counted event happened, present while value is above zero. Occurrence events go back only as far as the reason's lookback, and are sent only while the pack keeps that occurrence on, so there can be fewer of them than the count says. A count of Windows events the agent reads itself carries event_reasons in place of reason: always a list, the reason codes the source pack gives those events' log rows, which can also cover events the count leaves out. lql_filter, when present, is an LQL expression that narrows those log rows to the counted events, to be ANDed, parenthesized, with the reason, instance and time scope, never in place of it. Some of those events, such as out-of-memory crashes, are also reported as a broader occurrence. clear_combine (all or any) appears when several legs own recovery. dwell (toward, elapsed_s, required_s, clock: observed) appears while a debounce window runs. held_escalation (from, band, after_s, elapsed_s) appears on a condition that rises from severity from to band after holding from or worse for after_s observed seconds; elapsed_s is the observed time held there so far, 0 while under from. Show it as time held toward band, never as a projected time. held_escalations carries the same progress objects for multiple targets sharing one held clock; it replaces the singular object only for a multi-target condition.