1616package software .opentelemetry .exporters .otlp .udp ;
1717
1818import static java .util .Objects .requireNonNull ;
19+ //import static software.amazon.opentelemetry.javaagent.providers.AwsApplicationSignalsCustomizerProvider.AWS_LAMBDA_FUNCTION_NAME_CONFIG;
20+ //import static software.amazon.opentelemetry.javaagent.providers.AwsApplicationSignalsCustomizerProvider.AWS_XRAY_DAEMON_ADDRESS_CONFIG;
1921
2022public final class OtlpUdpSpanExporterBuilder {
2123
@@ -35,6 +37,9 @@ public final class OtlpUdpSpanExporterBuilder {
3537 private UdpSender sender ;
3638 private String tracePayloadPrefix = FORMAT_OTEL_SAMPLED_TRACES_BINARY_PREFIX ;
3739
40+ private static final String AWS_LAMBDA_FUNCTION_NAME_CONFIG = "AWS_LAMBDA_FUNCTION_NAME" ;
41+ private static final String AWS_XRAY_DAEMON_ADDRESS_CONFIG = "AWS_XRAY_DAEMON_ADDRESS" ;
42+
3843 public OtlpUdpSpanExporterBuilder setEndpoint (String endpoint ) {
3944 requireNonNull (endpoint , "endpoint must not be null" );
4045 try {
@@ -58,10 +63,34 @@ public OtlpUdpSpanExporterBuilder setPayloadSampleDecision(TracePayloadSampleDec
5863
5964 public OtlpUdpSpanExporter build () {
6065 if (sender == null ) {
61- this .sender = new UdpSender (DEFAULT_HOST , DEFAULT_PORT );
66+ String endpoint = null ;
67+
68+ // If in Lambda environment, try to get X-Ray daemon address
69+ if (isLambdaEnvironment ()) {
70+ endpoint = System .getenv (AWS_XRAY_DAEMON_ADDRESS_CONFIG );
71+ }
72+
73+ if (endpoint != null ) {
74+ // Use the endpoint from Lambda environment
75+ try {
76+ String [] parts = endpoint .split (":" );
77+ String host = parts [0 ];
78+ int port = Integer .parseInt (parts [1 ]);
79+ this .sender = new UdpSender (host , port );
80+ } catch (Exception e ) {
81+ // Fallback to defaults if parsing fails
82+ this .sender = new UdpSender (DEFAULT_HOST , DEFAULT_PORT );
83+ }
84+ } else {
85+ // Use defaults if not in Lambda or if daemon address is not available
86+ this .sender = new UdpSender (DEFAULT_HOST , DEFAULT_PORT );
87+ }
6288 }
6389 return new OtlpUdpSpanExporter (
6490 this .sender , PROTOCOL_HEADER + PROTOCOL_DELIMITER + tracePayloadPrefix );
91+ }
92+ private static boolean isLambdaEnvironment () {
93+ return System .getenv (AWS_LAMBDA_FUNCTION_NAME_CONFIG ) != null ;
6594 }
6695
6796 // Only for testing
0 commit comments