Skip to main content

Logging

The bridge emits structured slog events with a stable component and event field on every record. LOG_FORMAT=json is the default for cluster ingestion; LOG_FORMAT=text is available for local debugging.

Common Fields

FieldMeaning
componentStable subsystem name such as process, public_http, jwks_cache, tsnet_runner, leader_election, or tailscale_auth.
eventStable event name for alerting and parsing.
msgHuman-readable text only; do not parse it.

Event Catalog

EventComponentKey fields
process_startprocesshostname, funnel_addr, issuer_host, log_format, log_level, source_ip_allowlist_enabled, source_ip_allowlist_cidr_count
process_stopprocessresult, optional error_kind, optional error
health_server_starthealth_httpaddr
http_requestpublic_httproute, path, method, status, latency_ms, source_present, optional source_ip, decision
jwks_prime_successjwks_cachekid_count, kids
jwks_prime_failurejwks_cacheerror_kind, error, optional status_code, optional body_size_bytes
jwks_refresh_successjwks_cachekid_count, kids
jwks_refresh_failurejwks_cacheerror_kind, error, optional status_code, optional body_size_bytes
jwks_serving_stalejwks_cachestale_remaining_seconds
tsnet_state_changetsnet_runnerstate
tsnet_start_failuretsnet_runnererror_kind, error, optional state
issuer_host_verifiedtsnet_runnerexpected_host, cert_domains, cert_domain_count
issuer_host_mismatchtsnet_runnerexpected_host, cert_domains, cert_domain_count
public_listener_restarttsnet_runnerreason
leader_election_initializedleader_electionlease_name, namespace, identity, lease_duration, renew_deadline, retry_period
leadership_acquiredleader_electionidentity, lease_name
leadership_lostleader_electionidentity, lease_name
leader_observedleader_electionidentity, leader_identity
leader_runner_exitleader_electionerror_kind, error
auth_key_mint_successtailscale_authtags, tag_count
auth_key_mint_failuretailscale_autherror_kind, error

Decisions

http_request.decision uses the following values:

  • served
  • denied_missing_source
  • denied_cidr
  • jwks_not_ready
  • method_not_allowed
  • not_found

Example Queries

  • Allowlist denials: event=http_request decision=denied_cidr
  • Missing Funnel source metadata: event=http_request decision=denied_missing_source
  • Repeated JWKS refresh failures: event=jwks_refresh_failure
  • Stale JWKS still being served: event=jwks_serving_stale
  • Auth-key mint problems: event=auth_key_mint_failure
  • Issuer host drift: event=issuer_host_mismatch
  • Suspicious unknown path probes: event=http_request route=unknown

Redaction Rules

The bridge does not log:

  • OAuth client secrets
  • Minted Tailscale auth keys
  • Kubernetes service-account bearer tokens
  • Authorization headers
  • Raw request bodies or query strings
  • Raw JWKS key material (n, e)
  • Raw upstream response bodies