Skip to content

Commit 5d21d46

Browse files
author
Tigran Najaryan
committed
Add factories and component types to support logs data type
We are planning on experimenting with logs data type in the Collector. This commit introduces factories and components types for logs and implements pipeline building for logs. The data.Log struct is for now empty. We need to wait for OTLP protocol to define the log data format and we will use it in data.Log. data.Log is in internal package since logs support is experimental and is not intended for public usage yet. Resolves #957
1 parent f588c89 commit 5d21d46

19 files changed

+748
-109
lines changed

component/exporter.go

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
"github.com/open-telemetry/opentelemetry-collector/consumer"
2424
)
2525

26-
// Exporter defines functions that trace and metric exporters must implement.
26+
// Exporter defines functions that all exporters must implement.
2727
type Exporter interface {
2828
Component
2929
}
@@ -33,13 +33,13 @@ type TraceExporterBase interface {
3333
Exporter
3434
}
3535

36-
// TraceExporterOld is a TraceConsumer that is also an Exporter.
36+
// TraceExporterOld is a TraceExporter that can consume old-style traces.
3737
type TraceExporterOld interface {
3838
consumer.TraceConsumerOld
3939
TraceExporterBase
4040
}
4141

42-
// TraceExporter is an TraceConsumer that is also an Exporter.
42+
// TraceExporter is a TraceExporter that can consume new-style traces.
4343
type TraceExporter interface {
4444
consumer.TraceConsumer
4545
TraceExporterBase
@@ -50,18 +50,24 @@ type MetricsExporterBase interface {
5050
Exporter
5151
}
5252

53-
// MetricsExporterOld is a MetricsConsumer that is also an Exporter.
53+
// MetricsExporterOld is a TraceExporter that can consume old-style metrics.
5454
type MetricsExporterOld interface {
5555
consumer.MetricsConsumerOld
5656
MetricsExporterBase
5757
}
5858

59-
// MetricsExporter is a MetricsConsumer that is also an Exporter.
59+
// MetricsExporter is a TraceExporter that can consume new-style metrics.
6060
type MetricsExporter interface {
6161
consumer.MetricsConsumer
6262
MetricsExporterBase
6363
}
6464

65+
// LogExporter is a LogConsumer that is also an Exporter.
66+
type LogExporter interface {
67+
Exporter
68+
consumer.LogConsumer
69+
}
70+
6571
// ExporterFactoryBase defines the common functions for all exporter factories.
6672
type ExporterFactoryBase interface {
6773
Factory
@@ -87,7 +93,7 @@ type ExporterFactoryOld interface {
8793
CreateMetricsExporter(logger *zap.Logger, cfg configmodels.Exporter) (MetricsExporterOld, error)
8894
}
8995

90-
// ExporterCreateParams is passed to ExporterFactory.Create* functions.
96+
// ExporterCreateParams is passed to Create*Exporter functions.
9197
type ExporterCreateParams struct {
9298
// Logger that the factory can use during creation and can pass to the created
9399
// component to be used later as well.
@@ -111,3 +117,17 @@ type ExporterFactory interface {
111117
CreateMetricsExporter(ctx context.Context, params ExporterCreateParams,
112118
cfg configmodels.Exporter) (MetricsExporter, error)
113119
}
120+
121+
// LogExporterFactory can create a LogExporter.
122+
type LogExporterFactory interface {
123+
ExporterFactoryBase
124+
125+
// CreateLogExporter creates an exporter based on the config.
126+
// If the exporter type does not support logs or if the config is not valid
127+
// error will be returned instead.
128+
CreateLogExporter(
129+
ctx context.Context,
130+
params ExporterCreateParams,
131+
cfg configmodels.Exporter,
132+
) (LogExporter, error)
133+
}

component/processor.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ type TraceProcessorBase interface {
3737
Processor
3838
}
3939

40-
// TraceProcessorOld composes TraceConsumer with some additional processor-specific functions.
40+
// TraceProcessorOld is a processor that can consume old-style traces.
4141
type TraceProcessorOld interface {
4242
consumer.TraceConsumerOld
4343
TraceProcessorBase
4444
}
4545

46-
// TraceProcessor composes TraceConsumer with some additional processor-specific functions.
46+
// TraceProcessor is a processor that can consume traces.
4747
type TraceProcessor interface {
4848
consumer.TraceConsumer
4949
TraceProcessorBase
@@ -54,18 +54,24 @@ type MetricsProcessorBase interface {
5454
Processor
5555
}
5656

57-
// MetricsProcessor composes MetricsConsumer with some additional processor-specific functions.
57+
// MetricsProcessor is a processor that can consume old-style metrics.
5858
type MetricsProcessorOld interface {
5959
consumer.MetricsConsumerOld
6060
MetricsProcessorBase
6161
}
6262

63-
// MetricsProcessor composes MetricsConsumer with some additional processor-specific functions.
63+
// MetricsProcessor is a processor that can consume metrics.
6464
type MetricsProcessor interface {
6565
consumer.MetricsConsumer
6666
MetricsProcessorBase
6767
}
6868

69+
// LogProcessor is a processor that can consume logs.
70+
type LogProcessor interface {
71+
Processor
72+
consumer.LogConsumer
73+
}
74+
6975
// ProcessorCapabilities describes the capabilities of a Processor.
7076
type ProcessorCapabilities struct {
7177
// MutatesConsumedData is set to true if Consume* function of the
@@ -131,3 +137,18 @@ type ProcessorFactory interface {
131137
CreateMetricsProcessor(ctx context.Context, params ProcessorCreateParams,
132138
nextConsumer consumer.MetricsConsumer, cfg configmodels.Processor) (MetricsProcessor, error)
133139
}
140+
141+
// LogProcessorFactory can create LogProcessor.
142+
type LogProcessorFactory interface {
143+
ProcessorFactoryBase
144+
145+
// CreateLogProcessor creates a processor based on the config.
146+
// If the processor type does not support logs or if the config is not valid
147+
// error will be returned instead.
148+
CreateLogProcessor(
149+
ctx context.Context,
150+
params ProcessorCreateParams,
151+
cfg configmodels.Processor,
152+
nextConsumer consumer.LogConsumer,
153+
) (LogProcessor, error)
154+
}

component/receiver.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ type MetricsReceiver interface {
4949
Receiver
5050
}
5151

52+
// A LogReceiver is a "log data"-to-"internal format" converter.
53+
// Its purpose is to translate data from the wild into internal data format.
54+
// LogReceiver feeds a consumer.LogConsumer with data.
55+
type LogReceiver interface {
56+
Receiver
57+
}
58+
5259
// ReceiverFactoryBase defines the common functions for all receiver factories.
5360
type ReceiverFactoryBase interface {
5461
Factory
@@ -117,3 +124,18 @@ type ReceiverFactory interface {
117124
CreateMetricsReceiver(ctx context.Context, params ReceiverCreateParams,
118125
cfg configmodels.Receiver, nextConsumer consumer.MetricsConsumer) (MetricsReceiver, error)
119126
}
127+
128+
// LogReceiverFactory can create a LogReceiver.
129+
type LogReceiverFactory interface {
130+
ReceiverFactoryBase
131+
132+
// CreateLogReceiver creates a log receiver based on this config.
133+
// If the receiver type does not support the data type or if the config is not valid
134+
// error will be returned instead.
135+
CreateLogReceiver(
136+
ctx context.Context,
137+
params ReceiverCreateParams,
138+
cfg configmodels.Receiver,
139+
nextConsumer consumer.LogConsumer,
140+
) (LogReceiver, error)
141+
}

config/config.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -539,11 +539,11 @@ func loadPipelines(v *viper.Viper) (configmodels.Pipelines, error) {
539539
var pipelineCfg configmodels.Pipeline
540540

541541
// Set the type.
542-
switch typeStr {
543-
case configmodels.TracesDataTypeStr:
544-
pipelineCfg.InputType = configmodels.TracesDataType
545-
case configmodels.MetricsDataTypeStr:
546-
pipelineCfg.InputType = configmodels.MetricsDataType
542+
pipelineCfg.InputType = configmodels.DataType(typeStr)
543+
switch pipelineCfg.InputType {
544+
case configmodels.TracesDataType:
545+
case configmodels.MetricsDataType:
546+
case configmodels.LogsDataType:
547547
default:
548548
return nil, &configError{
549549
code: errInvalidPipelineType,

config/config_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func TestDecodeConfig(t *testing.T) {
100100
assert.Equal(t, 1, len(config.Processors), "Incorrect processors count")
101101

102102
assert.Equal(t,
103-
&ExampleProcessor{
103+
&ExampleProcessorCfg{
104104
ProcessorSettings: configmodels.ProcessorSettings{
105105
TypeVal: "exampleprocessor",
106106
NameVal: "exampleprocessor",
@@ -258,7 +258,7 @@ func TestSimpleConfig(t *testing.T) {
258258
assert.Equalf(t, 1, len(config.Processors), "TEST[%s]", test.name)
259259

260260
assert.Equalf(t,
261-
&ExampleProcessor{
261+
&ExampleProcessorCfg{
262262
ProcessorSettings: configmodels.ProcessorSettings{
263263
TypeVal: "exampleprocessor",
264264
NameVal: "exampleprocessor",

config/configmodels/configmodels.go

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -78,38 +78,22 @@ type Processor interface {
7878
type Processors map[string]Processor
7979

8080
// DataType is the data type that is supported for collection. We currently support
81-
// collecting metrics and traces, this can expand in the future (e.g. logs, events, etc).
82-
type DataType int
81+
// collecting metrics, traces and logs, this can expand in the future.
82+
83+
type DataType string
8384

8485
// Currently supported data types. Add new data types here when new types are supported in the future.
8586
const (
86-
_ DataType = iota // skip 0, start types from 1.
87-
8887
// TracesDataType is the data type tag for traces.
89-
TracesDataType
88+
TracesDataType DataType = "traces"
9089

9190
// MetricsDataType is the data type tag for metrics.
92-
MetricsDataType
93-
)
91+
MetricsDataType DataType = "metrics"
9492

95-
// Data type strings.
96-
const (
97-
TracesDataTypeStr = "traces"
98-
MetricsDataTypeStr = "metrics"
93+
// LogsDataType is the data type tag for logs.
94+
LogsDataType DataType = "logs"
9995
)
10096

101-
// GetString converts data type to string.
102-
func (dataType DataType) GetString() string {
103-
switch dataType {
104-
case TracesDataType:
105-
return TracesDataTypeStr
106-
case MetricsDataType:
107-
return MetricsDataTypeStr
108-
default:
109-
panic("unknown data type")
110-
}
111-
}
112-
11397
// Pipeline defines a single pipeline.
11498
type Pipeline struct {
11599
Name string `mapstructure:"-"`

0 commit comments

Comments
 (0)