Hello PerlMonks community,
We are trying to implement distributed tracing (APM-style request tracing) for a legacy Perl application running in a microservices environment.
Our goal is limited to application tracing only:
- Create traces and spans inside the Perl application
- Export them to a tracing backend such as Jaeger, Zipkin, Tempo, or an APM platform
We do not require infrastructure metrics or logs.
We attempted to use OpenTelemetry for Perl. While we were able to create traces and spans, we could not reliably export them due to limitations in the Perl ecosystem.
Our findings so far:
- OTLP over gRPC is not supported due to lack of a stable Perl gRPC client ecosystem and no gRPC exporter in the Perl OpenTelemetry SDK.
- OTLP over HTTP (JSON) is incomplete; the Perl OTLP JSON encoder is not fully compliant.
- OTLP over HTTP (Protobuf) requires runtime .proto compilation using Google::ProtocolBuffers::Dynamic, which is not feasible or reliable in production.
- OTLP wire-format compliance cannot be achieved from Perl.
- This appears to be a language ecosystem limitation rather than a configuration issue.
We also evaluated Jaeger and Zipkin. However, they are tracing backends only and cannot generate traces or spans themselves without a supported Perl instrumentation and export mechanism.
Given this situation, I would appreciate guidance from experienced Perl users on the following questions:
- Is true distributed tracing / APM for Perl applications realistically possible today?
- Are there any community-recommended Perl modules or approaches to export traces (for example using Jaeger Thrift, Zipkin HTTP, or other non-OTLP formats)?
- Are there any platforms or vendors (open source or commercial) that successfully support Perl tracing in production?
- If Perl-level instrumentation is not practical, are proxy-based or gateway-based tracing approaches (for example using Nginx or Envoy) the recommended solution for legacy Perl applications?
- In your experience, what is the most practical and supported way to achieve observability for Perl services?
Any pointers to existing CPAN modules, real-world implementations, or alternative strategies would be greatly appreciated.
Thank you for your time and expertise.
Best regards,
ShallTear
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.