Enable and Operate Event Ledger
Event Ledger is an optional self-managed control-plane service that records function deployment events from SIS and registered compute planes. The control plane service and the NVCA collector are enabled separately.
See Event Ledger for the event model, query workflow, API, and storage semantics.
Deployment flow
Enabling Event Ledger has three parts:
- Deploy Event Ledger and its gateway route on the control plane. This also enables SIS v3 event publishing.
- Enable the NVCA OTel collector on each compute plane that should publish Kubernetes and ICMSRequest events.
- Generate a dedicated Event Ledger API key for each operator or automation identity that reads events.
A registered compute plane does not publish NVCA events until its collector is explicitly enabled.
Prerequisites
- A deployed self-managed NVCF control plane with Cassandra, OpenBao, API Keys, SIS, and Gateway API ingress available.
- The Event Ledger chart and image from the selected stack release mirrored to the configured chart and image repositories.
- The optional
nvcf-otel-collectorimage mirrored before the compute-plane collector is enabled. - A registered compute plane running a compatible NVCA Operator release.
- Network reachability from each compute plane to Event Ledger.
The control-plane stack provisions these dependencies:
- Cassandra stores Event Ledger data in the
event_ledgerkeyspace. The Cassandra migrations create the schema. - OpenBao provides the Event Ledger JWT role and service secret paths.
- The API Keys service evaluates Event Ledger read keys.
The default self-hosted artifact manifest does not include the optional NVCA
Event Ledger collector image. Obtain the collector image selected by the NVCA
Operator release and mirror it with the other compute-plane images. The
compute-plane stack reads the tag from
global.nvcaOperator.selfManaged.otelCollector.imageTag and defaults the
repository to:
See Image Mirroring for registry workflows.
Enable the control-plane service
The current base environment enables Event Ledger. Set the value explicitly in
deploy/stacks/self-managed/environments/<environment-name>.yaml so the
environment records the intended behavior:
This value controls:
- The
event-ledgerHelm release in thenvcfnamespace. - The
events.<domain>HTTPRoute. - SIS v3 Event Ledger publishing.
- The internal service address used by control-plane producers.
Apply the control-plane environment using the same Helmfile installation path used for the rest of the stack. A full apply updates Event Ledger, SIS, and the gateway route together:
Verify the control plane
Wait for the deployment and inspect the Service:
Forward the in-cluster health endpoint in one terminal:
Then check the endpoint from another terminal:
Verify the gateway route and external health endpoint:
The route hostname is events.<domain>, and its Accepted condition should be
True.
Confirm that SIS event publishing is enabled:
The value must be "true". If the line is missing or the value is "false",
SIS does not publish to the v3 API.
Enable gRPC proxy session events
The gRPC proxy can publish an event each time a worker attaches to a session. These events are off by default. Event Ledger stores one record per attachment and does not expire them yet, so storage grows with session count. To enable them, set:
Applying the change restarts the grpc-proxy Pods. Set enabled: false under
grpcProxyEvents to stop these events without removing Event Ledger.
Enable the compute-plane collector
Configure each compute-plane environment separately in
deploy/stacks/nvcf-compute-plane/environments/<environment-name>.yaml:
The default collector repository follows global.image. Set an explicit
repository only when the collector is mirrored somewhere else:
Keep imageTag at the value selected by the compute-plane stack or its NVCA
Operator chart. Do not choose the tag independently of the operator release.
Colocated control plane and compute plane
When the control plane and compute plane share a Kubernetes cluster, leave
eventLedgerServiceURL empty. NVCA uses this in-cluster endpoint:
Split control plane and compute plane
When the compute plane runs in another cluster, set a URL it can resolve and reach. Prefer the Event Ledger gateway hostname so the correct route is selected without a manual Host header:
The URL is a base URL. NVCA appends /v3/ledger/k8s-events for the OTLP export.
Configure DNS, firewalls, and proxies so Pods in the compute plane can reach it.
The collector sends the NVCA projected service account token (PSAT) on every
export, so plain HTTP exposes that token on the network. The default Gateway
from the quickstart has no HTTPS listener. When the compute plane reaches the
control plane over a network you do not trust, terminate TLS at the Gateway,
attach the Event Ledger route to that listener, and use an https:// URL. The
token can write events but cannot read them.
Apply the compute-plane environment:
Verify the collector configuration
Verify that the registered backend enables the collector:
The selected NVCFBackend must contain:
Wait for NVCA to roll out:
The collector runs as a restartable init container named
nvca-otel-collector. Inspect its image and status:
Verify the endpoint and projected-token authentication settings:
For a colocated self-managed deployment, the output includes:
The projected service account token (PSAT) is verified through SIS. Event
Ledger binds the verified cluster identity to every NVCA event. It fills a
missing cluster_id from that identity and rejects a conflicting cluster ID.
Verify event reads
Configure the CLI with the external Event Ledger route. When the CLI connects to a gateway address, set both values:
When base_http_url begins with api., the CLI can derive the sibling
events. URL. An explicit event_ledger_url is clearer for self-managed
environments and is required when that derivation is not possible.
Generate a dedicated read key:
Deploy a function, wait for the deployment to begin, and query its version ID:
SIS events should appear when the control-plane service is enabled. NVCA Pod and ICMSRequest events require the collector on the compute plane. See Event Ledger for the complete query workflow.
Operations
Prometheus metrics are available at this in-cluster endpoint:
Event Ledger API keys expire after 24 hours by default. Rotate a read key with:
Use --expires-in when automation needs a different lifetime.
Troubleshooting
Event Ledger release is absent
Check the resolved environment value and Helm releases:
Confirm that addons.eventLedger.enabled is true in the final environment.
Event Ledger Pod does not start
Inspect the deployment, Pod, and recent namespace events:
Common causes include an unavailable image, missing pull credentials, failed OpenBao secret injection, or unavailable Cassandra schema and credentials.
Gateway returns 404
Check that the request uses events.<domain> as its DNS name or Host header.
Then inspect the route:
The route must be accepted and point to service/event-ledger in namespace
nvcf on port 8080.
CLI reports that no Event Ledger key is configured
Generate the dedicated key:
Function and task API keys use different audiences and are not used as a fallback.
CLI receives 401 or 403
Generate a fresh Event Ledger key and confirm that it has the
fnds:getEvents scope. A key minted for the NVCF function or NVCT task service
has the wrong audience.
Stats are empty
Check these conditions in order:
- The supplied function version ID is correct.
- SIS v3 event publishing is enabled.
- The NVCA collector is enabled for the compute plane.
- The collector image is present in the configured registry.
- The collector endpoint is reachable.
- The collector logs do not contain authentication or export errors.
Inspect collector logs with:
Events are empty but stats show a context
The context flags must reproduce the canonical context exactly. Copy every
field from contexts[].context. Do not add fields that are absent. Running
stages events list with no context flags reads only the empty context.
Attribute filtering returns no events
First query the exact context with --json and inspect
events[].details.attributes. Attribute filtering is exact, applies only to
that context, and requires both --attribute-key and --attribute-value.
Disable Event Ledger
Disable collectors before removing the control-plane service so NVCA does not continue exporting to an unavailable endpoint.
For every compute plane, set:
Apply each compute-plane environment. Then set the control-plane value:
Apply the control-plane environment. This removes the Event Ledger release and route and disables SIS publishing. It does not remove existing records from Cassandra. Follow your Cassandra backup and retention policy before removing data.