diff options
Diffstat (limited to '')
13 files changed, 2820 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/geth/README.md b/src/go/collectors/go.d.plugin/modules/geth/README.md new file mode 120000 index 000000000..3a8eb0b68 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/README.md @@ -0,0 +1 @@ +integrations/go-ethereum.md
\ No newline at end of file diff --git a/src/go/collectors/go.d.plugin/modules/geth/charts.go b/src/go/collectors/go.d.plugin/modules/geth/charts.go new file mode 100644 index 000000000..316631739 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/charts.go @@ -0,0 +1,220 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package geth + +import "github.com/netdata/netdata/go/go.d.plugin/agent/module" + +type ( + Charts = module.Charts + Chart = module.Chart + Dims = module.Dims + Dim = module.Dim +) + +var charts = Charts{ + chartAncientChainData.Copy(), + chartChaindataDisk.Copy(), + chartAncientChainDataRate.Copy(), + chartChaindataDiskRate.Copy(), + chartChainDataSize.Copy(), + chartChainHead.Copy(), + chartP2PNetwork.Copy(), + chartNumberOfPeers.Copy(), + chartp2pDialsServes.Copy(), + chartReorgs.Copy(), + chartReorgsBlocks.Copy(), + chartGoRoutines.Copy(), + chartTxPoolCurrent.Copy(), + chartTxPoolQueued.Copy(), + chartTxPoolPending.Copy(), + chartRpcInformation.Copy(), +} + +var ( + chartAncientChainDataRate = Chart{ + ID: "chaindata_ancient_rate", + Title: "Ancient Chaindata rate", + Units: "bytes/s", + Fam: "chaindata", + Ctx: "geth.eth_db_chaindata_ancient_io_rate", + Dims: Dims{ + {ID: ethDbChainDataAncientRead, Name: "reads", Algo: "incremental"}, + {ID: ethDbChainDataAncientWrite, Name: "writes", Mul: -1, Algo: "incremental"}, + }, + } + + chartAncientChainData = Chart{ + ID: "chaindata_ancient", + Title: "Session ancient Chaindata", + Units: "bytes", + Fam: "chaindata", + Ctx: "geth.eth_db_chaindata_ancient_io", + Dims: Dims{ + {ID: ethDbChainDataAncientRead, Name: "reads"}, + {ID: ethDbChainDataAncientWrite, Name: "writes", Mul: -1}, + }, + } + chartChaindataDisk = Chart{ + ID: "chaindata_disk", + Title: "Session chaindata on disk", + Units: "bytes", + Fam: "chaindata", + Ctx: "geth.eth_db_chaindata_disk_io", + Dims: Dims{ + {ID: ethDbChaindataDiskRead, Name: "reads"}, + {ID: ethDbChainDataDiskWrite, Name: "writes", Mul: -1}, + }, + } + chartGoRoutines = Chart{ + ID: "goroutines", + Title: "Number of goroutines", + Units: "goroutines", + Fam: "goroutines", + Ctx: "geth.goroutines", + Dims: Dims{ + {ID: goRoutines, Name: "goroutines"}, + }, + } + chartChaindataDiskRate = Chart{ + ID: "chaindata_disk_date", + Title: "On disk Chaindata rate", + Units: "bytes/s", + Fam: "chaindata", + Ctx: "geth.eth_db_chaindata_disk_io_rate", + Dims: Dims{ + {ID: ethDbChaindataDiskRead, Name: "reads", Algo: "incremental"}, + {ID: ethDbChainDataDiskWrite, Name: "writes", Mul: -1, Algo: "incremental"}, + }, + } + chartChainDataSize = Chart{ + ID: "chaindata_db_size", + Title: "Chaindata Size", + Units: "bytes", + Fam: "chaindata", + Ctx: "geth.chaindata_db_size", + Dims: Dims{ + {ID: ethDbChainDataDiskSize, Name: "levelDB"}, + {ID: ethDbChainDataAncientSize, Name: "ancientDB"}, + }, + } + chartChainHead = Chart{ + ID: "chainhead_overall", + Title: "Chainhead", + Units: "block", + Fam: "chainhead", + Ctx: "geth.chainhead", + Dims: Dims{ + {ID: chainHeadBlock, Name: "block"}, + {ID: chainHeadReceipt, Name: "receipt"}, + {ID: chainHeadHeader, Name: "header"}, + }, + } + chartTxPoolPending = Chart{ + ID: "txpoolpending", + Title: "Pending Transaction Pool", + Units: "transactions", + Fam: "tx_pool", + Ctx: "geth.tx_pool_pending", + Dims: Dims{ + {ID: txPoolInvalid, Name: "invalid"}, + {ID: txPoolPending, Name: "pending"}, + {ID: txPoolLocal, Name: "local"}, + {ID: txPoolPendingDiscard, Name: " discard"}, + {ID: txPoolNofunds, Name: "no funds"}, + {ID: txPoolPendingRatelimit, Name: "ratelimit"}, + {ID: txPoolPendingReplace, Name: "replace"}, + }, + } + chartTxPoolCurrent = Chart{ + ID: "txpoolcurrent", + Title: "Transaction Pool", + Units: "transactions", + Fam: "tx_pool", + Ctx: "geth.tx_pool_current", + Dims: Dims{ + {ID: txPoolInvalid, Name: "invalid"}, + {ID: txPoolPending, Name: "pending"}, + {ID: txPoolLocal, Name: "local"}, + {ID: txPoolNofunds, Name: "pool"}, + }, + } + chartTxPoolQueued = Chart{ + ID: "txpoolqueued", + Title: "Queued Transaction Pool", + Units: "transactions", + Fam: "tx_pool", + Ctx: "geth.tx_pool_queued", + Dims: Dims{ + {ID: txPoolQueuedDiscard, Name: "discard"}, + {ID: txPoolQueuedEviction, Name: "eviction"}, + {ID: txPoolQueuedNofunds, Name: "no_funds"}, + {ID: txPoolQueuedRatelimit, Name: "ratelimit"}, + }, + } + chartP2PNetwork = Chart{ + ID: "p2p_network", + Title: "P2P bandwidth", + Units: "bytes/s", + Fam: "p2p_bandwidth", + Ctx: "geth.p2p_bandwidth", + Dims: Dims{ + {ID: p2pIngress, Name: "ingress", Algo: "incremental"}, + {ID: p2pEgress, Name: "egress", Mul: -1, Algo: "incremental"}, + }, + } + chartReorgs = Chart{ + ID: "reorgs_executed", + Title: "Executed Reorgs", + Units: "reorgs", + Fam: "reorgs", + Ctx: "geth.reorgs", + Dims: Dims{ + {ID: reorgsExecuted, Name: "executed"}, + }, + } + chartReorgsBlocks = Chart{ + ID: "reorgs_blocks", + Title: "Blocks Added/Removed from Reorg", + Units: "blocks", + Fam: "reorgs", + Ctx: "geth.reorgs_blocks", + Dims: Dims{ + {ID: reorgsAdd, Name: "added"}, + {ID: reorgsDropped, Name: "dropped"}, + }, + } + + chartNumberOfPeers = Chart{ + ID: "p2p_peers_number", + Title: "Number of Peers", + Units: "peers", + Fam: "p2p_peers", + Ctx: "geth.p2p_peers", + Dims: Dims{ + {ID: p2pPeers, Name: "peers"}, + }, + } + + chartp2pDialsServes = Chart{ + ID: "p2p_dials_serves", + Title: "P2P Serves and Dials", + Units: "calls/s", + Fam: "p2p_peers", + Ctx: "geth.p2p_peers_calls", + Dims: Dims{ + {ID: p2pDials, Name: "dials", Algo: "incremental"}, + {ID: p2pServes, Name: "serves", Algo: "incremental"}, + }, + } + chartRpcInformation = Chart{ + ID: "rpc_calls", + Title: "rpc calls", + Units: "calls/s", + Fam: "rpc", + Ctx: "geth.rpc_calls", + Dims: Dims{ + {ID: rpcFailure, Name: "failed", Algo: "incremental"}, + {ID: rpcSuccess, Name: "successful", Algo: "incremental"}, + }, + } +) diff --git a/src/go/collectors/go.d.plugin/modules/geth/collect.go b/src/go/collectors/go.d.plugin/modules/geth/collect.go new file mode 100644 index 000000000..dfdf54946 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/collect.go @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package geth + +import ( + "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus" + "github.com/netdata/netdata/go/go.d.plugin/pkg/stm" +) + +func (g *Geth) collect() (map[string]int64, error) { + pms, err := g.prom.ScrapeSeries() + if err != nil { + return nil, err + } + mx := g.collectGeth(pms) + + return stm.ToMap(mx), nil +} + +func (g *Geth) collectGeth(pms prometheus.Series) map[string]float64 { + mx := make(map[string]float64) + g.collectChainData(mx, pms) + g.collectP2P(mx, pms) + g.collectTxPool(mx, pms) + g.collectRpc(mx, pms) + return mx +} + +func (g *Geth) collectChainData(mx map[string]float64, pms prometheus.Series) { + pms = pms.FindByNames( + chainValidation, + chainWrite, + ethDbChainDataAncientRead, + ethDbChainDataAncientWrite, + ethDbChaindataDiskRead, + ethDbChainDataDiskWrite, + chainHeadBlock, + chainHeadHeader, + chainHeadReceipt, + ethDbChainDataAncientSize, + ethDbChainDataDiskSize, + reorgsAdd, + reorgsDropped, + reorgsExecuted, + goRoutines, + ) + g.collectEth(mx, pms) + +} + +func (g *Geth) collectRpc(mx map[string]float64, pms prometheus.Series) { + pms = pms.FindByNames( + rpcRequests, + rpcSuccess, + rpcFailure, + ) + g.collectEth(mx, pms) +} + +func (g *Geth) collectTxPool(mx map[string]float64, pms prometheus.Series) { + pms = pms.FindByNames( + txPoolInvalid, + txPoolPending, + txPoolLocal, + txPoolPendingDiscard, + txPoolNofunds, + txPoolPendingRatelimit, + txPoolPendingReplace, + txPoolQueuedDiscard, + txPoolQueuedEviction, + txPoolQueuedEviction, + txPoolQueuedRatelimit, + ) + g.collectEth(mx, pms) +} + +func (g *Geth) collectP2P(mx map[string]float64, pms prometheus.Series) { + pms = pms.FindByNames( + p2pDials, + p2pEgress, + p2pIngress, + p2pPeers, + p2pServes, + ) + g.collectEth(mx, pms) +} + +func (g *Geth) collectEth(mx map[string]float64, pms prometheus.Series) { + for _, pm := range pms { + mx[pm.Name()] += pm.Value + } +} diff --git a/src/go/collectors/go.d.plugin/modules/geth/config_schema.json b/src/go/collectors/go.d.plugin/modules/geth/config_schema.json new file mode 100644 index 000000000..3fd239e4f --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/config_schema.json @@ -0,0 +1,177 @@ +{ + "jsonSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Geth collector configuration.", + "type": "object", + "properties": { + "update_every": { + "title": "Update every", + "description": "Data collection interval, measured in seconds.", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "url": { + "title": "URL", + "description": "The URL of the Geth [Prometheus endpoint](https://geth.ethereum.org/docs/monitoring/metrics).", + "type": "string", + "default": "http://127.0.0.1:6060/debug/metrics/prometheus", + "format": "uri" + }, + "timeout": { + "title": "Timeout", + "description": "The timeout in seconds for the HTTP request.", + "type": "number", + "minimum": 0.5, + "default": 1 + }, + "not_follow_redirects": { + "title": "Not follow redirects", + "description": "If set, the client will not follow HTTP redirects automatically.", + "type": "boolean" + }, + "username": { + "title": "Username", + "description": "The username for basic authentication.", + "type": "string", + "sensitive": true + }, + "password": { + "title": "Password", + "description": "The password for basic authentication.", + "type": "string", + "sensitive": true + }, + "proxy_url": { + "title": "Proxy URL", + "description": "The URL of the proxy server.", + "type": "string" + }, + "proxy_username": { + "title": "Proxy username", + "description": "The username for proxy authentication.", + "type": "string", + "sensitive": true + }, + "proxy_password": { + "title": "Proxy password", + "description": "The password for proxy authentication.", + "type": "string", + "sensitive": true + }, + "headers": { + "title": "Headers", + "description": "Additional HTTP headers to include in the request.", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + } + }, + "tls_skip_verify": { + "title": "Skip TLS verification", + "description": "If set, TLS certificate verification will be skipped.", + "type": "boolean" + }, + "tls_ca": { + "title": "TLS CA", + "description": "The path to the CA certificate file for TLS verification.", + "type": "string", + "pattern": "^$|^/" + }, + "tls_cert": { + "title": "TLS certificate", + "description": "The path to the client certificate file for TLS authentication.", + "type": "string", + "pattern": "^$|^/" + }, + "tls_key": { + "title": "TLS key", + "description": "The path to the client key file for TLS authentication.", + "type": "string", + "pattern": "^$|^/" + }, + "body": { + "title": "Body", + "type": "string" + }, + "method": { + "title": "Method", + "type": "string" + } + }, + "required": [ + "url" + ], + "additionalProperties": false, + "patternProperties": { + "^name$": {} + } + }, + "uiSchema": { + "ui:flavour": "tabs", + "ui:options": { + "tabs": [ + { + "title": "Base", + "fields": [ + "update_every", + "url", + "timeout", + "not_follow_redirects" + ] + }, + { + "title": "Auth", + "fields": [ + "username", + "password" + ] + }, + { + "title": "TLS", + "fields": [ + "tls_skip_verify", + "tls_ca", + "tls_cert", + "tls_key" + ] + }, + { + "title": "Proxy", + "fields": [ + "proxy_url", + "proxy_username", + "proxy_password" + ] + }, + { + "title": "Headers", + "fields": [ + "headers" + ] + } + ] + }, + "uiOptions": { + "fullPage": true + }, + "body": { + "ui:widget": "hidden" + }, + "method": { + "ui:widget": "hidden" + }, + "timeout": { + "ui:help": "Accepts decimals for precise control (e.g., type 1.5 for 1.5 seconds)." + }, + "password": { + "ui:widget": "password" + }, + "proxy_password": { + "ui:widget": "password" + } + } +} diff --git a/src/go/collectors/go.d.plugin/modules/geth/geth.go b/src/go/collectors/go.d.plugin/modules/geth/geth.go new file mode 100644 index 000000000..070ad058a --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/geth.go @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package geth + +import ( + _ "embed" + "errors" + "time" + + "github.com/netdata/netdata/go/go.d.plugin/agent/module" + "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus" + "github.com/netdata/netdata/go/go.d.plugin/pkg/web" +) + +//go:embed "config_schema.json" +var configSchema string + +func init() { + module.Register("geth", module.Creator{ + JobConfigSchema: configSchema, + Create: func() module.Module { return New() }, + Config: func() any { return &Config{} }, + }) +} + +func New() *Geth { + return &Geth{ + Config: Config{ + HTTP: web.HTTP{ + Request: web.Request{ + URL: "http://127.0.0.1:6060/debug/metrics/prometheus", + }, + Client: web.Client{ + Timeout: web.Duration(time.Second), + }, + }, + }, + charts: charts.Copy(), + } +} + +type Config struct { + web.HTTP `yaml:",inline" json:""` + UpdateEvery int `yaml:"update_every" json:"update_every"` +} + +type Geth struct { + module.Base + Config `yaml:",inline" json:""` + + charts *Charts + + prom prometheus.Prometheus +} + +func (g *Geth) Configuration() any { + return g.Config +} + +func (g *Geth) Init() error { + if err := g.validateConfig(); err != nil { + g.Errorf("error on validating config: %g", err) + return err + } + + prom, err := g.initPrometheusClient() + if err != nil { + g.Error(err) + return err + } + g.prom = prom + + return nil +} + +func (g *Geth) Check() error { + mx, err := g.collect() + if err != nil { + g.Error(err) + return err + } + if len(mx) == 0 { + return errors.New("no metrics collected") + } + return nil +} + +func (g *Geth) Charts() *Charts { + return g.charts +} + +func (g *Geth) Collect() map[string]int64 { + mx, err := g.collect() + if err != nil { + g.Error(err) + } + + if len(mx) == 0 { + return nil + } + return mx +} + +func (g *Geth) Cleanup() { + if g.prom != nil && g.prom.HTTPClient() != nil { + g.prom.HTTPClient().CloseIdleConnections() + } +} diff --git a/src/go/collectors/go.d.plugin/modules/geth/geth_test.go b/src/go/collectors/go.d.plugin/modules/geth/geth_test.go new file mode 100644 index 000000000..68c38385e --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/geth_test.go @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package geth + +import ( + "os" + "testing" + + "github.com/netdata/netdata/go/go.d.plugin/agent/module" + + "github.com/stretchr/testify/require" +) + +var ( + dataConfigJSON, _ = os.ReadFile("testdata/config.json") + dataConfigYAML, _ = os.ReadFile("testdata/config.yaml") +) + +func Test_testDataIsValid(t *testing.T) { + for name, data := range map[string][]byte{ + "dataConfigJSON": dataConfigJSON, + "dataConfigYAML": dataConfigYAML, + } { + require.NotNil(t, data, name) + } +} + +func TestGeth_ConfigurationSerialize(t *testing.T) { + module.TestConfigurationSerialize(t, &Geth{}, dataConfigJSON, dataConfigYAML) +} diff --git a/src/go/collectors/go.d.plugin/modules/geth/init.go b/src/go/collectors/go.d.plugin/modules/geth/init.go new file mode 100644 index 000000000..9b649f859 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/init.go @@ -0,0 +1,24 @@ +package geth + +import ( + "errors" + + "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus" + "github.com/netdata/netdata/go/go.d.plugin/pkg/web" +) + +func (g *Geth) validateConfig() error { + if g.URL == "" { + return errors.New("url not set") + } + return nil +} + +func (g *Geth) initPrometheusClient() (prometheus.Prometheus, error) { + client, err := web.NewHTTPClient(g.Client) + if err != nil { + return nil, err + } + + return prometheus.New(client, g.Request), nil +} diff --git a/src/go/collectors/go.d.plugin/modules/geth/integrations/go-ethereum.md b/src/go/collectors/go.d.plugin/modules/geth/integrations/go-ethereum.md new file mode 100644 index 000000000..c14b0a7b9 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/integrations/go-ethereum.md @@ -0,0 +1,217 @@ +<!--startmeta +custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/geth/README.md" +meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/geth/metadata.yaml" +sidebar_label: "Go-ethereum" +learn_status: "Published" +learn_rel_path: "Collecting Metrics/Blockchain Servers" +most_popular: True +message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE" +endmeta--> + +# Go-ethereum + + +<img src="https://netdata.cloud/img/geth.png" width="150"/> + + +Plugin: go.d.plugin +Module: geth + +<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" /> + +## Overview + +This collector monitors Go-ethereum instances. + + + + +This collector is supported on all platforms. + +This collector supports collecting metrics from multiple instances of this integration, including remote instances. + + +### Default Behavior + +#### Auto-Detection + +By default, it detects Go-ethereum instances running on localhost. + + +#### Limits + +The default configuration for this integration does not impose any limits on data collection. + +#### Performance Impact + +The default configuration for this integration is not expected to impose a significant performance impact on the system. + + +## Metrics + +Metrics grouped by *scope*. + +The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels. + + + +### Per Go-ethereum instance + +These metrics refer to the entire monitored application. + +This scope has no labels. + +Metrics: + +| Metric | Dimensions | Unit | +|:------|:----------|:----| +| geth.eth_db_chaindata_ancient_io_rate | reads, writes | bytes/s | +| geth.eth_db_chaindata_ancient_io | reads, writes | bytes | +| geth.eth_db_chaindata_disk_io | reads, writes | bytes | +| geth.goroutines | goroutines | goroutines | +| geth.eth_db_chaindata_disk_io_rate | reads, writes | bytes/s | +| geth.chaindata_db_size | level_db, ancient_db | bytes | +| geth.chainhead | block, receipt, header | block | +| geth.tx_pool_pending | invalid, pending, local, discard, no_funds, ratelimit, replace | transactions | +| geth.tx_pool_current | invalid, pending, local, pool | transactions | +| geth.tx_pool_queued | discard, eviction, no_funds, ratelimit | transactions | +| geth.p2p_bandwidth | ingress, egress | bytes/s | +| geth.reorgs | executed | reorgs | +| geth.reorgs_blocks | added, dropped | blocks | +| geth.p2p_peers | peers | peers | +| geth.p2p_peers_calls | dials, serves | calls/s | +| geth.rpc_calls | failed, successful | calls/s | + + + +## Alerts + +There are no alerts configured by default for this integration. + + +## Setup + +### Prerequisites + +No action required. + +### Configuration + +#### File + +The configuration file name for this integration is `go.d/geth.conf`. + + +You can edit the configuration file using the `edit-config` script from the +Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory). + +```bash +cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata +sudo ./edit-config go.d/geth.conf +``` +#### Options + +The following options can be defined globally: update_every, autodetection_retry. + + +<details open><summary>Config options</summary> + +| Name | Description | Default | Required | +|:----|:-----------|:-------|:--------:| +| update_every | Data collection frequency. | 1 | no | +| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no | +| url | Server URL. | http://127.0.0.1:6060/debug/metrics/prometheus | yes | +| timeout | HTTP request timeout. | 1 | no | +| username | Username for basic HTTP authentication. | | no | +| password | Password for basic HTTP authentication. | | no | +| proxy_url | Proxy URL. | | no | +| proxy_username | Username for proxy basic HTTP authentication. | | no | +| proxy_password | Password for proxy basic HTTP authentication. | | no | +| method | HTTP request method. | GET | no | +| body | HTTP request body. | | no | +| headers | HTTP request headers. | | no | +| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no | +| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no | +| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no | +| tls_cert | Client TLS certificate. | | no | +| tls_key | Client TLS key. | | no | + +</details> + +#### Examples + +##### Basic + +A basic example configuration. + +```yaml +jobs: + - name: local + url: http://127.0.0.1:6060/debug/metrics/prometheus + +``` +##### HTTP authentication + +Basic HTTP authentication. + +<details open><summary>Config</summary> + +```yaml +jobs: + - name: local + url: http://127.0.0.1:6060/debug/metrics/prometheus + username: username + password: password + +``` +</details> + +##### Multi-instance + +> **Note**: When you define multiple jobs, their names must be unique. + +Collecting metrics from local and remote instances. + + +<details open><summary>Config</summary> + +```yaml +jobs: + - name: local + url: http://127.0.0.1:6060/debug/metrics/prometheus + + - name: remote + url: http://192.0.2.1:6060/debug/metrics/prometheus + +``` +</details> + + + +## Troubleshooting + +### Debug Mode + +To troubleshoot issues with the `geth` collector, run the `go.d.plugin` with the debug option enabled. The output +should give you clues as to why the collector isn't working. + +- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on + your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`. + + ```bash + cd /usr/libexec/netdata/plugins.d/ + ``` + +- Switch to the `netdata` user. + + ```bash + sudo -u netdata -s + ``` + +- Run the `go.d.plugin` to debug the collector: + + ```bash + ./go.d.plugin -d -m geth + ``` + + diff --git a/src/go/collectors/go.d.plugin/modules/geth/metadata.yaml b/src/go/collectors/go.d.plugin/modules/geth/metadata.yaml new file mode 100644 index 000000000..ef131776a --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/metadata.yaml @@ -0,0 +1,291 @@ +plugin_name: go.d.plugin +modules: + - meta: + id: collector-go.d.plugin-geth + plugin_name: go.d.plugin + module_name: geth + monitored_instance: + name: Go-ethereum + link: https://github.com/ethereum/go-ethereum + icon_filename: geth.png + categories: + - data-collection.blockchain-servers + keywords: + - geth + - ethereum + - blockchain + related_resources: + integrations: + list: + - plugin_name: apps.plugin + module_name: apps + info_provided_to_referring_integrations: + description: "" + most_popular: true + overview: + data_collection: + metrics_description: | + This collector monitors Go-ethereum instances. + method_description: "" + supported_platforms: + include: [] + exclude: [] + multi_instance: true + additional_permissions: + description: "" + default_behavior: + auto_detection: + description: | + By default, it detects Go-ethereum instances running on localhost. + limits: + description: "" + performance_impact: + description: "" + setup: + prerequisites: + list: [] + configuration: + file: + name: go.d/geth.conf + options: + description: | + The following options can be defined globally: update_every, autodetection_retry. + folding: + title: Config options + enabled: true + list: + - name: update_every + description: Data collection frequency. + default_value: 1 + required: false + - name: autodetection_retry + description: Recheck interval in seconds. Zero means no recheck will be scheduled. + default_value: 0 + required: false + - name: url + description: Server URL. + default_value: http://127.0.0.1:6060/debug/metrics/prometheus + required: true + - name: timeout + description: HTTP request timeout. + default_value: 1 + required: false + - name: username + description: Username for basic HTTP authentication. + default_value: "" + required: false + - name: password + description: Password for basic HTTP authentication. + default_value: "" + required: false + - name: proxy_url + description: Proxy URL. + default_value: "" + required: false + - name: proxy_username + description: Username for proxy basic HTTP authentication. + default_value: "" + required: false + - name: proxy_password + description: Password for proxy basic HTTP authentication. + default_value: "" + required: false + - name: method + description: HTTP request method. + default_value: GET + required: false + - name: body + description: HTTP request body. + default_value: "" + required: false + - name: headers + description: HTTP request headers. + default_value: "" + required: false + - name: not_follow_redirects + description: Redirect handling policy. Controls whether the client follows redirects. + default_value: no + required: false + - name: tls_skip_verify + description: Server certificate chain and hostname validation policy. Controls whether the client performs this check. + default_value: no + required: false + - name: tls_ca + description: Certification authority that the client uses when verifying the server's certificates. + default_value: "" + required: false + - name: tls_cert + description: Client TLS certificate. + default_value: "" + required: false + - name: tls_key + description: Client TLS key. + default_value: "" + required: false + examples: + folding: + title: Config + enabled: true + list: + - name: Basic + folding: + enabled: false + description: A basic example configuration. + config: | + jobs: + - name: local + url: http://127.0.0.1:6060/debug/metrics/prometheus + - name: HTTP authentication + description: Basic HTTP authentication. + config: | + jobs: + - name: local + url: http://127.0.0.1:6060/debug/metrics/prometheus + username: username + password: password + - name: Multi-instance + description: | + > **Note**: When you define multiple jobs, their names must be unique. + + Collecting metrics from local and remote instances. + config: | + jobs: + - name: local + url: http://127.0.0.1:6060/debug/metrics/prometheus + + - name: remote + url: http://192.0.2.1:6060/debug/metrics/prometheus + troubleshooting: + problems: + list: [] + alerts: [] + metrics: + folding: + title: Metrics + enabled: false + description: "" + availability: [] + scopes: + - name: global + description: These metrics refer to the entire monitored application. + labels: [] + metrics: + - name: geth.eth_db_chaindata_ancient_io_rate + description: Ancient Chaindata rate + unit: bytes/s + chart_type: line + dimensions: + - name: reads + - name: writes + - name: geth.eth_db_chaindata_ancient_io + description: Session ancient Chaindata + unit: bytes + chart_type: line + dimensions: + - name: reads + - name: writes + - name: geth.eth_db_chaindata_disk_io + description: Session chaindata on disk + unit: bytes + chart_type: line + dimensions: + - name: reads + - name: writes + - name: geth.goroutines + description: Number of goroutines + unit: goroutines + chart_type: line + dimensions: + - name: goroutines + - name: geth.eth_db_chaindata_disk_io_rate + description: On disk Chaindata rate + unit: bytes/s + chart_type: line + dimensions: + - name: reads + - name: writes + - name: geth.chaindata_db_size + description: Chaindata Size + unit: bytes + chart_type: line + dimensions: + - name: level_db + - name: ancient_db + - name: geth.chainhead + description: Chainhead + unit: block + chart_type: line + dimensions: + - name: block + - name: receipt + - name: header + - name: geth.tx_pool_pending + description: Pending Transaction Pool + unit: transactions + chart_type: line + dimensions: + - name: invalid + - name: pending + - name: local + - name: discard + - name: no_funds + - name: ratelimit + - name: replace + - name: geth.tx_pool_current + description: Transaction Pool + unit: transactions + chart_type: line + dimensions: + - name: invalid + - name: pending + - name: local + - name: pool + - name: geth.tx_pool_queued + description: Queued Transaction Pool + unit: transactions + chart_type: line + dimensions: + - name: discard + - name: eviction + - name: no_funds + - name: ratelimit + - name: geth.p2p_bandwidth + description: P2P bandwidth + unit: bytes/s + chart_type: line + dimensions: + - name: ingress + - name: egress + - name: geth.reorgs + description: Executed Reorgs + unit: reorgs + chart_type: line + dimensions: + - name: executed + - name: geth.reorgs_blocks + description: Blocks Added/Removed from Reorg + unit: blocks + chart_type: line + dimensions: + - name: added + - name: dropped + - name: geth.p2p_peers + description: Number of Peers + unit: peers + chart_type: line + dimensions: + - name: peers + - name: geth.p2p_peers_calls + description: P2P Serves and Dials + unit: calls/s + chart_type: line + dimensions: + - name: dials + - name: serves + - name: geth.rpc_calls + description: rpc calls + unit: calls/s + chart_type: line + dimensions: + - name: failed + - name: successful diff --git a/src/go/collectors/go.d.plugin/modules/geth/metrics.go b/src/go/collectors/go.d.plugin/modules/geth/metrics.go new file mode 100644 index 000000000..642973d69 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/metrics.go @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package geth + +// summary +const ( + chainValidation = "chain_validation" + chainWrite = "chain_write" + chainHeadBlock = "chain_head_block" + chainHeadHeader = "chain_head_header" + chainHeadReceipt = "chain_head_receipt" +) + +// + rate +const ( + ethDbChainDataAncientRead = "eth_db_chaindata_ancient_read" + ethDbChainDataAncientWrite = "eth_db_chaindata_ancient_write" + ethDbChaindataDiskRead = "eth_db_chaindata_disk_read" + ethDbChainDataDiskWrite = "eth_db_chaindata_disk_write" + ethDbChainDataDiskSize = "eth_db_chaindata_disk_size" + ethDbChainDataAncientSize = "eth_db_chaindata_ancient_size" + + txPoolInvalid = "txpool_invalid" + txPoolPending = "txpool_pending" + txPoolLocal = "txpool_local" + txPoolPendingDiscard = "txpool_pending_discard" + txPoolNofunds = "txpool_pending_nofunds" + txPoolPendingRatelimit = "txpool_pending_ratelimit" + txPoolPendingReplace = "txpool_pending_replace" + txPoolQueuedDiscard = "txpool_queued_discard" + txPoolQueuedEviction = "txpool_queued_eviction" + txPoolQueuedNofunds = "txpool_queued_nofunds" + txPoolQueuedRatelimit = "txpool_queued_ratelimit" +) + +const ( + // gauge + p2pEgress = "p2p_egress" + p2pIngress = "p2p_ingress" + + p2pPeers = "p2p_peers" + p2pServes = "p2p_serves" + p2pDials = "p2p_dials" + + rpcRequests = "rpc_requests" + rpcSuccess = "rpc_success" + rpcFailure = "rpc_failure" + + reorgsAdd = "chain_reorg_add" + reorgsExecuted = "chain_reorg_executes" + reorgsDropped = "chain_reorg_drop" + + goRoutines = "system_cpu_goroutines" +) diff --git a/src/go/collectors/go.d.plugin/modules/geth/testdata/config.json b/src/go/collectors/go.d.plugin/modules/geth/testdata/config.json new file mode 100644 index 000000000..984c3ed6e --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/testdata/config.json @@ -0,0 +1,20 @@ +{ + "update_every": 123, + "url": "ok", + "body": "ok", + "method": "ok", + "headers": { + "ok": "ok" + }, + "username": "ok", + "password": "ok", + "proxy_url": "ok", + "proxy_username": "ok", + "proxy_password": "ok", + "timeout": 123.123, + "not_follow_redirects": true, + "tls_ca": "ok", + "tls_cert": "ok", + "tls_key": "ok", + "tls_skip_verify": true +} diff --git a/src/go/collectors/go.d.plugin/modules/geth/testdata/config.yaml b/src/go/collectors/go.d.plugin/modules/geth/testdata/config.yaml new file mode 100644 index 000000000..8558b61cc --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/testdata/config.yaml @@ -0,0 +1,17 @@ +update_every: 123 +url: "ok" +body: "ok" +method: "ok" +headers: + ok: "ok" +username: "ok" +password: "ok" +proxy_url: "ok" +proxy_username: "ok" +proxy_password: "ok" +timeout: 123.123 +not_follow_redirects: yes +tls_ca: "ok" +tls_cert: "ok" +tls_key: "ok" +tls_skip_verify: yes diff --git a/src/go/collectors/go.d.plugin/modules/geth/testdata/metrics_geth.txt b/src/go/collectors/go.d.plugin/modules/geth/testdata/metrics_geth.txt new file mode 100644 index 000000000..055fea893 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/geth/testdata/metrics_geth.txt @@ -0,0 +1,1569 @@ +# TYPE chain_account_commits_count counter +chain_account_commits_count 0 + +# TYPE chain_account_commits summary IMP +chain_account_commits {quantile="0.5"} 0 +chain_account_commits {quantile="0.75"} 0 +chain_account_commits {quantile="0.95"} 0 +chain_account_commits {quantile="0.99"} 0 +chain_account_commits {quantile="0.999"} 0 +chain_account_commits {quantile="0.9999"} 0 + +# TYPE chain_account_hashes_count counter +chain_account_hashes_count 0 + +# TYPE chain_account_hashes summary +chain_account_hashes {quantile="0.5"} 0 +chain_account_hashes {quantile="0.75"} 0 +chain_account_hashes {quantile="0.95"} 0 +chain_account_hashes {quantile="0.99"} 0 +chain_account_hashes {quantile="0.999"} 0 +chain_account_hashes {quantile="0.9999"} 0 + +# TYPE chain_account_reads_count counter +chain_account_reads_count 0 + +# TYPE chain_account_reads summary IMP +chain_account_reads {quantile="0.5"} 0 +chain_account_reads {quantile="0.75"} 0 +chain_account_reads {quantile="0.95"} 0 +chain_account_reads {quantile="0.99"} 0 +chain_account_reads {quantile="0.999"} 0 +chain_account_reads {quantile="0.9999"} 0 + +# TYPE chain_account_updates_count counter +chain_account_updates_count 0 + +# TYPE chain_account_updates summary IMP +chain_account_updates {quantile="0.5"} 0 +chain_account_updates {quantile="0.75"} 0 +chain_account_updates {quantile="0.95"} 0 +chain_account_updates {quantile="0.99"} 0 +chain_account_updates {quantile="0.999"} 0 +chain_account_updates {quantile="0.9999"} 0 + +# TYPE chain_execution_count counter +chain_execution_count 0 + +# TYPE chain_execution summary IMP +chain_execution {quantile="0.5"} 0 +chain_execution {quantile="0.75"} 0 +chain_execution {quantile="0.95"} 0 +chain_execution {quantile="0.99"} 0 +chain_execution {quantile="0.999"} 0 +chain_execution {quantile="0.9999"} 0 +#--- +# TYPE chain_head_block gauge IMP +chain_head_block 0 + +# TYPE chain_head_header gauge IMP +chain_head_header 24576 + +# TYPE chain_head_receipt gauge IMP +chain_head_receipt 24576 +#--- +# TYPE chain_inserts_count counter +chain_inserts_count 0 + +# TYPE chain_inserts summary +chain_inserts {quantile="0.5"} 0 +chain_inserts {quantile="0.75"} 0 +chain_inserts {quantile="0.95"} 0 +chain_inserts {quantile="0.99"} 0 +chain_inserts {quantile="0.999"} 0 +chain_inserts {quantile="0.9999"} 0 + +# TYPE chain_prefetch_executes_count counter +chain_prefetch_executes_count 0 + +# TYPE chain_prefetch_executes summary +chain_prefetch_executes {quantile="0.5"} 0 +chain_prefetch_executes {quantile="0.75"} 0 +chain_prefetch_executes {quantile="0.95"} 0 +chain_prefetch_executes {quantile="0.99"} 0 +chain_prefetch_executes {quantile="0.999"} 0 +chain_prefetch_executes {quantile="0.9999"} 0 + +# TYPE chain_prefetch_interrupts gauge +chain_prefetch_interrupts 0 + +# TYPE chain_reorg_add gauge +chain_reorg_add 0 + +# TYPE chain_reorg_drop gauge +chain_reorg_drop 0 + +# TYPE chain_reorg_executes gauge +chain_reorg_executes 0 + +# TYPE chain_reorg_invalidTx gauge +chain_reorg_invalidTx 0 + +# TYPE chain_snapshot_account_reads_count counter +chain_snapshot_account_reads_count 0 + +# TYPE chain_snapshot_account_reads summary +chain_snapshot_account_reads {quantile="0.5"} 0 +chain_snapshot_account_reads {quantile="0.75"} 0 +chain_snapshot_account_reads {quantile="0.95"} 0 +chain_snapshot_account_reads {quantile="0.99"} 0 +chain_snapshot_account_reads {quantile="0.999"} 0 +chain_snapshot_account_reads {quantile="0.9999"} 0 + +# TYPE chain_snapshot_commits_count counter +chain_snapshot_commits_count 0 + +# TYPE chain_snapshot_commits summary +chain_snapshot_commits {quantile="0.5"} 0 +chain_snapshot_commits {quantile="0.75"} 0 +chain_snapshot_commits {quantile="0.95"} 0 +chain_snapshot_commits {quantile="0.99"} 0 +chain_snapshot_commits {quantile="0.999"} 0 +chain_snapshot_commits {quantile="0.9999"} 0 + +# TYPE chain_snapshot_storage_reads_count counter +chain_snapshot_storage_reads_count 0 + +# TYPE chain_snapshot_storage_reads summary IMP +chain_snapshot_storage_reads {quantile="0.5"} 0 +chain_snapshot_storage_reads {quantile="0.75"} 0 +chain_snapshot_storage_reads {quantile="0.95"} 0 +chain_snapshot_storage_reads {quantile="0.99"} 0 +chain_snapshot_storage_reads {quantile="0.999"} 0 +chain_snapshot_storage_reads {quantile="0.9999"} 0 + +# TYPE chain_storage_commits_count counter +chain_storage_commits_count 0 + +# TYPE chain_storage_commits summary IMP +chain_storage_commits {quantile="0.5"} 0 +chain_storage_commits {quantile="0.75"} 0 +chain_storage_commits {quantile="0.95"} 0 +chain_storage_commits {quantile="0.99"} 0 +chain_storage_commits {quantile="0.999"} 0 +chain_storage_commits {quantile="0.9999"} 0 + +# TYPE chain_storage_hashes_count counter +chain_storage_hashes_count 0 + +# TYPE chain_storage_hashes summary IMP +chain_storage_hashes {quantile="0.5"} 0 +chain_storage_hashes {quantile="0.75"} 0 +chain_storage_hashes {quantile="0.95"} 0 +chain_storage_hashes {quantile="0.99"} 0 +chain_storage_hashes {quantile="0.999"} 0 +chain_storage_hashes {quantile="0.9999"} 0 + +# TYPE chain_storage_reads_count counter +chain_storage_reads_count 0 + +# TYPE chain_storage_reads summary +chain_storage_reads {quantile="0.5"} 0 +chain_storage_reads {quantile="0.75"} 0 +chain_storage_reads {quantile="0.95"} 0 +chain_storage_reads {quantile="0.99"} 0 +chain_storage_reads {quantile="0.999"} 0 +chain_storage_reads {quantile="0.9999"} 0 + +# TYPE chain_storage_updates_count counter +chain_storage_updates_count 0 + +# TYPE chain_storage_updates summary IMP +chain_storage_updates {quantile="0.5"} 0 +chain_storage_updates {quantile="0.75"} 0 +chain_storage_updates {quantile="0.95"} 0 +chain_storage_updates {quantile="0.99"} 0 +chain_storage_updates {quantile="0.999"} 0 +chain_storage_updates {quantile="0.9999"} 0 + +# TYPE chain_validation_count counter +chain_validation_count 0 + +# TYPE chain_validation summary IMP +chain_validation {quantile="0.5"} 0 +chain_validation {quantile="0.75"} 0 +chain_validation {quantile="0.95"} 0 +chain_validation {quantile="0.99"} 0 +chain_validation {quantile="0.999"} 0 +chain_validation {quantile="0.9999"} 0 + +# TYPE chain_write_count counter +chain_write_count 0 + +# TYPE chain_write summary IMP +chain_write {quantile="0.5"} 0 +chain_write {quantile="0.75"} 0 +chain_write {quantile="0.95"} 0 +chain_write {quantile="0.99"} 0 +chain_write {quantile="0.999"} 0 +chain_write {quantile="0.9999"} 0 + +# TYPE db_preimage_hits gauge +db_preimage_hits 8893 + +# TYPE db_preimage_total gauge +db_preimage_total 8893 + +# TYPE eth_db_chaindata_ancient_read gauge IMP + rate +eth_db_chaindata_ancient_read 954 + +# TYPE eth_db_chaindata_ancient_size gauge +eth_db_chaindata_ancient_size 9901428 + +# TYPE eth_db_chaindata_ancient_write gauge IMP + rate +eth_db_chaindata_ancient_write 7256150 + +# TYPE eth_db_chaindata_compact_input gauge +eth_db_chaindata_compact_input 0 + +# TYPE eth_db_chaindata_compact_level0 gauge +eth_db_chaindata_compact_level0 0 + +# TYPE eth_db_chaindata_compact_memory gauge +eth_db_chaindata_compact_memory 0 + +# TYPE eth_db_chaindata_compact_nonlevel0 gauge +eth_db_chaindata_compact_nonlevel0 0 + +# TYPE eth_db_chaindata_compact_output gauge +eth_db_chaindata_compact_output 0 + +# TYPE eth_db_chaindata_compact_seek gauge +eth_db_chaindata_compact_seek 0 + +# TYPE eth_db_chaindata_compact_time gauge +eth_db_chaindata_compact_time 0 + +# TYPE eth_db_chaindata_compact_writedelay_counter gauge +eth_db_chaindata_compact_writedelay_counter 0 + +# TYPE eth_db_chaindata_compact_writedelay_duration gauge +eth_db_chaindata_compact_writedelay_duration 0 + +# TYPE eth_db_chaindata_disk_read gauge IMP + rate +eth_db_chaindata_disk_read 0 + +# TYPE eth_db_chaindata_disk_size gauge +eth_db_chaindata_disk_size 0 + +# TYPE eth_db_chaindata_disk_write gauge IMP + rate +eth_db_chaindata_disk_write 10028946 + +# TYPE eth_downloader_bodies_drop gauge +eth_downloader_bodies_drop 0 + +# TYPE eth_downloader_bodies_in gauge +eth_downloader_bodies_in 2061 + +# TYPE eth_downloader_bodies_req_count counter +eth_downloader_bodies_req_count 100 + +# TYPE eth_downloader_bodies_req summary +eth_downloader_bodies_req {quantile="0.5"} 1.73698035e+07 +eth_downloader_bodies_req {quantile="0.75"} 2.534998e+07 +eth_downloader_bodies_req {quantile="0.95"} 2.806964048999994e+08 +eth_downloader_bodies_req {quantile="0.99"} 7.47070292879998e+08 +eth_downloader_bodies_req {quantile="0.999"} 7.51141436e+08 +eth_downloader_bodies_req {quantile="0.9999"} 7.51141436e+08 + +# TYPE eth_downloader_bodies_timeout gauge +eth_downloader_bodies_timeout 0 + +# TYPE eth_downloader_headers_drop gauge +eth_downloader_headers_drop 0 + +# TYPE eth_downloader_headers_in gauge +eth_downloader_headers_in 20133 + +# TYPE eth_downloader_headers_req_count counter +eth_downloader_headers_req_count 129 + +# TYPE eth_downloader_headers_req summary +eth_downloader_headers_req {quantile="0.5"} 4.0981132e+07 +eth_downloader_headers_req {quantile="0.75"} 4.5769116e+07 +eth_downloader_headers_req {quantile="0.95"} 2.53663427e+08 +eth_downloader_headers_req {quantile="0.99"} 6.901528164999979e+08 +eth_downloader_headers_req {quantile="0.999"} 7.45691875e+08 +eth_downloader_headers_req {quantile="0.9999"} 7.45691875e+08 + +# TYPE eth_downloader_headers_timeout gauge +eth_downloader_headers_timeout 0 + +# TYPE eth_downloader_receipts_drop gauge +eth_downloader_receipts_drop 0 + +# TYPE eth_downloader_receipts_in gauge +eth_downloader_receipts_in 0 + +# TYPE eth_downloader_receipts_req_count counter +eth_downloader_receipts_req_count 0 + +# TYPE eth_downloader_receipts_req summary +eth_downloader_receipts_req {quantile="0.5"} 0 +eth_downloader_receipts_req {quantile="0.75"} 0 +eth_downloader_receipts_req {quantile="0.95"} 0 +eth_downloader_receipts_req {quantile="0.99"} 0 +eth_downloader_receipts_req {quantile="0.999"} 0 +eth_downloader_receipts_req {quantile="0.9999"} 0 + +# TYPE eth_downloader_receipts_timeout gauge +eth_downloader_receipts_timeout 0 + +# TYPE eth_downloader_states_drop gauge +eth_downloader_states_drop 0 + +# TYPE eth_downloader_states_in gauge +eth_downloader_states_in 0 + +# TYPE eth_downloader_throttle gauge +eth_downloader_throttle 0 + +# TYPE eth_fetcher_block_announces_dos gauge +eth_fetcher_block_announces_dos 0 + +# TYPE eth_fetcher_block_announces_drop gauge +eth_fetcher_block_announces_drop 0 + +# TYPE eth_fetcher_block_announces_in gauge +eth_fetcher_block_announces_in 0 + +# TYPE eth_fetcher_block_announces_out_count counter +eth_fetcher_block_announces_out_count 0 + +# TYPE eth_fetcher_block_announces_out summary +eth_fetcher_block_announces_out {quantile="0.5"} 0 +eth_fetcher_block_announces_out {quantile="0.75"} 0 +eth_fetcher_block_announces_out {quantile="0.95"} 0 +eth_fetcher_block_announces_out {quantile="0.99"} 0 +eth_fetcher_block_announces_out {quantile="0.999"} 0 +eth_fetcher_block_announces_out {quantile="0.9999"} 0 + +# TYPE eth_fetcher_block_bodies gauge +eth_fetcher_block_bodies 0 + +# TYPE eth_fetcher_block_broadcasts_dos gauge +eth_fetcher_block_broadcasts_dos 0 + +# TYPE eth_fetcher_block_broadcasts_drop gauge +eth_fetcher_block_broadcasts_drop 0 + +# TYPE eth_fetcher_block_broadcasts_in gauge +eth_fetcher_block_broadcasts_in 0 + +# TYPE eth_fetcher_block_broadcasts_out_count counter +eth_fetcher_block_broadcasts_out_count 0 + +# TYPE eth_fetcher_block_broadcasts_out summary +eth_fetcher_block_broadcasts_out {quantile="0.5"} 0 +eth_fetcher_block_broadcasts_out {quantile="0.75"} 0 +eth_fetcher_block_broadcasts_out {quantile="0.95"} 0 +eth_fetcher_block_broadcasts_out {quantile="0.99"} 0 +eth_fetcher_block_broadcasts_out {quantile="0.999"} 0 +eth_fetcher_block_broadcasts_out {quantile="0.9999"} 0 + +# TYPE eth_fetcher_block_filter_bodies_in gauge +eth_fetcher_block_filter_bodies_in 2061 + +# TYPE eth_fetcher_block_filter_bodies_out gauge +eth_fetcher_block_filter_bodies_out 2061 + +# TYPE eth_fetcher_block_filter_headers_in gauge +eth_fetcher_block_filter_headers_in 23 + +# TYPE eth_fetcher_block_filter_headers_out gauge +eth_fetcher_block_filter_headers_out 23 + +# TYPE eth_fetcher_block_headers gauge +eth_fetcher_block_headers 0 + +# TYPE eth_fetcher_transaction_announces_dos gauge +eth_fetcher_transaction_announces_dos 0 + +# TYPE eth_fetcher_transaction_announces_in gauge +eth_fetcher_transaction_announces_in 0 + +# TYPE eth_fetcher_transaction_announces_known gauge +eth_fetcher_transaction_announces_known 0 + +# TYPE eth_fetcher_transaction_announces_underpriced gauge +eth_fetcher_transaction_announces_underpriced 0 + +# TYPE eth_fetcher_transaction_broadcasts_in gauge +eth_fetcher_transaction_broadcasts_in 0 + +# TYPE eth_fetcher_transaction_broadcasts_known gauge +eth_fetcher_transaction_broadcasts_known 0 + +# TYPE eth_fetcher_transaction_broadcasts_otherreject gauge +eth_fetcher_transaction_broadcasts_otherreject 0 + +# TYPE eth_fetcher_transaction_broadcasts_underpriced gauge +eth_fetcher_transaction_broadcasts_underpriced 0 + +# TYPE eth_fetcher_transaction_fetching_hashes gauge +eth_fetcher_transaction_fetching_hashes 0 + +# TYPE eth_fetcher_transaction_fetching_peers gauge +eth_fetcher_transaction_fetching_peers 0 + +# TYPE eth_fetcher_transaction_queueing_hashes gauge +eth_fetcher_transaction_queueing_hashes 0 + +# TYPE eth_fetcher_transaction_queueing_peers gauge +eth_fetcher_transaction_queueing_peers 0 + +# TYPE eth_fetcher_transaction_replies_in gauge +eth_fetcher_transaction_replies_in 0 + +# TYPE eth_fetcher_transaction_replies_known gauge +eth_fetcher_transaction_replies_known 0 + +# TYPE eth_fetcher_transaction_replies_otherreject gauge +eth_fetcher_transaction_replies_otherreject 0 + +# TYPE eth_fetcher_transaction_replies_underpriced gauge +eth_fetcher_transaction_replies_underpriced 0 + +# TYPE eth_fetcher_transaction_request_done gauge +eth_fetcher_transaction_request_done 0 + +# TYPE eth_fetcher_transaction_request_fail gauge +eth_fetcher_transaction_request_fail 0 + +# TYPE eth_fetcher_transaction_request_out gauge +eth_fetcher_transaction_request_out 0 + +# TYPE eth_fetcher_transaction_request_timeout gauge +eth_fetcher_transaction_request_timeout 0 + +# TYPE eth_fetcher_transaction_waiting_hashes gauge +eth_fetcher_transaction_waiting_hashes 0 + +# TYPE eth_fetcher_transaction_waiting_peers gauge +eth_fetcher_transaction_waiting_peers 0 + +# TYPE les_client_req_rtt_count counter +les_client_req_rtt_count 0 + +# TYPE les_client_req_rtt summary +les_client_req_rtt {quantile="0.5"} 0 +les_client_req_rtt {quantile="0.75"} 0 +les_client_req_rtt {quantile="0.95"} 0 +les_client_req_rtt {quantile="0.99"} 0 +les_client_req_rtt {quantile="0.999"} 0 +les_client_req_rtt {quantile="0.9999"} 0 + +# TYPE les_client_req_sendDelay_count counter +les_client_req_sendDelay_count 0 + +# TYPE les_client_req_sendDelay summary +les_client_req_sendDelay {quantile="0.5"} 0 +les_client_req_sendDelay {quantile="0.75"} 0 +les_client_req_sendDelay {quantile="0.95"} 0 +les_client_req_sendDelay {quantile="0.99"} 0 +les_client_req_sendDelay {quantile="0.999"} 0 +les_client_req_sendDelay {quantile="0.9999"} 0 + +# TYPE les_client_serverPool_connected gauge +les_client_serverPool_connected 0 + +# TYPE les_client_serverPool_dialed gauge +les_client_serverPool_dialed 0 + +# TYPE les_client_serverPool_selectable gauge +les_client_serverPool_selectable 0 + +# TYPE les_client_serverPool_sessionValue gauge +les_client_serverPool_sessionValue 0 + +# TYPE les_client_serverPool_timeout gauge +les_client_serverPool_timeout 0 + +# TYPE les_client_serverPool_totalValue gauge +les_client_serverPool_totalValue 0 + +# TYPE les_connection_duration_count counter +les_connection_duration_count 0 + +# TYPE les_connection_duration summary +les_connection_duration {quantile="0.5"} 0 +les_connection_duration {quantile="0.75"} 0 +les_connection_duration {quantile="0.95"} 0 +les_connection_duration {quantile="0.99"} 0 +les_connection_duration {quantile="0.999"} 0 +les_connection_duration {quantile="0.9999"} 0 + +# TYPE les_connection_server gauge +les_connection_server 0 + +# TYPE les_misc_in_packets_body gauge +les_misc_in_packets_body 0 + +# TYPE les_misc_in_packets_code gauge +les_misc_in_packets_code 0 + +# TYPE les_misc_in_packets_header gauge +les_misc_in_packets_header 0 + +# TYPE les_misc_in_packets_helperTrie gauge +les_misc_in_packets_helperTrie 0 + +# TYPE les_misc_in_packets_proof gauge +les_misc_in_packets_proof 0 + +# TYPE les_misc_in_packets_receipt gauge +les_misc_in_packets_receipt 0 + +# TYPE les_misc_in_packets_total gauge +les_misc_in_packets_total 0 + +# TYPE les_misc_in_packets_txStatus gauge +les_misc_in_packets_txStatus 0 + +# TYPE les_misc_in_packets_txs gauge +les_misc_in_packets_txs 0 + +# TYPE les_misc_in_traffic_body gauge +les_misc_in_traffic_body 0 + +# TYPE les_misc_in_traffic_code gauge +les_misc_in_traffic_code 0 + +# TYPE les_misc_in_traffic_header gauge +les_misc_in_traffic_header 0 + +# TYPE les_misc_in_traffic_helperTrie gauge +les_misc_in_traffic_helperTrie 0 + +# TYPE les_misc_in_traffic_proof gauge +les_misc_in_traffic_proof 0 + +# TYPE les_misc_in_traffic_receipt gauge +les_misc_in_traffic_receipt 0 + +# TYPE les_misc_in_traffic_total gauge +les_misc_in_traffic_total 0 + +# TYPE les_misc_in_traffic_txStatus gauge +les_misc_in_traffic_txStatus 0 + +# TYPE les_misc_in_traffic_txs gauge +les_misc_in_traffic_txs 0 + +# TYPE les_misc_out_packets_body gauge +les_misc_out_packets_body 0 + +# TYPE les_misc_out_packets_code gauge +les_misc_out_packets_code 0 + +# TYPE les_misc_out_packets_header gauge +les_misc_out_packets_header 0 + +# TYPE les_misc_out_packets_helperTrie gauge +les_misc_out_packets_helperTrie 0 + +# TYPE les_misc_out_packets_proof gauge +les_misc_out_packets_proof 0 + +# TYPE les_misc_out_packets_receipt gauge +les_misc_out_packets_receipt 0 + +# TYPE les_misc_out_packets_total gauge +les_misc_out_packets_total 0 + +# TYPE les_misc_out_packets_txStatus gauge +les_misc_out_packets_txStatus 0 + +# TYPE les_misc_out_packets_txs gauge +les_misc_out_packets_txs 0 + +# TYPE les_misc_out_traffic_body gauge +les_misc_out_traffic_body 0 + +# TYPE les_misc_out_traffic_code gauge +les_misc_out_traffic_code 0 + +# TYPE les_misc_out_traffic_header gauge +les_misc_out_traffic_header 0 + +# TYPE les_misc_out_traffic_helperTrie gauge +les_misc_out_traffic_helperTrie 0 + +# TYPE les_misc_out_traffic_proof gauge +les_misc_out_traffic_proof 0 + +# TYPE les_misc_out_traffic_receipt gauge +les_misc_out_traffic_receipt 0 + +# TYPE les_misc_out_traffic_total gauge +les_misc_out_traffic_total 0 + +# TYPE les_misc_out_traffic_txStatus gauge +les_misc_out_traffic_txStatus 0 + +# TYPE les_misc_out_traffic_txs gauge +les_misc_out_traffic_txs 0 + +# TYPE les_misc_serve_body_count counter +les_misc_serve_body_count 0 + +# TYPE les_misc_serve_body summary +les_misc_serve_body {quantile="0.5"} 0 +les_misc_serve_body {quantile="0.75"} 0 +les_misc_serve_body {quantile="0.95"} 0 +les_misc_serve_body {quantile="0.99"} 0 +les_misc_serve_body {quantile="0.999"} 0 +les_misc_serve_body {quantile="0.9999"} 0 + +# TYPE les_misc_serve_code_count counter +les_misc_serve_code_count 0 + +# TYPE les_misc_serve_code summary +les_misc_serve_code {quantile="0.5"} 0 +les_misc_serve_code {quantile="0.75"} 0 +les_misc_serve_code {quantile="0.95"} 0 +les_misc_serve_code {quantile="0.99"} 0 +les_misc_serve_code {quantile="0.999"} 0 +les_misc_serve_code {quantile="0.9999"} 0 + +# TYPE les_misc_serve_header_count counter +les_misc_serve_header_count 0 + +# TYPE les_misc_serve_header summary +les_misc_serve_header {quantile="0.5"} 0 +les_misc_serve_header {quantile="0.75"} 0 +les_misc_serve_header {quantile="0.95"} 0 +les_misc_serve_header {quantile="0.99"} 0 +les_misc_serve_header {quantile="0.999"} 0 +les_misc_serve_header {quantile="0.9999"} 0 + +# TYPE les_misc_serve_helperTrie_count counter +les_misc_serve_helperTrie_count 0 + +# TYPE les_misc_serve_helperTrie summary +les_misc_serve_helperTrie {quantile="0.5"} 0 +les_misc_serve_helperTrie {quantile="0.75"} 0 +les_misc_serve_helperTrie {quantile="0.95"} 0 +les_misc_serve_helperTrie {quantile="0.99"} 0 +les_misc_serve_helperTrie {quantile="0.999"} 0 +les_misc_serve_helperTrie {quantile="0.9999"} 0 + +# TYPE les_misc_serve_proof_count counter +les_misc_serve_proof_count 0 + +# TYPE les_misc_serve_proof summary +les_misc_serve_proof {quantile="0.5"} 0 +les_misc_serve_proof {quantile="0.75"} 0 +les_misc_serve_proof {quantile="0.95"} 0 +les_misc_serve_proof {quantile="0.99"} 0 +les_misc_serve_proof {quantile="0.999"} 0 +les_misc_serve_proof {quantile="0.9999"} 0 + +# TYPE les_misc_serve_receipt_count counter +les_misc_serve_receipt_count 0 + +# TYPE les_misc_serve_receipt summary +les_misc_serve_receipt {quantile="0.5"} 0 +les_misc_serve_receipt {quantile="0.75"} 0 +les_misc_serve_receipt {quantile="0.95"} 0 +les_misc_serve_receipt {quantile="0.99"} 0 +les_misc_serve_receipt {quantile="0.999"} 0 +les_misc_serve_receipt {quantile="0.9999"} 0 + +# TYPE les_misc_serve_txStatus_count counter +les_misc_serve_txStatus_count 0 + +# TYPE les_misc_serve_txStatus summary +les_misc_serve_txStatus {quantile="0.5"} 0 +les_misc_serve_txStatus {quantile="0.75"} 0 +les_misc_serve_txStatus {quantile="0.95"} 0 +les_misc_serve_txStatus {quantile="0.99"} 0 +les_misc_serve_txStatus {quantile="0.999"} 0 +les_misc_serve_txStatus {quantile="0.9999"} 0 + +# TYPE les_misc_serve_txs_count counter +les_misc_serve_txs_count 0 + +# TYPE les_misc_serve_txs summary +les_misc_serve_txs {quantile="0.5"} 0 +les_misc_serve_txs {quantile="0.75"} 0 +les_misc_serve_txs {quantile="0.95"} 0 +les_misc_serve_txs {quantile="0.99"} 0 +les_misc_serve_txs {quantile="0.999"} 0 +les_misc_serve_txs {quantile="0.9999"} 0 + +# TYPE les_server_blockProcessingTime_count counter +les_server_blockProcessingTime_count 0 + +# TYPE les_server_blockProcessingTime summary IMP +les_server_blockProcessingTime {quantile="0.5"} 0 +les_server_blockProcessingTime {quantile="0.75"} 0 +les_server_blockProcessingTime {quantile="0.95"} 0 +les_server_blockProcessingTime {quantile="0.99"} 0 +les_server_blockProcessingTime {quantile="0.999"} 0 +les_server_blockProcessingTime {quantile="0.9999"} 0 + +# TYPE les_server_clientEvent_error gauge +les_server_clientEvent_error 0 + +# TYPE les_server_clientEvent_freeze gauge +les_server_clientEvent_freeze 0 + +# TYPE les_server_globalFactor gauge +les_server_globalFactor 0 + +# TYPE les_server_recentRequestEstimated gauge +les_server_recentRequestEstimated 0 + +# TYPE les_server_recentRequestServed gauge +les_server_recentRequestServed 0 + +# TYPE les_server_req_avgEstimatedTime gauge +les_server_req_avgEstimatedTime 0 + +# TYPE les_server_req_avgServedTime gauge +les_server_req_avgServedTime 0 + +# TYPE les_server_req_estimatedTime_count counter +les_server_req_estimatedTime_count 0 + +# TYPE les_server_req_estimatedTime summary +les_server_req_estimatedTime {quantile="0.5"} 0 +les_server_req_estimatedTime {quantile="0.75"} 0 +les_server_req_estimatedTime {quantile="0.95"} 0 +les_server_req_estimatedTime {quantile="0.99"} 0 +les_server_req_estimatedTime {quantile="0.999"} 0 +les_server_req_estimatedTime {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_count counter +les_server_req_relative_count 0 + +# TYPE les_server_req_relative summary +les_server_req_relative {quantile="0.5"} 0 +les_server_req_relative {quantile="0.75"} 0 +les_server_req_relative {quantile="0.95"} 0 +les_server_req_relative {quantile="0.99"} 0 +les_server_req_relative {quantile="0.999"} 0 +les_server_req_relative {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_body_count counter +les_server_req_relative_body_count 0 + +# TYPE les_server_req_relative_body summary +les_server_req_relative_body {quantile="0.5"} 0 +les_server_req_relative_body {quantile="0.75"} 0 +les_server_req_relative_body {quantile="0.95"} 0 +les_server_req_relative_body {quantile="0.99"} 0 +les_server_req_relative_body {quantile="0.999"} 0 +les_server_req_relative_body {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_code_count counter +les_server_req_relative_code_count 0 + +# TYPE les_server_req_relative_code summary +les_server_req_relative_code {quantile="0.5"} 0 +les_server_req_relative_code {quantile="0.75"} 0 +les_server_req_relative_code {quantile="0.95"} 0 +les_server_req_relative_code {quantile="0.99"} 0 +les_server_req_relative_code {quantile="0.999"} 0 +les_server_req_relative_code {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_header_count counter +les_server_req_relative_header_count 0 + +# TYPE les_server_req_relative_header summary +les_server_req_relative_header {quantile="0.5"} 0 +les_server_req_relative_header {quantile="0.75"} 0 +les_server_req_relative_header {quantile="0.95"} 0 +les_server_req_relative_header {quantile="0.99"} 0 +les_server_req_relative_header {quantile="0.999"} 0 +les_server_req_relative_header {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_helperTrie_count counter +les_server_req_relative_helperTrie_count 0 + +# TYPE les_server_req_relative_helperTrie summary +les_server_req_relative_helperTrie {quantile="0.5"} 0 +les_server_req_relative_helperTrie {quantile="0.75"} 0 +les_server_req_relative_helperTrie {quantile="0.95"} 0 +les_server_req_relative_helperTrie {quantile="0.99"} 0 +les_server_req_relative_helperTrie {quantile="0.999"} 0 +les_server_req_relative_helperTrie {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_proof_count counter +les_server_req_relative_proof_count 0 + +# TYPE les_server_req_relative_proof summary +les_server_req_relative_proof {quantile="0.5"} 0 +les_server_req_relative_proof {quantile="0.75"} 0 +les_server_req_relative_proof {quantile="0.95"} 0 +les_server_req_relative_proof {quantile="0.99"} 0 +les_server_req_relative_proof {quantile="0.999"} 0 +les_server_req_relative_proof {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_receipt_count counter +les_server_req_relative_receipt_count 0 + +# TYPE les_server_req_relative_receipt summary +les_server_req_relative_receipt {quantile="0.5"} 0 +les_server_req_relative_receipt {quantile="0.75"} 0 +les_server_req_relative_receipt {quantile="0.95"} 0 +les_server_req_relative_receipt {quantile="0.99"} 0 +les_server_req_relative_receipt {quantile="0.999"} 0 +les_server_req_relative_receipt {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_txStatus_count counter +les_server_req_relative_txStatus_count 0 + +# TYPE les_server_req_relative_txStatus summary +les_server_req_relative_txStatus {quantile="0.5"} 0 +les_server_req_relative_txStatus {quantile="0.75"} 0 +les_server_req_relative_txStatus {quantile="0.95"} 0 +les_server_req_relative_txStatus {quantile="0.99"} 0 +les_server_req_relative_txStatus {quantile="0.999"} 0 +les_server_req_relative_txStatus {quantile="0.9999"} 0 + +# TYPE les_server_req_relative_txs_count counter +les_server_req_relative_txs_count 0 + +# TYPE les_server_req_relative_txs summary +les_server_req_relative_txs {quantile="0.5"} 0 +les_server_req_relative_txs {quantile="0.75"} 0 +les_server_req_relative_txs {quantile="0.95"} 0 +les_server_req_relative_txs {quantile="0.99"} 0 +les_server_req_relative_txs {quantile="0.999"} 0 +les_server_req_relative_txs {quantile="0.9999"} 0 + +# TYPE les_server_req_servedTime_count counter +les_server_req_servedTime_count 0 + +# TYPE les_server_req_servedTime summary +les_server_req_servedTime {quantile="0.5"} 0 +les_server_req_servedTime {quantile="0.75"} 0 +les_server_req_servedTime {quantile="0.95"} 0 +les_server_req_servedTime {quantile="0.99"} 0 +les_server_req_servedTime {quantile="0.999"} 0 +les_server_req_servedTime {quantile="0.9999"} 0 + +# TYPE les_server_servingQueue_queued gauge +les_server_servingQueue_queued 0 + +# TYPE les_server_servingQueue_served gauge +les_server_servingQueue_served 0 + +# TYPE les_server_totalCapacity gauge +les_server_totalCapacity 0 + +# TYPE les_server_totalRecharge gauge +les_server_totalRecharge 0 + +# TYPE p2p_dials gauge IMP +p2p_dials 69 + +#IMP all egress + +# TYPE p2p_egress gauge IMP +p2p_egress 134834 + +# TYPE p2p_egress_eth_65_0x00 gauge +p2p_egress_eth_65_0x00 177 + +# TYPE p2p_egress_eth_65_0x00_packets gauge +p2p_egress_eth_65_0x00_packets 3 + +# TYPE p2p_egress_eth_65_0x03 gauge +p2p_egress_eth_65_0x03 1315 + +# TYPE p2p_egress_eth_65_0x03_packets gauge +p2p_egress_eth_65_0x03_packets 132 + +# TYPE p2p_egress_eth_65_0x04 gauge +p2p_egress_eth_65_0x04 3 + +# TYPE p2p_egress_eth_65_0x04_packets gauge +p2p_egress_eth_65_0x04_packets 1 + +# TYPE p2p_egress_eth_65_0x05 gauge +p2p_egress_eth_65_0x05 68658 + +# TYPE p2p_egress_eth_65_0x05_packets gauge +p2p_egress_eth_65_0x05_packets 83 + +# TYPE p2p_egress_eth_66_0x00 gauge +p2p_egress_eth_66_0x00 327 + +# TYPE p2p_egress_eth_66_0x00_packets gauge +p2p_egress_eth_66_0x00_packets 5 + +# TYPE p2p_egress_eth_66_0x03 gauge +p2p_egress_eth_66_0x03 20 + +# TYPE p2p_egress_eth_66_0x03_packets gauge +p2p_egress_eth_66_0x03_packets 1 + +# TYPE p2p_egress_eth_66_0x04 gauge +p2p_egress_eth_66_0x04 0 + +# TYPE p2p_egress_eth_66_0x04_packets gauge +p2p_egress_eth_66_0x04_packets 0 + +# TYPE p2p_egress_eth_66_0x05 gauge +p2p_egress_eth_66_0x05 0 + +# TYPE p2p_egress_eth_66_0x05_packets gauge +p2p_egress_eth_66_0x05_packets 0 + +# TYPE p2p_egress_snap_1_0x00 gauge +p2p_egress_snap_1_0x00 0 + +# TYPE p2p_egress_snap_1_0x00_packets gauge +p2p_egress_snap_1_0x00_packets 0 + +# TYPE p2p_handle_eth_65_0x01_count counter +p2p_handle_eth_65_0x01_count 1 + +# TYPE p2p_handle_eth_65_0x01 summary +p2p_handle_eth_65_0x01 {quantile="0.5"} 185 +p2p_handle_eth_65_0x01 {quantile="0.75"} 185 +p2p_handle_eth_65_0x01 {quantile="0.95"} 185 +p2p_handle_eth_65_0x01 {quantile="0.99"} 185 +p2p_handle_eth_65_0x01 {quantile="0.999"} 185 +p2p_handle_eth_65_0x01 {quantile="0.9999"} 185 + +# TYPE p2p_handle_eth_65_0x03_count counter +p2p_handle_eth_65_0x03_count 1 + +# TYPE p2p_handle_eth_65_0x03 summary +p2p_handle_eth_65_0x03 {quantile="0.5"} 126 +p2p_handle_eth_65_0x03 {quantile="0.75"} 126 +p2p_handle_eth_65_0x03 {quantile="0.95"} 126 +p2p_handle_eth_65_0x03 {quantile="0.99"} 126 +p2p_handle_eth_65_0x03 {quantile="0.999"} 126 +p2p_handle_eth_65_0x03 {quantile="0.9999"} 126 + +# TYPE p2p_handle_eth_65_0x04_count counter +p2p_handle_eth_65_0x04_count 154 + +# TYPE p2p_handle_eth_65_0x04 summary +p2p_handle_eth_65_0x04 {quantile="0.5"} 855 +p2p_handle_eth_65_0x04 {quantile="0.75"} 1172 +p2p_handle_eth_65_0x04 {quantile="0.95"} 1673.5 +p2p_handle_eth_65_0x04 {quantile="0.99"} 8296.449999999888 +p2p_handle_eth_65_0x04 {quantile="0.999"} 13775 +p2p_handle_eth_65_0x04 {quantile="0.9999"} 13775 + +# TYPE p2p_handle_eth_65_0x06_count counter +p2p_handle_eth_65_0x06_count 99 + +# TYPE p2p_handle_eth_65_0x06 summary +p2p_handle_eth_65_0x06 {quantile="0.5"} 180 +p2p_handle_eth_65_0x06 {quantile="0.75"} 250 +p2p_handle_eth_65_0x06 {quantile="0.95"} 2105 +p2p_handle_eth_65_0x06 {quantile="0.99"} 7910 +p2p_handle_eth_65_0x06 {quantile="0.999"} 7910 +p2p_handle_eth_65_0x06 {quantile="0.9999"} 7910 + +# TYPE p2p_handle_eth_65_0x08_count counter +p2p_handle_eth_65_0x08_count 17 + +# TYPE p2p_handle_eth_65_0x08 summary +p2p_handle_eth_65_0x08 {quantile="0.5"} 5 +p2p_handle_eth_65_0x08 {quantile="0.75"} 7 +p2p_handle_eth_65_0x08 {quantile="0.95"} 87 +p2p_handle_eth_65_0x08 {quantile="0.99"} 87 +p2p_handle_eth_65_0x08 {quantile="0.999"} 87 +p2p_handle_eth_65_0x08 {quantile="0.9999"} 87 + +# TYPE p2p_handle_eth_66_0x03_count counter +p2p_handle_eth_66_0x03_count 1 + +# TYPE p2p_handle_eth_66_0x03 summary +p2p_handle_eth_66_0x03 {quantile="0.5"} 405 +p2p_handle_eth_66_0x03 {quantile="0.75"} 405 +p2p_handle_eth_66_0x03 {quantile="0.95"} 405 +p2p_handle_eth_66_0x03 {quantile="0.99"} 405 +p2p_handle_eth_66_0x03 {quantile="0.999"} 405 +p2p_handle_eth_66_0x03 {quantile="0.9999"} 405 + +# TYPE p2p_handle_eth_66_0x04_count counter +p2p_handle_eth_66_0x04_count 2 + +# TYPE p2p_handle_eth_66_0x04 summary +p2p_handle_eth_66_0x04 {quantile="0.5"} 595.5 +p2p_handle_eth_66_0x04 {quantile="0.75"} 1091 +p2p_handle_eth_66_0x04 {quantile="0.95"} 1091 +p2p_handle_eth_66_0x04 {quantile="0.99"} 1091 +p2p_handle_eth_66_0x04 {quantile="0.999"} 1091 +p2p_handle_eth_66_0x04 {quantile="0.9999"} 1091 + +# TYPE p2p_handle_eth_66_0x06_count counter +p2p_handle_eth_66_0x06_count 1 + +# TYPE p2p_handle_eth_66_0x06 summary +p2p_handle_eth_66_0x06 {quantile="0.5"} 1309 +p2p_handle_eth_66_0x06 {quantile="0.75"} 1309 +p2p_handle_eth_66_0x06 {quantile="0.95"} 1309 +p2p_handle_eth_66_0x06 {quantile="0.99"} 1309 +p2p_handle_eth_66_0x06 {quantile="0.999"} 1309 +p2p_handle_eth_66_0x06 {quantile="0.9999"} 1309 + +# TYPE p2p_handle_eth_66_0x08_count counter +p2p_handle_eth_66_0x08_count 2 + +# TYPE p2p_handle_eth_66_0x08 summary +p2p_handle_eth_66_0x08 {quantile="0.5"} 16 +p2p_handle_eth_66_0x08 {quantile="0.75"} 28 +p2p_handle_eth_66_0x08 {quantile="0.95"} 28 +p2p_handle_eth_66_0x08 {quantile="0.99"} 28 +p2p_handle_eth_66_0x08 {quantile="0.999"} 28 +p2p_handle_eth_66_0x08 {quantile="0.9999"} 28 + +# TYPE p2p_handle_snap_1_0x01_count counter +p2p_handle_snap_1_0x01_count 1 + +# TYPE p2p_handle_snap_1_0x01 summary +p2p_handle_snap_1_0x01 {quantile="0.5"} 375 +p2p_handle_snap_1_0x01 {quantile="0.75"} 375 +p2p_handle_snap_1_0x01 {quantile="0.95"} 375 +p2p_handle_snap_1_0x01 {quantile="0.99"} 375 +p2p_handle_snap_1_0x01 {quantile="0.999"} 375 +p2p_handle_snap_1_0x01 {quantile="0.9999"} 375 + +# TYPE p2p_ingress gauge #IMP +p2p_ingress 3918214 + +# TYPE p2p_ingress_eth_65_0x00 gauge #IMP +p2p_ingress_eth_65_0x00 271 + +# TYPE p2p_ingress_eth_65_0x00_packets gauge IMP +p2p_ingress_eth_65_0x00_packets 3 + +# TYPE p2p_ingress_eth_65_0x01 gauge IMP +p2p_ingress_eth_65_0x01 0 + +# TYPE p2p_ingress_eth_65_0x01_packets gauge IMP +p2p_ingress_eth_65_0x01_packets 0 + +# TYPE p2p_ingress_eth_65_0x03 gauge IMP +p2p_ingress_eth_65_0x03 10 + +# TYPE p2p_ingress_eth_65_0x03_packets gauge IMP +p2p_ingress_eth_65_0x03_packets 1 + +# TYPE p2p_ingress_eth_65_0x04 gauge IMP +p2p_ingress_eth_65_0x04 3362209 + +# TYPE p2p_ingress_eth_65_0x04_packets gauge IMP +p2p_ingress_eth_65_0x04_packets 131 + +# TYPE p2p_ingress_eth_65_0x06 gauge IMP +p2p_ingress_eth_65_0x06 383458 + +# TYPE p2p_ingress_eth_65_0x06_packets gauge IMP +p2p_ingress_eth_65_0x06_packets 83 + +# TYPE p2p_ingress_eth_65_0x08 gauge +p2p_ingress_eth_65_0x08 96828 + +# TYPE p2p_ingress_eth_65_0x08_packets gauge +p2p_ingress_eth_65_0x08_packets 9 + +# TYPE p2p_ingress_eth_66_0x00 gauge +p2p_ingress_eth_66_0x00 436 + +# TYPE p2p_ingress_eth_66_0x00_packets gauge +p2p_ingress_eth_66_0x00_packets 5 + +# TYPE p2p_ingress_eth_66_0x03 gauge +p2p_ingress_eth_66_0x03 0 + +# TYPE p2p_ingress_eth_66_0x03_packets gauge +p2p_ingress_eth_66_0x03_packets 0 + +# TYPE p2p_ingress_eth_66_0x04 gauge +p2p_ingress_eth_66_0x04 0 + +# TYPE p2p_ingress_eth_66_0x04_packets gauge +p2p_ingress_eth_66_0x04_packets 0 + +# TYPE p2p_ingress_eth_66_0x06 gauge +p2p_ingress_eth_66_0x06 0 + +# TYPE p2p_ingress_eth_66_0x06_packets gauge +p2p_ingress_eth_66_0x06_packets 0 + +# TYPE p2p_ingress_eth_66_0x08 gauge +p2p_ingress_eth_66_0x08 0 + +# TYPE p2p_ingress_eth_66_0x08_packets gauge +p2p_ingress_eth_66_0x08_packets 0 + +# TYPE p2p_ingress_snap_1_0x01 gauge +p2p_ingress_snap_1_0x01 0 + +# TYPE p2p_ingress_snap_1_0x01_packets gauge +p2p_ingress_snap_1_0x01_packets 0 + +# TYPE p2p_peers gauge IMP +p2p_peers 8 + +# TYPE p2p_serves gauge IMP +p2p_serves 70 + +# TYPE p2p_tracked_eth_66_0x03 gauge +p2p_tracked_eth_66_0x03 2 + +# TYPE p2p_tracked_eth_66_0x05 gauge +p2p_tracked_eth_66_0x05 0 + +# TYPE p2p_tracked_snap_1_0x00 gauge +p2p_tracked_snap_1_0x00 0 + +# TYPE p2p_wait_eth_66_0x03_count counter +p2p_wait_eth_66_0x03_count 2 + +# TYPE p2p_wait_eth_66_0x03 summary +p2p_wait_eth_66_0x03 {quantile="0.5"} 567440.5 +p2p_wait_eth_66_0x03 {quantile="0.75"} 574606 +p2p_wait_eth_66_0x03 {quantile="0.95"} 574606 +p2p_wait_eth_66_0x03 {quantile="0.99"} 574606 +p2p_wait_eth_66_0x03 {quantile="0.999"} 574606 +p2p_wait_eth_66_0x03 {quantile="0.9999"} 574606 + +# TYPE p2p_wait_eth_66_0x05_count counter +p2p_wait_eth_66_0x05_count 1 + +# TYPE p2p_wait_eth_66_0x05 summary +p2p_wait_eth_66_0x05 {quantile="0.5"} 212272 +p2p_wait_eth_66_0x05 {quantile="0.75"} 212272 +p2p_wait_eth_66_0x05 {quantile="0.95"} 212272 +p2p_wait_eth_66_0x05 {quantile="0.99"} 212272 +p2p_wait_eth_66_0x05 {quantile="0.999"} 212272 +p2p_wait_eth_66_0x05 {quantile="0.9999"} 212272 + +# TYPE p2p_wait_snap_1_0x00_count counter +p2p_wait_snap_1_0x00_count 1 + +# TYPE p2p_wait_snap_1_0x00 summary +p2p_wait_snap_1_0x00 {quantile="0.5"} 574823 +p2p_wait_snap_1_0x00 {quantile="0.75"} 574823 +p2p_wait_snap_1_0x00 {quantile="0.95"} 574823 +p2p_wait_snap_1_0x00 {quantile="0.99"} 574823 +p2p_wait_snap_1_0x00 {quantile="0.999"} 574823 +p2p_wait_snap_1_0x00 {quantile="0.9999"} 574823 + +# TYPE rpc_duration_all_count counter +rpc_duration_all_count 0 + +# TYPE rpc_duration_all summary +rpc_duration_all {quantile="0.5"} 0 +rpc_duration_all {quantile="0.75"} 0 +rpc_duration_all {quantile="0.95"} 0 +rpc_duration_all {quantile="0.99"} 0 +rpc_duration_all {quantile="0.999"} 0 +rpc_duration_all {quantile="0.9999"} 0 + +# TYPE rpc_failure gauge +rpc_failure 0 + +# TYPE rpc_requests gauge +rpc_requests 0 + +# TYPE rpc_success gauge +rpc_success 0 + +# TYPE state_snapshot_bloom_account_falsehit gauge +state_snapshot_bloom_account_falsehit 0 + +# TYPE state_snapshot_bloom_account_miss gauge +state_snapshot_bloom_account_miss 0 + +# TYPE state_snapshot_bloom_account_truehit gauge +state_snapshot_bloom_account_truehit 0 + +# TYPE state_snapshot_bloom_error gauge +state_snapshot_bloom_error 0 + +# TYPE state_snapshot_bloom_storage_falsehit gauge +state_snapshot_bloom_storage_falsehit 0 + +# TYPE state_snapshot_bloom_storage_miss gauge +state_snapshot_bloom_storage_miss 0 + +# TYPE state_snapshot_bloom_storage_truehit gauge +state_snapshot_bloom_storage_truehit 0 + +# TYPE state_snapshot_clean_account_hit gauge +state_snapshot_clean_account_hit 0 + +# TYPE state_snapshot_clean_account_inex gauge +state_snapshot_clean_account_inex 0 + +# TYPE state_snapshot_clean_account_miss gauge +state_snapshot_clean_account_miss 0 + +# TYPE state_snapshot_clean_account_read gauge +state_snapshot_clean_account_read 0 + +# TYPE state_snapshot_clean_account_write gauge +state_snapshot_clean_account_write 0 + +# TYPE state_snapshot_clean_storage_hit gauge +state_snapshot_clean_storage_hit 0 + +# TYPE state_snapshot_clean_storage_inex gauge +state_snapshot_clean_storage_inex 0 + +# TYPE state_snapshot_clean_storage_miss gauge +state_snapshot_clean_storage_miss 0 + +# TYPE state_snapshot_clean_storage_read gauge +state_snapshot_clean_storage_read 0 + +# TYPE state_snapshot_clean_storage_write gauge +state_snapshot_clean_storage_write 0 + +# TYPE state_snapshot_dirty_account_hit gauge +state_snapshot_dirty_account_hit 0 + +# TYPE state_snapshot_dirty_account_hit_depth_count counter +state_snapshot_dirty_account_hit_depth_count 0 + +# TYPE state_snapshot_dirty_account_hit_depth summary +state_snapshot_dirty_account_hit_depth {quantile="0.5"} 0 +state_snapshot_dirty_account_hit_depth {quantile="0.75"} 0 +state_snapshot_dirty_account_hit_depth {quantile="0.95"} 0 +state_snapshot_dirty_account_hit_depth {quantile="0.99"} 0 +state_snapshot_dirty_account_hit_depth {quantile="0.999"} 0 +state_snapshot_dirty_account_hit_depth {quantile="0.9999"} 0 + +# TYPE state_snapshot_dirty_account_inex gauge +state_snapshot_dirty_account_inex 0 + +# TYPE state_snapshot_dirty_account_miss gauge +state_snapshot_dirty_account_miss 0 + +# TYPE state_snapshot_dirty_account_read gauge +state_snapshot_dirty_account_read 0 + +# TYPE state_snapshot_dirty_account_write gauge +state_snapshot_dirty_account_write 0 + +# TYPE state_snapshot_dirty_storage_hit gauge +state_snapshot_dirty_storage_hit 0 + +# TYPE state_snapshot_dirty_storage_hit_depth_count counter +state_snapshot_dirty_storage_hit_depth_count 0 + +# TYPE state_snapshot_dirty_storage_hit_depth summary +state_snapshot_dirty_storage_hit_depth {quantile="0.5"} 0 +state_snapshot_dirty_storage_hit_depth {quantile="0.75"} 0 +state_snapshot_dirty_storage_hit_depth {quantile="0.95"} 0 +state_snapshot_dirty_storage_hit_depth {quantile="0.99"} 0 +state_snapshot_dirty_storage_hit_depth {quantile="0.999"} 0 +state_snapshot_dirty_storage_hit_depth {quantile="0.9999"} 0 + +# TYPE state_snapshot_dirty_storage_inex gauge +state_snapshot_dirty_storage_inex 0 + +# TYPE state_snapshot_dirty_storage_miss gauge +state_snapshot_dirty_storage_miss 0 + +# TYPE state_snapshot_dirty_storage_read gauge +state_snapshot_dirty_storage_read 0 + +# TYPE state_snapshot_dirty_storage_write gauge +state_snapshot_dirty_storage_write 0 + +# TYPE state_snapshot_flush_account_item gauge +state_snapshot_flush_account_item 0 + +# TYPE state_snapshot_flush_account_size gauge +state_snapshot_flush_account_size 0 + +# TYPE state_snapshot_flush_storage_item gauge +state_snapshot_flush_storage_item 0 + +# TYPE state_snapshot_flush_storage_size gauge +state_snapshot_flush_storage_size 0 + +# TYPE state_snapshot_generation_account_generated gauge +state_snapshot_generation_account_generated 8893 + +# TYPE state_snapshot_generation_account_missall gauge +state_snapshot_generation_account_missall 1 + +# TYPE state_snapshot_generation_account_recovered gauge +state_snapshot_generation_account_recovered 0 + +# TYPE state_snapshot_generation_account_wiped gauge +state_snapshot_generation_account_wiped 0 + +# TYPE state_snapshot_generation_duration_account_prove gauge +state_snapshot_generation_duration_account_prove 16221 + +# TYPE state_snapshot_generation_duration_account_snapread gauge +state_snapshot_generation_duration_account_snapread 89448 + +# TYPE state_snapshot_generation_duration_account_trieread gauge +state_snapshot_generation_duration_account_trieread 78590307 + +# TYPE state_snapshot_generation_duration_account_write gauge +state_snapshot_generation_duration_account_write 84327092 + +# TYPE state_snapshot_generation_duration_storage_prove gauge +state_snapshot_generation_duration_storage_prove 0 + +# TYPE state_snapshot_generation_duration_storage_snapread gauge +state_snapshot_generation_duration_storage_snapread 0 + +# TYPE state_snapshot_generation_duration_storage_trieread gauge +state_snapshot_generation_duration_storage_trieread 0 + +# TYPE state_snapshot_generation_duration_storage_write gauge +state_snapshot_generation_duration_storage_write 0 + +# TYPE state_snapshot_generation_proof_failure gauge +state_snapshot_generation_proof_failure 1 + +# TYPE state_snapshot_generation_proof_success gauge +state_snapshot_generation_proof_success 0 + +# TYPE state_snapshot_generation_storage_generated gauge +state_snapshot_generation_storage_generated 0 + +# TYPE state_snapshot_generation_storage_missall gauge +state_snapshot_generation_storage_missall 0 + +# TYPE state_snapshot_generation_storage_recovered gauge +state_snapshot_generation_storage_recovered 0 + +# TYPE state_snapshot_generation_storage_wiped gauge +state_snapshot_generation_storage_wiped 0 + +# TYPE system_cpu_goroutines gauge +system_cpu_goroutines 129 + +# TYPE system_cpu_procload gauge +system_cpu_procload 47 + +# TYPE system_cpu_sysload gauge +system_cpu_sysload 215 + +# TYPE system_cpu_syswait gauge +system_cpu_syswait 25 + +# TYPE system_cpu_threads gauge +system_cpu_threads 13 + +# TYPE system_disk_readbytes gauge +system_disk_readbytes 5017534 + +# TYPE system_disk_readcount gauge +system_disk_readcount 913 + +# TYPE system_disk_readdata gauge +system_disk_readdata 1777439 + +# TYPE system_disk_writebytes gauge +system_disk_writebytes 36555070 + +# TYPE system_disk_writecount gauge +system_disk_writecount 72172 + +# TYPE system_disk_writedata gauge +system_disk_writedata 13225794 + +# TYPE system_memory_allocs gauge +system_memory_allocs 2144962 + +# TYPE system_memory_frees gauge +system_memory_frees 1268637 + +# TYPE system_memory_held gauge +system_memory_held 728506368 + +# TYPE system_memory_pauses gauge +system_memory_pauses 4199764 + +# TYPE system_memory_used gauge +system_memory_used 577212048 + +# TYPE trie_bloom_add gauge +trie_bloom_add 0 + +# TYPE trie_bloom_error gauge +trie_bloom_error 0 + +# TYPE trie_bloom_fault gauge +trie_bloom_fault 2 + +# TYPE trie_bloom_load gauge +trie_bloom_load 0 + +# TYPE trie_bloom_miss gauge +trie_bloom_miss 0 + +# TYPE trie_bloom_test gauge +trie_bloom_test 0 + +# TYPE trie_memcache_clean_hit gauge +trie_memcache_clean_hit 6 + +# TYPE trie_memcache_clean_miss gauge +trie_memcache_clean_miss 12356 + +# TYPE trie_memcache_clean_read gauge +trie_memcache_clean_read 2679 + +# TYPE trie_memcache_clean_write gauge +trie_memcache_clean_write 1483023 + +# TYPE trie_memcache_commit_nodes gauge +trie_memcache_commit_nodes 12356 + +# TYPE trie_memcache_commit_size gauge +trie_memcache_commit_size 1869429 + +# TYPE trie_memcache_dirty_hit gauge +trie_memcache_dirty_hit 0 + +# TYPE trie_memcache_dirty_miss gauge +trie_memcache_dirty_miss 12356 + +# TYPE trie_memcache_dirty_read gauge +trie_memcache_dirty_read 0 + +# TYPE trie_memcache_dirty_write gauge +trie_memcache_dirty_write 1474037 + +# TYPE trie_memcache_flush_nodes gauge +trie_memcache_flush_nodes 0 + +# TYPE trie_memcache_flush_size gauge +trie_memcache_flush_size 0 + +# TYPE trie_memcache_gc_nodes gauge +trie_memcache_gc_nodes 0 + +# TYPE trie_memcache_gc_size gauge +trie_memcache_gc_size 0 + +# TYPE trie_prefetch_miner_account_dup gauge +trie_prefetch_miner_account_dup 0 + +# TYPE trie_prefetch_miner_account_load gauge +trie_prefetch_miner_account_load 0 + +# TYPE trie_prefetch_miner_account_skip gauge +trie_prefetch_miner_account_skip 0 + +# TYPE trie_prefetch_miner_account_waste gauge +trie_prefetch_miner_account_waste 0 + +# TYPE trie_prefetch_miner_deliverymiss gauge +trie_prefetch_miner_deliverymiss 1 + +# TYPE trie_prefetch_miner_storage_dup gauge +trie_prefetch_miner_storage_dup 0 + +# TYPE trie_prefetch_miner_storage_load gauge +trie_prefetch_miner_storage_load 0 + +# TYPE trie_prefetch_miner_storage_skip gauge +trie_prefetch_miner_storage_skip 0 + +# TYPE trie_prefetch_miner_storage_waste gauge +trie_prefetch_miner_storage_waste 0 + +# TYPE txpool_invalid gauge IMP + rate +txpool_invalid 0 + +# TYPE txpool_known gauge +txpool_known 0 + + +# TYPE txpool_overflowed gauge +txpool_overflowed 0 + +#--- +# TYPE txpool_pending gauge IMP +txpool_pending 0 + +# TYPE txpool_local gauge IMP +txpool_local 0 + +# TYPE txpool_queued gauge +txpool_queued 0 +#--- + +# TYPE txpool_pending_discard gauge IMP + rate +txpool_pending_discard 0 + +# TYPE txpool_pending_nofunds gauge IMP + rate +txpool_pending_nofunds 0 + +# TYPE txpool_pending_ratelimit gauge IMP + rate +txpool_pending_ratelimit 0 + +# TYPE txpool_pending_replace gauge IMP + rate +txpool_pending_replace 0 + + + +# TYPE txpool_queued_discard gauge IMP + rate +txpool_queued_discard 0 +ƒga +# TYPE txpool_queued_eviction gauge IMP + rate +txpool_queued_eviction 0 + +# TYPE txpool_queued_nofunds gauge IMP + rate +txpool_queued_nofunds 0 + +# TYPE txpool_queued_ratelimit gauge IMP + rate +txpool_queued_ratelimit 0 + +# TYPE txpool_queued_replace gauge IMP + rate +txpool_queued_replace 0 + +# TYPE txpool_reheap_count counter +txpool_reheap_count 0 + +# TYPE txpool_reheap summary +txpool_reheap {quantile="0.5"} 0 +txpool_reheap {quantile="0.75"} 0 +txpool_reheap {quantile="0.95"} 0 +txpool_reheap {quantile="0.99"} 0 +txpool_reheap {quantile="0.999"} 0 +txpool_reheap {quantile="0.9999"} 0 + +# TYPE txpool_slots gauge +txpool_slots 0 + +# TYPE txpool_underpriced gauge IMP + rate +txpool_underpriced 0 + +# TYPE txpool_valid gauge IMP + rate +txpool_valid 0 + +# TYPE vflux_server_capQueryNonZero gauge +vflux_server_capQueryNonZero 0 + +# TYPE vflux_server_capQueryZero gauge +vflux_server_capQueryZero 0 + +# TYPE vflux_server_clientEvent_activated gauge +vflux_server_clientEvent_activated 0 + +# TYPE vflux_server_clientEvent_connected gauge +vflux_server_clientEvent_connected 0 + +# TYPE vflux_server_clientEvent_deactivated gauge +vflux_server_clientEvent_deactivated 0 + +# TYPE vflux_server_clientEvent_disconnected gauge +vflux_server_clientEvent_disconnected 0 + +# TYPE vflux_server_totalConnected gauge +vflux_server_totalConnected 0 + |