Kaynağa Gözat

Merge pull request #74 from coroot/collector_endpoint_url

Add base `collector endpoint` URL
Anton Petruhin 2 yıl önce
ebeveyn
işleme
7500d294ff
3 değiştirilmiş dosya ile 35 ekleme ve 16 silme
  1. 26 8
      flags/flags.go
  2. 2 2
      profiling/profiling.go
  3. 7 6
      prom/agent.go

+ 26 - 8
flags/flags.go

@@ -25,14 +25,15 @@ var (
 	LogPerSecond      = kingpin.Flag("log-per-second", "The number of logs per second").Default("10.0").Envar("LOG_PER_SECOND").Float64()
 	LogBurst          = kingpin.Flag("log-burst", "The maximum number of tokens that can be consumed in a single call to allow").Default("100").Envar("LOG_BURST").Int()
 
-	MetricsEndpoint  = kingpin.Flag("metrics-endpoint", "The URL of the endpoint to send metrics to").Envar("METRICS_ENDPOINT").URL()
-	TracesEndpoint   = kingpin.Flag("traces-endpoint", "The URL of the endpoint to send traces to").Envar("TRACES_ENDPOINT").URL()
-	LogsEndpoint     = kingpin.Flag("logs-endpoint", "The URL of the endpoint to send logs to").Envar("LOGS_ENDPOINT").URL()
-	ProfilesEndpoint = kingpin.Flag("profiles-endpoint", "The URL of the endpoint to send profiles to").Envar("PROFILES_ENDPOINT").URL()
-	ApiKey           = kingpin.Flag("api-key", "Coroot API key").Envar("API_KEY").String()
-	ScrapeInterval   = kingpin.Flag("scrape-interval", "How often to gather metrics from the agent").Default("15s").Envar("SCRAPE_INTERVAL").Duration()
-
-	WalDir = kingpin.Flag("wal-dir", "Path to where the agent stores data (e.g. the metrics Write-Ahead Log)").Default("/tmp/coroot-node-agent").Envar("WAL_DIR").String()
+	CollectorEndpoint = kingpin.Flag("collector-endpoint", "A base endpoint URL for metrics, traces, logs, and profiles").Envar("COLLECTOR_ENDPOINT").URL()
+	ApiKey            = kingpin.Flag("api-key", "Coroot API key").Envar("API_KEY").String()
+	MetricsEndpoint   = kingpin.Flag("metrics-endpoint", "The URL of the endpoint to send metrics to").Envar("METRICS_ENDPOINT").URL()
+	TracesEndpoint    = kingpin.Flag("traces-endpoint", "The URL of the endpoint to send traces to").Envar("TRACES_ENDPOINT").URL()
+	LogsEndpoint      = kingpin.Flag("logs-endpoint", "The URL of the endpoint to send logs to").Envar("LOGS_ENDPOINT").URL()
+	ProfilesEndpoint  = kingpin.Flag("profiles-endpoint", "The URL of the endpoint to send profiles to").Envar("PROFILES_ENDPOINT").URL()
+
+	ScrapeInterval = kingpin.Flag("scrape-interval", "How often to gather metrics from the agent").Default("15s").Envar("SCRAPE_INTERVAL").Duration()
+	WalDir         = kingpin.Flag("wal-dir", "Path to where the agent stores data (e.g. the metrics Write-Ahead Log)").Default("/tmp/coroot-node-agent").Envar("WAL_DIR").String()
 )
 
 func GetString(fl *string) string {
@@ -46,6 +47,23 @@ func init() {
 	if strings.HasSuffix(os.Args[0], ".test") {
 		return
 	}
+
 	kingpin.HelpFlag.Short('h').Hidden()
 	kingpin.Parse()
+
+	if *CollectorEndpoint != nil {
+		u := *CollectorEndpoint
+		if *MetricsEndpoint == nil {
+			*MetricsEndpoint = u.JoinPath("/v1/metrics")
+		}
+		if *TracesEndpoint == nil {
+			*TracesEndpoint = u.JoinPath("/v1/traces")
+		}
+		if *LogsEndpoint == nil {
+			*LogsEndpoint = u.JoinPath("/v1/logs")
+		}
+		if *ProfilesEndpoint == nil {
+			*ProfilesEndpoint = u.JoinPath("/v1/profiles")
+		}
+	}
 }

+ 2 - 2
profiling/profiling.go

@@ -54,7 +54,6 @@ func Init(hostId, hostName string) chan<- containers.ProcessInfo {
 	constLabels = labels.Labels{
 		{Name: "host.name", Value: hostName},
 		{Name: "host.id", Value: hostId},
-		{Name: "profile.source", Value: "ebpf"},
 	}
 
 	reg := prometheus.NewRegistry()
@@ -167,6 +166,7 @@ func upload(b *pprof.ProfileBuilder) error {
 	}
 	u.RawQuery = q.Encode()
 
+	b.Profile.SampleType[0].Type = "ebpf:cpu:nanoseconds"
 	b.Profile.DurationNanos = CollectInterval.Nanoseconds()
 	body := bytes.NewBuffer(nil)
 	_, err := b.Write(body)
@@ -174,7 +174,7 @@ func upload(b *pprof.ProfileBuilder) error {
 		return err
 	}
 
-	req, err := http.NewRequest("POST", u.String(), body)
+	req, err := http.NewRequest(http.MethodPost, u.String(), body)
 	if err != nil {
 		return err
 	}

+ 7 - 6
prom/agent.go

@@ -5,6 +5,7 @@ import (
 
 	"github.com/coroot/coroot-node-agent/common"
 	"github.com/coroot/coroot-node-agent/flags"
+	"github.com/go-kit/log/level"
 	"github.com/prometheus/client_golang/prometheus"
 	promConfig "github.com/prometheus/common/config"
 	"github.com/prometheus/common/model"
@@ -25,12 +26,12 @@ const (
 )
 
 func StartAgent(machineId string) error {
-	l := Logger{}
+	logger := level.NewFilter(Logger{}, level.AllowInfo())
 
 	if *flags.MetricsEndpoint == nil {
 		return nil
 	}
-	klog.Infoln("Metrics remote write endpoint:", (*flags.MetricsEndpoint).String())
+	klog.Infoln("metrics remote write endpoint:", (*flags.MetricsEndpoint).String())
 	cfg := config.DefaultConfig
 	cfg.GlobalConfig.ScrapeInterval = model.Duration(*flags.ScrapeInterval)
 	cfg.GlobalConfig.ScrapeTimeout = model.Duration(*flags.ScrapeInterval)
@@ -54,14 +55,14 @@ func StartAgent(machineId string) error {
 	opts := agent.DefaultOptions()
 	localStorage := &readyStorage{stats: tsdb.NewDBStats()}
 	scraper := &readyScrapeManager{}
-	remoteStorage := remote.NewStorage(l, prometheus.DefaultRegisterer, localStorage.StartTime, *flags.WalDir, RemoteFlushDeadline, scraper)
-	fanoutStorage := storage.NewFanout(l, localStorage, remoteStorage)
+	remoteStorage := remote.NewStorage(logger, prometheus.DefaultRegisterer, localStorage.StartTime, *flags.WalDir, RemoteFlushDeadline, scraper)
+	fanoutStorage := storage.NewFanout(logger, localStorage, remoteStorage)
 
 	if err := remoteStorage.ApplyConfig(&cfg); err != nil {
 		return err
 	}
 
-	scrapeManager, err := scrape.NewManager(nil, l, fanoutStorage, prometheus.DefaultRegisterer)
+	scrapeManager, err := scrape.NewManager(nil, logger, fanoutStorage, prometheus.DefaultRegisterer)
 	if err != nil {
 		return err
 	}
@@ -69,7 +70,7 @@ func StartAgent(machineId string) error {
 		return err
 	}
 	scraper.Set(scrapeManager)
-	db, err := agent.Open(l, prometheus.DefaultRegisterer, remoteStorage, *flags.WalDir, opts)
+	db, err := agent.Open(logger, prometheus.DefaultRegisterer, remoteStorage, *flags.WalDir, opts)
 	if err != nil {
 		return err
 	}