33# Modifications Copyright The OpenTelemetry Authors. Licensed under the Apache License 2.0 License.
44import os
55import re
6- from logging import NOTSET , Logger , getLogger
6+ from logging import NOTSET , CRITICAL , Logger , getLogger
77from typing import ClassVar , Dict , List , Type , Union
88
99from importlib_metadata import version
8383DEPRECATED_APP_SIGNALS_EXPORTER_ENDPOINT_CONFIG = "OTEL_AWS_APP_SIGNALS_EXPORTER_ENDPOINT"
8484APPLICATION_SIGNALS_EXPORTER_ENDPOINT_CONFIG = "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT"
8585METRIC_EXPORT_INTERVAL_CONFIG = "OTEL_METRIC_EXPORT_INTERVAL"
86+ OTEL_LOGS_EXPORTER = "OTEL_LOGS_EXPORTER"
8687DEFAULT_METRIC_EXPORT_INTERVAL = 60000.0
8788AWS_LAMBDA_FUNCTION_NAME_CONFIG = "AWS_LAMBDA_FUNCTION_NAME"
8889AWS_XRAY_DAEMON_ADDRESS_CONFIG = "AWS_XRAY_DAEMON_ADDRESS"
@@ -122,6 +123,24 @@ class AwsOpenTelemetryConfigurator(_OTelSDKConfigurator):
122123 # pylint: disable=no-self-use
123124 @override
124125 def _configure (self , ** kwargs ):
126+
127+ print (f"OTEL_EXPORTER_OTLP_LOGS_HEADERS: { os .environ .get ('OTEL_EXPORTER_OTLP_LOGS_HEADERS' , 'Not set' )} " )
128+ print (f"OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED: { os .environ .get ('OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED' , 'Not set' )} " )
129+ print (f"OTEL_METRICS_EXPORTER: { os .environ .get ('OTEL_METRICS_EXPORTER' , 'Not set' )} " )
130+ print (f"OTEL_TRACES_EXPORTER: { os .environ .get ('OTEL_TRACES_EXPORTER' , 'Not set' )} " )
131+ print (f"OTEL_LOGS_EXPORTER: { os .environ .get ('OTEL_LOGS_EXPORTER' , 'Not set' )} " )
132+ print (f"OTEL_PYTHON_DISTRO: { os .environ .get ('OTEL_PYTHON_DISTRO' , 'Not set' )} " )
133+ print (f"OTEL_PYTHON_CONFIGURATOR: { os .environ .get ('OTEL_PYTHON_CONFIGURATOR' , 'Not set' )} " )
134+ print (f"OTEL_EXPORTER_OTLP_PROTOCOL: { os .environ .get ('OTEL_EXPORTER_OTLP_PROTOCOL' , 'Not set' )} " )
135+ print (f"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: { os .environ .get ('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT' , 'Not set' )} " )
136+ print (f"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: { os .environ .get ('OTEL_EXPORTER_OTLP_LOGS_ENDPOINT' , 'Not set' )} " )
137+ print (f"OTEL_RESOURCE_ATTRIBUTES: { os .environ .get ('OTEL_RESOURCE_ATTRIBUTES' , 'Not set' )} " )
138+ print (f"AGENT_OBSERVABILITY_ENABLED: { os .environ .get ('AGENT_OBSERVABILITY_ENABLED' , 'Not set' )} " )
139+ print (f"AWS_CLOUDWATCH_LOG_GROUP: { os .environ .get ('AWS_CLOUDWATCH_LOG_GROUP' , 'Not set' )} " )
140+ print (f"AWS_CLOUDWATCH_LOG_STREAM: { os .environ .get ('AWS_CLOUDWATCH_LOG_STREAM' , 'Not set' )} " )
141+ print (f"OTEL_PYTHON_DISABLED_INSTRUMENTATIONS: { os .environ .get ('OTEL_PYTHON_DISABLED_INSTRUMENTATIONS' , 'Not set' )} " )
142+ print (f"PYTHONPATH: { os .environ .get ('PYTHONPATH' , 'Not set' )} " )
143+
125144 if _is_defer_to_workers_enabled () and _is_wsgi_master_process ():
126145 _logger .info (
127146 "Skipping ADOT initialization since deferral to worker is enabled, and this is a master process."
@@ -174,16 +193,19 @@ def _initialize_components():
174193 resource = resource ,
175194 )
176195 _init_metrics (metric_exporters , resource )
196+ logging_enabled = os .getenv (_OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED , "false" )
197+ if logging_enabled .strip ().lower () == "true" :
198+ _init_logging (log_exporters , resource )
177199
178200
179201def _init_logging (
180202 exporters : Dict [str , Type [LogExporter ]],
181203 resource : Resource = None ,
182204):
183205
184- # Provides a default OTLP log exporter when none is specified .
206+ # Provides a default OTLP log exporter when the environment is not set .
185207 # This is the behavior for the logs exporters for other languages.
186- if not exporters :
208+ if not exporters and os . environ . get ( OTEL_LOGS_EXPORTER ) == None :
187209 exporters = {"otlp" : OTLPLogExporter }
188210
189211 provider = LoggerProvider (resource = resource )
@@ -192,7 +214,7 @@ def _init_logging(
192214 for _ , exporter_class in exporters .items ():
193215 exporter_args : Dict [str , any ] = {}
194216 log_exporter = _customize_logs_exporter (exporter_class (** exporter_args ), resource )
195- provider .add_log_record_processor (BatchLogRecordProcessor (exporter = log_exporter ))
217+ provider .add_log_record_processor (AwsBatchLogRecordProcessor (exporter = log_exporter ))
196218
197219 handler = LoggingHandler (level = NOTSET , logger_provider = provider )
198220
@@ -363,15 +385,7 @@ def _customize_span_exporter(span_exporter: SpanExporter, resource: Resource) ->
363385 _logger .info ("Detected using AWS OTLP Traces Endpoint." )
364386
365387 if isinstance (span_exporter , OTLPSpanExporter ):
366- if is_agent_observability_enabled ():
367- logs_endpoint = os .getenv (OTEL_EXPORTER_OTLP_LOGS_ENDPOINT )
368- logs_exporter = OTLPAwsLogExporter (endpoint = logs_endpoint )
369- span_exporter = OTLPAwsSpanExporter (
370- endpoint = traces_endpoint ,
371- logger_provider = get_logger_provider ()
372- )
373- else :
374- span_exporter = OTLPAwsSpanExporter (endpoint = traces_endpoint )
388+ span_exporter = OTLPAwsSpanExporter (endpoint = traces_endpoint )
375389
376390 else :
377391 _logger .warning (
@@ -636,4 +650,4 @@ def create_exporter(self):
636650 endpoint = application_signals_endpoint , preferred_temporality = temporality_dict
637651 )
638652
639- raise RuntimeError (f"Unsupported AWS Application Signals export protocol: { protocol } " )
653+ raise RuntimeError (f"Unsupported AWS Application Signals export protocol: { protocol } " )
0 commit comments