This page lists every configuration key accepted by genai-otel-bridge, with types, defaults, and a brief description. The generated source of truth with inline comments is deploy/helm/values.yaml. The Go struct definitions and validation rules are in internal/config/config.go.
configmap — watermarks in a Kubernetes ConfigMap (required with coordinator=lease). file — local file (dev only; unsafe with coordinator=lease). dynamodb — DynamoDB item (ECS/AWS).
ha.dynamodb.table
string
(required when coordinator|checkpoint is dynamodb)
DynamoDB table backing both the leader lock and the checkpoint (one table for both).
ha.dynamodb.region
string
AWS SDK default (AWS_REGION env)
AWS region override.
ha.dynamodb.endpoint
string
—
Optional endpoint override (e.g. dynamodb-local or a VPC endpoint).
ha.dynamodb.lock_name
string
genai-otel-bridge-leader
Leader-lock item key.
ha.dynamodb.key_prefix
string
—
Optional prefix prepended to every item key (shared-table isolation).
ha.dynamodb.lease_duration
duration
15s
Leader lease TTL. Must be greater than renew_deadline.
ha.dynamodb.renew_deadline
duration
10s
Deadline for the leader to renew its lease before giving it up.
ha.dynamodb.retry_period
duration
2s
Poll interval for lock acquisition/renewal retries. Must be > 0.
Max distinct label-sets per metric name. Over-budget series are dropped and counted as genai_otel_bridge_guard_dropped_total.
governance.max_dpm
int
1
Hard cap on data points per minute per series (both planes). Drives the product-plane LWW coalesce and clamps the self-obs PeriodicReader interval.
governance.max_catchup_per_tick
int
1
Max windows drained per cadence period when a loop is backlogged. 1 = no catch-up acceleration (the default).
governance.max_stream_label_keys
int
15
Max OTLP resource attributes a single logs loop may contribute as Loki stream labels. The Grafana Cloud Loki default ceiling is 15; the bridge fails fast at startup if a loop would exceed it.
governance.allow_label_keys
[]string
[]
Extra content-free attribute keys added to the label allow-list on top of each source's declared keys. Content-floor keys (message bodies, PII) are rejected at startup.
Override User-Agent (required for some endpoints, e.g. LangSmith behind a WAF).
http.allow_hosts
[]string
—
Hostname allow-list for the egress/SSRF guard on this source's outbound client. Empty ⇒ any host that passes the IP guard; non-empty restricts requests (incl. redirects) to exactly these hosts, so base_url's host must be included.
http.allow_private
bool
false
Allow non-loopback, non-https base URLs (for in-VPC sources).
api_key_use_cases
list
—
Maps human use-case labels to Portkey API key UUIDs. See the Portkey guide.
The window must satisfy window ≥ cadence × 1.2 + bucket_settle to ensure no time is left uncovered between jittered ticks. The config validator enforces this and reports the constraint in the error message.
The config validator (internal/config/config.go) enforces these rules at startup:
emit.telemetry.otlp.endpoint is required.
queue.emit_workers must be exactly 1.
ha.checkpoint=file with ha.coordinator=lease is rejected.
ha.coordinator=dynamodb requires ha.checkpoint=dynamodb (they share one table).
ha.dynamodb.table is required whenever ha.coordinator or ha.checkpoint is dynamodb.
ha.dynamodb.lease_duration must be greater than ha.dynamodb.renew_deadline, and ha.dynamodb.retry_period must be > 0 (checked when ha.coordinator=dynamodb).
source_instance must not contain /.
source.base_url must be https:// unless http.allow_private=true.
auth.header and auth.value are required for every enabled source.
cadence must be ≥ 10s.
window must be ≤ 55m and satisfy the cadence×1.2+bucket_settle lower bound.
bootstrap_lookback must be ≤ max_backfill.
governance.max_dpm, governance.per_metric_cardinality_budget, governance.max_catchup_per_tick, governance.max_stream_label_keys must be ≥ 0.
log.format must be logfmt, json, or empty (defaults to logfmt).
log.level must be debug, info, warn, error, or empty (defaults to info).