|
|
|
@ -27,6 +27,7 @@ import ( |
|
|
|
|
"runtime" |
|
|
|
|
"strconv" |
|
|
|
|
"strings" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/accounts" |
|
|
|
|
"github.com/ethereum/go-ethereum/accounts/keystore" |
|
|
|
@ -48,6 +49,7 @@ import ( |
|
|
|
|
"github.com/ethereum/go-ethereum/les" |
|
|
|
|
"github.com/ethereum/go-ethereum/log" |
|
|
|
|
"github.com/ethereum/go-ethereum/metrics" |
|
|
|
|
"github.com/ethereum/go-ethereum/metrics/influxdb" |
|
|
|
|
"github.com/ethereum/go-ethereum/node" |
|
|
|
|
"github.com/ethereum/go-ethereum/p2p" |
|
|
|
|
"github.com/ethereum/go-ethereum/p2p/discover" |
|
|
|
@ -360,10 +362,6 @@ var ( |
|
|
|
|
Name: "ethstats", |
|
|
|
|
Usage: "Reporting URL of a ethstats service (nodename:secret@host:port)", |
|
|
|
|
} |
|
|
|
|
MetricsEnabledFlag = cli.BoolFlag{ |
|
|
|
|
Name: metrics.MetricsEnabledFlag, |
|
|
|
|
Usage: "Enable metrics collection and reporting", |
|
|
|
|
} |
|
|
|
|
FakePoWFlag = cli.BoolFlag{ |
|
|
|
|
Name: "fakepow", |
|
|
|
|
Usage: "Disables proof-of-work verification", |
|
|
|
@ -532,6 +530,45 @@ var ( |
|
|
|
|
Usage: "Minimum POW accepted", |
|
|
|
|
Value: whisper.DefaultMinimumPoW, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Metrics flags
|
|
|
|
|
MetricsEnabledFlag = cli.BoolFlag{ |
|
|
|
|
Name: metrics.MetricsEnabledFlag, |
|
|
|
|
Usage: "Enable metrics collection and reporting", |
|
|
|
|
} |
|
|
|
|
MetricsEnableInfluxDBFlag = cli.BoolFlag{ |
|
|
|
|
Name: "metrics.influxdb", |
|
|
|
|
Usage: "Enable metrics export/push to an external InfluxDB database", |
|
|
|
|
} |
|
|
|
|
MetricsInfluxDBEndpointFlag = cli.StringFlag{ |
|
|
|
|
Name: "metrics.influxdb.endpoint", |
|
|
|
|
Usage: "InfluxDB API endpoint to report metrics to", |
|
|
|
|
Value: "http://localhost:8086", |
|
|
|
|
} |
|
|
|
|
MetricsInfluxDBDatabaseFlag = cli.StringFlag{ |
|
|
|
|
Name: "metrics.influxdb.database", |
|
|
|
|
Usage: "InfluxDB database name to push reported metrics to", |
|
|
|
|
Value: "geth", |
|
|
|
|
} |
|
|
|
|
MetricsInfluxDBUsernameFlag = cli.StringFlag{ |
|
|
|
|
Name: "metrics.influxdb.username", |
|
|
|
|
Usage: "Username to authorize access to the database", |
|
|
|
|
Value: "test", |
|
|
|
|
} |
|
|
|
|
MetricsInfluxDBPasswordFlag = cli.StringFlag{ |
|
|
|
|
Name: "metrics.influxdb.password", |
|
|
|
|
Usage: "Password to authorize access to the database", |
|
|
|
|
Value: "test", |
|
|
|
|
} |
|
|
|
|
// The `host` tag is part of every measurement sent to InfluxDB. Queries on tags are faster in InfluxDB.
|
|
|
|
|
// It is used so that we can group all nodes and average a measurement across all of them, but also so
|
|
|
|
|
// that we can select a specific node and inspect its measurements.
|
|
|
|
|
// https://docs.influxdata.com/influxdb/v1.4/concepts/key_concepts/#tag-key
|
|
|
|
|
MetricsInfluxDBHostTagFlag = cli.StringFlag{ |
|
|
|
|
Name: "metrics.influxdb.host.tag", |
|
|
|
|
Usage: "InfluxDB `host` tag attached to all measurements", |
|
|
|
|
Value: "localhost", |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// MakeDataDir retrieves the currently requested data directory, terminating
|
|
|
|
@ -1184,6 +1221,27 @@ func SetupNetwork(ctx *cli.Context) { |
|
|
|
|
params.TargetGasLimit = ctx.GlobalUint64(TargetGasLimitFlag.Name) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func SetupMetrics(ctx *cli.Context) { |
|
|
|
|
if metrics.Enabled { |
|
|
|
|
log.Info("Enabling metrics collection") |
|
|
|
|
var ( |
|
|
|
|
enableExport = ctx.GlobalBool(MetricsEnableInfluxDBFlag.Name) |
|
|
|
|
endpoint = ctx.GlobalString(MetricsInfluxDBEndpointFlag.Name) |
|
|
|
|
database = ctx.GlobalString(MetricsInfluxDBDatabaseFlag.Name) |
|
|
|
|
username = ctx.GlobalString(MetricsInfluxDBUsernameFlag.Name) |
|
|
|
|
password = ctx.GlobalString(MetricsInfluxDBPasswordFlag.Name) |
|
|
|
|
hosttag = ctx.GlobalString(MetricsInfluxDBHostTagFlag.Name) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
if enableExport { |
|
|
|
|
log.Info("Enabling metrics export to InfluxDB") |
|
|
|
|
go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "geth.", map[string]string{ |
|
|
|
|
"host": hosttag, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// MakeChainDatabase open an LevelDB using the flags passed to the client and will hard crash if it fails.
|
|
|
|
|
func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { |
|
|
|
|
var ( |
|
|
|
|