Caddy.Telemetry (Caddy v2.3.1)

View Source

Telemetry integration for Caddy reverse proxy server monitoring.

Provides metrics and events for configuration changes, server lifecycle, API operations, and performance monitoring.

Summary

Functions

Attaches a telemetry handler for common Caddy events.

Detaches a telemetry handler.

Emits a telemetry event for adaptation operations.

Emits a telemetry event for API operations.

Emits a telemetry event for configuration changes.

Emits a telemetry event for ConfigManager operations.

Emits a telemetry event for external mode operations.

Emits a telemetry event for file operations.

Emits a telemetry event for logging operations.

Emits a telemetry event for metrics operations.

Emits a telemetry event for Resources operations.

Emits a telemetry event for server lifecycle events.

Emits a telemetry event for application state changes.

Emits a telemetry event for configuration validation.

Returns list of all Caddy telemetry events.

Emits a debug level log event.

Emits an error level log event.

Emits an info level log event.

Emits a warning level log event.

Starts telemetry poller for periodic metrics.

Functions

attach_handler(handler_name, events, fun)

@spec attach_handler(atom(), list(), function()) :: :ok | {:error, term()}

Attaches a telemetry handler for common Caddy events.

detach_handler(handler_name)

@spec detach_handler(atom()) :: :ok

Detaches a telemetry handler.

emit_adapt_event(result, measurements \\ %{}, metadata \\ [])

@spec emit_adapt_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for adaptation operations.

emit_api_event(event_type, measurements \\ %{}, metadata \\ [])

@spec emit_api_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for API operations.

emit_config_change(event_type, measurements \\ %{}, metadata \\ [])

@spec emit_config_change(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for configuration changes.

emit_config_manager_event(event_type, measurements \\ %{}, metadata \\ [])

@spec emit_config_manager_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for ConfigManager operations.

Event Types

  • :sync_to_caddy - When syncing in-memory config to running Caddy
  • :sync_from_caddy - When pulling config from running Caddy
  • :drift_check - When checking for config drift
  • :rollback - When rolling back to previous config
  • :apply - When applying runtime config directly
  • :validate - When validating config

Examples

Caddy.Telemetry.emit_config_manager_event(:sync_to_caddy, %{duration: 100}, %{success: true})

emit_external_event(event_type, measurements \\ %{}, metadata \\ [])

@spec emit_external_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for external mode operations.

Event Types

  • :init - When external server initializes
  • :health_check - When health check is performed
  • :command_executed - When a system command is executed
  • :config_pushed - When configuration is pushed to external Caddy
  • :status_changed - When Caddy status changes (running/stopped/unknown)
  • :terminate - When external server terminates

Examples

Caddy.Telemetry.emit_external_event(:health_check, %{duration: 50}, %{status: :running})
Caddy.Telemetry.emit_external_event(:command_executed, %{duration: 100}, %{command: :restart})

emit_file_event(operation, measurements \\ %{}, metadata \\ [])

@spec emit_file_event(atom(), map(), keyword()) :: :ok

Emits a telemetry event for file operations.

emit_log_event(level, measurements \\ %{}, metadata \\ [])

@spec emit_log_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for logging operations.

emit_metrics_event(event_type, measurements \\ %{}, metadata \\ [])

@spec emit_metrics_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for metrics operations.

Event Types

  • :collected - When metrics are successfully fetched and parsed
  • :fetch_error - When fetching metrics fails
  • :poller_started - When the metrics poller starts
  • :poller_stopped - When the metrics poller stops

Examples

Caddy.Telemetry.emit_metrics_event(:collected, %{duration: 50}, %{metric_count: 25})

emit_resources_event(event_type, measurements \\ %{}, metadata \\ [])

@spec emit_resources_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for Resources operations.

Event Types

  • :get - When reading a resource
  • :set - When updating a resource
  • :delete - When deleting a resource
  • :error - When an operation fails

Examples

Caddy.Telemetry.emit_resources_event(:get, %{duration: 50}, %{resource: :http_servers})

emit_server_event(event_type, measurements \\ %{}, metadata \\ [])

@spec emit_server_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for server lifecycle events.

emit_state_change_event(from_state, to_state)

@spec emit_state_change_event(atom(), atom()) :: :ok

Emits a telemetry event for application state changes.

Event: [:caddy, :state, :changed]

This event is emitted whenever the application state machine transitions from one state to another.

Metadata

  • :from - The previous state
  • :to - The new state

Examples

Caddy.Telemetry.emit_state_change_event(:unconfigured, :configured)

emit_validation_event(result, measurements \\ %{}, metadata \\ [])

@spec emit_validation_event(atom(), map(), keyword() | map()) :: :ok

Emits a telemetry event for configuration validation.

list_events()

@spec list_events() :: list()

Returns list of all Caddy telemetry events.

log_debug(message, metadata \\ [])

@spec log_debug(String.t(), keyword() | map()) :: :ok

Emits a debug level log event.

Examples

Caddy.Telemetry.log_debug("Server starting", module: __MODULE__)

log_error(message, metadata \\ [])

@spec log_error(String.t(), keyword() | map()) :: :ok

Emits an error level log event.

Examples

Caddy.Telemetry.log_error("Failed to start server", error: reason)

log_info(message, metadata \\ [])

@spec log_info(String.t(), keyword() | map()) :: :ok

Emits an info level log event.

Examples

Caddy.Telemetry.log_info("Configuration loaded", config_size: 10)

log_warning(message, metadata \\ [])

@spec log_warning(String.t(), keyword() | map()) :: :ok

Emits a warning level log event.

Examples

Caddy.Telemetry.log_warning("Deprecated function used", function: :old_api)

start_poller(interval_ms \\ 30000)

@spec start_poller(non_neg_integer()) :: {:ok, pid()} | {:error, term()} | :ignore

Starts telemetry poller for periodic metrics.