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/internal/ethapi" | ||||
| 	"github.com/ethereum/go-ethereum/log" | ||||
| 	"github.com/ethereum/go-ethereum/metrics" | ||||
| 	"github.com/ethereum/go-ethereum/node" | ||||
| 	"github.com/ethereum/go-ethereum/params" | ||||
| 	"github.com/naoina/toml" | ||||
| @ -88,6 +89,7 @@ type gethConfig struct { | ||||
| 	Shh      whisperDeprecatedConfig | ||||
| 	Node     node.Config | ||||
| 	Ethstats ethstatsConfig | ||||
| 	Metrics  metrics.Config | ||||
| } | ||||
| 
 | ||||
| func loadConfig(file string, cfg *gethConfig) error { | ||||
| @ -121,6 +123,7 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { | ||||
| 	cfg := gethConfig{ | ||||
| 		Eth:     eth.DefaultConfig, | ||||
| 		Node:    defaultNodeConfig(), | ||||
| 		Metrics: metrics.DefaultConfig, | ||||
| 	} | ||||
| 
 | ||||
| 	// 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") | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Apply flags.
 | ||||
| 	utils.SetNodeConfig(ctx, &cfg.Node) | ||||
| 	stack, err := node.New(&cfg.Node) | ||||
| @ -146,6 +148,8 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { | ||||
| 	} | ||||
| 	utils.SetShhConfig(ctx, stack) | ||||
| 
 | ||||
| 	applyMetricConfig(ctx, &cfg) | ||||
| 
 | ||||
| 	return stack, cfg | ||||
| } | ||||
| 
 | ||||
| @ -204,3 +208,36 @@ func dumpConfig(ctx *cli.Context) error { | ||||
| 
 | ||||
| 	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{ | ||||
| 		Name:  "metrics.addr", | ||||
| 		Usage: "Enable stand-alone metrics HTTP server listening interface", | ||||
| 		Value: "127.0.0.1", | ||||
| 		Value: metrics.DefaultConfig.HTTP, | ||||
| 	} | ||||
| 	MetricsPortFlag = cli.IntFlag{ | ||||
| 		Name:  "metrics.port", | ||||
| 		Usage: "Metrics HTTP server listening port", | ||||
| 		Value: 6060, | ||||
| 		Value: metrics.DefaultConfig.Port, | ||||
| 	} | ||||
| 	MetricsEnableInfluxDBFlag = cli.BoolFlag{ | ||||
| 		Name:  "metrics.influxdb", | ||||
| @ -698,22 +698,22 @@ var ( | ||||
| 	MetricsInfluxDBEndpointFlag = cli.StringFlag{ | ||||
| 		Name:  "metrics.influxdb.endpoint", | ||||
| 		Usage: "InfluxDB API endpoint to report metrics to", | ||||
| 		Value: "http://localhost:8086", | ||||
| 		Value: metrics.DefaultConfig.InfluxDBEndpoint, | ||||
| 	} | ||||
| 	MetricsInfluxDBDatabaseFlag = cli.StringFlag{ | ||||
| 		Name:  "metrics.influxdb.database", | ||||
| 		Usage: "InfluxDB database name to push reported metrics to", | ||||
| 		Value: "geth", | ||||
| 		Value: metrics.DefaultConfig.InfluxDBDatabase, | ||||
| 	} | ||||
| 	MetricsInfluxDBUsernameFlag = cli.StringFlag{ | ||||
| 		Name:  "metrics.influxdb.username", | ||||
| 		Usage: "Username to authorize access to the database", | ||||
| 		Value: "test", | ||||
| 		Value: metrics.DefaultConfig.InfluxDBUsername, | ||||
| 	} | ||||
| 	MetricsInfluxDBPasswordFlag = cli.StringFlag{ | ||||
| 		Name:  "metrics.influxdb.password", | ||||
| 		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.
 | ||||
| 	// 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{ | ||||
| 		Name:  "metrics.influxdb.tags", | ||||
| 		Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements", | ||||
| 		Value: "host=localhost", | ||||
| 		Value: metrics.DefaultConfig.InfluxDBTags, | ||||
| 	} | ||||
| 	EWASMInterpreterFlag = cli.StringFlag{ | ||||
| 		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