Skip to content

Commit 924cff3

Browse files
authored
update rule-based sampler to config 0.4 (#377)
- update to work with config 0.4 - rename key to php_rule_based - update documentation
1 parent 0fecd8a commit 924cff3

File tree

9 files changed

+55
-45
lines changed

9 files changed

+55
-45
lines changed

README.md

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1-
# Contrib Sampler
1+
# RuleBasedSampler
22

3-
Provides additional samplers that are not part of the official specification.
3+
Allows sampling based on a list of rule sets.
44

55
## Installation
66

77
```shell
88
composer require open-telemetry/sampler-rule-based
99
```
1010

11-
## RuleBasedSampler
11+
## Usage
1212

13-
Allows sampling based on a list of rule sets. The first matching rule set will decide the sampling result.
13+
Provide a list of `RuleSet` instances and a fallback sampler to the `RuleBasedSampler` constructor. Each rule set
14+
contains a list of rules and a delegate sampler to execute if the rule matches. The rules are evaluated in the order
15+
they are defined. The first matching rule set will decide the sampling result.
16+
17+
If no rules match, then the fallback sampler is used.
1418

1519
```php
1620
$sampler = new RuleBasedSampler(
@@ -27,12 +31,29 @@ $sampler = new RuleBasedSampler(
2731
);
2832
```
2933

30-
### Configuration
34+
## Configuration
3135

32-
###### Example: drop spans for the /health endpoint
36+
The RuleBased sampler can be configured through [Declarative Configuration](https://opentelemetry.io/docs/specs/otel/configuration/#declarative-configuration), using the
37+
key `php_rule_based` under `tracer_provider.sampler.sampler`:
3338

3439
```yaml
35-
contrib_rule_based:
40+
file_format: "0.4"
41+
42+
tracer_provider:
43+
sampler:
44+
php_rule_based:
45+
rule_sets:
46+
# ...
47+
fallback:
48+
# ...
49+
```
50+
51+
### Examples
52+
53+
Drop spans for the /health endpoint:
54+
55+
```yaml
56+
php_rule_based:
3657
rule_sets:
3758
- rules:
3859
- span_kind: { kind: SERVER }
@@ -42,21 +63,21 @@ contrib_rule_based:
4263
fallback: # ...
4364
```
4465
45-
###### Example: sample spans with at least one sampled link
66+
Sample spans with at least one sampled link:
4667
4768
```yaml
48-
contrib_rule_based:
69+
php_rule_based:
4970
rule_sets:
5071
- rules: [ link: { sampled: true } ]
5172
delegate:
5273
always_on: {}
5374
fallback: # ...
5475
```
5576
56-
###### Example: modeling parent based sampler as rule based sampler
77+
Modeling parent-based sampler as rule-based sampler:
5778
5879
```yaml
59-
rule_based:
80+
php_rule_based:
6081
rule_sets:
6182
- rules: [ parent: { sampled: true, remote: true } ]
6283
delegate: # remote_parent_sampled
@@ -67,21 +88,4 @@ rule_based:
6788
- rules: [ parent: { sampled: false, remote: false } ]
6889
delegate: # local_parent_not_sampled
6990
fallback: # root
70-
```
71-
72-
## AlwaysRecordingSampler
73-
74-
Records all spans to allow the usage of span processors that generate metrics from spans.
75-
76-
```php
77-
$sampler = new AlwaysRecordingSampler(
78-
new ParentBasedSampler(new AlwaysOnSampler()),
79-
);
80-
```
81-
82-
### Configuration
83-
84-
```yaml
85-
always_recording:
86-
sampler: # ...
87-
```
91+
```

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"php": "^8.1",
88
"open-telemetry/api": "^1.1.0",
99
"open-telemetry/sdk": "^1.1.0",
10-
"open-telemetry/sdk-configuration": "^0.0.5"
10+
"open-telemetry/sdk-configuration": "^0.0.9"
1111
},
1212
"require-dev": {
1313
"symfony/config": "^5.4 || ^6.4 || ^7.0",

src/ComponentProvider/SamplerRuleBased.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule;
1414
use OpenTelemetry\SDK\Trace\SamplerInterface;
1515
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
16+
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
1617

1718
/**
1819
* @implements ComponentProvider<SamplerInterface>
@@ -49,17 +50,17 @@ public function createPlugin(array $properties, Context $context): SamplerInterf
4950
);
5051
}
5152

52-
public function getConfig(ComponentProviderRegistry $registry): ArrayNodeDefinition
53+
public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
5354
{
54-
$node = new ArrayNodeDefinition('contrib_rule_based');
55+
$node = $builder->arrayNode('php_rule_based');
5556

5657
/** @psalm-suppress PossiblyNullReference */
5758
$node
5859
->children()
5960
->arrayNode('rule_sets')
6061
->arrayPrototype()
6162
->children()
62-
->append($registry->componentArrayList('rules', SamplingRule::class)->isRequired()->cannotBeEmpty())
63+
->append($registry->componentList('rules', SamplingRule::class)->isRequired()->cannotBeEmpty())
6364
->append($registry->component('delegate', SamplerInterface::class)->isRequired())
6465
->end()
6566
->end()

src/ComponentProvider/SamplingRuleAttribute.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule;
1212
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule\AttributeRule;
1313
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
14+
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
1415

1516
/**
1617
* @implements ComponentProvider<SamplingRule>
@@ -33,9 +34,9 @@ public function createPlugin(array $properties, Context $context): SamplingRule
3334
);
3435
}
3536

36-
public function getConfig(ComponentProviderRegistry $registry): ArrayNodeDefinition
37+
public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
3738
{
38-
$node = new ArrayNodeDefinition('attribute');
39+
$node = $builder->arrayNode('attribute');
3940

4041
/** @psalm-suppress PossiblyNullReference */
4142
$node

src/ComponentProvider/SamplingRuleLink.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule;
1111
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule\LinkRule;
1212
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
13+
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
1314

1415
/**
1516
* @implements ComponentProvider<SamplingRule>
@@ -31,9 +32,9 @@ public function createPlugin(array $properties, Context $context): SamplingRule
3132
);
3233
}
3334

34-
public function getConfig(ComponentProviderRegistry $registry): ArrayNodeDefinition
35+
public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
3536
{
36-
$node = new ArrayNodeDefinition('link');
37+
$node = $builder->arrayNode('link');
3738

3839
/** @psalm-suppress PossiblyNullReference */
3940
$node

src/ComponentProvider/SamplingRuleParent.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule;
1111
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule\ParentRule;
1212
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
13+
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
1314

1415
/**
1516
* @implements ComponentProvider<SamplingRule>
@@ -31,9 +32,9 @@ public function createPlugin(array $properties, Context $context): SamplingRule
3132
);
3233
}
3334

34-
public function getConfig(ComponentProviderRegistry $registry): ArrayNodeDefinition
35+
public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
3536
{
36-
$node = new ArrayNodeDefinition('parent');
37+
$node = $builder->arrayNode('parent');
3738

3839
/** @psalm-suppress PossiblyNullReference */
3940
$node

src/ComponentProvider/SamplingRuleSpanKind.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule;
1212
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule\SpanKindRule;
1313
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
14+
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
1415

1516
/**
1617
* @implements ComponentProvider<SamplingRule>
@@ -36,9 +37,9 @@ public function createPlugin(array $properties, Context $context): SamplingRule
3637
);
3738
}
3839

39-
public function getConfig(ComponentProviderRegistry $registry): ArrayNodeDefinition
40+
public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
4041
{
41-
$node = new ArrayNodeDefinition('span_kind');
42+
$node = $builder->arrayNode('span_kind');
4243

4344
/** @psalm-suppress PossiblyNullReference */
4445
$node

src/ComponentProvider/SamplingRuleSpanName.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule;
1212
use OpenTelemetry\Contrib\Sampler\RuleBased\SamplingRule\SpanNameRule;
1313
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
14+
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
1415

1516
/**
1617
* @implements ComponentProvider<SamplingRule>
@@ -31,9 +32,9 @@ public function createPlugin(array $properties, Context $context): SamplingRule
3132
);
3233
}
3334

34-
public function getConfig(ComponentProviderRegistry $registry): ArrayNodeDefinition
35+
public function getConfig(ComponentProviderRegistry $registry, NodeBuilder $builder): ArrayNodeDefinition
3536
{
36-
$node = new ArrayNodeDefinition('span_name');
37+
$node = $builder->arrayNode('span_name');
3738

3839
/** @psalm-suppress PossiblyNullReference */
3940
$node

tests/Integration/config/sdk-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
file_format: "0.3"
1+
file_format: "0.4"
22

33
tracer_provider:
44
sampler:
5-
contrib_rule_based:
5+
php_rule_based:
66
rule_sets:
77
- rules:
88
- attribute: {key: is.important, pattern: ~false~ }

0 commit comments

Comments
 (0)