Caddy.Telemetry (Caddy v2.3.4)

Copy Markdown 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
  • :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.