[#1602] config: Enable metrics and profiler services with a flag

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
Evgenii Stratonikov 2022-07-13 12:17:37 +03:00 committed by fyrchik
parent 12dc5c3395
commit ac46d1a11f
16 changed files with 53 additions and 15 deletions

View file

@ -5,6 +5,8 @@ Changelog for NeoFS Node
### Added ### Added
- Profiler and metrics services now should be enabled with a separate flag
### Changed ### Changed
- Require SG members to be unique (#1490) - Require SG members to be unique (#1490)

View file

@ -62,7 +62,7 @@ func main() {
intErr := make(chan error) // internal inner ring errors intErr := make(chan error) // internal inner ring errors
httpServers := initHTTPServers(cfg) httpServers := initHTTPServers(cfg, log)
innerRing, err := innerring.New(ctx, log, cfg, intErr) innerRing, err := innerring.New(ctx, log, cfg, intErr)
exitErr(err) exitErr(err)
@ -107,23 +107,26 @@ func main() {
log.Info("application stopped") log.Info("application stopped")
} }
func initHTTPServers(cfg *viper.Viper) []*httputil.Server { func initHTTPServers(cfg *viper.Viper, log *logger.Logger) []*httputil.Server {
items := []struct { items := []struct {
msg string
cfgPrefix string cfgPrefix string
handler func() http.Handler handler func() http.Handler
}{ }{
{"profiler", httputil.Handler}, {"pprof", "profiler", httputil.Handler},
{"metrics", promhttp.Handler}, {"prometheus", "metrics", promhttp.Handler},
} }
httpServers := make([]*httputil.Server, 0, len(items)) httpServers := make([]*httputil.Server, 0, len(items))
for _, item := range items { for _, item := range items {
addr := cfg.GetString(item.cfgPrefix + ".address") if !cfg.GetBool(item.cfgPrefix + ".enabled") {
if addr == "" { log.Info(item.msg + " is disabled, skip")
continue continue
} }
addr := cfg.GetString(item.cfgPrefix + ".address")
var prm httputil.Prm var prm httputil.Prm
prm.Address = addr prm.Address = addr

View file

@ -321,9 +321,11 @@ func initCfg(path string) *cfg {
user.IDFromKey(&c.ownerIDFromKey, key.PrivateKey.PublicKey) user.IDFromKey(&c.ownerIDFromKey, key.PrivateKey.PublicKey)
if metricsconfig.Address(c.appCfg) != "" { if metricsconfig.Enabled(c.appCfg) {
c.metricsCollector = metrics.NewStorageMetrics() c.metricsCollector = metrics.NewStorageMetrics()
netState.metrics = c.metricsCollector netState.metrics = c.metricsCollector
} else {
c.log.Info("prometheus metrics are disabled")
} }
c.onShutdown(c.clientCache.CloseAll) // clean up connections c.onShutdown(c.clientCache.CloseAll) // clean up connections

View file

@ -13,9 +13,17 @@ const (
ShutdownTimeoutDefault = 30 * time.Second ShutdownTimeoutDefault = 30 * time.Second
// AddressDefault is a default value for metrics HTTP service endpoint. // AddressDefault is a default value for metrics HTTP service endpoint.
AddressDefault = "" AddressDefault = "localhost:9090"
) )
// Enabled returns the value of "enabled" config parameter
// from "metrics" section.
//
// Returns false if the value is missing or invalid.
func Enabled(c *config.Config) bool {
return config.BoolSafe(c.Sub(subsection), "enabled")
}
// ShutdownTimeout returns the value of "shutdown_timeout" config parameter // ShutdownTimeout returns the value of "shutdown_timeout" config parameter
// from "metrics" section. // from "metrics" section.
// //

View file

@ -17,6 +17,7 @@ func TestMetricsSection(t *testing.T) {
require.Equal(t, metricsconfig.ShutdownTimeoutDefault, to) require.Equal(t, metricsconfig.ShutdownTimeoutDefault, to)
require.Equal(t, metricsconfig.AddressDefault, addr) require.Equal(t, metricsconfig.AddressDefault, addr)
require.False(t, metricsconfig.Enabled(configtest.EmptyConfig()))
}) })
const path = "../../../../config/example/node" const path = "../../../../config/example/node"
@ -27,6 +28,7 @@ func TestMetricsSection(t *testing.T) {
require.Equal(t, 15*time.Second, to) require.Equal(t, 15*time.Second, to)
require.Equal(t, "localhost:9090", addr) require.Equal(t, "localhost:9090", addr)
require.True(t, metricsconfig.Enabled(c))
} }
configtest.ForEachFileType(path, fileConfigTest) configtest.ForEachFileType(path, fileConfigTest)

View file

@ -13,9 +13,17 @@ const (
ShutdownTimeoutDefault = 30 * time.Second ShutdownTimeoutDefault = 30 * time.Second
// AddressDefault is a default value for profiler HTTP service endpoint. // AddressDefault is a default value for profiler HTTP service endpoint.
AddressDefault = "" AddressDefault = "localhost:6060"
) )
// Enabled returns the value of "enabled" config parameter
// from "profiler" section.
//
// Returns false if the value is missing or invalid.
func Enabled(c *config.Config) bool {
return config.BoolSafe(c.Sub(subsection), "enabled")
}
// ShutdownTimeout returns the value of "shutdown_timeout" config parameter // ShutdownTimeout returns the value of "shutdown_timeout" config parameter
// from "profiler" section. // from "profiler" section.
// //

View file

@ -17,6 +17,7 @@ func TestProfilerSection(t *testing.T) {
require.Equal(t, profilerconfig.ShutdownTimeoutDefault, to) require.Equal(t, profilerconfig.ShutdownTimeoutDefault, to)
require.Equal(t, profilerconfig.AddressDefault, addr) require.Equal(t, profilerconfig.AddressDefault, addr)
require.False(t, profilerconfig.Enabled(configtest.EmptyConfig()))
}) })
const path = "../../../../config/example/node" const path = "../../../../config/example/node"
@ -27,6 +28,7 @@ func TestProfilerSection(t *testing.T) {
require.Equal(t, 15*time.Second, to) require.Equal(t, 15*time.Second, to)
require.Equal(t, "localhost:6060", addr) require.Equal(t, "localhost:6060", addr)
require.True(t, profilerconfig.Enabled(c))
} }
configtest.ForEachFileType(path, fileConfigTest) configtest.ForEachFileType(path, fileConfigTest)

View file

@ -10,14 +10,13 @@ import (
) )
func initMetrics(c *cfg) { func initMetrics(c *cfg) {
addr := metricsconfig.Address(c.appCfg) if !metricsconfig.Enabled(c.appCfg) {
if addr == "" {
return return
} }
var prm httputil.Prm var prm httputil.Prm
prm.Address = addr prm.Address = metricsconfig.Address(c.appCfg)
prm.Handler = promhttp.Handler() prm.Handler = promhttp.Handler()
srv := httputil.New(prm, srv := httputil.New(prm,

View file

@ -9,14 +9,14 @@ import (
) )
func initProfiler(c *cfg) { func initProfiler(c *cfg) {
addr := profilerconfig.Address(c.appCfg) if !profilerconfig.Enabled(c.appCfg) {
if addr == "" { c.log.Info("pprof is disabled")
return return
} }
var prm httputil.Prm var prm httputil.Prm
prm.Address = addr prm.Address = profilerconfig.Address(c.appCfg)
prm.Handler = httputil.Handler() prm.Handler = httputil.Handler()
srv := httputil.New(prm, srv := httputil.New(prm,

View file

@ -82,9 +82,11 @@ NEOFS_IR_CONTRACTS_ALPHABET_DOBRO=e6122b65d45c8feeb04455d67814394c147ed4d1
NEOFS_IR_CONTRACTS_ALPHABET_YEST=cdbca5cb5d48a4472923844d0e3ee6328cf86d38 NEOFS_IR_CONTRACTS_ALPHABET_YEST=cdbca5cb5d48a4472923844d0e3ee6328cf86d38
NEOFS_IR_CONTRACTS_ALPHABET_ZHIVETE=f584699bc2ff457d339fb09f16217042c1a42101 NEOFS_IR_CONTRACTS_ALPHABET_ZHIVETE=f584699bc2ff457d339fb09f16217042c1a42101
NEOFS_IR_PROFILER_ENABLED=true
NEOFS_IR_PROFILER_ADDRESS=localhost:6060 NEOFS_IR_PROFILER_ADDRESS=localhost:6060
NEOFS_IR_PROFILER_SHUTDOWN_TIMEOUT=30s NEOFS_IR_PROFILER_SHUTDOWN_TIMEOUT=30s
NEOFS_IR_METRICS_ENABLED=true
NEOFS_IR_METRICS_ADDRESS=localhost:9090 NEOFS_IR_METRICS_ADDRESS=localhost:9090
NEOFS_IR_METRICS_SHUTDOWN_TIMEOUT=30s NEOFS_IR_METRICS_SHUTDOWN_TIMEOUT=30s

View file

@ -124,10 +124,12 @@ contracts:
zhivete: f584699bc2ff457d339fb09f16217042c1a42101 # Optional: override address of zhivete contract in sidechain zhivete: f584699bc2ff457d339fb09f16217042c1a42101 # Optional: override address of zhivete contract in sidechain
profiler: profiler:
enabled: true
address: localhost:6060 # Endpoint for application pprof profiling; disabled by default address: localhost:6060 # Endpoint for application pprof profiling; disabled by default
shutdown_timeout: 30s # Timeout for profiling HTTP server graceful shutdown shutdown_timeout: 30s # Timeout for profiling HTTP server graceful shutdown
metrics: metrics:
enabled: true
address: localhost:9090 # Endpoint for application prometheus metrics; disabled by default address: localhost:9090 # Endpoint for application prometheus metrics; disabled by default
shutdown_timeout: 30s # Timeout for metrics HTTP server graceful shutdown shutdown_timeout: 30s # Timeout for metrics HTTP server graceful shutdown

View file

@ -1,8 +1,10 @@
NEOFS_LOGGER_LEVEL=debug NEOFS_LOGGER_LEVEL=debug
NEOFS_PROFILER_ENABLED=true
NEOFS_PROFILER_ADDRESS=localhost:6060 NEOFS_PROFILER_ADDRESS=localhost:6060
NEOFS_PROFILER_SHUTDOWN_TIMEOUT=15s NEOFS_PROFILER_SHUTDOWN_TIMEOUT=15s
NEOFS_METRICS_ENABLED=true
NEOFS_METRICS_ADDRESS=localhost:9090 NEOFS_METRICS_ADDRESS=localhost:9090
NEOFS_METRICS_SHUTDOWN_TIMEOUT=15s NEOFS_METRICS_SHUTDOWN_TIMEOUT=15s

View file

@ -3,10 +3,12 @@
"level": "debug" "level": "debug"
}, },
"profiler": { "profiler": {
"enabled": true,
"address": "localhost:6060", "address": "localhost:6060",
"shutdown_timeout": "15s" "shutdown_timeout": "15s"
}, },
"metrics": { "metrics": {
"enabled": true,
"address": "localhost:9090", "address": "localhost:9090",
"shutdown_timeout": "15s" "shutdown_timeout": "15s"
}, },

View file

@ -2,10 +2,12 @@ logger:
level: debug # logger level: one of "debug", "info" (default), "warn", "error", "dpanic", "panic", "fatal" level: debug # logger level: one of "debug", "info" (default), "warn", "error", "dpanic", "panic", "fatal"
profiler: profiler:
enabled: true
address: localhost:6060 # endpoint for Node profiling address: localhost:6060 # endpoint for Node profiling
shutdown_timeout: 15s # timeout for profiling HTTP server graceful shutdown shutdown_timeout: 15s # timeout for profiling HTTP server graceful shutdown
metrics: metrics:
enabled: true
address: localhost:9090 # endpoint for Node metrics address: localhost:9090 # endpoint for Node metrics
shutdown_timeout: 15s # timeout for metrics HTTP server graceful shutdown shutdown_timeout: 15s # timeout for metrics HTTP server graceful shutdown

View file

@ -40,6 +40,7 @@ logger:
level: info level: info
metrics: metrics:
enabled: true
address: localhost:9090 address: localhost:9090
shutdown_timeout: 15s shutdown_timeout: 15s

View file

@ -24,6 +24,7 @@ node:
attribute_1: User-Agent:NeoFS\/0.27 attribute_1: User-Agent:NeoFS\/0.27
metrics: metrics:
enabled: true
address: localhost:9090 address: localhost:9090
shutdown_timeout: 15s shutdown_timeout: 15s