Observability

Logging

Structured logging via logrus. Choose the format:

-e LOG_FORMAT=json   # recommended in production
-e LOG_LEVEL=info

Each request is logged with a request ID (from the request_id query parameter if provided, else generated), method, path, status, duration, and response size. The /_status route logs at debug level to reduce noise.

Tracing (OpenTelemetry)

Disabled by default. Enable and point at your collector:

-e TRACING_ENABLED=true
-e OTEL_COLLECTOR_PROTOCOL=grpc
-e OTEL_COLLECTOR_GRPC_ADDR=otel-collector:4317
-e TRACING_SERVICE_NAME=pdf-server

Spans cover the HTTP request, the render service, HTML rendering (body/header/ footer), and the CDP interactions. Trace context is propagated to the internal render server so browser-side requests join the same trace. The /_status span is excluded by default (override with --tracing-keep-status-trace).

Propagators are configurable (--tracing-propagators / OTEL_PROPAGATORS): tracecontext, baggage, b3, b3multi, jaeger, xray, ottrace.

Status

  • GET /_status — pool stats and browser metadata (borrows a browser).
  • GET /_metadata — version info (cheap; good for liveness).

See Status & metadata.