23
23
AwsMetricAttributesSpanExporterBuilder ,
24
24
)
25
25
from amazon .opentelemetry .distro .aws_span_metrics_processor_builder import AwsSpanMetricsProcessorBuilder
26
- from amazon .opentelemetry .distro .exporter .console .logs .compact_console_log_exporter import CompactConsoleLogExporter
27
26
from amazon .opentelemetry .distro .otlp_udp_exporter import OTLPUdpSpanExporter
28
27
from amazon .opentelemetry .distro .sampler .aws_xray_remote_sampler import AwsXRayRemoteSampler
29
28
from amazon .opentelemetry .distro .scope_based_exporter import ScopeBasedPeriodicExportingMetricReader
47
46
)
48
47
from opentelemetry .sdk ._events import EventLoggerProvider
49
48
from opentelemetry .sdk ._logs import LoggerProvider , LoggingHandler
50
- from opentelemetry .sdk ._logs .export import BatchLogRecordProcessor , ConsoleLogExporter , LogExporter
49
+ from opentelemetry .sdk ._logs .export import BatchLogRecordProcessor , LogExporter
51
50
from opentelemetry .sdk .environment_variables import (
52
51
_OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED ,
53
52
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL ,
@@ -123,14 +122,7 @@ class OtlpLogHeaderSetting(NamedTuple):
123
122
log_group : Optional [str ]
124
123
log_stream : Optional [str ]
125
124
namespace : Optional [str ]
126
-
127
- def is_valid (self ) -> bool :
128
- """Check if the log header setting is valid by ensuring both log_group and log_stream are present."""
129
- return self .log_group is not None and self .log_stream is not None
130
-
131
-
132
- # Singleton cache for OtlpLogHeaderSetting
133
- _otlp_log_header_setting_cache : Optional [OtlpLogHeaderSetting ] = None
125
+ is_valid : bool
134
126
135
127
136
128
class AwsOpenTelemetryConfigurator (_OTelSDKConfigurator ):
@@ -217,9 +209,6 @@ def _init_logging(
217
209
set_logger_provider (provider )
218
210
219
211
for _ , exporter_class in exporters .items ():
220
- if exporter_class is ConsoleLogExporter and _is_lambda_environment ():
221
- exporter_class = CompactConsoleLogExporter
222
- _logger .debug ("Lambda environment detected, using CompactConsoleLogExporter instead of ConsoleLogExporter" )
223
212
exporter_args = {}
224
213
_customize_log_record_processor (
225
214
logger_provider = provider , log_exporter = _customize_logs_exporter (exporter_class (** exporter_args ))
@@ -451,7 +440,7 @@ def _customize_logs_exporter(log_exporter: LogExporter) -> LogExporter:
451
440
452
441
if isinstance (log_exporter , OTLPLogExporter ):
453
442
454
- if _fetch_logs_header ().is_valid () :
443
+ if _validate_and_fetch_logs_header ().is_valid :
455
444
endpoint , region = _extract_endpoint_and_region_from_otlp_endpoint (logs_endpoint )
456
445
# Setting default compression mode to Gzip as this is the behavior in upstream's
457
446
# collector otlp http exporter:
@@ -638,23 +627,18 @@ def _extract_endpoint_and_region_from_otlp_endpoint(endpoint: str):
638
627
return endpoint , region
639
628
640
629
641
- def _fetch_logs_header () -> OtlpLogHeaderSetting :
642
- """Returns the OTLP log header setting as a singleton instance."""
643
- global _otlp_log_header_setting_cache # pylint: disable=global-statement
644
-
645
- if _otlp_log_header_setting_cache is not None :
646
- return _otlp_log_header_setting_cache
630
+ def _validate_and_fetch_logs_header () -> OtlpLogHeaderSetting :
631
+ """Checks if x-aws-log-group and x-aws-log-stream are present in the headers in order to send logs to
632
+ AWS OTLP Logs endpoint."""
647
633
648
634
logs_headers = os .environ .get (OTEL_EXPORTER_OTLP_LOGS_HEADERS )
649
635
650
636
if not logs_headers :
651
- if not _is_lambda_environment ():
652
- _logger .warning (
653
- "Improper configuration: Please configure the environment variable OTEL_EXPORTER_OTLP_LOGS_HEADERS "
654
- "to include x-aws-log-group and x-aws-log-stream"
655
- )
656
- _otlp_log_header_setting_cache = OtlpLogHeaderSetting (None , None , None )
657
- return _otlp_log_header_setting_cache
637
+ _logger .warning (
638
+ "Improper configuration: Please configure the environment variable OTEL_EXPORTER_OTLP_LOGS_HEADERS "
639
+ "to include x-aws-log-group and x-aws-log-stream"
640
+ )
641
+ return OtlpLogHeaderSetting (None , None , None , False )
658
642
659
643
log_group = None
660
644
log_stream = None
@@ -672,14 +656,9 @@ def _fetch_logs_header() -> OtlpLogHeaderSetting:
672
656
elif key == AWS_EMF_METRICS_NAMESPACE and value :
673
657
namespace = value
674
658
675
- _otlp_log_header_setting_cache = OtlpLogHeaderSetting (log_group , log_stream , namespace )
676
- return _otlp_log_header_setting_cache
677
-
659
+ is_valid = log_group is not None and log_stream is not None
678
660
679
- def _clear_logs_header_cache ():
680
- """Clear the singleton cache for OtlpLogHeaderSetting. Used primarily for testing."""
681
- global _otlp_log_header_setting_cache # pylint: disable=global-statement
682
- _otlp_log_header_setting_cache = None
661
+ return OtlpLogHeaderSetting (log_group , log_stream , namespace , is_valid )
683
662
684
663
685
664
def _get_metric_export_interval ():
@@ -794,25 +773,8 @@ def _check_emf_exporter_enabled() -> bool:
794
773
795
774
796
775
def _create_emf_exporter ():
797
- """
798
- Create the appropriate EMF exporter based on the environment and configuration.
799
-
800
- Returns:
801
- ConsoleEmfExporter for Lambda without log headers log group and stream
802
- AwsCloudWatchEmfExporter for other cases (when conditions are met)
803
- None if CloudWatch exporter cannot be created
804
- """
776
+ """Create and configure the CloudWatch EMF exporter."""
805
777
try :
806
- log_header_setting = _fetch_logs_header ()
807
-
808
- # Lambda without valid logs http headers - use Console EMF exporter
809
- if _is_lambda_environment () and not log_header_setting .is_valid ():
810
- # pylint: disable=import-outside-toplevel
811
- from amazon .opentelemetry .distro .exporter .aws .metrics .console_emf_exporter import ConsoleEmfExporter
812
-
813
- return ConsoleEmfExporter (namespace = log_header_setting .namespace )
814
-
815
- # For non-Lambda environment or Lambda with valid headers - use CloudWatch EMF exporter
816
778
session = get_aws_session ()
817
779
# Check if botocore is available before importing the EMF exporter
818
780
if not session :
@@ -824,7 +786,9 @@ def _create_emf_exporter():
824
786
AwsCloudWatchEmfExporter ,
825
787
)
826
788
827
- if not log_header_setting .is_valid ():
789
+ log_header_setting = _validate_and_fetch_logs_header ()
790
+
791
+ if not log_header_setting .is_valid :
828
792
return None
829
793
830
794
return AwsCloudWatchEmfExporter (
0 commit comments