Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add otelcol filelogreceiver #2711

Merged
merged 14 commits into from
Feb 18, 2025
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ Main (unreleased)

### Features

- - Add `otelcol.receiver.filelog` component to read otel log entries from files (@dehaansa)

- (_Experimental_) Add a `stage.windowsevent` block in the `loki.process` component. This aims to replace the existing `stage.eventlogmessage`. (@wildum)

- Add `pyroscope.relabel` component to modify or filter profiles using Prometheus relabeling rules. (@marcsanmi)
Expand Down
1 change: 1 addition & 0 deletions docs/sources/reference/compatibility/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@ The following components, grouped by namespace, _consume_ OpenTelemetry `otelcol
- [otelcol.processor.transform](../components/otelcol/otelcol.processor.transform)
- [otelcol.receiver.datadog](../components/otelcol/otelcol.receiver.datadog)
- [otelcol.receiver.file_stats](../components/otelcol/otelcol.receiver.file_stats)
- [otelcol.receiver.filelog](../components/otelcol/otelcol.receiver.filelog)
- [otelcol.receiver.influxdb](../components/otelcol/otelcol.receiver.influxdb)
- [otelcol.receiver.jaeger](../components/otelcol/otelcol.receiver.jaeger)
- [otelcol.receiver.kafka](../components/otelcol/otelcol.receiver.kafka)
Expand Down

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -873,6 +873,7 @@ require (

require (
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.116.0
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.116.0
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.116.0
)

Expand Down
1 change: 1 addition & 0 deletions internal/component/all/all.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ import (
_ "github.com/grafana/alloy/internal/component/otelcol/processor/transform" // Import otelcol.processor.transform
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/datadog" // Import otelcol.receiver.datadog
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/file_stats" // Import otelcol.receiver.file_stats
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/filelog" // Import otelcol.receiver.filelog
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/influxdb" // Import otelcol.receiver.influxdb
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/jaeger" // Import otelcol.receiver.jaeger
_ "github.com/grafana/alloy/internal/component/otelcol/receiver/kafka" // Import otelcol.receiver.kafka
Expand Down
30 changes: 0 additions & 30 deletions internal/component/otelcol/config_consumer_retry.go

This file was deleted.

93 changes: 93 additions & 0 deletions internal/component/otelcol/config_stanza_receivers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package otelcol

import (
"errors"
"time"

"github.com/grafana/alloy/syntax"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/split"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/trim"
"go.opentelemetry.io/collector/confmap"
)

wildum marked this conversation as resolved.
Show resolved Hide resolved
var (
_ syntax.Defaulter = (*ConsumerRetryArguments)(nil)
)

// ConsumerRetryArguments holds shared settings for stanza receivers which can retry
// requests. There is no Convert functionality as the consumerretry package is stanza internal
type ConsumerRetryArguments struct {
Enabled bool `alloy:"enabled,attr,optional"`
InitialInterval time.Duration `alloy:"initial_interval,attr,optional"`
MaxInterval time.Duration `alloy:"max_interval,attr,optional"`
MaxElapsedTime time.Duration `alloy:"max_elapsed_time,attr,optional"`
}

// SetToDefault implements syntax.Defaulter.
func (args *ConsumerRetryArguments) SetToDefault() {
*args = ConsumerRetryArguments{
Enabled: false,
InitialInterval: 1 * time.Second,
MaxInterval: 30 * time.Second,
MaxElapsedTime: 5 * time.Minute,
}
}

type TrimConfig struct {
PreserveLeadingWhitespace bool `alloy:"preserve_leading_whitespaces,attr,optional"`
PreserveTrailingWhitespace bool `alloy:"preserve_trailing_whitespaces,attr,optional"`
}

func (c *TrimConfig) Convert() *trim.Config {
if c == nil {
return nil
}

return &trim.Config{
PreserveLeading: c.PreserveLeadingWhitespace,
PreserveTrailing: c.PreserveTrailingWhitespace,
}
}

type MultilineConfig struct {
LineStartPattern string `alloy:"line_start_pattern,attr,optional"`
LineEndPattern string `alloy:"line_end_pattern,attr,optional"`
OmitPattern bool `alloy:"omit_pattern,attr,optional"`
}

func (c *MultilineConfig) Convert() *split.Config {
if c == nil {
return nil
}

return &split.Config{
LineStartPattern: c.LineStartPattern,
LineEndPattern: c.LineEndPattern,
OmitPattern: c.OmitPattern,
}
}

func (c *MultilineConfig) Validate() error {
if c == nil {
return nil
}

if c.LineStartPattern == "" && c.LineEndPattern == "" {
return errors.New("either line_start_pattern or line_end_pattern must be set")
}

if c.LineStartPattern != "" && c.LineEndPattern != "" {
return errors.New("only one of line_start_pattern or line_end_pattern can be set")
}

return nil
}

type Operator map[string]interface{}

func (o Operator) Convert() (*operator.Config, error) {
cfg := &operator.Config{}
err := cfg.Unmarshal(confmap.NewFromStringMap(o))
return cfg, err
}
Loading
Loading