Use HTTP error bodies in HttpExporter warnings#8428
Conversation
psx95
left a comment
There was a problem hiding this comment.
This PR improves the default parsing experience of gRPC errors in HttpExporters by converting the raw bytes to a UTF-8 string as a fallback.
Looking at the original issue #7704 - the original ask was for a way to suppress the noisy logs - this PR makes the logs helpful, but does not suppress it - which IMO is ok (IIUC, a decision was not taken on it), but I'll defer to the maintainers here.
| @@ -32,6 +34,7 @@ | |||
| */ | |||
| @SuppressWarnings("checkstyle:JavadocMethod") | |||
| public final class HttpExporter { | |||
| private static final int MAX_RESPONSE_BODY_LOG_LENGTH = 1024; | |||
There was a problem hiding this comment.
QQ: Why was this number chosen?
| return "Response body missing, HTTP status message: " + statusMessage; | ||
| } | ||
| if (responseBody.length == 0) { | ||
| return "HTTP status message: " + statusMessage; |
There was a problem hiding this comment.
nit: could add a better message indicating this is a length = 0 case.
Something like "Response body has 0 length, HTTP status message: "
| } | ||
|
|
||
| private static String extractResponseBodyMessage(byte[] responseBody, String statusMessage) { | ||
| String responseBodyText = new String(responseBody, StandardCharsets.UTF_8).trim(); |
There was a problem hiding this comment.
nit: Minor improvement:
int lengthToRead = Math.min(responseBody.length, MAX_RESPONSE_BODY_LOG_LENGTH);
String responseBodyText = new String(responseBody, 0, lengthToRead, StandardCharsets.UTF_8).trim();
a12e8d8 to
fff6013
Compare
|
@psx95 Addressed the nits — bounded decoding, zero-length message, 1024 comment, and rebased onto latest |
Fixes #7704.
Why
HttpExportercurrently tries to parse every non-success HTTP response body as a serialized gRPC status.Unable to parse response body, which is noisy and hides the actual server response.What
Testing
./gradlew --no-daemon --max-workers=1 -Dorg.gradle.jvmargs="-Xmx768m -XX:MaxMetaspaceSize=256m" :exporters:common:test --tests io.opentelemetry.exporter.internal.http.HttpExporterTest./gradlew --no-daemon --max-workers=1 -Dorg.gradle.jvmargs="-Xmx512m -XX:MaxMetaspaceSize=192m" :exporters:common:spotlessCheck