Skip to content

Commit 4ad4435

Browse files
committed
default to gzip compression
1 parent 03877f1 commit 4ad4435

File tree

3 files changed

+58
-77
lines changed

3 files changed

+58
-77
lines changed

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_opentelemetry_configurator.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from amazon.opentelemetry.distro.scope_based_exporter import ScopeBasedPeriodicExportingMetricReader
2828
from amazon.opentelemetry.distro.scope_based_filtering_view import ScopeBasedRetainingView
2929
from opentelemetry._logs import set_logger_provider
30+
from opentelemetry.exporter.otlp.proto.http import Compression
3031
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
3132
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter as OTLPHttpOTLPMetricExporter
3233
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
@@ -186,7 +187,7 @@ def _init_logging(
186187

187188
for _, exporter_class in exporters.items():
188189
exporter_args: Dict[str, any] = {}
189-
log_exporter = _customize_logs_exporter(exporter_class(**exporter_args), resource)
190+
log_exporter = _customize_logs_exporter(exporter_class(**exporter_args))
190191
provider.add_log_record_processor(BatchLogRecordProcessor(exporter=log_exporter))
191192

192193
handler = LoggingHandler(level=NOTSET, logger_provider=provider)
@@ -359,7 +360,8 @@ def _customize_span_exporter(span_exporter: SpanExporter, resource: Resource) ->
359360

360361
if isinstance(span_exporter, OTLPSpanExporter):
361362
span_exporter = OTLPSpanExporter(
362-
endpoint=traces_endpoint, session=AwsAuthSession(traces_endpoint.split(".")[1], "xray")
363+
endpoint=traces_endpoint,
364+
session=AwsAuthSession(traces_endpoint.split(".")[1], "xray"),
363365
)
364366

365367
else:
@@ -374,14 +376,18 @@ def _customize_span_exporter(span_exporter: SpanExporter, resource: Resource) ->
374376
return AwsMetricAttributesSpanExporterBuilder(span_exporter, resource).build()
375377

376378

377-
def _customize_logs_exporter(log_exporter: LogExporter, resource: Resource) -> LogExporter:
379+
def _customize_logs_exporter(log_exporter: LogExporter) -> LogExporter:
378380
logs_endpoint = os.environ.get(OTEL_EXPORTER_OTLP_LOGS_ENDPOINT)
379381

380382
if is_aws_otlp_endpoint(logs_endpoint, "logs"):
381383
_logger.info("Detected using AWS OTLP Logs Endpoint.")
382384

383385
if isinstance(log_exporter, OTLPLogExporter) and validate_logs_headers():
384-
return OTLPLogExporter(endpoint=logs_endpoint, session=AwsAuthSession(logs_endpoint.split(".")[1], "logs"))
386+
return OTLPLogExporter(
387+
endpoint=logs_endpoint,
388+
compression=Compression.Gzip,
389+
session=AwsAuthSession(logs_endpoint.split(".")[1], "logs"),
390+
)
385391

386392
_logger.warning(
387393
"Improper configuration see: please export/set "
@@ -539,8 +545,10 @@ def validate_logs_headers() -> bool:
539545

540546
for pair in logs_headers.split(","):
541547
if "=" in pair:
542-
key = pair.split("=", 1)[0]
543-
if key == AWS_OTLP_LOGS_GROUP_HEADER or key == AWS_OTLP_LOGS_STREAM_HEADER:
548+
split = pair.split("=", 1)
549+
key = split[0]
550+
value = split[1]
551+
if (key == AWS_OTLP_LOGS_GROUP_HEADER or key == AWS_OTLP_LOGS_STREAM_HEADER) and value:
544552
filtered_log_headers_count += 1
545553

546554
if filtered_log_headers_count != 2:

aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_auth_session.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,10 @@
77
from botocore.credentials import Credentials
88

99
from amazon.opentelemetry.distro.exporter.otlp.aws.common.aws_auth_session import AwsAuthSession
10-
from opentelemetry.exporter.otlp.proto.http.trace_exporter import DEFAULT_COMPRESSION, DEFAULT_TIMEOUT
11-
from opentelemetry.exporter.otlp.proto.http.version import __version__
1210

1311
AWS_OTLP_TRACES_ENDPOINT = "https://xray.us-east-1.amazonaws.com/v1/traces"
1412
AWS_OTLP_LOGS_ENDPOINT = "https://logs.us-east-1.amazonaws.com/v1/logs"
1513

16-
USER_AGENT = "OTel-OTLP-Exporter-Python/" + __version__
17-
CONTENT_TYPE = "application/x-protobuf"
1814
AUTHORIZATION_HEADER = "Authorization"
1915
X_AMZ_DATE_HEADER = "X-Amz-Date"
2016
X_AMZ_SECURITY_TOKEN_HEADER = "X-Amz-Security-Token"
@@ -65,20 +61,3 @@ def test_aws_auth_session(self, _, __):
6561
self.assertIn(AUTHORIZATION_HEADER, actual_headers)
6662
self.assertIn(X_AMZ_DATE_HEADER, actual_headers)
6763
self.assertIn(X_AMZ_SECURITY_TOKEN_HEADER, actual_headers)
68-
69-
def validate_exporter_extends_http_exporter(self, exporter, endpoint, exporter_type):
70-
self.assertIsInstance(exporter, exporter_type)
71-
self.assertIsInstance(exporter._session, AwsAuthSession)
72-
self.assertEqual(exporter._endpoint, endpoint)
73-
self.assertEqual(exporter._certificate_file, True)
74-
self.assertEqual(exporter._client_certificate_file, None)
75-
self.assertEqual(exporter._client_key_file, None)
76-
self.assertEqual(exporter._timeout, DEFAULT_TIMEOUT)
77-
self.assertIs(exporter._compression, DEFAULT_COMPRESSION)
78-
self.assertEqual(exporter._headers, {})
79-
self.assertIn("User-Agent", exporter._session.headers)
80-
self.assertEqual(
81-
exporter._session.headers.get("Content-Type"),
82-
CONTENT_TYPE,
83-
)
84-
self.assertEqual(exporter._session.headers.get("User-Agent"), USER_AGENT)

aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_opentelementry_configurator.py

Lines changed: 44 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter as OTLPGrpcLogExporter
4545
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter as OTLPGrpcOTLPMetricExporter
4646
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter as OTLPGrpcSpanExporter
47+
from opentelemetry.exporter.otlp.proto.http import Compression
4748
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
4849
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter as OTLPHttpOTLPMetricExporter
4950
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
@@ -372,18 +373,29 @@ def test_customize_span_exporter_sigv4(self):
372373
bad_configs.append(config)
373374

374375
for config in good_configs:
375-
self.customize_exporter_test(config, OTLPSpanExporter(), _customize_span_exporter, OTLPSpanExporter, True)
376+
self.customize_exporter_test(
377+
config,
378+
_customize_span_exporter,
379+
OTLPSpanExporter,
380+
AwsAuthSession,
381+
Compression.NoCompression,
382+
OTLPSpanExporter(),
383+
Resource.get_empty(),
384+
)
385+
376386
for config in bad_configs:
377-
self.customize_exporter_test(config, OTLPSpanExporter(), _customize_span_exporter, OTLPSpanExporter, False)
378-
379-
self.customize_exporter_test(
380-
{
381-
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: "https://xray.us-east-1.amazonaws.com/v1/traces",
382-
},
383-
OTLPGrpcSpanExporter(),
384-
_customize_span_exporter,
385-
OTLPGrpcSpanExporter,
386-
False,
387+
self.customize_exporter_test(
388+
config,
389+
_customize_span_exporter,
390+
OTLPSpanExporter,
391+
Session,
392+
Compression.NoCompression,
393+
OTLPSpanExporter(),
394+
Resource.get_empty(),
395+
)
396+
397+
self.assertIsInstance(
398+
_customize_span_exporter(OTLPGrpcSpanExporter(), Resource.get_empty()), OTLPGrpcSpanExporter
387399
)
388400

389401
def test_customize_logs_exporter_sigv4(self):
@@ -415,7 +427,6 @@ def test_customize_logs_exporter_sigv4(self):
415427
"https://logs.amazonaws.com/v1/logs",
416428
"https://logs.us-east-1.amazon.com/v1/logs",
417429
"https://logs.us-east-1.aws.com/v1/logs",
418-
"https://logs.US-EAST-1.amazonaws.com/v1/logs",
419430
"https://logs.us_east_1.amazonaws.com/v1/logs",
420431
"https://logs.us.east.1.amazonaws.com/v1/logs",
421432
"https://logs..amazonaws.com/v1/logs",
@@ -430,8 +441,6 @@ def test_customize_logs_exporter_sigv4(self):
430441
"https://logs.us-east-1.amazonaws.com:443/v1/logs",
431442
"https:/logs.us-east-1.amazonaws.com/v1/logs",
432443
"https:://logs.us-east-1.amazonaws.com/v1/logs",
433-
"https://LOGS.us-east-1.amazonaws.com/v1/logs",
434-
"https://logs.us-east-1.amazonaws.com/V1/LOGS",
435444
"https://logs.us-east-1.amazonaws.com/v1/logging",
436445
"https://logs.us-east-1.amazonaws.com/v1/cloudwatchlogs",
437446
"https://logs.us-east-1.amazonaws.com/v1/cwlogs",
@@ -472,20 +481,16 @@ def test_customize_logs_exporter_sigv4(self):
472481
bad_configs.append(config)
473482

474483
for config in good_configs:
475-
self.customize_exporter_test(config, OTLPLogExporter(), _customize_logs_exporter, OTLPLogExporter, True)
484+
self.customize_exporter_test(
485+
config, _customize_logs_exporter, OTLPLogExporter, AwsAuthSession, Compression.Gzip, OTLPLogExporter()
486+
)
487+
476488
for config in bad_configs:
477-
self.customize_exporter_test(config, OTLPLogExporter(), _customize_logs_exporter, OTLPLogExporter, False)
489+
self.customize_exporter_test(
490+
config, _customize_logs_exporter, OTLPLogExporter, Session, Compression.NoCompression, OTLPLogExporter()
491+
)
478492

479-
self.customize_exporter_test(
480-
{
481-
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: "https://logs.us-east-1.amazonaws.com/v1/logs",
482-
OTEL_EXPORTER_OTLP_LOGS_HEADERS: "x-aws-log-group=test,x-aws-log-stream=test",
483-
},
484-
OTLPGrpcLogExporter(),
485-
_customize_logs_exporter,
486-
OTLPGrpcLogExporter,
487-
False,
488-
)
493+
self.assertIsInstance(_customize_logs_exporter(OTLPGrpcLogExporter()), OTLPGrpcLogExporter)
489494

490495
def test_init_logging(self):
491496
captured_exporter = None
@@ -497,10 +502,9 @@ def capture_exporter(*args, **kwargs):
497502
return result
498503

499504
test_cases = [
500-
[{"otlp": OTLPLogExporter}, [OTLPLogExporter]],
501-
[{"otlp": OTLPLogExporter, "grpc": OTLPGrpcLogExporter}, [OTLPLogExporter, OTLPGrpcLogExporter]],
502-
[{}, [OTLPLogExporter]],
503-
[{"grpc": OTLPGrpcLogExporter}, [OTLPGrpcLogExporter]],
505+
[{"otlp": OTLPLogExporter}, OTLPLogExporter],
506+
[{}, OTLPLogExporter],
507+
[{"grpc": OTLPGrpcLogExporter}, OTLPGrpcLogExporter],
504508
]
505509

506510
os.environ[OTEL_EXPORTER_OTLP_LOGS_ENDPOINT] = "https://logs.us-east-1.amazonaws.com/v1/logs"
@@ -511,20 +515,14 @@ def capture_exporter(*args, **kwargs):
511515

512516
mock_customize_logs_exporter.side_effect = capture_exporter
513517

514-
for i in range(len(test_cases)):
515-
exporters_dict = test_cases[i][0]
516-
expected_exporters = test_cases[i][1]
517-
518-
_init_logging(exporters_dict, Resource.get_empty())
519-
520-
args_list = mock_customize_logs_exporter.call_args_list
518+
for tc in test_cases:
519+
exporter_dict = tc[0]
520+
expected_exporter = tc[1]
521+
_init_logging(exporter_dict, Resource.get_empty())
521522

522-
self.assertEquals(len(expected_exporters), len(args_list))
523+
self.assertIsInstance(captured_exporter, expected_exporter)
523524

524-
for j in range(len(expected_exporters)):
525-
self.assertIsInstance(args_list[j].args[0], expected_exporters[j])
526-
527-
mock_customize_logs_exporter.reset_mock()
525+
os.environ.pop(OTEL_EXPORTER_OTLP_LOGS_ENDPOINT)
528526

529527
def test_customize_span_processors(self):
530528
mock_tracer_provider: TracerProvider = MagicMock()
@@ -666,20 +664,16 @@ def test_customize_metric_exporter(self):
666664
os.environ.pop("OTEL_METRIC_EXPORT_INTERVAL", None)
667665

668666
def customize_exporter_test(
669-
self, config, default_exporter, executor, expected_exporter_type, has_aws_authenticator
667+
self, config, executor, expected_exporter_type, expected_session, expected_compression, *args
670668
):
671669
for key, value in config.items():
672670
os.environ[key] = value
673671

674672
try:
675-
result = executor(default_exporter, Resource.get_empty())
673+
result = executor(*args)
676674
self.assertIsInstance(result, expected_exporter_type)
677-
678-
if has_aws_authenticator:
679-
self.assertIsInstance(result._session, AwsAuthSession)
680-
else:
681-
self.assertTrue(not hasattr(result, "_session") or isinstance(result._session, Session))
682-
675+
self.assertIsInstance(result._session, expected_session)
676+
self.assertEqual(result._compression, expected_compression)
683677
finally:
684678
for key in config.keys():
685679
os.environ.pop(key, None)

0 commit comments

Comments
 (0)