Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/cmd/grafana-agent-operator/main.go
4094 views
1
package main
2
3
import (
4
"flag"
5
"fmt"
6
"os"
7
8
cortex_log "github.com/cortexproject/cortex/pkg/util/log"
9
"github.com/go-kit/log"
10
"github.com/go-kit/log/level"
11
"github.com/grafana/agent/pkg/build"
12
"github.com/grafana/agent/pkg/operator"
13
"github.com/grafana/agent/pkg/operator/logutil"
14
controller "sigs.k8s.io/controller-runtime"
15
16
// Needed for clients.
17
_ "k8s.io/client-go/plugin/pkg/client/auth"
18
)
19
20
func main() {
21
var (
22
logger = log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr))
23
cfg = loadConfig(logger)
24
25
err error
26
)
27
28
logger = setupLogger(logger, cfg)
29
30
op, err := operator.New(logger, cfg)
31
if err != nil {
32
level.Error(logger).Log("msg", "unable to create operator", "err", err)
33
os.Exit(1)
34
}
35
36
// Run the manager and wait for a signal to shut down.
37
level.Info(logger).Log("msg", "starting manager")
38
if err := op.Start(controller.SetupSignalHandler()); err != nil {
39
level.Error(logger).Log("msg", "problem running manager", "err", err)
40
os.Exit(1)
41
}
42
}
43
44
// loadConfig will read command line flags and populate a Config. loadConfig
45
// will exit the program on failure.
46
func loadConfig(l log.Logger) *operator.Config {
47
fs := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
48
49
var (
50
printVersion bool
51
)
52
53
cfg, err := operator.NewConfig(fs)
54
if err != nil {
55
level.Error(l).Log("msg", "failed to parse flags", "err", err)
56
os.Exit(1)
57
}
58
59
fs.BoolVar(&printVersion, "version", false, "Print this build's version information")
60
61
if err := fs.Parse(os.Args[1:]); err != nil {
62
level.Error(l).Log("msg", "failed to parse flags", "err", err)
63
os.Exit(1)
64
}
65
66
if printVersion {
67
fmt.Println(build.Print("agent-operator"))
68
os.Exit(0)
69
}
70
71
return cfg
72
}
73
74
// setupLogger sets up our logger. If this function fails, the program will
75
// exit.
76
func setupLogger(l log.Logger, cfg *operator.Config) log.Logger {
77
newLogger, err := cortex_log.NewPrometheusLogger(cfg.LogLevel, cfg.LogFormat)
78
if err != nil {
79
level.Error(l).Log("msg", "failed to create logger", "err", err)
80
os.Exit(1)
81
}
82
l = newLogger
83
84
adapterLogger := logutil.Wrap(l)
85
86
// NOTE: we don't set up a caller field here, unlike the normal agent.
87
// There's too many multiple nestings of the logger that prevent getting the
88
// caller from working properly.
89
90
// Set up the global logger and the controller-local logger.
91
controller.SetLogger(adapterLogger)
92
cfg.Controller.Logger = adapterLogger
93
return l
94
}
95
96