Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/tools/crow/main.go
4094 views
1
// Command grafana-agent-crow is a correctness checker tool that validates that
2
// scraped metrics are delivered to a remote_write endpoint. Inspired by Loki
3
// Canary and Cortex test-exporter.
4
package main
5
6
import (
7
"context"
8
"flag"
9
"fmt"
10
"os"
11
12
"github.com/go-kit/log/level"
13
"github.com/grafana/agent/pkg/build"
14
"github.com/grafana/agent/pkg/crow"
15
"github.com/grafana/agent/pkg/server"
16
"github.com/prometheus/client_golang/prometheus"
17
"github.com/prometheus/client_golang/prometheus/promhttp"
18
)
19
20
func init() {
21
prometheus.MustRegister(build.NewCollector("grafana_agent_crow"))
22
}
23
24
func main() {
25
var (
26
fs = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
27
28
serverCfg = server.DefaultConfig()
29
serverFlags = server.DefaultFlags
30
31
crowCfg = crow.DefaultConfig
32
showVersion bool
33
)
34
35
serverFlags.RegisterFlags(fs)
36
crowCfg.RegisterFlagsWithPrefix(fs, "crow.")
37
fs.BoolVar(&showVersion, "version", false, "show version")
38
39
if err := fs.Parse(os.Args[1:]); err != nil {
40
fmt.Fprintln(os.Stderr, "failed to parse flags", err)
41
os.Exit(1)
42
}
43
if showVersion {
44
fmt.Println(build.Print(os.Args[0]))
45
os.Exit(0)
46
}
47
48
l := server.NewLogger(&serverCfg)
49
crowCfg.Log = l
50
51
s, err := server.New(l, prometheus.DefaultRegisterer, prometheus.DefaultGatherer, serverCfg, serverFlags)
52
if err != nil {
53
level.Error(l).Log("msg", "failed to initialize server", "err", err)
54
os.Exit(1)
55
}
56
57
c, err := crow.New(crowCfg)
58
if err != nil {
59
level.Error(l).Log("msg", "failed to initialize crow", "err", err)
60
os.Exit(1)
61
}
62
defer c.Stop()
63
64
// The server comes with a /metrics endpoint by default using s.Registerer.
65
// Create a /validate endpoint to handle our validation metrics.
66
validator := prometheus.NewRegistry()
67
s.HTTP.Handle("/validate", promhttp.HandlerFor(validator, promhttp.HandlerOpts{
68
EnableOpenMetrics: true,
69
}))
70
71
// Register crow's metrics to /metrics and /validate respectively.
72
prometheus.DefaultRegisterer.MustRegister(c.StateMetrics())
73
validator.MustRegister(c.TestMetrics())
74
75
ctx, cancel := server.SignalContext(context.Background(), l)
76
defer cancel()
77
78
if err := s.Run(ctx); err != nil {
79
level.Error(l).Log("msg", "server exited with error", "err", err)
80
os.Exit(1)
81
}
82
}
83
84