Module: LanguageOperator::Agent::Telemetry
- Defined in:
- lib/language_operator/agent/telemetry.rb
Overview
OpenTelemetry configuration for agent runtime
Initializes distributed tracing and telemetry for language operator agents. Reads configuration from environment variables and gracefully handles errors.
Class Method Summary collapse
-
.configure ⇒ void
Configure OpenTelemetry for the agent.
Class Method Details
.configure ⇒ void
This method returns an undefined value.
Configure OpenTelemetry for the agent
Reads configuration from environment variables:
- OTEL_EXPORTER_OTLP_ENDPOINT: OTLP endpoint URL (required)
- TRACEPARENT: W3C trace context for distributed tracing
- AGENT_NAMESPACE: Kubernetes namespace
- AGENT_NAME: Agent name
- AGENT_MODE: Agent operating mode
- HOSTNAME: Pod hostname
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/language_operator/agent/telemetry.rb', line 28 def configure return unless ENV.fetch('OTEL_EXPORTER_OTLP_ENDPOINT', nil) # Configure custom error handler for detailed logging OpenTelemetry.error_handler = lambda do |exception: nil, message: nil| if exception warn "OpenTelemetry error: #{} - #{exception.class}: #{exception.}" warn exception.backtrace.first(5).join("\n") if exception.backtrace else warn "OpenTelemetry error: #{}" end end # Initialize OpenTelemetry SDK with OTLP exporter # Uses environment variables set by the operator: # - OTEL_EXPORTER_OTLP_ENDPOINT: http://host:port # - OTEL_SERVICE_NAME: service name OpenTelemetry::SDK.configure do |c| c.service_name = ENV.fetch('OTEL_SERVICE_NAME', 'language-operator-agent') # Add resource attributes c.resource = OpenTelemetry::SDK::Resources::Resource.create(build_resource_attributes) # Use OTLP HTTP exporter (reads endpoint from OTEL_EXPORTER_OTLP_ENDPOINT env var) c.add_span_processor( OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new( OpenTelemetry::Exporter::OTLP::Exporter.new( endpoint: "#{ENV.fetch('OTEL_EXPORTER_OTLP_ENDPOINT')}/v1/traces", headers: {} ) ) ) end # Restore trace context from TRACEPARENT if present for distributed tracing restore_trace_context if ENV['TRACEPARENT'] rescue StandardError => e warn "Failed to configure OpenTelemetry: #{e.}" warn e.backtrace.join("\n") end |