There was another deadlock in the peer pool. Because we made the event handler asynchrnous, another deadlock popped up, as the loop locks the global peerpool lock before processing events. But the handlers also take the global look, effectively resulting in the same situation we had before, i.e the loop is not running. THE LOOP MUST BE RUNNING AT ALL TIMES OTHERWISE THE SERVER HANGS. |
||
---|---|---|
.. | ||
node | ||
README.md | ||
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 inmetrics
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 toStatusIM
for mobile andStatusd
for daemon.version
- Version ofstatus-go
, always with thev
prefix.platform
- Host platform, likeandroid-arm64
ordarwin-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
.