Go to file
Matt Johnstone c689d360c0
Merge pull request #74 from asymmetric-research/example-prometheus
added example prometheus setup
2024-11-14 11:13:14 +02:00
.github/workflows renamed solana_exporter -> solana-exporter 2024-10-31 22:35:14 +02:00
assets added example prometheus setup 2024-11-12 22:27:50 +02:00
cmd/solana-exporter registered solana_cluster_slots_by_epoch_total 2024-11-12 17:34:13 +02:00
pkg removed usage code (for later) 2024-11-08 14:57:14 +02:00
prometheus added example prometheus setup 2024-11-12 22:27:50 +02:00
.gitignore added example prometheus setup 2024-11-12 22:27:50 +02:00
.tool-versions
Dockerfile renamed solana_exporter -> solana-exporter 2024-10-31 22:35:14 +02:00
LICENSE
README.md added example prometheus setup 2024-11-12 22:27:50 +02:00
go.mod renamed solana_exporter -> solana-exporter 2024-10-31 22:35:14 +02:00
go.sum

README.md

Solana Exporter

Overview

The Solana Exporter exports basic monitoring data from a Solana node, using the Solana RPC API.

Example Usage

To use the Solana Exporter, simply run the program with the desired command line configuration, e.g.,

solana-exporter \
  -nodekey <VALIDATOR_IDENTITY_1> -nodekey <VALIDATOR_IDENTITY_2> \
  -balance-address <ADDRESS_1> -balance-address <ADDRESS_2> \
  -comprehensive-slot-tracking \
  -monitor-block-sizes

Solana Exporter Dashboard Sample

Installation

Build

Assuming you already have Go installed, the solana-exporter can be installed by cloning this repository and building the binary:

git clone https://github.com/asymmetric-research/solana-exporter.git
cd solana-exporter
CGO_ENABLED=0 go build ./cmd/solana-exporter

Configuration

Command Line Arguments

The exporter is configured via the following command line arguments:

Option Description Default
-balance-address Address to monitor SOL balances for, in addition to the identity and vote accounts of the provided nodekeys - can be set multiple times. N/A
-comprehensive-slot-tracking Set this flag to track solana_leader_slots_by_epoch for all validators. false
-http-timeout HTTP timeout to use, in seconds. 60
-light-mode Set this flag to enable light-mode. In light mode, only metrics unique to the node being queried are reported (i.e., metrics such as solana_inflation_rewards which are visible from any RPC node, are not reported). false
-listen-address Prometheus listen address. ":8080"
-monitor-block-sizes Set this flag to track block sizes (number of transactions) for the configured validators. false
-nodekey Solana nodekey (identity account) representing a validator to monitor - can set multiple times. N/A
-rpc-url Solana RPC URL (including protocol and path), e.g., "http://localhost:8899" or "https://api.mainnet-beta.solana.com" "http://localhost:8899"
-slot-pace This is the time (in seconds) between slot-watching metric collections 1

Notes on Configuration

  • -light-mode is incompatible with -nodekey, -balance-address, -monitor-block-sizes, and -comprehensive-slot-tracking, as these options control metrics which are not monitored in -light-mode.
  • WARNING:
    • Configuring -comprehensive-slot-tracking will lead to potentially thousands of new Prometheus metrics being created every epoch.
    • Configuring -monitor-block-sizes with many -nodekey's can potentially strain the node - every block produced by a configured -nodekey is fetched, and a typical block can be as large as 5MB.

Metrics

Overview

The table below describes all the metrics collected by the solana-exporter:

Metric Description Labels
solana_validator_active_stake Active stake per validator. votekey, nodekey
solana_validator_last_vote Last voted-on slot per validator. votekey, nodekey
solana_validator_root_slot Root slot per validator. votekey, nodekey
solana_validator_delinquent Whether a validator is delinquent. votekey, nodekey
solana_account_balance Solana account balances. address
solana_node_version Node version of solana.* version
solana_node_is_healthy Whether the node is healthy.* N/A
solana_node_num_slots_behind The number of slots that the node is behind the latest cluster confirmed slot.* N/A
solana_node_minimum_ledger_slot The lowest slot that the node has information about in its ledger.* N/A
solana_node_first_available_block The slot of the lowest confirmed block that has not been purged from the node's ledger.* N/A
solana_node_transactions_total Total number of transactions processed without error since genesis.* N/A
solana_node_slot_height The current slot number.* N/A
solana_node_epoch_number The current epoch number.* N/A
solana_node_epoch_first_slot Current epoch's first slot [inclusive].* N/A
solana_node_epoch_last_slot Current epoch's last slot [inclusive].* N/A
solana_validator_leader_slots_total Number of slots processed. status, nodekey
solana_validator_leader_slots_by_epoch_total Number of slots processed per validator. status, nodekey, epoch
solana_cluster_slots_by_epoch_total Number of slots processed by the cluster. status, epoch
solana_validator_inflation_rewards Inflation reward earned. votekey, epoch
solana_validator_fee_rewards Transaction fee rewards earned. nodekey, epoch
solana_validator_block_size Number of transactions per block. nodekey, transaction_type
solana_node_block_height The current block height of the node.* N/A

NOTE: An * in the description indicates that the metric is tracked in -light-mode.

Labels

The table below describes the various metric labels:

Label Description Options / Example
nodekey Validator identity account address. e.g, Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24
votekey Validator vote account address. e.g., CertusDeBmqN8ZawdkxK5kFGMwBXdudvWHYwtNgNhvLu
address Solana account address. e.g., Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24
version Solana node version. e.g., v1.18.23
status Whether a slot was skipped or valid valid, skipped
epoch Solana epoch number. e.g., 663
transaction_type General transaction type. vote, non_vote