Uploading a large OpenTelemetry trace to a local OTLP/HTTP traces receiver A developer working on Renovate performance found that ~30MB OpenTelemetry traces exceeded HTTP size limits when ingested into a local Jaeger instance, and resolved it by streaming each line of /tmp/traces.jsonl into curl via a herestring to http://localhost:4318/v1/traces instead of passing the payload as a shell argument. The fix, developed with assistance from Claude Sonnet 5, updates the Renovate OpenTelemetry documentation's file-exporter guidance, which previously did not handle the size limits. I've recently been doing some work with improving the performance of Renovate https://docs.renovatebot.com/ on larger repositories. To guide this investigation, I'm leveraging our OpenTelemetry support https://docs.renovatebot.com/opentelemetry/ to more meaningfully understand how Renovate operates in parts of the codebase, and hone in on areas of improvement. One of the repositories I'm running these tests is particularly large, and leads to traces of roughly ~30MB in size. When trying to ingest them into my local Jaeger instance https://www.jaegertracing.io/ , I hit HTTP size limits, and the documentation I'd written in the past with help from Claude Sonnet 5 for ingesting these https://github.com/renovatebot/renovate/blob/d706bb2e25353fec2e39db46f3e0db219da6aa79/docs/usage/opentelemetry.md file-exporter doesn't seem to handle the size limits. With a bit of tweaking with Claude Sonnet 5, this is now better handled with: while IFS= read -r line || -n "$line" ; do curl -s -X POST http://localhost:4318/v1/traces \ -H 'Content-Type: application/json' \ --data-binary @- <<< "$line" done < /tmp/traces.jsonl Notice that we redirect via a herestring the line's contents in via stdin , instead of passing it as an argument, which is what led to the shell crashing. With this few-liner this leads to us being able to ingest very large traces