Enable the exporter
Set these values on backend, worker, and relay processes, then restart them:/v1/logs and sends OTLP/HTTP
protobuf. For an authenticated collector, set OPS_TELEMETRY_HEADERS through the
existing secret configuration, for example Authorization=Bearer <collector-token>.
Do not put credentials in the endpoint URL. Use TLS for traffic outside the trusted
cluster network.
Both platform Helm charts accept these settings in extraEnv; put authentication
headers in secrets. With SECRETS_SOURCE=FILE, add the values to the encrypted
internal configuration instead. In an environment-backed Docker Compose deployment,
pass the same variables through each service’s environment section.
Minimal collector for staging verification
Run an OpenTelemetry Collector reachable only inside the test namespace. A logs pipeline with the debug exporter is sufficient to inspect synthetic test events:ops-collector, apply the Helm
settings above, and read the collector pod logs. For ongoing operation, replace
debug with an exporter to your logs store and configure retention and restricted
operator access. Event attributes include tenant, workspace, user, and resource
identifiers; they must not be exposed through a public receiver or dashboard.
Event catalogue
Every event name supported by this implementation is listed below. All records use instrumentation scopenoxus.ops, severity INFO, a UTC event timestamp, and an
empty body. Resource metadata includes service.name (the deployment name),
deployment.environment.name, and OpenTelemetry SDK metadata. Optional attributes
are omitted when their source identity is unavailable.
Billing lifecycle
These events fire whenBillingManager.register_event() accepts the registration
attempt. They carry these attributes:
Case activity
A newly insertedCaseActivity row emits after its outer database transaction
commits. Every event carries noxus.case.id and noxus.case.activity_type; it also
carries noxus.user.id when the activity has an actor. Titles, comments, email
contents, field values, and activity payloads are excluded.
task_failed is a legacy accepted activity value. Current task writers use
automation_failed; old stored rows are not replayed into the ops stream.
The custom classification stays fixed and never becomes a tenant-defined event name.
Agent insights
A newly insertedInsightEventRow emits after its outer database transaction
commits. Attributes are noxus.tenant_id, noxus.group_id, and
noxus.insight.type, plus noxus.conversation.id and noxus.agent.id when present.
Insight keys, labels, scores, analysis text, and payloads are excluded.
Classified failures and API keys
Credential permanence is a Boolean classification:
true means reconnection is
required; false means the failure was not classified as permanent. Integration
and provider keys identify registered integration types, not customer credential
names. Provider error text and tokens are excluded.
The SQL denial reason is one of parse_error, multi_statement, not_select,
not_write, schema_denied, table_denied, function_denied, or write_denied.
SQL text and database error messages are excluded.
Billing limit type is internal or license. Constraint type uses the enum member
name: AI_OPERATIONS, MESSAGES_SENT, KB_FILES_UPLOADED, TOKENS, WORKFLOWS,
TRIGGER_RUNS, NCS_SEARCH, or NCS_SCRAPE. Usage amounts and limits are excluded.
Coverage and delivery semantics
Run, node, model, and token usage remain in the existing Prometheus instruments and billing accounting. Successful table queries produce operation/row/duration metrics; only instrumented guard denials produce an ops event. Plugin installation failures, sandbox OOM, and model-health suspension/recovery are follow-up coverage; this implementation does not emit dedicated events for them. These are best-effort diagnostics, not a durable audit or accounting log. A crash or full exporter queue can lose events. Billing registration events describe the registration attempt, not successful database persistence;noxus.event.id supports
consumer deduplication. Case/insight events are emitted only after the outer commit;
rolled-back savepoints and transactions do not emit. Existing database history is
not backfilled.
Verify delivery
- Enable the exporter and start the collector as described above.
- Create a temporary API key through the workspace’s API keys page.
- Read the collector pod logs and find
noxus.api_key.created. Confirm the record has a current timestamp, an empty body, and the expected key and tenant IDs. The secret key value must be absent. - Revoke the temporary key through the same page and confirm
noxus.api_key.revokedarrives with the same key ID. - Allow for the configured export interval and the collector’s batch delay before treating an event as missing.
Troubleshooting
- No events: verify the flag and endpoint in every producer, restart after changes, and confirm the collector has a logs pipeline on port 4318.
- Exporter errors: check collector health, network policy, HTTP path, TLS, and authentication. A trace-only receiver is insufficient.
- Missing run traces: inspect the run span capture separately. It uses
SimpleSpanProcessorand Redis/cold storage; the ops collector is unrelated.