cmd/geth: dump config for metrics (#22083)
* cmd/geth: dump config * cmd/geth: dump config * cmd/geth: properly read config again * cmd/geth: override metrics if flags are set * cmd/geth: write metrics regardless if enabled * cmd/geth: renamed to metricsfromcliargs * metrics: add default configuration
This commit is contained in:
		
							parent
							
								
									398182284c
								
							
						
					
					
						commit
						10555d4684
					
				| @ -30,6 +30,7 @@ import ( | |||||||
| 	"github.com/ethereum/go-ethereum/eth" | 	"github.com/ethereum/go-ethereum/eth" | ||||||
| 	"github.com/ethereum/go-ethereum/internal/ethapi" | 	"github.com/ethereum/go-ethereum/internal/ethapi" | ||||||
| 	"github.com/ethereum/go-ethereum/log" | 	"github.com/ethereum/go-ethereum/log" | ||||||
|  | 	"github.com/ethereum/go-ethereum/metrics" | ||||||
| 	"github.com/ethereum/go-ethereum/node" | 	"github.com/ethereum/go-ethereum/node" | ||||||
| 	"github.com/ethereum/go-ethereum/params" | 	"github.com/ethereum/go-ethereum/params" | ||||||
| 	"github.com/naoina/toml" | 	"github.com/naoina/toml" | ||||||
| @ -88,6 +89,7 @@ type gethConfig struct { | |||||||
| 	Shh      whisperDeprecatedConfig | 	Shh      whisperDeprecatedConfig | ||||||
| 	Node     node.Config | 	Node     node.Config | ||||||
| 	Ethstats ethstatsConfig | 	Ethstats ethstatsConfig | ||||||
|  | 	Metrics  metrics.Config | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func loadConfig(file string, cfg *gethConfig) error { | func loadConfig(file string, cfg *gethConfig) error { | ||||||
| @ -119,8 +121,9 @@ func defaultNodeConfig() node.Config { | |||||||
| func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { | func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { | ||||||
| 	// Load defaults.
 | 	// Load defaults.
 | ||||||
| 	cfg := gethConfig{ | 	cfg := gethConfig{ | ||||||
| 		Eth:  eth.DefaultConfig, | 		Eth:     eth.DefaultConfig, | ||||||
| 		Node: defaultNodeConfig(), | 		Node:    defaultNodeConfig(), | ||||||
|  | 		Metrics: metrics.DefaultConfig, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Load config file.
 | 	// Load config file.
 | ||||||
| @ -133,7 +136,6 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { | |||||||
| 			log.Warn("Deprecated whisper config detected. Whisper has been moved to github.com/ethereum/whisper") | 			log.Warn("Deprecated whisper config detected. Whisper has been moved to github.com/ethereum/whisper") | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	// Apply flags.
 | 	// Apply flags.
 | ||||||
| 	utils.SetNodeConfig(ctx, &cfg.Node) | 	utils.SetNodeConfig(ctx, &cfg.Node) | ||||||
| 	stack, err := node.New(&cfg.Node) | 	stack, err := node.New(&cfg.Node) | ||||||
| @ -146,6 +148,8 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { | |||||||
| 	} | 	} | ||||||
| 	utils.SetShhConfig(ctx, stack) | 	utils.SetShhConfig(ctx, stack) | ||||||
| 
 | 
 | ||||||
|  | 	applyMetricConfig(ctx, &cfg) | ||||||
|  | 
 | ||||||
| 	return stack, cfg | 	return stack, cfg | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -204,3 +208,36 @@ func dumpConfig(ctx *cli.Context) error { | |||||||
| 
 | 
 | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func applyMetricConfig(ctx *cli.Context, cfg *gethConfig) { | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsEnabledFlag.Name) { | ||||||
|  | 		cfg.Metrics.Enabled = ctx.GlobalBool(utils.MetricsEnabledFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsEnabledExpensiveFlag.Name) { | ||||||
|  | 		cfg.Metrics.EnabledExpensive = ctx.GlobalBool(utils.MetricsEnabledExpensiveFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsHTTPFlag.Name) { | ||||||
|  | 		cfg.Metrics.HTTP = ctx.GlobalString(utils.MetricsHTTPFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsPortFlag.Name) { | ||||||
|  | 		cfg.Metrics.Port = ctx.GlobalInt(utils.MetricsPortFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsEnableInfluxDBFlag.Name) { | ||||||
|  | 		cfg.Metrics.EnableInfluxDB = ctx.GlobalBool(utils.MetricsEnableInfluxDBFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsInfluxDBEndpointFlag.Name) { | ||||||
|  | 		cfg.Metrics.InfluxDBEndpoint = ctx.GlobalString(utils.MetricsInfluxDBEndpointFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsInfluxDBDatabaseFlag.Name) { | ||||||
|  | 		cfg.Metrics.InfluxDBDatabase = ctx.GlobalString(utils.MetricsInfluxDBDatabaseFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsInfluxDBUsernameFlag.Name) { | ||||||
|  | 		cfg.Metrics.InfluxDBUsername = ctx.GlobalString(utils.MetricsInfluxDBUsernameFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsInfluxDBPasswordFlag.Name) { | ||||||
|  | 		cfg.Metrics.InfluxDBPassword = ctx.GlobalString(utils.MetricsInfluxDBPasswordFlag.Name) | ||||||
|  | 	} | ||||||
|  | 	if ctx.GlobalIsSet(utils.MetricsInfluxDBTagsFlag.Name) { | ||||||
|  | 		cfg.Metrics.InfluxDBTags = ctx.GlobalString(utils.MetricsInfluxDBTagsFlag.Name) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | |||||||
| @ -684,12 +684,12 @@ var ( | |||||||
| 	MetricsHTTPFlag = cli.StringFlag{ | 	MetricsHTTPFlag = cli.StringFlag{ | ||||||
| 		Name:  "metrics.addr", | 		Name:  "metrics.addr", | ||||||
| 		Usage: "Enable stand-alone metrics HTTP server listening interface", | 		Usage: "Enable stand-alone metrics HTTP server listening interface", | ||||||
| 		Value: "127.0.0.1", | 		Value: metrics.DefaultConfig.HTTP, | ||||||
| 	} | 	} | ||||||
| 	MetricsPortFlag = cli.IntFlag{ | 	MetricsPortFlag = cli.IntFlag{ | ||||||
| 		Name:  "metrics.port", | 		Name:  "metrics.port", | ||||||
| 		Usage: "Metrics HTTP server listening port", | 		Usage: "Metrics HTTP server listening port", | ||||||
| 		Value: 6060, | 		Value: metrics.DefaultConfig.Port, | ||||||
| 	} | 	} | ||||||
| 	MetricsEnableInfluxDBFlag = cli.BoolFlag{ | 	MetricsEnableInfluxDBFlag = cli.BoolFlag{ | ||||||
| 		Name:  "metrics.influxdb", | 		Name:  "metrics.influxdb", | ||||||
| @ -698,22 +698,22 @@ var ( | |||||||
| 	MetricsInfluxDBEndpointFlag = cli.StringFlag{ | 	MetricsInfluxDBEndpointFlag = cli.StringFlag{ | ||||||
| 		Name:  "metrics.influxdb.endpoint", | 		Name:  "metrics.influxdb.endpoint", | ||||||
| 		Usage: "InfluxDB API endpoint to report metrics to", | 		Usage: "InfluxDB API endpoint to report metrics to", | ||||||
| 		Value: "http://localhost:8086", | 		Value: metrics.DefaultConfig.InfluxDBEndpoint, | ||||||
| 	} | 	} | ||||||
| 	MetricsInfluxDBDatabaseFlag = cli.StringFlag{ | 	MetricsInfluxDBDatabaseFlag = cli.StringFlag{ | ||||||
| 		Name:  "metrics.influxdb.database", | 		Name:  "metrics.influxdb.database", | ||||||
| 		Usage: "InfluxDB database name to push reported metrics to", | 		Usage: "InfluxDB database name to push reported metrics to", | ||||||
| 		Value: "geth", | 		Value: metrics.DefaultConfig.InfluxDBDatabase, | ||||||
| 	} | 	} | ||||||
| 	MetricsInfluxDBUsernameFlag = cli.StringFlag{ | 	MetricsInfluxDBUsernameFlag = cli.StringFlag{ | ||||||
| 		Name:  "metrics.influxdb.username", | 		Name:  "metrics.influxdb.username", | ||||||
| 		Usage: "Username to authorize access to the database", | 		Usage: "Username to authorize access to the database", | ||||||
| 		Value: "test", | 		Value: metrics.DefaultConfig.InfluxDBUsername, | ||||||
| 	} | 	} | ||||||
| 	MetricsInfluxDBPasswordFlag = cli.StringFlag{ | 	MetricsInfluxDBPasswordFlag = cli.StringFlag{ | ||||||
| 		Name:  "metrics.influxdb.password", | 		Name:  "metrics.influxdb.password", | ||||||
| 		Usage: "Password to authorize access to the database", | 		Usage: "Password to authorize access to the database", | ||||||
| 		Value: "test", | 		Value: metrics.DefaultConfig.InfluxDBPassword, | ||||||
| 	} | 	} | ||||||
| 	// Tags are part of every measurement sent to InfluxDB. Queries on tags are faster in InfluxDB.
 | 	// Tags are part of every measurement sent to InfluxDB. Queries on tags are faster in InfluxDB.
 | ||||||
| 	// For example `host` tag could be used so that we can group all nodes and average a measurement
 | 	// For example `host` tag could be used so that we can group all nodes and average a measurement
 | ||||||
| @ -722,7 +722,7 @@ var ( | |||||||
| 	MetricsInfluxDBTagsFlag = cli.StringFlag{ | 	MetricsInfluxDBTagsFlag = cli.StringFlag{ | ||||||
| 		Name:  "metrics.influxdb.tags", | 		Name:  "metrics.influxdb.tags", | ||||||
| 		Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements", | 		Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements", | ||||||
| 		Value: "host=localhost", | 		Value: metrics.DefaultConfig.InfluxDBTags, | ||||||
| 	} | 	} | ||||||
| 	EWASMInterpreterFlag = cli.StringFlag{ | 	EWASMInterpreterFlag = cli.StringFlag{ | ||||||
| 		Name:  "vm.ewasm", | 		Name:  "vm.ewasm", | ||||||
|  | |||||||
							
								
								
									
										45
									
								
								metrics/config.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								metrics/config.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | |||||||
|  | // Copyright 2021 The go-ethereum Authors
 | ||||||
|  | // This file is part of go-ethereum.
 | ||||||
|  | //
 | ||||||
|  | // The go-ethereum library is free software: you can redistribute it and/or modify
 | ||||||
|  | // it under the terms of the GNU Lesser General Public License as published by
 | ||||||
|  | // the Free Software Foundation, either version 3 of the License, or
 | ||||||
|  | // (at your option) any later version.
 | ||||||
|  | //
 | ||||||
|  | // The go-ethereum library is distributed in the hope that it will be useful,
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | ||||||
|  | // GNU Lesser General Public License for more details.
 | ||||||
|  | //
 | ||||||
|  | // You should have received a copy of the GNU Lesser General Public License
 | ||||||
|  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | 
 | ||||||
|  | package metrics | ||||||
|  | 
 | ||||||
|  | // Config contains the configuration for the metric collection.
 | ||||||
|  | type Config struct { | ||||||
|  | 	Enabled          bool   `toml:",omitempty"` | ||||||
|  | 	EnabledExpensive bool   `toml:",omitempty"` | ||||||
|  | 	HTTP             string `toml:",omitempty"` | ||||||
|  | 	Port             int    `toml:",omitempty"` | ||||||
|  | 	EnableInfluxDB   bool   `toml:",omitempty"` | ||||||
|  | 	InfluxDBEndpoint string `toml:",omitempty"` | ||||||
|  | 	InfluxDBDatabase string `toml:",omitempty"` | ||||||
|  | 	InfluxDBUsername string `toml:",omitempty"` | ||||||
|  | 	InfluxDBPassword string `toml:",omitempty"` | ||||||
|  | 	InfluxDBTags     string `toml:",omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // DefaultConfig is the default config for metrics used in go-ethereum.
 | ||||||
|  | var DefaultConfig = Config{ | ||||||
|  | 	Enabled:          false, | ||||||
|  | 	EnabledExpensive: false, | ||||||
|  | 	HTTP:             "127.0.0.1", | ||||||
|  | 	Port:             6060, | ||||||
|  | 	EnableInfluxDB:   false, | ||||||
|  | 	InfluxDBEndpoint: "http://localhost:8086", | ||||||
|  | 	InfluxDBDatabase: "geth", | ||||||
|  | 	InfluxDBUsername: "test", | ||||||
|  | 	InfluxDBPassword: "test", | ||||||
|  | 	InfluxDBTags:     "host=localhost", | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user