status-go/metrics
Jakub Sokołowski 714eb416d2 metrics: fix p2p_peers_count metrics labels
Because `p2p.Server.Name()` function started returning an abbreviated
name of the node this broke the parsing of the name in order to fill in
the labels for `p2p_peers_count` metric, resulting in metrics like this:
```sh
 > curl -sS localhost:9090/metrics | grep '^p2p_peers_count'
p2p_peers_count{platform="v0.79.0",type="Statusd",version="unknown"} 3
```
Caused by value returned from `Name()` to look like this:
```
Statusd/v0.79.0/linu...
```
By using `Fullname()` we are sure we are pasing all the segments.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-08-24 11:07:39 +02:00
..
node metrics: fix p2p_peers_count metrics labels 2021-08-24 11:07:39 +02:00
README.md add README for metrics (#1906) 2020-03-17 22:09:21 +01:00
metrics.go

README.md

Description

This package configures Prometheus metrics for the node.

Technical Details

We use a trick to combine our metrics with Geth ones.

The NewMetricsServer() function in metrics.go calls our own Handler() function which in turn calls two handlers:

  • promhttp.HandlerFor() - Our own custom metrics from this package.
  • gethprom.Handler(reg) - Geth metrics defined in metrics

By calling both we can extend existing metrics.

Metrics

We add a few extra metrics on top of the normal Geth ones in node/metrics.go:

  • p2p_peers_count - Current numbers of peers split by name.
  • p2p_peers_absolute - Absolute number of connected peers.
  • p2p_peers_max - Maximum number of peers that can connect.

The p2p_peers_count metrics includes 3 labels:

  • type - Set to StatusIM for mobile and Statusd for daemon.
  • version - Version of status-go, always with the v prefix.
  • platform - Host platform, like android-arm64 or darwin-arm64

The way this data is acquired is using node names, which look like this:

StatusIM/vrelease-0.30.1-beta.2/android-arm/go1.11.5
Statusd/v0.34.0-beta.3/linux-amd64/go1.13.1
Geth/v1.9.9-stable-5aa131ca/linux-amd64/go1.13.3

This 4 segment format is standard for Ethereum as you can see on https://ethstats.net/.

We parse the names using labelsFromNodeName() from node/metrics.go.

Links