How do you use Sentry?
Sentry SaaS (sentry.io)
SDK version
4.9.0
Steps to reproduce
We exceeded our Sentry quota after some unusually high usage, so we started investigating. Looks like it started right when we upgraded sentry/sentry-symfony from v4 to v5. We're using environment variables in our sentry.yaml file like so:
sentry:
tracing:
enabled: '%env(bool:SENTRY_TRACING)%'
options:
traces_sample_rate: '%env(float:SENTRY_PHP_TRACES_SAMPLE_RATE)%'
...
The variables are in our .env file:
SENTRY_TRACING=false # or true for production
SENTRY_PHP_TRACES_SAMPLE_RATE=0 # or 0.01 for production
This didn't actually turn off tracing, which is unfortunate since we only want it turned on in production, and all of our other environments like dev/testing/staging were supposed to have it turned off.
The root cause is in src/DependencyInjection/SentryExtension.php which doesn't receive the fully compiled variables. Here's a hackish solution, with some var_dumps to understand what's going on:
private function registerTracingConfiguration(ContainerBuilder $container, array $config): void
{
// Outputs "env_da73b6f612a932f0_bool_SENTRY_TRACING_57d3ad6b7e96da0e8f15dbe2298f150b"
// When evaluated, this string is true-ish, so Sentry enables tracing.
var_dump($config['enabled']);
// We need to resolve any parameters first.
// Symfony doesn't support "bool:" in this stage, so we remove it and cast it to bool manually.
$enabled = $container->resolveEnvPlaceholders(str_replace($config['enabled'], 'env(bool:', 'env('), true);
if (is_string($enabled)) {
$enabled = strtolower($enabled) === 'true';
}
// Outputs false.
var_dump($enabled);
$container->setParameter('sentry.tracing.enabled', $enabled);
if (!$enabled) {
$container->removeDefinition(TracingRequestListener::class);
$container->removeDefinition(TracingSubRequestListener::class);
$container->removeDefinition(TracingConsoleListener::class);
return;
}
$container->getDefinition(TracingConsoleListener::class)->replaceArgument(1, $config['console']['excluded_commands']);
}
Same thing as a diff:
private function registerTracingConfiguration(ContainerBuilder $container, array $config): void
{
+ $enabled = $container->resolveEnvPlaceholders(str_replace($config['enabled'], 'env(bool:', 'env('), true);
+ if (is_string($enabled)) {
+ $enabled = strtolower($enabled) === 'true';
+ }
+
- $container->setParameter('sentry.tracing.enabled', $config['enabled']);
+ $container->setParameter('sentry.tracing.enabled', $enabled);
+
- if (!$this->isConfigEnabled($container, $config)) {
+ if (!$enabled) {
$container->removeDefinition(TracingRequestListener::class);
$container->removeDefinition(TracingSubRequestListener::class);
$container->removeDefinition(TracingConsoleListener::class);
return;
}
$container->getDefinition(TracingConsoleListener::class)->replaceArgument(1, $config['console']['excluded_commands']);
}
The same thing should be done for registerDbalTracingConfiguration, registerTwigTracingConfiguration, registerCacheTracingConfiguration, and probably more.
Similarly, I believe that the sample rate was parsed as 1 instead of our SENTRY_PHP_TRACES_SAMPLE_RATE=0.01. Might be a duplicate of #877. Here's our usage after we upgraded to v5 on September 18:

Expected result
enabled: '%env(bool:SENTRY_TRACING)%' with SENTRY_TRACING=false should fully disable tracing.
traces_sample_rate: '%env(float:SENTRY_PHP_TRACES_SAMPLE_RATE)%' with SENTRY_PHP_TRACES_SAMPLE_RATE=0.01 should set the sample rate to 0.01.
Actual result
enabled: '%env(bool:SENTRY_TRACING)%' with SENTRY_TRACING=false sets tracing on.
traces_sample_rate: '%env(float:SENTRY_PHP_TRACES_SAMPLE_RATE)%' with SENTRY_PHP_TRACES_SAMPLE_RATE=0.01 sets tracing to 1.
How do you use Sentry?
Sentry SaaS (sentry.io)
SDK version
4.9.0
Steps to reproduce
We exceeded our Sentry quota after some unusually high usage, so we started investigating. Looks like it started right when we upgraded
sentry/sentry-symfonyfrom v4 to v5. We're using environment variables in oursentry.yamlfile like so:The variables are in our
.envfile:This didn't actually turn off tracing, which is unfortunate since we only want it turned on in production, and all of our other environments like dev/testing/staging were supposed to have it turned off.
The root cause is in
src/DependencyInjection/SentryExtension.phpwhich doesn't receive the fully compiled variables. Here's a hackish solution, with somevar_dumps to understand what's going on:Same thing as a diff:
private function registerTracingConfiguration(ContainerBuilder $container, array $config): void { + $enabled = $container->resolveEnvPlaceholders(str_replace($config['enabled'], 'env(bool:', 'env('), true); + if (is_string($enabled)) { + $enabled = strtolower($enabled) === 'true'; + } + - $container->setParameter('sentry.tracing.enabled', $config['enabled']); + $container->setParameter('sentry.tracing.enabled', $enabled); + - if (!$this->isConfigEnabled($container, $config)) { + if (!$enabled) { $container->removeDefinition(TracingRequestListener::class); $container->removeDefinition(TracingSubRequestListener::class); $container->removeDefinition(TracingConsoleListener::class); return; } $container->getDefinition(TracingConsoleListener::class)->replaceArgument(1, $config['console']['excluded_commands']); }The same thing should be done for
registerDbalTracingConfiguration,registerTwigTracingConfiguration,registerCacheTracingConfiguration, and probably more.Similarly, I believe that the sample rate was parsed as
1instead of ourSENTRY_PHP_TRACES_SAMPLE_RATE=0.01. Might be a duplicate of #877. Here's our usage after we upgraded to v5 on September 18:Expected result
enabled: '%env(bool:SENTRY_TRACING)%'withSENTRY_TRACING=falseshould fully disable tracing.traces_sample_rate: '%env(float:SENTRY_PHP_TRACES_SAMPLE_RATE)%'withSENTRY_PHP_TRACES_SAMPLE_RATE=0.01should set the sample rate to 0.01.Actual result
enabled: '%env(bool:SENTRY_TRACING)%'withSENTRY_TRACING=falsesets tracing on.traces_sample_rate: '%env(float:SENTRY_PHP_TRACES_SAMPLE_RATE)%'withSENTRY_PHP_TRACES_SAMPLE_RATE=0.01sets tracing to 1.