33# Modifications Copyright The OpenTelemetry Authors. Licensed under the Apache License 2.0 License.
44import os
55import re
6- from logging import NOTSET , CRITICAL , Logger , getLogger
6+ from logging import NOTSET , Logger , getLogger
77from typing import ClassVar , Dict , List , Type , Union
88
99from importlib_metadata import version
1010from typing_extensions import override
1111
1212from amazon .opentelemetry .distro ._aws_attribute_keys import AWS_LOCAL_SERVICE
13- from amazon .opentelemetry .distro ._utils import is_agent_observability_enabled
1413from amazon .opentelemetry .distro ._aws_resource_attribute_configurator import get_service_attribute
14+ from amazon .opentelemetry .distro ._utils import is_agent_observability_enabled
1515from amazon .opentelemetry .distro .always_record_sampler import AlwaysRecordSampler
1616from amazon .opentelemetry .distro .attribute_propagating_span_processor_builder import (
1717 AttributePropagatingSpanProcessorBuilder ,
2222 AwsMetricAttributesSpanExporterBuilder ,
2323)
2424from amazon .opentelemetry .distro .aws_span_metrics_processor_builder import AwsSpanMetricsProcessorBuilder
25+ from amazon .opentelemetry .distro .exporter .otlp .aws .logs .aws_batch_log_record_processor import AwsBatchLogRecordProcessor
2526from amazon .opentelemetry .distro .exporter .otlp .aws .logs .otlp_aws_logs_exporter import OTLPAwsLogExporter
2627from amazon .opentelemetry .distro .exporter .otlp .aws .traces .otlp_aws_span_exporter import OTLPAwsSpanExporter
2728from amazon .opentelemetry .distro .otlp_udp_exporter import OTLPUdpSpanExporter
2829from amazon .opentelemetry .distro .sampler .aws_xray_remote_sampler import AwsXRayRemoteSampler
2930from amazon .opentelemetry .distro .scope_based_exporter import ScopeBasedPeriodicExportingMetricReader
3031from amazon .opentelemetry .distro .scope_based_filtering_view import ScopeBasedRetainingView
31- from opentelemetry ._logs import set_logger_provider , get_logger_provider
32+ from opentelemetry ._logs import get_logger_provider , set_logger_provider
3233from opentelemetry .exporter .otlp .proto .http ._log_exporter import OTLPLogExporter
3334from opentelemetry .exporter .otlp .proto .http .metric_exporter import OTLPMetricExporter as OTLPHttpOTLPMetricExporter
3435from opentelemetry .exporter .otlp .proto .http .trace_exporter import OTLPSpanExporter
@@ -123,24 +124,6 @@ class AwsOpenTelemetryConfigurator(_OTelSDKConfigurator):
123124 # pylint: disable=no-self-use
124125 @override
125126 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-
144127 if _is_defer_to_workers_enabled () and _is_wsgi_master_process ():
145128 _logger .info (
146129 "Skipping ADOT initialization since deferral to worker is enabled, and this is a master process."
@@ -193,9 +176,6 @@ def _initialize_components():
193176 resource = resource ,
194177 )
195178 _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 )
199179
200180
201181def _init_logging (
@@ -205,7 +185,7 @@ def _init_logging(
205185
206186 # Provides a default OTLP log exporter when the environment is not set.
207187 # This is the behavior for the logs exporters for other languages.
208- if not exporters and os .environ .get (OTEL_LOGS_EXPORTER ) == None :
188+ if not exporters and os .environ .get (OTEL_LOGS_EXPORTER ) is None :
209189 exporters = {"otlp" : OTLPLogExporter }
210190
211191 provider = LoggerProvider (resource = resource )
@@ -214,7 +194,11 @@ def _init_logging(
214194 for _ , exporter_class in exporters .items ():
215195 exporter_args : Dict [str , any ] = {}
216196 log_exporter = _customize_logs_exporter (exporter_class (** exporter_args ), resource )
217- provider .add_log_record_processor (AwsBatchLogRecordProcessor (exporter = log_exporter ))
197+
198+ if isinstance (log_exporter , OTLPAwsLogExporter ):
199+ provider .add_log_record_processor (AwsBatchLogRecordProcessor (exporter = log_exporter ))
200+ else :
201+ provider .add_log_record_processor (BatchLogRecordProcessor (exporter = log_exporter ))
218202
219203 handler = LoggingHandler (level = NOTSET , logger_provider = provider )
220204
@@ -385,7 +369,10 @@ def _customize_span_exporter(span_exporter: SpanExporter, resource: Resource) ->
385369 _logger .info ("Detected using AWS OTLP Traces Endpoint." )
386370
387371 if isinstance (span_exporter , OTLPSpanExporter ):
388- span_exporter = OTLPAwsSpanExporter (endpoint = traces_endpoint )
372+ if is_agent_observability_enabled ():
373+ span_exporter = OTLPAwsSpanExporter (endpoint = traces_endpoint , logger_provider = get_logger_provider ())
374+ else :
375+ span_exporter = OTLPAwsSpanExporter (endpoint = traces_endpoint )
389376
390377 else :
391378 _logger .warning (
@@ -650,4 +637,4 @@ def create_exporter(self):
650637 endpoint = application_signals_endpoint , preferred_temporality = temporality_dict
651638 )
652639
653- raise RuntimeError (f"Unsupported AWS Application Signals export protocol: { protocol } " )
640+ raise RuntimeError (f"Unsupported AWS Application Signals export protocol: { protocol } " )
0 commit comments