From 88887dafbece010b7476b81c4bef19035bc3b516 Mon Sep 17 00:00:00 2001 From: Alex Boten Date: Wed, 24 May 2023 13:06:54 -0700 Subject: [PATCH] [processor/tailsampling] use generated status header (#22757) This PR updates the component to generate the status table using mdatagen. Linked issue: #21213 Signed-off-by: Alex Boten --- processor/tailsamplingprocessor/README.md | 22 ++++++++++--------- .../tailsamplingprocessor/config_test.go | 3 ++- processor/tailsamplingprocessor/factory.go | 13 +++++------ .../tailsamplingprocessor/factory_test.go | 4 +++- .../internal/metadata/generated_status.go | 12 ++++++++++ processor/tailsamplingprocessor/metadata.yaml | 7 ++++++ processor/tailsamplingprocessor/metrics.go | 20 +++++++++-------- 7 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 processor/tailsamplingprocessor/internal/metadata/generated_status.go create mode 100644 processor/tailsamplingprocessor/metadata.yaml diff --git a/processor/tailsamplingprocessor/README.md b/processor/tailsamplingprocessor/README.md index cfb7ae955298..f3f084614c44 100644 --- a/processor/tailsamplingprocessor/README.md +++ b/processor/tailsamplingprocessor/README.md @@ -1,10 +1,17 @@ # Tail Sampling Processor -| Status | | -| ------------------------ |-----------------------------------------| -| Stability | [beta] | -| Supported pipeline types | traces | -| Distributions | [contrib], [observiq], [splunk], [sumo] | + +| Status | | +| ------------- |-----------| +| Stability | [beta]: traces | +| Distributions | [contrib], [observiq], [splunk], [sumo] | + +[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta +[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib +[observiq]: https://github.com/observIQ/observiq-otel-collector +[splunk]: https://github.com/signalfx/splunk-otel-collector +[sumo]: https://github.com/SumoLogic/sumologic-otel-collector + The tail sampling processor samples traces based on a set of defined policies. All spans for a given trace MUST be received by the same collector instance for effective sampling decisions. @@ -207,10 +214,5 @@ As a rule of thumb, if you want to add probabilistic sampling and... ...you are already using the tail sampling processor: add the probabilistic sampling policy. You are already incurring the cost of running the tail sampling processor, adding the probabilistic policy will be negligible. Additionally, using the policy within the tail sampling processor will ensure traces that are sampled by other policies will not be dropped. -[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta -[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib [probabilistic_sampling_processor]: ../probabilisticsamplerprocessor [loadbalancing_exporter]: ../../exporter/loadbalancingexporter -[splunk]: https://github.com/signalfx/splunk-otel-collector -[observiq]: https://github.com/observIQ/observiq-otel-collector -[sumo]: https://github.com/SumoLogic/sumologic-otel-collector diff --git a/processor/tailsamplingprocessor/config_test.go b/processor/tailsamplingprocessor/config_test.go index 0dffcf532219..8ee5b5124890 100644 --- a/processor/tailsamplingprocessor/config_test.go +++ b/processor/tailsamplingprocessor/config_test.go @@ -14,6 +14,7 @@ import ( "go.opentelemetry.io/collector/confmap/confmaptest" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl" + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor/internal/metadata" ) func TestLoadConfig(t *testing.T) { @@ -25,7 +26,7 @@ func TestLoadConfig(t *testing.T) { factory := NewFactory() cfg := factory.CreateDefaultConfig() - sub, err := cm.Sub(component.NewIDWithName(typeStr, "").String()) + sub, err := cm.Sub(component.NewIDWithName(metadata.Type, "").String()) require.NoError(t, err) require.NoError(t, component.UnmarshalConfig(sub, cfg)) diff --git a/processor/tailsamplingprocessor/factory.go b/processor/tailsamplingprocessor/factory.go index 568eba9cc044..4ef95244acc3 100644 --- a/processor/tailsamplingprocessor/factory.go +++ b/processor/tailsamplingprocessor/factory.go @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +//go:generate mdatagen metadata.yaml + package tailsamplingprocessor // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor" import ( @@ -13,13 +15,8 @@ import ( "go.opentelemetry.io/collector/config/configtelemetry" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/processor" -) -const ( - // The value of "type" Tail Sampling in configuration. - typeStr = "tail_sampling" - // The stability level of the processor. - stability = component.StabilityLevelBeta + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor/internal/metadata" ) var onceMetrics sync.Once @@ -32,9 +29,9 @@ func NewFactory() processor.Factory { }) return processor.NewFactory( - typeStr, + metadata.Type, createDefaultConfig, - processor.WithTraces(createTracesProcessor, stability)) + processor.WithTraces(createTracesProcessor, metadata.TracesStability)) } func createDefaultConfig() component.Config { diff --git a/processor/tailsamplingprocessor/factory_test.go b/processor/tailsamplingprocessor/factory_test.go index e678b091430f..984e4483389d 100644 --- a/processor/tailsamplingprocessor/factory_test.go +++ b/processor/tailsamplingprocessor/factory_test.go @@ -15,6 +15,8 @@ import ( "go.opentelemetry.io/collector/confmap/confmaptest" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/processor/processortest" + + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor/internal/metadata" ) func TestCreateDefaultConfig(t *testing.T) { @@ -30,7 +32,7 @@ func TestCreateProcessor(t *testing.T) { factory := NewFactory() cfg := factory.CreateDefaultConfig() - sub, err := cm.Sub(component.NewIDWithName(typeStr, "").String()) + sub, err := cm.Sub(component.NewIDWithName(metadata.Type, "").String()) require.NoError(t, err) require.NoError(t, component.UnmarshalConfig(sub, cfg)) diff --git a/processor/tailsamplingprocessor/internal/metadata/generated_status.go b/processor/tailsamplingprocessor/internal/metadata/generated_status.go new file mode 100644 index 000000000000..d76db8b400e9 --- /dev/null +++ b/processor/tailsamplingprocessor/internal/metadata/generated_status.go @@ -0,0 +1,12 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package metadata + +import ( + "go.opentelemetry.io/collector/component" +) + +const ( + Type = "tail_sampling" + TracesStability = component.StabilityLevelBeta +) diff --git a/processor/tailsamplingprocessor/metadata.yaml b/processor/tailsamplingprocessor/metadata.yaml new file mode 100644 index 000000000000..63c745087688 --- /dev/null +++ b/processor/tailsamplingprocessor/metadata.yaml @@ -0,0 +1,7 @@ +type: tail_sampling + +status: + class: processor + stability: + beta: [traces] + distributions: [contrib, observiq, splunk, sumo] diff --git a/processor/tailsamplingprocessor/metrics.go b/processor/tailsamplingprocessor/metrics.go index 27a0e1e1b504..11b4b39e217a 100644 --- a/processor/tailsamplingprocessor/metrics.go +++ b/processor/tailsamplingprocessor/metrics.go @@ -9,6 +9,8 @@ import ( "go.opencensus.io/tag" "go.opentelemetry.io/collector/config/configtelemetry" "go.opentelemetry.io/collector/obsreport" + + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor/internal/metadata" ) // Variables related to metrics specific to tail sampling. @@ -44,34 +46,34 @@ func SamplingProcessorMetricViews(level configtelemetry.Level) []*view.View { ageDistributionAggregation := view.Distribution(1, 2, 5, 10, 20, 30, 40, 50, 60, 90, 120, 180, 300, 600, 1800, 3600, 7200) decisionLatencyView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statDecisionLatencyMicroSec.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statDecisionLatencyMicroSec.Name()), Measure: statDecisionLatencyMicroSec, Description: statDecisionLatencyMicroSec.Description(), TagKeys: policyTagKeys, Aggregation: latencyDistributionAggregation, } overallDecisionLatencyView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statOverallDecisionLatencyUs.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statOverallDecisionLatencyUs.Name()), Measure: statOverallDecisionLatencyUs, Description: statOverallDecisionLatencyUs.Description(), Aggregation: latencyDistributionAggregation, } traceRemovalAgeView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statTraceRemovalAgeSec.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statTraceRemovalAgeSec.Name()), Measure: statTraceRemovalAgeSec, Description: statTraceRemovalAgeSec.Description(), Aggregation: ageDistributionAggregation, } lateSpanArrivalView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statLateSpanArrivalAfterDecision.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statLateSpanArrivalAfterDecision.Name()), Measure: statLateSpanArrivalAfterDecision, Description: statLateSpanArrivalAfterDecision.Description(), Aggregation: ageDistributionAggregation, } countPolicyEvaluationErrorView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statPolicyEvaluationErrorCount.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statPolicyEvaluationErrorCount.Name()), Measure: statPolicyEvaluationErrorCount, Description: statPolicyEvaluationErrorCount.Description(), Aggregation: view.Sum(), @@ -79,7 +81,7 @@ func SamplingProcessorMetricViews(level configtelemetry.Level) []*view.View { sampledTagKeys := []tag.Key{tagPolicyKey, tagSampledKey} countTracesSampledView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statCountTracesSampled.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statCountTracesSampled.Name()), Measure: statCountTracesSampled, Description: statCountTracesSampled.Description(), TagKeys: sampledTagKeys, @@ -87,19 +89,19 @@ func SamplingProcessorMetricViews(level configtelemetry.Level) []*view.View { } countTraceDroppedTooEarlyView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statDroppedTooEarlyCount.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statDroppedTooEarlyCount.Name()), Measure: statDroppedTooEarlyCount, Description: statDroppedTooEarlyCount.Description(), Aggregation: view.Sum(), } countTraceIDArrivalView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statNewTraceIDReceivedCount.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statNewTraceIDReceivedCount.Name()), Measure: statNewTraceIDReceivedCount, Description: statNewTraceIDReceivedCount.Description(), Aggregation: view.Sum(), } trackTracesOnMemorylView := &view.View{ - Name: obsreport.BuildProcessorCustomMetricName(typeStr, statTracesOnMemoryGauge.Name()), + Name: obsreport.BuildProcessorCustomMetricName(metadata.Type, statTracesOnMemoryGauge.Name()), Measure: statTracesOnMemoryGauge, Description: statTracesOnMemoryGauge.Description(), Aggregation: view.LastValue(),