diff --git a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessor.java b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessor.java index 601bfdfa208..282b209c50d 100644 --- a/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessor.java +++ b/sdk/logs/src/main/java/io/opentelemetry/sdk/logs/export/BatchLogRecordProcessor.java @@ -141,8 +141,10 @@ private static final class Worker implements Runnable { private static final Logger logger = Logger.getLogger(Worker.class.getName()); private final LongCounter processedLogsCounter; + private final LongCounter logsExportFailureCounter; private final Attributes droppedAttrs; private final Attributes exportedAttrs; + private final Attributes exportFailureAttrs; private final LogRecordExporter logRecordExporter; private final long scheduleDelayNanos; @@ -197,6 +199,13 @@ private Worker( "The number of logs processed by the BatchLogRecordProcessor. " + "[dropped=true if they were dropped due to high throughput]") .build(); + logsExportFailureCounter = + meter + .counterBuilder("logsExportFailure") + .setUnit("1") + .setDescription( + "Logs export failure in BatchLogRecordProcessor.") + .build(); droppedAttrs = Attributes.of( LOG_RECORD_PROCESSOR_TYPE_LABEL, @@ -209,6 +218,10 @@ private Worker( LOG_RECORD_PROCESSOR_TYPE_VALUE, LOG_RECORD_PROCESSOR_DROPPED_LABEL, false); + exportFailureAttrs = + Attributes.of( + LOG_RECORD_PROCESSOR_TYPE_LABEL, + LOG_RECORD_PROCESSOR_TYPE_VALUE); this.batch = new ArrayList<>(this.maxExportBatchSize); } @@ -324,6 +337,7 @@ private void exportCurrentBatch() { processedLogsCounter.add(batch.size(), exportedAttrs); } else { logger.log(Level.FINE, "Exporter failed"); + logsExportFailureCounter.add(1, exportFailureAttrs); } } catch (RuntimeException e) { logger.log(Level.WARNING, "Exporter threw an Exception", e);