Skip to content

Commit 64d0a49

Browse files
authored
Add error details to OTLP GRPC exporter error messages.. (open-telemetry#5143)
* Add error details to OTLP GRPC exporter error messages.. * Add changelog * Restore uv.lock * Remove meaningless param * Resote lockfile * Add changelog entry
1 parent d4f9ae7 commit 64d0a49

3 files changed

Lines changed: 13 additions & 5 deletions

File tree

.changelog/5143.added

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
`opentelemetry-exporter-otlp-proto-grpc`: Add grpc error details to the log message that's written when the grpc call fails.

exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -512,10 +512,11 @@ def _export(
512512
or self._shutdown
513513
):
514514
logger.error(
515-
"Failed to export %s to %s, error code: %s",
515+
"Failed to export %s to %s, error code: %s, error details: %s",
516516
self._exporting,
517517
self._endpoint,
518518
error.code(), # type: ignore [reportAttributeAccessIssue]
519+
error.details(),
519520
exc_info=error.code() == StatusCode.UNKNOWN, # type: ignore [reportAttributeAccessIssue]
520521
)
521522
result.error = error
@@ -524,11 +525,12 @@ def _export(
524525
}
525526
return self._result.FAILURE # type: ignore [reportReturnType]
526527
logger.warning(
527-
"Transient error %s encountered while exporting %s to %s, retrying in %.2fs.",
528+
"Transient error %s encountered while exporting %s to %s, retrying in %.2fs. Error details: %s",
528529
error.code(), # type: ignore [reportAttributeAccessIssue]
529530
self._exporting,
530531
self._endpoint,
531532
backoff_seconds,
533+
error.details(),
532534
)
533535
shutdown = self._shutdown_in_progress.wait(backoff_seconds)
534536
if shutdown:

exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_exporter_mixin.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,13 @@ def __init__(
109109
export_result: StatusCode,
110110
optional_retry_nanos: int | None = None,
111111
optional_export_sleep: float | None = None,
112+
optional_error_details: str | None = None,
112113
):
113114
self.export_result = export_result
114115
self.optional_export_sleep = optional_export_sleep
115116
self.optional_retry_nanos = optional_retry_nanos
116117
self.num_requests = 0
118+
self.optional_error_details = optional_error_details
117119

118120
# pylint: disable=invalid-name,unused-argument
119121
def Export(self, request, context):
@@ -134,6 +136,8 @@ def Export(self, request, context):
134136
)
135137
)
136138
context.set_code(self.export_result)
139+
if self.optional_error_details:
140+
context.set_details(self.optional_error_details)
137141

138142
return ExportTraceServiceResponse()
139143

@@ -599,7 +603,7 @@ def test_timeout_set_correctly(self):
599603
)
600604
after = time.time()
601605
self.assertEqual(
602-
"Failed to export traces to localhost:4317, error code: StatusCode.DEADLINE_EXCEEDED",
606+
"Failed to export traces to localhost:4317, error code: StatusCode.DEADLINE_EXCEEDED, error details: Deadline Exceeded",
603607
warning.records[-1].message,
604608
)
605609
self.assertEqual(mock_trace_service.num_requests, 2)
@@ -633,7 +637,8 @@ def test_permanent_failure(self):
633637
with self.assertLogs(level=WARNING) as warning:
634638
add_TraceServiceServicer_to_server(
635639
TraceServiceServicerWithExportParams(
636-
StatusCode.ALREADY_EXISTS
640+
StatusCode.ALREADY_EXISTS,
641+
optional_error_details="This already exists.",
637642
),
638643
self.server,
639644
)
@@ -642,7 +647,7 @@ def test_permanent_failure(self):
642647
)
643648
self.assertEqual(
644649
warning.records[-1].message,
645-
"Failed to export traces to localhost:4317, error code: StatusCode.ALREADY_EXISTS",
650+
"Failed to export traces to localhost:4317, error code: StatusCode.ALREADY_EXISTS, error details: This already exists.",
646651
)
647652

648653
metrics_data = self.metric_reader.get_metrics_data()

0 commit comments

Comments
 (0)