Skip to content

Commit f8c1d58

Browse files
SergeyKleymanintuibasebmorelli25
authored
Added SPAN_STACK_TRACE_MIN_DURATION configuration option (#996)
* Set g_elasticApmDirectLogLevel* to default values so that they can be used even before configuration is parsed * Added documentation for configuration options * Added options to AllOptionsMetadata.php * Added SPAN_COMPRESSION_* option names to OptionNames.php * Added Span Compression options to Config/Snapshot.php * Added COMPRESSION_STRATEGY_* constants * Added implementation * Added Span Compression related options to src/ext/ConfigManager.c * Added Span Compression related options to src/ext/ConfigManager.h * Added Span Compression related options to src/ext/elastic_apm.c * Added Span Compression related options to tests/ElasticApmTests/ComponentTests/ConfigSettingTest.php * MySQLiTest: Disable Span Compression feature to have all the expected spans individually * PDOTest: Disable Span Compression feature to have all the expected spans individually * Added tests/ElasticApmTests/ComponentTests/SpanCompressionComponentTest.php * Clarified comment about "Disable Span Compression" * StackTraceComponentTest: Disable Span Compression feature to have all the expected spans individually * Added TracerUnitTestCaseBase::isCompatibleWithSpanCompression * InferredSpansBuilderTest: Disable Span Compression feature to have all the expected spans individually * StackTraceUnitTest: Disable Span Compression feature to have all the expected spans individually * Added tests/ElasticApmTests/UnitTests/SpanCompressionUnitTest.php * Added tests\ElasticApmTests\Util\AssertValidTrait::assertValidNonNullableString * Updated ElasticApmTests\Util\SpanDto * Updated SpanExpectations * Added optional dbgParamName for better diagnostics * Distinguish between plugin name and keywords Both name and keywords can be used to disable a plugin * Removed unused imports * Added 'internal-func' to names related to existing instrumentation (part 2) to distinguish from other instrumentation mechanisms (for example the upcoming AST processing based) * Added 'internal-func' to names related to existing instrumentation (part 3) to distinguish from other instrumentation mechanisms (for example the upcoming AST processing based) * Added 'internal-func' to names related to existing instrumentation (part 3) to distinguish from other instrumentation mechanisms (for example the upcoming AST processing based) * Added verifyExactArgsCount * Implemented WordPress instrumentation - part 1 * Added AST_PROCESS_* options to AllOptionsMetadata.php * Added option names to OptionNames.php * Added AST processing options to Config/Snapshot.php * Switch to span types wordpress_plugin and wordpress_theme * Fixed issue with assertDirectoryDoesNotExist assertDirectoryDoesNotExist that was added only in PHPUnit 9 and it does not exist in PHPUnit 8.5 that we still use when testing under older PHP versions * Removed unused imports * Added isStringViewSuffix * Added new .c files to src/ext/config.m4 * Added AST processing related options to src/ext/ConfigManager.c * Added AST processing related options to src/ext/ConfigManager.h * Added ELASTIC_APM_WORDPRESS_DIRECT_CALL_METHOD_SET_READY_TO_WRAP_FILTER_CALLBACKS* constants * Added AST processing related options to src/ext/elastic_apm.c * Added AST processing related API from extension (native part) to PHP part of the agent * Added AST processing related APIs to src/ext/elastic_apm_API.h * Added calls for AST processing from lifecycle stages * Instrumentation using AST processing (files src/ext/tracer_PHP_part.c|h) files src/ext/tracer_PHP_part.h and src/ext/tracer_PHP_part.c) * Removed duplicate isStringViewSuffix * Added streamZVal * Added ELASTIC_APM_PHP_TESTS_COMPARE_AST_CONVERTED_BACK_TO_SOURCE * Added AppCodeHostParams::setAgentOptionIfNotDefaultValue * Added AppCodeHostParams::setAgentOptions * Excluded WordPress mock source from static analysis * Instrumentation using AST processing (file tests/ElasticApmTests/ComponentTests/Util/ComponentTestCaseBase.php) * Added ELASTIC_APM_PHP_TESTS_COMPARE_AST_CONVERTED_BACK_TO_SOURCE (part 2) * Added AppCodeHostParams::setAgentOptionIfNotDefaultValue (part 2) * Moved ArrayUtil::append back to ArrayUtilForTests::append * Removed unused imports * Added AST processing related options to tests/ElasticApmTests/ComponentTests/ConfigSettingTest.php * Added testReferencesInArray * Added FileUtilForTests::createTempSubDir * Added missing import * Removed redundant local variable * Added clarifying comments * Reverted references of ELASTIC_APM_EMPTY_STRING_VIEW back to makeEmptyStringView() since ELASTIC_APM_EMPTY_STRING_VIEW is added in a later PR * Fixed incorrect merge * Reverted references of ELASTIC_APM_EMPTY_STRING_VIEW back to makeEmptyStringView() since ELASTIC_APM_EMPTY_STRING_VIEW is added in a later PR * Fixed incorrect merge * Added documentation for configuration options * Added options to AllOptionsMetadata.php * Added SPAN_COMPRESSION_* option names to OptionNames.php * Added Span Compression options to Config/Snapshot.php * Added COMPRESSION_STRATEGY_* constants * Added implementation * Added Span Compression related options to src/ext/ConfigManager.c * Added Span Compression related options to src/ext/ConfigManager.h * Added Span Compression related options to src/ext/elastic_apm.c * Added Span Compression related options to tests/ElasticApmTests/ComponentTests/ConfigSettingTest.php * MySQLiTest: Disable Span Compression feature to have all the expected spans individually * PDOTest: Disable Span Compression feature to have all the expected spans individually * Added tests/ElasticApmTests/ComponentTests/SpanCompressionComponentTest.php * Clarified comment about "Disable Span Compression" * StackTraceComponentTest: Disable Span Compression feature to have all the expected spans individually * Added TracerUnitTestCaseBase::isCompatibleWithSpanCompression * InferredSpansBuilderTest: Disable Span Compression feature to have all the expected spans individually * StackTraceUnitTest: Disable Span Compression feature to have all the expected spans individually * Added tests/ElasticApmTests/UnitTests/SpanCompressionUnitTest.php * Added tests\ElasticApmTests\Util\AssertValidTrait::assertValidNonNullableString * Updated ElasticApmTests\Util\SpanDto * Updated SpanExpectations * Removed unused imports * Extended span compression to spans without service target * Removed redundant comment * Clarified docs * Added workaround for false positives from static analysis * Simplified parallel-lint invocation * Fixed unit tests failing on PHP 7.2 * Fixed issue found by static analysis * Fixed formatting * Fixed formatting * Added --exclude ./tests/polyfills/ * Removed TestCaseBaseShim * Fixed failing unit test * Added ELASTIC_APM_PHP_TESTS_IS_LONG_RUN_MODE * Reduced number of datasets from dataProviderForTestReasonsCompressionStops * Run testOneCompressedSequence only in isLongRunMode * Added check for isLongRunMode dataProviderForTestReasonsCompressionStops * Fixed static analysis issue * Fixed failing unit tests * Removed unused import * Fixed merge * Fixed merge * Fixed merge * Fixed merge * Temporarily hide TransactionMaxSpansUnitTest behind isLongRunMode * Temporarily disable unit tests * Fixed unit tests * Added diagnostics * Fixed failing unit tests * Added re-run with escalated log level to HttpTransactionTest::testHttpStatus * Fixed failing component test * Revert "Temporarily disable unit tests" This reverts commit 3c26cc5. * Re-enabled SpanCompressionUnitTest::testReasonsCompressionStops * Fixed merge * Temporarily disabled component tests * Fixed bad merge * Temporarily run only PDOAutoInstrumentationTest * Fixed merge * Re-enabled component tests * Fixed line endings * Fixed line endings (CRLF -> LF) * Fixed not cleaning up connection data in sync backend comm. mode * Fixed not joining background sender thread if there was fork Fixed not joining background sender thread if there was fork after module init * Fixed system.container.id being detected but not stored in metadata * Added component test for metadata's system.container.id detection * Updated docs for service_node_name configuration option * Set metadata's service.framework to WordPress/<version> * Added check for stack trace to WordPressAutoInstrumentationTest * Fixed ErrorComponentTest * Fixed ErrorComponentTest * Added WordPress and MySQLi to supported technologies * Converted file path to Linux directory separators * Added count for number of calls to WordPressFilterCallbackWrapper ctor/dtor For supportability and component tests * Replaced emalloc in cloneAstDecl with an array on stack * Run composer install with retries for unit tests as well * Converted StackTraceUtil from static class to class with instance state * Added option part 1 * Remove outdated comment * Added AssertMessageStack begin/end markers * Added verification of top stack frame in WordPressAutoInstrumentationTest * Make all properties of StackTraceFrameExpectations be Optional * Made StackTraceUtil instance class * Refactored call stack trace capturing code * Refactor AutoInstrumentationUtil->captureCurrentSpan * Fixed static analysis failure * Use StackTraceFrameExpectations for $expectedCallbackStackTraceTopFrame * Added docs for stack_trace_limit config * Added tests * Fixed failing component test * Removed redundant import * Added timestamps to static-check-unit-test.sh * Added timeout to .phpt tests runs * Added SPAN_STACK_TRACE_MIN_DURATION config to native part * Removed unrelated changes * Removed ELASTIC_APM_PHP_TESTS_PHPT_TIMEOUT_SECONDS * Use fixed run-tests.php from PHP8.0 * modified run-tests.php * disabled non-blocking read on std streams * changed reading method * Added test for config STACK_TRACE_LIMIT for inferred spans * Updated documentation * Removed redundant redirection * Removed redundant comments * Revert changes related to phpt_timeout to merge them separately * Added documentation * Allow any integer value for STACK_TRACE_LIMIT * Added adaptToSmoke to StackTraceLimitComponentTest * Fixed $cachedStackTraceLimitConfig type hint * Removed redundant static analysis suppression * Updated description in the documentation * Implemented SPAN_STACK_TRACE_MIN_DURATION (production code) * Added tests for SPAN_STACK_TRACE_MIN_DURATION * Added tests for SPAN_STACK_TRACE_MIN_DURATION part 2 * Fixed failing SpanStackTraceComponentTest * Update docs/configuration.asciidoc Co-authored-by: Brandon Morelli <[email protected]> * Updated documentation * Refactored to disableTimingDependentFeatures * Removed redundant import * Fix issue found by static analysis * Update docs/configuration.asciidoc Co-authored-by: Brandon Morelli <[email protected]> * Fixed wording in SPAN_STACK_TRACE_MIN_DURATION description --------- Co-authored-by: Pawel Filipczak <[email protected]> Co-authored-by: Brandon Morelli <[email protected]>
1 parent d41a80f commit f8c1d58

23 files changed

+396
-25
lines changed

docs/configuration.asciidoc

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,39 @@ This configuration option supports the duration suffixes: `ms`, `s` and `m`.
683683
For example: `10ms`.
684684
This option's default unit is `ms`, so `5` is interpreted as `5ms`.
685685

686+
[float]
687+
[[config-span-stack-trace-min-duration]]
688+
==== `span_stack_trace_min_duration`
689+
690+
[options="header"]
691+
|============
692+
| Environment variable name | Option name in `php.ini`
693+
| `ELASTIC_APM_SPAN_STACK_TRACE_MIN_DURATION` | `elastic_apm.span_stack_trace_min_duration`
694+
|============
695+
696+
[options="header"]
697+
|============
698+
| Default | Type
699+
| `5ms` | Duration
700+
|============
701+
702+
While it might be very helpful to have stack trace attached to a span,
703+
collecting stack traces does have some overhead.
704+
This configuration controls the minimum span duration at which stack traces are collected.
705+
A higher value means lower overhead as stack trace collection is skipped for quick spans.
706+
707+
Set this config to:
708+
709+
- any positive value (e.g. `5ms`) - to limit stack trace collection to spans with duration
710+
equal to or greater than the given value (e.g. 5 milliseconds)
711+
- `0` (or `0` with any duration units e.g. `0ms`) - to collect stack traces
712+
for spans with any duration
713+
- any negative value (e.g. `-1ms`) - to disable stack trace collection for spans completely
714+
715+
This configuration option supports the duration suffixes: `ms`, `s` and `m`.
716+
For example: `10ms`.
717+
This option's default unit is `ms`, so `5` is interpreted as `5ms`.
718+
686719
[float]
687720
[[config-stack-trace-limit]]
688721
==== `stack_trace_limit`

src/ElasticApm/Impl/Config/AllOptionsMetadata.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ private static function buildDurationMetadataInMillisecondsWithMin(int $min, int
5050
return new DurationOptionMetadata(floatval($min), /* max */ null, DurationUnits::MILLISECONDS, floatval($default));
5151
}
5252

53+
private static function buildDurationMetadataInMillisecondsNoMin(int $default): DurationOptionMetadata
54+
{
55+
return new DurationOptionMetadata(/* min */ null, /* max */ null, DurationUnits::MILLISECONDS, floatval($default));
56+
}
57+
5358
private static function buildDurationMetadataInMilliseconds(int $default): DurationOptionMetadata
5459
{
5560
return self::buildDurationMetadataInMillisecondsWithMin(/* min */ 0, $default);
@@ -107,6 +112,7 @@ public static function get(): array
107112
OptionNames::SPAN_COMPRESSION_ENABLED => new BoolOptionMetadata(/* default */ true),
108113
OptionNames::SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION => self::buildDurationMetadataInMilliseconds(/* default */ 50),
109114
OptionNames::SPAN_COMPRESSION_SAME_KIND_MAX_DURATION => self::buildDurationMetadataInMilliseconds(/* default */ 0),
115+
OptionNames::SPAN_STACK_TRACE_MIN_DURATION => self::buildDurationMetadataInMillisecondsNoMin(/* default */ OptionDefaultValues::SPAN_STACK_TRACE_MIN_DURATION),
110116
OptionNames::STACK_TRACE_LIMIT => new IntOptionMetadata(/* min */ null, /* max */ null, /* default */ OptionDefaultValues::STACK_TRACE_LIMIT),
111117
OptionNames::TRANSACTION_IGNORE_URLS => new NullableWildcardListOptionMetadata(),
112118
OptionNames::TRANSACTION_MAX_SPANS => self::buildPositiveOrZeroIntMetadata(OptionDefaultValues::TRANSACTION_MAX_SPANS),

src/ElasticApm/Impl/Config/OptionDefaultValues.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ final class OptionDefaultValues
3434
{
3535
use StaticClassTrait;
3636

37+
public const SPAN_STACK_TRACE_MIN_DURATION = 5;
3738
public const STACK_TRACE_LIMIT = 50;
3839
public const TRANSACTION_MAX_SPANS = 500;
3940
}

src/ElasticApm/Impl/Config/OptionNames.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ final class OptionNames
6666
public const SPAN_COMPRESSION_ENABLED = 'span_compression_enabled';
6767
public const SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION = 'span_compression_exact_match_max_duration';
6868
public const SPAN_COMPRESSION_SAME_KIND_MAX_DURATION = 'span_compression_same_kind_max_duration';
69+
public const SPAN_STACK_TRACE_MIN_DURATION = 'span_stack_trace_min_duration';
6970
public const STACK_TRACE_LIMIT = 'stack_trace_limit';
7071
public const TRANSACTION_IGNORE_URLS = 'transaction_ignore_urls';
7172
public const TRANSACTION_MAX_SPANS = 'transaction_max_spans';

src/ElasticApm/Impl/Config/Snapshot.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,9 @@ final class Snapshot implements LoggableInterface
188188
/** @var float */
189189
private $spanCompressionSameKindMaxDuration;
190190

191+
/** @var float */
192+
private $spanStackTraceMinDuration;
193+
191194
/** @var int */
192195
private $stackTraceLimit;
193196

@@ -371,6 +374,11 @@ public function spanCompressionSameKindMaxDuration(): float
371374
return $this->spanCompressionSameKindMaxDuration;
372375
}
373376

377+
public function spanStackTraceMinDuration(): float
378+
{
379+
return $this->spanStackTraceMinDuration;
380+
}
381+
374382
public function stackTraceLimit(): int
375383
{
376384
return $this->stackTraceLimit;

src/ElasticApm/Impl/InferredSpansBuilder.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,15 @@ private function buildStackTrace(int $forFrameIndex, ?ClassicFormatStackTraceFra
186186
private function sendFrameAsSpan(int $openFrameIndex, string $parentId, ?ClassicFormatStackTraceFrame $frameCopy, ?int $frameCopyIndex): void
187187
{
188188
$frame = $this->openFramesReverseOrder[$openFrameIndex];
189-
$stackTrace = ($maxNumberOfFrames = StackTraceUtil::convertLimitConfigToMaxNumberOfFrames($this->transaction->getStackTraceLimitConfig())) === 0
190-
? null
191-
: $this->tracer->stackTraceUtil()->convertClassicToApmFormat($this->buildStackTrace($openFrameIndex, $frameCopy, $frameCopyIndex), $maxNumberOfFrames);
189+
$stackTrace = null;
190+
/** @var float $spanDurationInMilliseconds */
191+
$spanDurationInMilliseconds = $frame->duration;
192+
if (
193+
$this->transaction->shouldCollectStackTraceForSpanDuration($spanDurationInMilliseconds)
194+
&& (($maxNumberOfFrames = StackTraceUtil::convertLimitConfigToMaxNumberOfFrames($this->transaction->getStackTraceLimitConfig())) !== 0)
195+
) {
196+
$stackTrace = $this->tracer->stackTraceUtil()->convertClassicToApmFormat($this->buildStackTrace($openFrameIndex, $frameCopy, $frameCopyIndex), $maxNumberOfFrames);
197+
}
192198
$frame->prepareForSerialization($this->transaction, $parentId, $stackTrace);
193199
$this->tracer->sendSpanToApmServer($frame);
194200
}

src/ElasticApm/Impl/Span.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,9 @@ public function endSpanEx(int $numberOfStackFramesToSkip, ?float $duration = nul
481481
$this->onAboutToEnd->callCallbacks($this);
482482

483483
if ($this->shouldBeSentToApmServer()) {
484-
$this->stackTrace = $this->containingTransaction->captureApmFormatStackTrace($numberOfStackFramesToSkip + 1);
484+
if ($this->containingTransaction->shouldCollectStackTraceForSpanDuration($this->duration)) {
485+
$this->stackTrace = $this->containingTransaction->captureApmFormatStackTrace($numberOfStackFramesToSkip + 1);
486+
}
485487
$this->prepareForSerialization();
486488
$this->parentExecutionSegment->onChildSpanEnded($this);
487489
}

src/ElasticApm/Impl/Transaction.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ final class Transaction extends ExecutionSegment implements TransactionInterface
9999
/** @var ?int */
100100
private $cachedStackTraceLimitConfig = null;
101101

102+
/** @var ?float */
103+
private $cachedSpanStackTraceMinDurationConfig = null;
104+
102105
public function __construct(TransactionBuilder $builder)
103106
{
104107
$this->tracer = $builder->tracer;
@@ -594,6 +597,40 @@ public function getStackTraceLimitConfig(): int
594597
return $this->cachedStackTraceLimitConfig;
595598
}
596599

600+
private function getSpanStackTraceMinDurationConfig(): float
601+
{
602+
if ($this->cachedSpanStackTraceMinDurationConfig === null) {
603+
$this->cachedSpanStackTraceMinDurationConfig = $this->getConfig()->spanStackTraceMinDuration();
604+
605+
/**
606+
* span_stack_trace_min_duration
607+
* 0 - collect stack traces for spans with any duration
608+
* any positive value - it limits stack trace collection to spans with duration equal to or greater than
609+
* any negative value - it disable stack trace collection for spans completely
610+
*/
611+
$msgPrefix = $this->cachedSpanStackTraceMinDurationConfig === 0.0
612+
? 'Span stack trace collection is enabled for spans with any duration'
613+
: ($this->cachedSpanStackTraceMinDurationConfig < 0
614+
? 'Span stack trace collection is DISABLED for spans with any duration'
615+
: 'Span stack trace collection is enabled for spans with duration >= ' . $this->cachedSpanStackTraceMinDurationConfig . ' ms');
616+
($loggerProxy = $this->logger->ifDebugLevelEnabled(__LINE__, __FUNCTION__))
617+
&& $loggerProxy->log($msgPrefix . ' (set by configuration option `' . OptionNames::SPAN_STACK_TRACE_MIN_DURATION . '\')');
618+
}
619+
620+
return $this->cachedSpanStackTraceMinDurationConfig;
621+
}
622+
623+
public function shouldCollectStackTraceForSpanDuration(float $durationInMilliseconds): bool
624+
{
625+
/**
626+
* span_stack_trace_min_duration
627+
* 0 - collect stack traces for spans with any duration
628+
* any positive value - it limits stack trace collection to spans with duration equal to or greater than
629+
* any negative value - it disable stack trace collection for spans completely
630+
*/
631+
return (($stackTraceMinDuration = $this->getSpanStackTraceMinDurationConfig()) >= 0) && $durationInMilliseconds >= $stackTraceMinDuration;
632+
}
633+
597634
/**
598635
* @param int $numberOfStackFramesToSkip
599636
*

src/ext/ConfigManager.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,7 @@ ELASTIC_APM_DEFINE_FIELD_ACCESS_FUNCS( stringValue, serviceVersion )
807807
ELASTIC_APM_DEFINE_FIELD_ACCESS_FUNCS( boolValue, spanCompressionEnabled )
808808
ELASTIC_APM_DEFINE_FIELD_ACCESS_FUNCS( stringValue, spanCompressionExactMatchMaxDuration )
809809
ELASTIC_APM_DEFINE_FIELD_ACCESS_FUNCS( stringValue, spanCompressionSameKindMaxDuration )
810+
ELASTIC_APM_DEFINE_FIELD_ACCESS_FUNCS( stringValue, spanStackTraceMinDuration )
810811
ELASTIC_APM_DEFINE_FIELD_ACCESS_FUNCS( stringValue, stackTraceLimit )
811812
ELASTIC_APM_DEFINE_FIELD_ACCESS_FUNCS( stringValue, transactionIgnoreUrls )
812813
ELASTIC_APM_DEFINE_FIELD_ACCESS_FUNCS( stringValue, transactionMaxSpans )
@@ -1146,6 +1147,12 @@ static void initOptionsMetadata( OptionMetadata* optsMeta )
11461147
ELASTIC_APM_CFG_OPT_NAME_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION,
11471148
/* defaultValue: */ NULL );
11481149

1150+
ELASTIC_APM_INIT_METADATA(
1151+
buildStringOptionMetadata,
1152+
spanStackTraceMinDuration,
1153+
ELASTIC_APM_CFG_OPT_NAME_SPAN_STACK_TRACE_MIN_DURATION,
1154+
/* defaultValue: */ NULL );
1155+
11491156
ELASTIC_APM_INIT_METADATA(
11501157
buildStringOptionMetadata,
11511158
stackTraceLimit,

src/ext/ConfigManager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ enum OptionId
109109
optionId_spanCompressionEnabled,
110110
optionId_spanCompressionExactMatchMaxDuration,
111111
optionId_spanCompressionSameKindMaxDuration,
112+
optionId_spanStackTraceMinDuration,
112113
optionId_stackTraceLimit,
113114
optionId_transactionIgnoreUrls,
114115
optionId_transactionMaxSpans,
@@ -317,6 +318,7 @@ const ConfigSnapshot* getGlobalCurrentConfigSnapshot();
317318
#define ELASTIC_APM_CFG_OPT_NAME_SPAN_COMPRESSION_ENABLED "span_compression_enabled"
318319
#define ELASTIC_APM_CFG_OPT_NAME_SPAN_COMPRESSION_EXACT_MATCH_MAX_DURATION "span_compression_exact_match_max_duration"
319320
#define ELASTIC_APM_CFG_OPT_NAME_SPAN_COMPRESSION_SAME_KIND_MAX_DURATION "span_compression_same_kind_max_duration"
321+
#define ELASTIC_APM_CFG_OPT_NAME_SPAN_STACK_TRACE_MIN_DURATION "span_stack_trace_min_duration"
320322
#define ELASTIC_APM_CFG_OPT_NAME_STACK_TRACE_LIMIT "stack_trace_limit"
321323
#define ELASTIC_APM_CFG_OPT_NAME_TRANSACTION_IGNORE_URLS "transaction_ignore_urls"
322324
#define ELASTIC_APM_CFG_OPT_NAME_TRANSACTION_MAX_SPANS "transaction_max_spans"

0 commit comments

Comments
 (0)