HealthEvent Data Model Reference
This document is the authoritative reference for the HealthEvent data model — the
fundamental unit of data that flows through NVSentinel. Every fault detected by any
health monitor is represented as a HealthEvent, and every downstream module
(quarantine, drain, remediation, export) consumes and enriches this structure.
Audience: Developers building custom health monitors, writing CEL quarantine rules, integrating external systems via the event exporter, or debugging the fault-remediation pipeline.
Document type: Reference. Expected lifetime: same as the proto schema it describes. This document must be updated in the same PR that modifies
data-models/protobufs/health_event.protoordata-models/protobufs/external_remediation.proto. If you change a field, enum value, or status transition in those files, update the corresponding section here before merging.
Table of Contents
- Where the Model Lives
- Core Message: HealthEvent
- Field Reference
- RecommendedAction Enum
- ProcessingStrategy Enum
- BehaviourOverrides
- Entity (Impacted Resources)
- Storage Wrapper: HealthEventWithStatus
- HealthEventStatus Lifecycle
- CRD Projection: HealthEventResource
- External Remediation Request
- Tracing Correlation
- Examples
Where the Model Lives
Core Message: HealthEvent
Field Reference
If you are building a custom health monitor, the table below shows what happens when a field is omitted or left at its zero value. See Writing a Health Monitor for the end-to-end walkthrough.
RecommendedAction Enum
Directs the fault-remediation module on what repair action to trigger.
Routing logic (in fault-remediation):
The effective action name is looked up in the Helm-configured maintenance.actions
map to find the CRD template, API group, kind, and completion condition to create.
ProcessingStrategy Enum
Controls whether downstream modules (fault-quarantine, node-drainer, fault-remediation) may modify cluster state in response to this event.
Where strategy is enforced:
- Platform connector normalizes
UNSPECIFIED→EXECUTE_REMEDIATIONat ingestion. - Deduplication transformer downgrades repeated unhealthy events to
STORE_AND_ANALYSEwithin a suppression window (see ADR-039). - Fault-quarantine skips events where
processingStrategy != EXECUTE_REMEDIATION. - Health-events-analyzer queries for
STORE_AND_ANALYSEevents specifically.
BehaviourOverrides
Per-event overrides that let a health monitor bypass default pipeline behavior.
quarantineOverrides
drainOverrides
Use case: Debug/test events (e.g. fault-injection demos) set
drainOverrides.skip = trueto exercise the remediation pipeline without waiting for pod eviction.
Entity (Impacted Resources)
Identifies specific hardware entities affected by the fault.
The entitiesImpacted array is propagated to:
- Tracing: each entity becomes a span attribute
health_event.entities_impacted.<type>. - Event exporter: serialized into the CloudEvents payload.
- GPU Reset: the janitor uses GPU UUIDs from entities to target the reset CRD.
Storage Wrapper: HealthEventWithStatus
Events are stored in MongoDB (or PostgreSQL) wrapped in a status envelope:
The HealthEvent portion is immutable after ingestion (except for dedup
strategy downgrade). The HealthEventStatus portion is progressively enriched
by each downstream module as it processes the event.
HealthEventStatus Lifecycle
Each field is written by a specific module at a specific pipeline stage:
OperationStatus values (userPodsEvictionStatus.status)
Status progression diagram
CRD Projection: HealthEventResource
For Kubernetes-native storage (experimental), the HealthEvent maps to a CRD:
The spec field holds the immutable HealthEvent; the status field holds the
progressively-enriched HealthEventStatus. This mirrors the standard Kubernetes
spec/status convention.
External Remediation Request
When the configured remediation action produces an
ExternalRemediationRequest (ExtRR) — for any recommendedAction, not only
CUSTOM — the full HealthEvent is embedded in the CRD spec:
The ExtRR is cluster-scoped (like RebootNode, TerminateNode, GPUReset CRDs) and carries status conditions for coordination with external repair systems:
See ADR-040 for the full design.
Tracing Correlation
Each module that processes an event writes its span ID into
HealthEventStatus.spanIds[serviceName]. This enables end-to-end trace correlation:
The span ID written to the datastore becomes the parent span for the next module’s processing, creating a causal chain across independent services that communicate only through MongoDB change streams.
See Distributed Tracing for setup and querying.
Examples
GPU XID fault (fatal, triggers reboot)
Recovery event (un-quarantine)
Custom remediation with drain skip
Related Documentation
- Data Flow — end-to-end sequence diagrams
- Platform Connectors — ingestion and validation
- Fault Quarantine — CEL rule evaluation
- Node Drainer — eviction strategies
- Fault Remediation — CRD creation and action routing
- Event Exporter — CloudEvents transformation
- ADR-021: Health Event Property Overrides
- ADR-025: Processing Strategy
- ADR-039: Health Event Deduplication