Horopter

Configuration

Every environment variable Horopter's binaries read, with its default and meaning.

Every Horopter binary is configured by environment variables, read once at startup. A daemon given a value that does not parse, or is out of range, stops at startup with an error naming the variable and the value.

Daemons and Database Tools

variabledefaultmeaning
DATABASE_URLnone; requiredPostgreSQL connection string, read by both daemons, horopter-migrate and horoctl. --dsn overrides it. Its pool_max_conns sets the connection pool, max(4, NumCPU) otherwise
HOROPTER_ADDR0.0.0.0:8080 on ingress, 0.0.0.0:8081 on egressthe daemons' listen address. --addr overrides it
HOROPTER_LOG_LEVELinfothe minimum level logged, by both daemons, horopter-migrate, horoctl migrate and horopter-flux: debug, info, warn or error, case-insensitive

Ingress

Read by horopter-ingress.

variabledefaultmeaning
HOROPTER_INGRESS_MAX_EVENT_ATTRIBUTE_BYTES4096the largest attribute map accepted, in bytes of compact JSON without HTML escaping; from 1 to 1048576. See Attribute Size
HOROPTER_INGRESS_ALLOW_LOCUS_PREFIXED_REFfalseaccept a correlation_ref whose first segment is the credential's own locus, for every producer on this ingress. See The Append Response

Egress

Read by horopter-egress. What each one governs is Read Admission.

variabledefaultmeaning
HOROPTER_EGRESS_READ_MEMORY_BYTES268435456 (256 MiB)the memory pool reads reserve against; a whole number, at least 1048576
HOROPTER_EGRESS_ADMISSION_WAIT500mshow long a read waits at each admission gate before it is shed; a Go duration, above 0 and at most 10s
HOROPTER_EGRESS_DB_WAIT_THRESHOLD100msthe database connection wait above which a read counts as congested and halves the concurrency limit; a Go duration, above 0

Telemetry

Read by horopter-ingress, horopter-egress, horopter-migrate and horoctl migrate. How to use them is Observe Horopter.

variabledefaultmeaning
OTEL_SDK_DISABLEDfalsetrue turns off all telemetry: traces, OTLP metrics and the /metrics listener
OTEL_SERVICE_NAMEthe binary's namethe service.name every span and metric is reported with. horoctl migrate reports as horopter-migrate
OTEL_EXPORTER_OTLP_ENDPOINTunsetthe OTLP/HTTP collector, e.g. http://otel-collector:4318. Setting it turns on tracing and OTLP metrics; unset, both are off
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTunsetthe traces endpoint, e.g. http://otel-collector:4318/v1/traces. Setting it turns on tracing, and it takes precedence over the general endpoint
OTEL_EXPORTER_OTLP_METRICS_ENDPOINTunsetthe metrics endpoint, e.g. http://otel-collector:4318/v1/metrics. Setting it turns on OTLP metrics, and it takes precedence over the general endpoint
OTEL_EXPORTER_PROMETHEUS_HOSTlocalhostthe host the /metrics listener binds, on the daemons
OTEL_EXPORTER_PROMETHEUS_PORT9464the /metrics listener's port, on both daemons
HOROPTER_TRACE_DISABLEemptya comma-separated list of tracing areas to silence: http, the server span of each request; store, the span of each store operation; sql, the span of each SQL statement. An unknown name is accepted and silences nothing

The OpenTelemetry SDK reads further variables itself, among them OTEL_RESOURCE_ATTRIBUTES, OTEL_METRIC_EXPORT_INTERVAL, OTEL_METRIC_EXPORT_TIMEOUT, OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE and the rest of OTEL_EXPORTER_OTLP_*. Horopter does not validate them; see the OpenTelemetry SDK configuration.

horo

variabledefaultmeaning
HOROPTER_EGRESS_URLnoneegress's base URL, for horo changes and horo show. --egress-url overrides it
HOROPTER_EGRESS_KEYnonea key with read, for horo changes and horo show. --key overrides it
HOROPTER_INGRESS_URLnoneingress's base URL, for horo run, horo event and horo refold. --ingress-url overrides it
HOROPTER_INGRESS_KEYnonea key with append, for horo run and horo event. --key overrides it
HOROPTER_ADMIN_KEYnonea key with admin, for horo refold only. --key overrides it
HORO_RUN_REPORTnonethe file horo run writes its report to. --report overrides it

horopter-flux

variabledefaultmeaning
HOROPTER_INGRESS_URLnone; requiredingress's base URL
HOROPTER_INGRESS_KEYnone; requireda key with append, issued without --subject-pattern

It exits with status 2 when either is empty. Outside a cluster, it reads its Kubernetes client configuration from KUBECONFIG, as client-go does.

On this page