nginxinc/nginx-otel

Allow using the module without specifying an exporter

Opened this issue · 2 comments

Is your feature request related to a problem? Please describe

For some use cases, it might be beneficial to use this module even without specifying an exporter at all, or "exporting" the traces by printing/logging.

Use cases:

  • Running the same code in different environments (local/test/staging/production) is useful, even if some of the environments don't have a service to export the traces to. If the otel module is not loaded in other environments, a bug might only be discovered in production!
  • Enabling the otel module might be useful even if the traces are not exported anywhere. By propagating the context, the trace id and parent span id can still be logged in all services to enable log correlation.

Describe the solution you'd like

Don't require an otel_exporter section at all, or allow configuring a printing/logging exporter in otel_exporter section.

Describe alternatives you've considered

Alternatively, only require otel_exporter section if tracing on; is used in a location block. tracing off; would not require it. This is the "worst" option in my opinion, but would also be a workaround to allow enabling the module.

Additional context

None

You should be able to use module without otel_exporter today, if there are no explicit otel_trace directives, which is quite close to the "worst" alternative above. Another "creative" workaround is to use dummy exporter (exporter errors do not block traffic processing) and/or set "forever" interval.

However, running without exporter or even with "logging exporter" won't be "the same code", as the bulk of module's logic is dedicated to gRPC export.

There might be some value in "logging exporter", but it seems rather limited, given otelcol project provides binaries for many platforms.

You should be able to use module without otel_exporter today, if there are no explicit otel_trace directives, which is quite close to the "worst" alternative above.

Thanks! I guess this suffices as a workaround for now.

However, running without exporter or even with "logging exporter" won't be "the same code", as the bulk of module's logic is dedicated to gRPC export.

Fair point.