Skip to content

Commit 6902485

Browse files
authored
cmd, metrics: add support for influxdb-v2 (cherry-picking from italoacasas' changes), leave existing support for v1 to maintain backwards-compatibility. (ethereum#23194)
This PR adds flag to enable InfluxDB v2 (--metrics.influxdbv2), flags for v2-specific features (--metrics.influxdb.token, --metrics.influxdb.bucket), also carries over addition of support for specifying organization (--metrics.influxdb.organization), but still retains backwards compatibility with InfluxDB v1.
1 parent fb4007b commit 6902485

File tree

8 files changed

+377
-18
lines changed

8 files changed

+377
-18
lines changed

cmd/geth/chaincmd.go

+4
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,15 @@ The dumpgenesis command dumps the genesis block configuration in JSON format to
9292
utils.MetricsHTTPFlag,
9393
utils.MetricsPortFlag,
9494
utils.MetricsEnableInfluxDBFlag,
95+
utils.MetricsEnableInfluxDBV2Flag,
9596
utils.MetricsInfluxDBEndpointFlag,
9697
utils.MetricsInfluxDBDatabaseFlag,
9798
utils.MetricsInfluxDBUsernameFlag,
9899
utils.MetricsInfluxDBPasswordFlag,
99100
utils.MetricsInfluxDBTagsFlag,
101+
utils.MetricsInfluxDBTokenFlag,
102+
utils.MetricsInfluxDBBucketFlag,
103+
utils.MetricsInfluxDBOrganizationFlag,
100104
utils.TxLookupLimitFlag,
101105
},
102106
Category: "BLOCKCHAIN COMMANDS",

cmd/geth/config.go

+12
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,18 @@ func applyMetricConfig(ctx *cli.Context, cfg *gethConfig) {
233233
if ctx.GlobalIsSet(utils.MetricsInfluxDBTagsFlag.Name) {
234234
cfg.Metrics.InfluxDBTags = ctx.GlobalString(utils.MetricsInfluxDBTagsFlag.Name)
235235
}
236+
if ctx.GlobalIsSet(utils.MetricsEnableInfluxDBV2Flag.Name) {
237+
cfg.Metrics.EnableInfluxDBV2 = ctx.GlobalBool(utils.MetricsEnableInfluxDBV2Flag.Name)
238+
}
239+
if ctx.GlobalIsSet(utils.MetricsInfluxDBTokenFlag.Name) {
240+
cfg.Metrics.InfluxDBToken = ctx.GlobalString(utils.MetricsInfluxDBTokenFlag.Name)
241+
}
242+
if ctx.GlobalIsSet(utils.MetricsInfluxDBBucketFlag.Name) {
243+
cfg.Metrics.InfluxDBBucket = ctx.GlobalString(utils.MetricsInfluxDBBucketFlag.Name)
244+
}
245+
if ctx.GlobalIsSet(utils.MetricsInfluxDBOrganizationFlag.Name) {
246+
cfg.Metrics.InfluxDBOrganization = ctx.GlobalString(utils.MetricsInfluxDBOrganizationFlag.Name)
247+
}
236248
}
237249

238250
func deprecated(field string) bool {

cmd/geth/main.go

+4
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ var (
195195
utils.MetricsInfluxDBUsernameFlag,
196196
utils.MetricsInfluxDBPasswordFlag,
197197
utils.MetricsInfluxDBTagsFlag,
198+
utils.MetricsEnableInfluxDBV2Flag,
199+
utils.MetricsInfluxDBTokenFlag,
200+
utils.MetricsInfluxDBBucketFlag,
201+
utils.MetricsInfluxDBOrganizationFlag,
198202
}
199203
)
200204

cmd/utils/flags.go

+59-5
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,29 @@ var (
756756
Value: metrics.DefaultConfig.InfluxDBTags,
757757
}
758758

759+
MetricsEnableInfluxDBV2Flag = cli.BoolFlag{
760+
Name: "metrics.influxdbv2",
761+
Usage: "Enable metrics export/push to an external InfluxDB v2 database",
762+
}
763+
764+
MetricsInfluxDBTokenFlag = cli.StringFlag{
765+
Name: "metrics.influxdb.token",
766+
Usage: "Token to authorize access to the database (v2 only)",
767+
Value: metrics.DefaultConfig.InfluxDBToken,
768+
}
769+
770+
MetricsInfluxDBBucketFlag = cli.StringFlag{
771+
Name: "metrics.influxdb.bucket",
772+
Usage: "InfluxDB bucket name to push reported metrics to (v2 only)",
773+
Value: metrics.DefaultConfig.InfluxDBBucket,
774+
}
775+
776+
MetricsInfluxDBOrganizationFlag = cli.StringFlag{
777+
Name: "metrics.influxdb.organization",
778+
Usage: "InfluxDB organization name (v2 only)",
779+
Value: metrics.DefaultConfig.InfluxDBOrganization,
780+
}
781+
759782
CatalystFlag = cli.BoolFlag{
760783
Name: "catalyst",
761784
Usage: "Catalyst mode (eth2 integration testing)",
@@ -1739,11 +1762,36 @@ func SetupMetrics(ctx *cli.Context) {
17391762
log.Info("Enabling metrics collection")
17401763

17411764
var (
1742-
enableExport = ctx.GlobalBool(MetricsEnableInfluxDBFlag.Name)
1743-
endpoint = ctx.GlobalString(MetricsInfluxDBEndpointFlag.Name)
1744-
database = ctx.GlobalString(MetricsInfluxDBDatabaseFlag.Name)
1745-
username = ctx.GlobalString(MetricsInfluxDBUsernameFlag.Name)
1746-
password = ctx.GlobalString(MetricsInfluxDBPasswordFlag.Name)
1765+
enableExport = ctx.GlobalBool(MetricsEnableInfluxDBFlag.Name)
1766+
enableExportV2 = ctx.GlobalBool(MetricsEnableInfluxDBV2Flag.Name)
1767+
)
1768+
1769+
if enableExport || enableExportV2 {
1770+
CheckExclusive(ctx, MetricsEnableInfluxDBFlag, MetricsEnableInfluxDBV2Flag)
1771+
1772+
v1FlagIsSet := ctx.GlobalIsSet(MetricsInfluxDBUsernameFlag.Name) ||
1773+
ctx.GlobalIsSet(MetricsInfluxDBPasswordFlag.Name)
1774+
1775+
v2FlagIsSet := ctx.GlobalIsSet(MetricsInfluxDBTokenFlag.Name) ||
1776+
ctx.GlobalIsSet(MetricsInfluxDBOrganizationFlag.Name) ||
1777+
ctx.GlobalIsSet(MetricsInfluxDBBucketFlag.Name)
1778+
1779+
if enableExport && v2FlagIsSet {
1780+
Fatalf("Flags --influxdb.metrics.organization, --influxdb.metrics.token, --influxdb.metrics.bucket are only available for influxdb-v2")
1781+
} else if enableExportV2 && v1FlagIsSet {
1782+
Fatalf("Flags --influxdb.metrics.username, --influxdb.metrics.password are only available for influxdb-v1")
1783+
}
1784+
}
1785+
1786+
var (
1787+
endpoint = ctx.GlobalString(MetricsInfluxDBEndpointFlag.Name)
1788+
database = ctx.GlobalString(MetricsInfluxDBDatabaseFlag.Name)
1789+
username = ctx.GlobalString(MetricsInfluxDBUsernameFlag.Name)
1790+
password = ctx.GlobalString(MetricsInfluxDBPasswordFlag.Name)
1791+
1792+
token = ctx.GlobalString(MetricsInfluxDBTokenFlag.Name)
1793+
bucket = ctx.GlobalString(MetricsInfluxDBBucketFlag.Name)
1794+
organization = ctx.GlobalString(MetricsInfluxDBOrganizationFlag.Name)
17471795
)
17481796

17491797
if enableExport {
@@ -1752,6 +1800,12 @@ func SetupMetrics(ctx *cli.Context) {
17521800
log.Info("Enabling metrics export to InfluxDB")
17531801

17541802
go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "geth.", tagsMap)
1803+
} else if enableExportV2 {
1804+
tagsMap := SplitTagsFlag(ctx.GlobalString(MetricsInfluxDBTagsFlag.Name))
1805+
1806+
log.Info("Enabling metrics export to InfluxDB (v2)")
1807+
1808+
go influxdb.InfluxDBV2WithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, token, bucket, organization, "geth.", tagsMap)
17551809
}
17561810

17571811
if ctx.GlobalIsSet(MetricsHTTPFlag.Name) {

go.mod

+9-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ require (
1818
github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f
1919
github.com/davecgh/go-spew v1.1.1
2020
github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea
21+
github.com/deepmap/oapi-codegen v1.8.2 // indirect
2122
github.com/dlclark/regexp2 v1.2.0 // indirect
2223
github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf
2324
github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498
@@ -39,13 +40,15 @@ require (
3940
github.com/holiman/uint256 v1.2.0
4041
github.com/huin/goupnp v1.0.2
4142
github.com/influxdata/influxdb v1.8.3
43+
github.com/influxdata/influxdb-client-go/v2 v2.4.0
44+
github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect
4245
github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458
4346
github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e
4447
github.com/julienschmidt/httprouter v1.2.0
4548
github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356
4649
github.com/kylelemons/godebug v1.1.0 // indirect
47-
github.com/mattn/go-colorable v0.1.0
48-
github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035
50+
github.com/mattn/go-colorable v0.1.8
51+
github.com/mattn/go-isatty v0.0.12
4952
github.com/naoina/go-stringutil v0.1.0 // indirect
5053
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416
5154
github.com/olekukonko/tablewriter v0.0.5
@@ -60,12 +63,14 @@ require (
6063
github.com/tklauser/go-sysconf v0.3.5 // indirect
6164
github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef
6265
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2
66+
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d // indirect
6367
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
64-
golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988
68+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da
6569
golang.org/x/text v0.3.6
66-
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
70+
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba
6771
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce
6872
gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6
6973
gopkg.in/urfave/cli.v1 v1.20.0
74+
gopkg.in/yaml.v2 v2.4.0 // indirect
7075
gotest.tools v2.2.0+incompatible // indirect
7176
)

0 commit comments

Comments
 (0)