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

Extract telemetry config and setup telemetry server #482

Merged
merged 3 commits into from Jan 11, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
31 changes: 16 additions & 15 deletions cmd/api/config.go
Expand Up @@ -9,13 +9,12 @@ import (
)

type config struct {
Redis cmd.RedisConfig `yaml:"redis"`
Graphite cmd.GraphiteConfig `yaml:"graphite"`
Logger cmd.LoggerConfig `yaml:"log"`
API apiConfig `yaml:"api"`
Web webConfig `yaml:"web"`
Pprof cmd.ProfilerConfig `yaml:"pprof"`
Remote cmd.RemoteConfig `yaml:"remote"`
Redis cmd.RedisConfig `yaml:"redis"`
Logger cmd.LoggerConfig `yaml:"log"`
API apiConfig `yaml:"api"`
Web webConfig `yaml:"web"`
Telemetry cmd.TelemetryConfig `yaml:"telemetry"`
Remote cmd.RemoteConfig `yaml:"remote"`
}

type apiConfig struct {
Expand Down Expand Up @@ -96,14 +95,16 @@ func getDefault() config {
Web: webConfig{
RemoteAllowed: false,
},
Graphite: cmd.GraphiteConfig{
RuntimeStats: false,
URI: "localhost:2003",
Prefix: "DevOps.Moira",
Interval: "60s",
},
Pprof: cmd.ProfilerConfig{
Listen: "",
Telemetry: cmd.TelemetryConfig{
Listen: ":8091",
Graphite: cmd.GraphiteConfig{
Enabled: false,
RuntimeStats: false,
URI: "localhost:2003",
Prefix: "DevOps.Moira",
Interval: "60s",
},
Pprof: cmd.ProfilerConfig{Enabled: false},
},
Remote: cmd.RemoteConfig{
Timeout: "60s",
Expand Down
19 changes: 6 additions & 13 deletions cmd/api/main.go
Expand Up @@ -11,8 +11,6 @@ import (
"syscall"
"time"

"github.com/moira-alert/moira/metrics"

"github.com/moira-alert/moira"
"github.com/moira-alert/moira/api/handler"
"github.com/moira-alert/moira/cmd"
Expand Down Expand Up @@ -68,24 +66,19 @@ func main() {
fmt.Fprintf(os.Stderr, "Can not configure log: %s\n", err.Error())
os.Exit(1)
}
logger.Infof("Moira API stopped. Version: %s", MoiraVersion)
defer logger.Infof("Moira API stopped. Version: %s", MoiraVersion)

if config.Pprof.Listen != "" {
logger.Infof("Starting pprof server at: [%s]", config.Pprof.Listen)
cmd.StartProfiling(logger, config.Pprof)
telemetry, err := cmd.ConfigureTelemetry(logger, config.Telemetry, serviceName)
if err != nil {
logger.Fatalf("Can not start telemetry: %s", err.Error())
}
defer telemetry.Stop()

databaseSettings := config.Redis.GetSettings()
database := redis.NewDatabase(logger, databaseSettings, redis.API)

graphiteMetricsRegistry, err := metrics.NewGraphiteRegistry(config.Graphite.GetSettings(), serviceName)
if err != nil {
fmt.Fprintf(os.Stderr, "Can not configure graphite metrics: %s\n", err.Error())
os.Exit(1)
}

// Start Index right before HTTP listener. Fail if index cannot start
searchIndex := index.NewSearchIndex(logger, database, graphiteMetricsRegistry)
searchIndex := index.NewSearchIndex(logger, database, telemetry.Metrics)
if searchIndex == nil {
logger.Fatalf("Failed to create search index")
}
Expand Down
29 changes: 15 additions & 14 deletions cmd/checker/config.go
Expand Up @@ -7,12 +7,11 @@ import (
)

type config struct {
Redis cmd.RedisConfig `yaml:"redis"`
Graphite cmd.GraphiteConfig `yaml:"graphite"`
Logger cmd.LoggerConfig `yaml:"log"`
Checker checkerConfig `yaml:"checker"`
Pprof cmd.ProfilerConfig `yaml:"pprof"`
Remote cmd.RemoteConfig `yaml:"remote"`
Redis cmd.RedisConfig `yaml:"redis"`
Logger cmd.LoggerConfig `yaml:"log"`
Checker checkerConfig `yaml:"checker"`
Telemetry cmd.TelemetryConfig `yaml:"telemetry"`
Remote cmd.RemoteConfig `yaml:"remote"`
}

type checkerConfig struct {
Expand Down Expand Up @@ -65,14 +64,16 @@ func getDefault() config {
MaxParallelChecks: 0,
MaxParallelRemoteChecks: 0,
},
Graphite: cmd.GraphiteConfig{
RuntimeStats: false,
URI: "localhost:2003",
Prefix: "DevOps.Moira",
Interval: "60s",
},
Pprof: cmd.ProfilerConfig{
Listen: "",
Telemetry: cmd.TelemetryConfig{
Listen: ":8092",
Graphite: cmd.GraphiteConfig{
Enabled: false,
RuntimeStats: false,
URI: "localhost:2003",
Prefix: "DevOps.Moira",
Interval: "60s",
},
Pprof: cmd.ProfilerConfig{Enabled: false},
},
Remote: cmd.RemoteConfig{
CheckInterval: "60s",
Expand Down
15 changes: 5 additions & 10 deletions cmd/checker/main.go
Expand Up @@ -68,10 +68,11 @@ func main() {
}
defer logger.Infof("Moira Checker stopped. Version: %s", MoiraVersion)

if config.Pprof.Listen != "" {
logger.Infof("Starting pprof server at: [%s]", config.Pprof.Listen)
cmd.StartProfiling(logger, config.Pprof)
telemetry, err := cmd.ConfigureTelemetry(logger, config.Telemetry, serviceName)
if err != nil {
logger.Fatalf("Can not configure telemetry: %s", err.Error())
}
defer telemetry.Stop()

databaseSettings := config.Redis.GetSettings()
database := redis.NewDatabase(logger, databaseSettings, redis.Checker)
Expand All @@ -81,14 +82,8 @@ func main() {
remoteSource := remote.Create(remoteConfig)
metricSourceProvider := metricSource.CreateMetricSourceProvider(localSource, remoteSource)

graphiteMetricsRegistry, err := metrics.NewGraphiteRegistry(config.Graphite.GetSettings(), serviceName)
if err != nil {
fmt.Fprintf(os.Stderr, "Can not configure graphite metrics: %s\n", err.Error())
os.Exit(1)
}

isConfigured, _ := remoteSource.IsConfigured()
checkerMetrics := metrics.ConfigureCheckerMetrics(graphiteMetricsRegistry, isConfigured)
checkerMetrics := metrics.ConfigureCheckerMetrics(telemetry.Metrics, isConfigured)
checkerSettings := config.Checker.getSettings()
if triggerID != nil && *triggerID != "" {
checkSingleTrigger(database, checkerMetrics, checkerSettings, metricSourceProvider)
Expand Down
10 changes: 8 additions & 2 deletions cmd/config.go
Expand Up @@ -75,10 +75,16 @@ type LoggerConfig struct {
LogLevel string `yaml:"log_level"`
}

// TelemetryConfig is settings for listener, pprof, graphite
type TelemetryConfig struct {
Listen string `yaml:"listen"`
Pliner marked this conversation as resolved.
Show resolved Hide resolved
Pprof ProfilerConfig `yaml:"pprof"`
Graphite GraphiteConfig `yaml:"graphite"`
}

// ProfilerConfig is pprof settings structure that initialises at the start of moira
type ProfilerConfig struct {
// Define variable as valid non-empty string to enable pprof server. For example ':10000' will enable server available at http://moira.company.com:10000/debug/pprof/
Listen string `yaml:"listen"`
Enabled bool `yaml:"enabled"`
}

// RemoteConfig is remote graphite settings structure
Expand Down
27 changes: 14 additions & 13 deletions cmd/filter/config.go
Expand Up @@ -5,11 +5,10 @@ import (
)

type config struct {
Redis cmd.RedisConfig `yaml:"redis"`
Graphite cmd.GraphiteConfig `yaml:"graphite"`
Logger cmd.LoggerConfig `yaml:"log"`
Filter filterConfig `yaml:"filter"`
Pprof cmd.ProfilerConfig `yaml:"pprof"`
Redis cmd.RedisConfig `yaml:"redis"`
Logger cmd.LoggerConfig `yaml:"log"`
Filter filterConfig `yaml:"filter"`
Telemetry cmd.TelemetryConfig `yaml:"telemetry"`
}

type filterConfig struct {
Expand Down Expand Up @@ -44,14 +43,16 @@ func getDefault() config {
CacheCapacity: 10,
MaxParallelMatches: 0,
},
Graphite: cmd.GraphiteConfig{
RuntimeStats: false,
URI: "localhost:2003",
Prefix: "DevOps.Moira",
Interval: "60s",
},
Pprof: cmd.ProfilerConfig{
Listen: "",
Telemetry: cmd.TelemetryConfig{
Listen: ":8094",
Graphite: cmd.GraphiteConfig{
Enabled: false,
RuntimeStats: false,
URI: "localhost:2003",
Prefix: "DevOps.Moira",
Interval: "60s",
},
Pprof: cmd.ProfilerConfig{Enabled: false},
},
}
}
19 changes: 7 additions & 12 deletions cmd/filter/main.go
Expand Up @@ -65,23 +65,18 @@ func main() {
}
defer logger.Infof("Moira Filter stopped. Version: %s", MoiraVersion)

telemetry, err := cmd.ConfigureTelemetry(logger, config.Telemetry, serviceName)
if err != nil {
logger.Fatalf("Can not configure telemetry: %s", err.Error())
}
defer telemetry.Stop()

if config.Filter.MaxParallelMatches == 0 {
config.Filter.MaxParallelMatches = runtime.NumCPU()
logger.Infof("MaxParallelMatches is not configured, set it to the number of CPU - %d", config.Filter.MaxParallelMatches)
}

if config.Pprof.Listen != "" {
logger.Infof("Starting pprof server at: [%s]", config.Pprof.Listen)
cmd.StartProfiling(logger, config.Pprof)
}

graphiteMetricsRegistry, err := metrics.NewGraphiteRegistry(config.Graphite.GetSettings(), serviceName)
if err != nil {
fmt.Fprintf(os.Stderr, "Can not configure graphite metrics: %s\n", err.Error())
os.Exit(1)
}

filterMetrics := metrics.ConfigureFilterMetrics(graphiteMetricsRegistry)
filterMetrics := metrics.ConfigureFilterMetrics(telemetry.Metrics)
database := redis.NewDatabase(logger, config.Redis.GetSettings(), redis.Filter)

retentionConfigFile, err := os.Open(config.Filter.RetentionConfig)
Expand Down
22 changes: 12 additions & 10 deletions cmd/notifier/config.go
Expand Up @@ -14,10 +14,9 @@ import (

type config struct {
Redis cmd.RedisConfig `yaml:"redis"`
Graphite cmd.GraphiteConfig `yaml:"graphite"`
Logger cmd.LoggerConfig `yaml:"log"`
Notifier notifierConfig `yaml:"notifier"`
Pprof cmd.ProfilerConfig `yaml:"pprof"`
Telemetry cmd.TelemetryConfig `yaml:"telemetry"`
Remote cmd.RemoteConfig `yaml:"remote"`
ImageStores cmd.ImageStoreConfig `yaml:"image_store"`
}
Expand Down Expand Up @@ -65,12 +64,7 @@ func getDefault() config {
Port: "6379",
ConnectionLimit: 512,
},
Graphite: cmd.GraphiteConfig{
RuntimeStats: false,
URI: "localhost:2003",
Prefix: "DevOps.Moira",
Interval: "60s",
},

Logger: cmd.LoggerConfig{
LogFile: "stdout",
LogLevel: "info",
Expand All @@ -88,8 +82,16 @@ func getDefault() config {
FrontURI: "http://localhost",
Timezone: "UTC",
},
Pprof: cmd.ProfilerConfig{
Listen: "",
Telemetry: cmd.TelemetryConfig{
Listen: ":8093",
Graphite: cmd.GraphiteConfig{
Enabled: false,
RuntimeStats: false,
URI: "localhost:2003",
Prefix: "DevOps.Moira",
Interval: "60s",
},
Pprof: cmd.ProfilerConfig{Enabled: false},
},
Remote: cmd.RemoteConfig{
Timeout: "60s",
Expand Down
13 changes: 4 additions & 9 deletions cmd/notifier/main.go
Expand Up @@ -67,18 +67,13 @@ func main() {
}
defer logger.Infof("Moira Notifier stopped. Version: %s", MoiraVersion)

if config.Pprof.Listen != "" {
logger.Infof("Starting pprof server at: [%s]", config.Pprof.Listen)
cmd.StartProfiling(logger, config.Pprof)
}

graphiteMetricsRegistry, err := metrics.NewGraphiteRegistry(config.Graphite.GetSettings(), serviceName)
telemetry, err := cmd.ConfigureTelemetry(logger, config.Telemetry, serviceName)
if err != nil {
fmt.Fprintf(os.Stderr, "Can not configure graphite metrics: %s\n", err.Error())
os.Exit(1)
logger.Fatalf("Can not configure telemetry: %s", err.Error())
}
defer telemetry.Stop()

notifierMetrics := metrics.ConfigureNotifierMetrics(graphiteMetricsRegistry, serviceName)
notifierMetrics := metrics.ConfigureNotifierMetrics(telemetry.Metrics, serviceName)
databaseSettings := config.Redis.GetSettings()
database := redis.NewDatabase(logger, databaseSettings, redis.Notifier)

Expand Down
27 changes: 0 additions & 27 deletions cmd/profile.go

This file was deleted.