Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/component/otelcol/exporter/loki/loki.go
4096 views
1
// Package loki provides an otelcol.exporter.loki component.
2
package loki
3
4
import (
5
"context"
6
7
"github.com/go-kit/log"
8
"github.com/grafana/agent/component"
9
"github.com/grafana/agent/component/common/loki"
10
"github.com/grafana/agent/component/otelcol"
11
"github.com/grafana/agent/component/otelcol/exporter/loki/internal/convert"
12
"github.com/grafana/agent/component/otelcol/internal/lazyconsumer"
13
)
14
15
func init() {
16
component.Register(component.Registration{
17
Name: "otelcol.exporter.loki",
18
Args: Arguments{},
19
Exports: otelcol.ConsumerExports{},
20
21
Build: func(o component.Options, a component.Arguments) (component.Component, error) {
22
return New(o, a.(Arguments))
23
},
24
})
25
}
26
27
// Arguments configures the otelcol.exporter.loki component.
28
type Arguments struct {
29
ForwardTo []loki.LogsReceiver `river:"forward_to,attr"`
30
}
31
32
// Component is the otelcol.exporter.loki component.
33
type Component struct {
34
log log.Logger
35
opts component.Options
36
37
converter *convert.Converter
38
}
39
40
var _ component.Component = (*Component)(nil)
41
42
// New creates a new otelcol.exporter.loki component.
43
func New(o component.Options, c Arguments) (*Component, error) {
44
converter := convert.New(o.Logger, o.Registerer, c.ForwardTo)
45
46
res := &Component{
47
log: o.Logger,
48
opts: o,
49
50
converter: converter,
51
}
52
if err := res.Update(c); err != nil {
53
return nil, err
54
}
55
56
// Construct a consumer based on our converter and export it. This will
57
// remain the same throughout the component's lifetime, so we do this
58
// during component construction.
59
export := lazyconsumer.New(context.Background())
60
export.SetConsumers(nil, nil, converter)
61
o.OnStateChange(otelcol.ConsumerExports{Input: export})
62
63
return res, nil
64
}
65
66
// Run implements Component.
67
func (c *Component) Run(ctx context.Context) error {
68
<-ctx.Done()
69
return nil
70
}
71
72
// Update implements Component.
73
func (c *Component) Update(newConfig component.Arguments) error {
74
cfg := newConfig.(Arguments)
75
c.converter.UpdateFanout(cfg.ForwardTo)
76
return nil
77
}
78
79