Skip to content

Commit 746e989

Browse files
committed
add further emf + auto instrumentation unit tests and better java docs
1 parent fcbd7a0 commit 746e989

File tree

11 files changed

+31
-47
lines changed

11 files changed

+31
-47
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ If your change does not need a CHANGELOG entry, add the "skip changelog" label t
1515

1616
### Enhancements
1717

18-
- Add CloudWatch EMF metrics exporter for Java Agent and Lambda environment
18+
- Port CloudWatch EMF metrics exporter to Java
1919
([#1209](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1209))
2020
- Support X-Ray Trace Id extraction from Lambda Context object, and respect user-configured OTEL_PROPAGATORS in AWS Lamdba instrumentation
2121
([#1191](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1191)) ([#1218](https://github.com/aws-observability/aws-otel-java-instrumentation/pull/1218))

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsConfigUtils.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ public final class AwsApplicationSignalsConfigUtils {
2929
Logger.getLogger(AwsApplicationSignalsCustomizerProvider.class.getName());
3030

3131
/**
32-
* Removes "awsemf" from OTEL_METRICS_EXPORTER if present.
32+
* Removes "awsemf" from OTEL_METRICS_EXPORTER if present to prevent validation errors from OTel
33+
* dependencies which would try to load metric exporters. We will contribute emf exporter to
34+
* upstream for supporting OTel metrics in SDK
3335
*
3436
* @param configProps the configuration properties
3537
* @return Optional containing string with "awsemf" removed if the original OTEL_METRICS_EXPORTER

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@
8888
public final class AwsApplicationSignalsCustomizerProvider
8989
implements AutoConfigurationCustomizerProvider {
9090
// https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-envvars.html
91-
static final String AWS_REGION = "AWS_REGION";
92-
static final String AWS_DEFAULT_REGION = "AWS_DEFAULT_REGION";
91+
static final String AWS_REGION = "aws.region";
92+
static final String AWS_DEFAULT_REGION = "aws.default.region";
9393
static final String AWS_LAMBDA_FUNCTION_NAME_CONFIG = "AWS_LAMBDA_FUNCTION_NAME";
9494
static final String LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT =
9595
"LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT";

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/exporter/aws/common/BaseEmfExporter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,20 @@
4040
import java.util.logging.Logger;
4141
import software.amazon.opentelemetry.javaagent.providers.exporter.aws.common.emitter.LogEventEmitter;
4242

43+
/**
44+
* Base class for EMF metric exporters that converts OpenTelemetry metrics to CloudWatch EMF format.
45+
*/
4346
public abstract class BaseEmfExporter<T> implements MetricExporter {
4447
private static final Logger logger = Logger.getLogger(BaseEmfExporter.class.getName());
4548
private final String namespace;
4649
protected final LogEventEmitter<T> emitter;
4750

51+
/**
52+
* Creates a new EMF exporter with the specified namespace and log emitter.
53+
*
54+
* @param namespace the CloudWatch metric namespace, defaults to "default" if null
55+
* @param emitter the log event emitter for sending EMF logs
56+
*/
4857
protected BaseEmfExporter(String namespace, LogEventEmitter<T> emitter) {
4958
this.namespace = namespace != null ? namespace : "default";
5059
this.emitter = emitter;

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/exporter/aws/common/LogEventEmitter.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/exporter/aws/common/emitter/CloudWatchLogsClientEmitter.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@
2424
import software.amazon.awssdk.retries.api.BackoffStrategy;
2525
import software.amazon.awssdk.services.cloudwatchlogs.CloudWatchLogsClient;
2626
import software.amazon.awssdk.services.cloudwatchlogs.model.*;
27-
import software.amazon.opentelemetry.javaagent.providers.exporter.aws.metrics.AwsCloudWatchEmfExporter;
2827

2928
/**
30-
* CloudWatch Logs client for batching and sending log events.
29+
* A log event emitter that sends Log Events to CloudWatch Logs.
3130
*
3231
* <p>This class handles the batching logic and CloudWatch Logs API interactions for sending EMF
3332
* logs while respecting CloudWatch Logs constraints.
3433
*/
3534
public class CloudWatchLogsClientEmitter implements LogEventEmitter<CloudWatchLogsClient> {
36-
private static final Logger logger = Logger.getLogger(AwsCloudWatchEmfExporter.class.getName());
35+
private static final Logger logger =
36+
Logger.getLogger(CloudWatchLogsClientEmitter.class.getName());
3737

3838
// Constants for CloudWatch Logs limits
3939
// http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html
@@ -344,8 +344,7 @@ private static StandardRetryStrategy createExponentialBackoffRetryStrategy() {
344344
/**
345345
* Container for a batch of CloudWatch log events with metadata.
346346
*
347-
* <p>Tracks the log events, total byte size, and timestamps for efficient batching and
348-
* validation.
347+
* <p>Tracks the log events, total byte size, and timestamps for batching and validation.
349348
*/
350349
private static class LogEventBatch {
351350
private final List<InputLogEvent> logEvents = new ArrayList<>();

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/exporter/aws/common/emitter/ConsoleEmitter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.logging.Level;
2121
import java.util.logging.Logger;
2222

23+
/** A log event emitter that prints Log Events to Standard Out. */
2324
public class ConsoleEmitter implements LogEventEmitter<PrintStream> {
2425
private static final Logger logger = Logger.getLogger(ConsoleEmitter.class.getName());
2526
private final PrintStream emitter;

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/exporter/aws/common/emitter/LogEventEmitter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import java.util.Map;
1919

2020
/**
21-
* Generic interface for log emitters.
21+
* Generic interface for log event emitters.
2222
*
2323
* @param <T> The type of the underlying emitter client
2424
*/

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/exporter/aws/metrics/AwsCloudWatchEmfExporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import software.amazon.opentelemetry.javaagent.providers.exporter.aws.common.emitter.LogEventEmitter;
2424

2525
/**
26-
* Metrics exporter for CloudWatch EMF format.
26+
* EMF metrics exporter for sending data directly to CloudWatch Logs.
2727
*
2828
* <p>This exporter converts OTel metrics into CloudWatch EMF logs which are then sent to CloudWatch
2929
* Logs. CloudWatch Logs automatically extracts the metrics from the EMF logs.

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/exporter/aws/metrics/ConsoleEmfExporter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import software.amazon.opentelemetry.javaagent.providers.exporter.aws.common.emitter.ConsoleEmitter;
2424
import software.amazon.opentelemetry.javaagent.providers.exporter.aws.common.emitter.LogEventEmitter;
2525

26+
/** EMF metrics exporter for printing data to Standard Out. */
2627
public class ConsoleEmfExporter extends BaseEmfExporter<PrintStream> {
2728
private static final Logger logger = Logger.getLogger(ConsoleEmfExporter.class.getName());
2829

@@ -36,7 +37,7 @@ public ConsoleEmfExporter(String namespace) {
3637
}
3738

3839
/**
39-
* Initialize the Console EMF exporter with custom emitter for testing.
40+
* Initialize the Console EMF exporter with custom emitter.
4041
*
4142
* @param namespace CloudWatch namespace for metrics
4243
* @param emitter Custom emitter

0 commit comments

Comments
 (0)