[opentelemetry-php-contrib] SdkBundle: OTLP exporter factory creates exporter with default values
Describe your environment Describe any aspect of your environment relevant to the problem, including your php version (php -v will tell you your current version), version numbers of installed dependencies, information about your cloud hosting provider, etc. If you're reporting a problem with a specific version of a library in this repo, please check whether the problem has been fixed on master.
Tried on both
"open-telemetry/sdk": "1.0.0",
"open-telemetry/symfony-sdk-bundle": "0.0.23",
and
"open-telemetry/sdk": "dev-main",
"open-telemetry/symfony-sdk-bundle": "dev-main",
Steps to reproduce With the config:
otel_sdk:
trace:
enabled: true
span:
processors: simple
exporters:
- "otlp+grpc://otel-col:4317"
- "otlp+http://otel-col:4318"
The OTLP span exporters are created with default values for protocol and endpoint instead of the values defined in the config.
I guess the SdkBundle is not setting the values in the config the factory is trying to access.
What is the expected behavior? Exporters configured as I specified
What is the actual behavior? Exporters configured with default values
I have same issue. URL for configuration always taking from \OpenTelemetry\SDK\Common\Configuration\Defaults.
Using environment parameter OTEL_EXPORTER_ZIPKIN_ENDPOINT with my settings only works.
You have to look at https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md
Workaround if you only require a simple setup (one processor, one exporter, etc.):
- Remove
OtelSDKBundle - Set up with Zero-code configuration for automatic instrumentation
- Add the components you need as synthetic services
e.g. if you want to use TracerProviderInterface via DI, you add this to your config:
OpenTelemetry\API\Trace\TracerProviderInterface:
synthetic: true
and then somewhere appropriate in your Kernel you just inject it into the container:
protected function initializeContainer(): void
{
parent::initializeContainer();
/**
* @psalm-suppress MixedMethodCall
*/
$this->container->set("OpenTelemetry\API\Trace\TracerProviderInterface", Globals::tracerProvider());
}