Skip to content
This repository was archived by the owner on Nov 7, 2022. It is now read-only.

Commit 4fdfb60

Browse files
author
Bogdan Drutu
authored
Remove trace/metrics exporter sinks. (#426)
* Remove trace/metrics exporter sinks. * Fix naming in exporter_processor
1 parent cc82107 commit 4fdfb60

19 files changed

Lines changed: 121 additions & 276 deletions

File tree

cmd/ocagent/main.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131
"go.uber.org/zap"
3232
"go.uber.org/zap/zapcore"
3333

34-
"github.com/census-instrumentation/opencensus-service/exporter"
3534
"github.com/census-instrumentation/opencensus-service/internal"
3635
"github.com/census-instrumentation/opencensus-service/internal/config"
3736
"github.com/census-instrumentation/opencensus-service/internal/config/viperutils"
@@ -89,8 +88,8 @@ func runOCAgent() {
8988
log.Fatalf("Config: failed to create exporters from YAML: %v", err)
9089
}
9190

92-
commonSpanSink := exporter.MultiTraceExporters(traceExporters...)
93-
commonMetricsSink := exporter.MultiMetricsExporters(metricsExporters...)
91+
commonSpanSink := processor.NewMultiTraceDataProcessor(traceExporters)
92+
commonMetricsSink := processor.NewMultiMetricsDataProcessor(metricsExporters)
9493

9594
// Add other receivers here as they are implemented
9695
ocReceiverDoneFn, err := runOCReceiver(logger, agentConfig, commonSpanSink, commonMetricsSink)

cmd/occollector/app/collector/processors.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@ import (
2626

2727
"github.com/census-instrumentation/opencensus-service/cmd/occollector/app/builder"
2828
"github.com/census-instrumentation/opencensus-service/cmd/occollector/app/sender"
29-
"github.com/census-instrumentation/opencensus-service/exporter"
3029
"github.com/census-instrumentation/opencensus-service/internal/collector/processor"
3130
"github.com/census-instrumentation/opencensus-service/internal/collector/processor/nodebatcher"
3231
"github.com/census-instrumentation/opencensus-service/internal/collector/processor/queued"
33-
"github.com/census-instrumentation/opencensus-service/internal/collector/processor/tail_sampling"
32+
tailsampling "github.com/census-instrumentation/opencensus-service/internal/collector/processor/tail_sampling"
3433
"github.com/census-instrumentation/opencensus-service/internal/collector/sampling"
3534
"github.com/census-instrumentation/opencensus-service/internal/config"
35+
mainprocessor "github.com/census-instrumentation/opencensus-service/processor"
3636
)
3737

38-
func createExporters(v *viper.Viper, logger *zap.Logger) ([]func(), []exporter.TraceExporter, []exporter.MetricsExporter) {
38+
func createExporters(v *viper.Viper, logger *zap.Logger) ([]func(), []mainprocessor.TraceDataProcessor, []mainprocessor.MetricsDataProcessor) {
3939
// TODO: (@pjanotti) this is slightly modified from agent but in the end duplication, need to consolidate style and visibility.
4040
traceExporters, metricsExporters, doneFns, err := config.ExportersFromViperConfig(logger, v)
4141
if err != nil {
File renamed without changes.

exporter/awsexporter/aws_xray.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ import (
2727
"github.com/spf13/viper"
2828

2929
"github.com/census-instrumentation/opencensus-service/data"
30-
"github.com/census-instrumentation/opencensus-service/exporter"
31-
"github.com/census-instrumentation/opencensus-service/exporter/exporterparser"
30+
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
31+
"github.com/census-instrumentation/opencensus-service/processor"
3232
)
3333

3434
const defaultVersionForAWSXRayApplications = "latest"
@@ -57,11 +57,11 @@ type awsXRayExporter struct {
5757
defaultOptions []xray.Option
5858
}
5959

60-
var _ exporter.TraceExporter = (*awsXRayExporter)(nil)
60+
var _ processor.TraceDataProcessor = (*awsXRayExporter)(nil)
6161

62-
// AWSXRayTraceExportersFromViper unmarshals the viper and returns an exporter.TraceExporter targeting
62+
// AWSXRayTraceExportersFromViper unmarshals the viper and returns an processor.TraceDataProcessor targeting
6363
// AWS X-Ray according to the configuration settings.
64-
func AWSXRayTraceExportersFromViper(v *viper.Viper) (tes []exporter.TraceExporter, mes []exporter.MetricsExporter, doneFns []func() error, err error) {
64+
func AWSXRayTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
6565
var cfg struct {
6666
AWSXRay *awsXRayConfig `mapstructure:"aws-xray"`
6767
}
@@ -84,12 +84,12 @@ func AWSXRayTraceExportersFromViper(v *viper.Viper) (tes []exporter.TraceExporte
8484
defaultServiceName: xc.DefaultServiceName,
8585
}
8686

87-
tes = append(tes, axe)
87+
tdps = append(tdps, axe)
8888
doneFns = append(doneFns, func() error {
8989
axe.Flush()
9090
return nil
9191
})
92-
return tes, mes, doneFns, nil
92+
return
9393
}
9494

9595
// Flush invokes .Flush() for every one of its underlying exporters.
@@ -146,13 +146,13 @@ func transformConfigToXRayOptions(axrCfg *awsXRayConfig) (xopts []xray.Option, e
146146

147147
// ExportSpans is the method that translates OpenCensus-Proto Traces into AWS X-Ray spans.
148148
// It uniquely maintains
149-
func (axe *awsXRayExporter) ExportSpans(ctx context.Context, td data.TraceData) (xerr error) {
149+
func (axe *awsXRayExporter) ProcessTraceData(ctx context.Context, td data.TraceData) (xerr error) {
150150
ctx, span := trace.StartSpan(ctx,
151151
"opencensus.service.exporter.aws_xray.ExportSpans",
152152
trace.WithSampler(trace.NeverSample()))
153153

154154
defer func() {
155-
if xerr != nil {
155+
if xerr != nil && span.IsRecordingEvents() {
156156
span.SetStatus(trace.Status{
157157
Code: int32(trace.StatusCodeUnknown),
158158
Message: xerr.Error(),
@@ -165,15 +165,17 @@ func (axe *awsXRayExporter) ExportSpans(ctx context.Context, td data.TraceData)
165165
if serviceName == "" {
166166
serviceName = axe.defaultServiceName
167167
}
168-
span.Annotate([]trace.Attribute{
169-
trace.StringAttribute("service_name", serviceName),
170-
}, "")
168+
if span.IsRecordingEvents() {
169+
span.Annotate([]trace.Attribute{
170+
trace.StringAttribute("service_name", serviceName),
171+
}, "")
172+
}
171173

172174
exp, err := axe.getOrMakeExporterByServiceName(serviceName)
173175
if err != nil {
174176
return err
175177
}
176-
return exporterparser.OcProtoSpansToOCSpanDataInstrumented(ctx, "aws-xray", exp, td)
178+
return exporterwrapper.PushOcProtoSpansToOCTraceExporter(exp, td)
177179
}
178180

179181
func (axe *awsXRayExporter) getOrMakeExporterByServiceName(serviceName string) (*xray.Exporter, error) {

exporter/datadogexporter/datadog.go

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,11 @@
1515
package datadogexporter
1616

1717
import (
18-
"context"
19-
2018
datadog "github.com/DataDog/opencensus-go-exporter-datadog"
2119
"github.com/spf13/viper"
2220

23-
"github.com/census-instrumentation/opencensus-service/data"
24-
"github.com/census-instrumentation/opencensus-service/exporter"
25-
"github.com/census-instrumentation/opencensus-service/exporter/exporterparser"
21+
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
22+
"github.com/census-instrumentation/opencensus-service/processor"
2623
)
2724

2825
type datadogConfig struct {
@@ -44,13 +41,9 @@ type datadogConfig struct {
4441
EnableMetrics bool `mapstructure:"enable_metrics,omitempty"`
4542
}
4643

47-
type datadogExporter struct {
48-
exporter *datadog.Exporter
49-
}
50-
5144
// DatadogTraceExportersFromViper unmarshals the viper and returns an exporter.TraceExporter targeting
5245
// Datadog according to the configuration settings.
53-
func DatadogTraceExportersFromViper(v *viper.Viper) (tes []exporter.TraceExporter, mes []exporter.MetricsExporter, doneFns []func() error, err error) {
46+
func DatadogTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
5447
var cfg struct {
5548
Datadog *datadogConfig `mapstructure:"datadog,omitempty"`
5649
}
@@ -78,18 +71,13 @@ func DatadogTraceExportersFromViper(v *viper.Viper) (tes []exporter.TraceExporte
7871
return nil
7972
})
8073

81-
dexp := &datadogExporter{exporter: de}
82-
tes = append(tes, dexp)
74+
// TODO: Examine the Datadog exporter to see
75+
// if trace.ExportSpan was constraining and if perhaps the
76+
// upload can use the context and information from the Node.
77+
tdps = append(tdps, exporterwrapper.NewExporterWrapper("datadog", de))
8378

8479
// TODO: (@odeke-em, @songya23) implement ExportMetrics for Datadog.
8580
// mes = append(mes, oexp)
8681

8782
return
8883
}
89-
90-
func (dde *datadogExporter) ExportSpans(ctx context.Context, td data.TraceData) error {
91-
// TODO: Examine the Datadog exporter to see
92-
// if trace.ExportSpan was constraining and if perhaps the
93-
// upload can use the context and information from the Node.
94-
return exporterparser.OcProtoSpansToOCSpanDataInstrumented(ctx, "datadog", dde.exporter, td)
95-
}

exporter/exporterparser/exparser.go renamed to exporter/exporterwrapper/exporterwrapper.go

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
// Package exporterparser provides support for parsing and creating the
16-
// respective exporters given a viper configuration.
15+
// Package exporterwrapper provides support for wrapping OC go library trace.Exporter into a
16+
// processor.TraceDataProcessor.
1717
// For now it currently only provides statically imported OpenCensus
1818
// exporters like:
1919
// * Stackdriver Tracing and Monitoring
2020
// * DataDog
2121
// * Zipkin
22-
package exporterparser
22+
package exporterwrapper
2323

2424
import (
2525
"context"
@@ -29,41 +29,60 @@ import (
2929
tracepb "github.com/census-instrumentation/opencensus-proto/gen-go/trace/v1"
3030
"github.com/census-instrumentation/opencensus-service/data"
3131
"github.com/census-instrumentation/opencensus-service/internal"
32+
"github.com/census-instrumentation/opencensus-service/processor"
3233
spandatatranslator "github.com/census-instrumentation/opencensus-service/translator/trace/spandata"
3334
)
3435

35-
// OcProtoSpansToOCSpanDataInstrumented converts
36-
// OpenCensus Proto TraceData to OpenCensus-Go SpanData.
37-
// The "Instrumented" suffix serves to document that this
38-
// function is traced but also has stats for self-observability.
36+
// NewExporterWrapper returns a processor.TraceDataProcessor that converts OpenCensus Proto TraceData
37+
// to OpenCensus-Go SpanData and calls into the given trace.Exporter.
3938
//
4039
// This is a bootstrapping mechanism for us to re-use as many of
4140
// the OpenCensus-Go trace.SpanData exporters which were written
4241
// by various vendors and contributors. Eventually the goal is to
4342
// get those exporters converted to directly receive
4443
// OpenCensus Proto TraceData.
45-
func OcProtoSpansToOCSpanDataInstrumented(ctx context.Context, exporterName string, te trace.Exporter, td data.TraceData) (aerr error) {
44+
func NewExporterWrapper(exporterName string, ocExporter trace.Exporter) processor.TraceDataProcessor {
45+
return &ocExporterWrapper{spanName: "opencensus.service.exporter." + exporterName + ".ExportTrace", ocExporter: ocExporter}
46+
}
47+
48+
type ocExporterWrapper struct {
49+
spanName string
50+
ocExporter trace.Exporter
51+
}
52+
53+
var _ processor.TraceDataProcessor = (*ocExporterWrapper)(nil)
54+
55+
func (octew *ocExporterWrapper) ProcessTraceData(ctx context.Context, td data.TraceData) (aerr error) {
4656
ctx, span := trace.StartSpan(ctx,
47-
"opencensus.service.exporter."+exporterName+".ExportTrace",
48-
trace.WithSampler(trace.NeverSample()))
57+
octew.spanName, trace.WithSampler(trace.NeverSample()))
4958

50-
span.Annotate([]trace.Attribute{
51-
trace.Int64Attribute("n_spans", int64(len(td.Spans))),
52-
}, "")
59+
if span.IsRecordingEvents() {
60+
span.Annotate([]trace.Attribute{
61+
trace.Int64Attribute("n_spans", int64(len(td.Spans))),
62+
}, "")
63+
}
5364

5465
defer func() {
55-
if aerr != nil {
66+
if aerr != nil && span.IsRecordingEvents() {
5667
span.SetStatus(trace.Status{Code: trace.StatusCodeInternal, Message: aerr.Error()})
5768
}
5869
span.End()
5970
}()
6071

72+
return PushOcProtoSpansToOCTraceExporter(octew.ocExporter, td)
73+
}
74+
75+
// TODO: Remove PushOcProtoSpansToOCTraceExporter after aws-xray is changed to ExporterWrapper.
76+
77+
// PushOcProtoSpansToOCTraceExporter pushes TraceData to the given trace.Exporter by converting the
78+
// protos to trace.SpanData.
79+
func PushOcProtoSpansToOCTraceExporter(ocExporter trace.Exporter, td data.TraceData) error {
6180
var errs []error
6281
var goodSpans []*tracepb.Span
6382
for _, span := range td.Spans {
6483
sd, err := spandatatranslator.ProtoSpanToOCSpanData(span)
6584
if err == nil {
66-
te.ExportSpan(sd)
85+
ocExporter.ExportSpan(sd)
6786
goodSpans = append(goodSpans, span)
6887
} else {
6988
errs = append(errs, err)

exporter/honeycombexporter/honeycomb.go

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,11 @@ package honeycombexporter
1818
// ask them to make an exporter that uses OpenCensus-Proto instead of OpenCensus-Go.
1919

2020
import (
21-
"context"
22-
2321
"github.com/honeycombio/opencensus-exporter/honeycomb"
2422
"github.com/spf13/viper"
2523

26-
"github.com/census-instrumentation/opencensus-service/data"
27-
"github.com/census-instrumentation/opencensus-service/exporter"
28-
"github.com/census-instrumentation/opencensus-service/exporter/exporterparser"
24+
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
25+
"github.com/census-instrumentation/opencensus-service/processor"
2926
)
3027

3128
type honeycombConfig struct {
@@ -35,7 +32,7 @@ type honeycombConfig struct {
3532

3633
// HoneycombTraceExportersFromViper unmarshals the viper and returns an exporter.TraceExporter
3734
// targeting Honeycomb according to the configuration settings.
38-
func HoneycombTraceExportersFromViper(v *viper.Viper) (tes []exporter.TraceExporter, mes []exporter.MetricsExporter, doneFns []func() error, err error) {
35+
func HoneycombTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
3936
var cfg struct {
4037
Honeycomb *honeycombConfig `mapstructure:"honeycomb"`
4138
}
@@ -49,20 +46,11 @@ func HoneycombTraceExportersFromViper(v *viper.Viper) (tes []exporter.TraceExpor
4946
}
5047

5148
rawExp := honeycomb.NewExporter(hc.WriteKey, hc.DatasetName)
52-
hce := &honeycombExporter{exporter: rawExp}
5349

54-
tes = append(tes, hce)
50+
tdps = append(tdps, exporterwrapper.NewExporterWrapper("honeycomb", rawExp))
5551
doneFns = append(doneFns, func() error {
5652
rawExp.Close()
5753
return nil
5854
})
5955
return
6056
}
61-
62-
type honeycombExporter struct {
63-
exporter *honeycomb.Exporter
64-
}
65-
66-
func (hce *honeycombExporter) ExportSpans(ctx context.Context, td data.TraceData) error {
67-
return exporterparser.OcProtoSpansToOCSpanDataInstrumented(ctx, "honeycomb", hce.exporter, td)
68-
}

exporter/jaegerexporter/jaeger.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,11 @@
1515
package jaegerexporter
1616

1717
import (
18-
"context"
19-
2018
"github.com/spf13/viper"
2119
"go.opencensus.io/exporter/jaeger"
2220

23-
"github.com/census-instrumentation/opencensus-service/data"
24-
"github.com/census-instrumentation/opencensus-service/exporter"
25-
"github.com/census-instrumentation/opencensus-service/exporter/exporterparser"
21+
"github.com/census-instrumentation/opencensus-service/exporter/exporterwrapper"
22+
"github.com/census-instrumentation/opencensus-service/processor"
2623
)
2724

2825
// Slight modified version of go/src/go.opencensus.io/exporter/jaeger/jaeger.go
@@ -33,13 +30,9 @@ type jaegerConfig struct {
3330
ServiceName string `mapstructure:"service_name,omitempty"`
3431
}
3532

36-
type jaegerExporter struct {
37-
exporter *jaeger.Exporter
38-
}
39-
4033
// JaegerExportersFromViper unmarshals the viper and returns exporter.TraceExporters targeting
4134
// Jaeger according to the configuration settings.
42-
func JaegerExportersFromViper(v *viper.Viper) (tes []exporter.TraceExporter, mes []exporter.MetricsExporter, doneFns []func() error, err error) {
35+
func JaegerExportersFromViper(v *viper.Viper) (tdps []processor.TraceDataProcessor, mdps []processor.MetricsDataProcessor, doneFns []func() error, err error) {
4336
var cfg struct {
4437
Jaeger *jaegerConfig `mapstructure:"jaeger"`
4538
}
@@ -68,13 +61,9 @@ func JaegerExportersFromViper(v *viper.Viper) (tes []exporter.TraceExporter, mes
6861
je.Flush()
6962
return nil
7063
})
71-
tes = append(tes, &jaegerExporter{exporter: je})
72-
return
73-
}
74-
75-
func (je *jaegerExporter) ExportSpans(ctx context.Context, td data.TraceData) error {
7664
// TODO: Examine "contrib.go.opencensus.io/exporter/jaeger" to see
7765
// if trace.ExportSpan was constraining and if perhaps the Jaeger
7866
// upload can use the context and information from the Node.
79-
return exporterparser.OcProtoSpansToOCSpanDataInstrumented(ctx, "jaeger", je.exporter, td)
67+
tdps = append(tdps, exporterwrapper.NewExporterWrapper("jaeger", je))
68+
return
8069
}

0 commit comments

Comments
 (0)