Skip to content

Metrics

Overview

Firedancer maintains many internal performance counters for use by developers and monitoring tools, and exposes them via. a Prometheus HTTP endpoint:

toml
[tiles.metric]
    prometheus_listen_port = 7999
sh
$ curl http://localhost:7999/metrics
# HELP tile_pid The process ID of the tile.
# TYPE tile_pid gauge
tile_pid{kind="net",kind_id="0"} 1527373
tile_pid{kind="quic",kind_id="0"} 1527370
tile_pid{kind="quic",kind_id="1"} 1527371
tile_pid{kind="verify",kind_id="0"} 1527369
tile_pid{kind="verify",kind_id="1"} 1527374
tile_pid{kind="dedup",kind_id="0"} 1527365
...

WARNING

Metrics are currently only provided for developer and diagnostic use, and the endpoint or data provided may break or change in incompatible ways at any time.

There are three metric types reported by Firedancer, following the Prometheus data model:

  • counter — A cumulative metric repesenting a monotonically increasing counter.
  • gauge — A single numerical value that can go arbitrarily up or down.
  • histogram — Samples observations like packet sizes and counts them in buckets.

There are some metrics reported for links, which are data queues between tiles. Links are single-producer multi-consumer, so the same link (identified by a link_kind and link_kind_id) will potentially have multiple consumers reporting the metric, one per consumer (identified by a kind and kind_id).

sh
# HELP link_published_size_bytes The total number of bytes read by the link consumer.
# TYPE link_published_size_bytes counter
link_published_size_bytes{kind="net",kind_id="0",link_kind="quic_net",link_kind_id="0"} 0
link_published_size_bytes{kind="net",kind_id="0",link_kind="shred_net",link_kind_id="0"} 0

These link related metrics have four labels, which are to identify the link the metric is for:

  • kind — The name of the tile consuming from the link.
  • kind_id — The tile index of the tile which is consuming from the link.
  • link_kind — The name of the link being consumed.
  • link_kind_id — The link index of the link which is being consumed.
MetricTypeDescription
link_​slow_​countcounterThe number of times the consumer was detected as rate limiting consumer by the producer.
link_​consumed_​countcounterThe number of times the link reader has consumed a fragment.
link_​consumed_​size_​bytescounterThe total number of bytes read by the link consumer.
link_​filtered_​countcounterThe number of fragments that were filtered and not consumed.
link_​filtered_​size_​bytescounterThe total number of bytes read by the link consumer that were filtered.
link_​overrun_​polling_​countcounterThe number of times the link has been overrun while polling.
link_​overrun_​polling_​frag_​countcounterThe number of fragments the link has not processed because it was overrun while polling.
link_​overrun_​reading_​countcounterThe number of input overruns detected while reading metadata by the consumer.
link_​overrun_​reading_​frag_​countcounterThe number of fragments the link has not processed because it was overrun while reading.

All Tiles

Most performance counters are local to a tile and are not aggregated. For example if you have two QUIC tiles (two CPU cores assigned to serving incoming QUIC connections) each QUIC counter will appear twice:

sh
# HELP quic_connections_created The total number of connections that have been created.
# TYPE quic_connections_created counter
quic_connections_created{kind="quic",kind_id="0"} 42145
quic_connections_created{kind="quic",kind_id="1"} 38268

# HELP quic_connections_aborted Number of connections aborted.
# TYPE quic_connections_aborted counter
quic_connections_aborted{kind="quic",kind_id="0"} 14
quic_connections_aborted{kind="quic",kind_id="1"} 23

All tile related metrics have just two labels, and these are to identify which tile (and which tile index, for tiles of the same kind) the metric is for:

  • kind — The tile name the metric is being reported for.
  • kind_id — The tile index of the tile which is reporting the metric.
MetricTypeDescription
tile_​pidgaugeThe process ID of the tile.
tile_​tidgaugeThe thread ID of the tile. Always the same as the Pid in production, but might be different in development.
tile_​context_​switch_​involuntary_​countcounterThe number of involuntary context switches.
tile_​context_​switch_​voluntary_​countcounterThe number of voluntary context switches.
tile_​statusgaugeThe current status of the tile. 0 is booting, 1 is running.
tile_​heartbeatgaugeThe last UNIX timestamp in nanoseconds that the tile heartbeated.
tile_​in_​backpressuregaugeWhether the tile is currently backpressured or not, either 1 or 0.
tile_​backpressure_​countcounterNumber of times the times the tile has had to wait for one of more consumers to catch up to resume publishing.
tile_​regime_​duration_​nanos_​caught_​up_​housekeepingcounterMutually exclusive and exhaustive duration of time the tile spent in each of the regimes. (Caught up + Housekeeping)
tile_​regime_​duration_​nanos_​processing_​housekeepingcounterMutually exclusive and exhaustive duration of time the tile spent in each of the regimes. (Processing + Housekeeping)
tile_​regime_​duration_​nanos_​backpressure_​housekeepingcounterMutually exclusive and exhaustive duration of time the tile spent in each of the regimes. (Backpressure + Housekeeping)
tile_​regime_​duration_​nanos_​caught_​up_​prefragcounterMutually exclusive and exhaustive duration of time the tile spent in each of the regimes. (Caught up + Prefrag)
tile_​regime_​duration_​nanos_​processing_​prefragcounterMutually exclusive and exhaustive duration of time the tile spent in each of the regimes. (Processing + Prefrag)
tile_​regime_​duration_​nanos_​backpressure_​prefragcounterMutually exclusive and exhaustive duration of time the tile spent in each of the regimes. (Backpressure + Prefrag)
tile_​regime_​duration_​nanos_​caught_​up_​postfragcounterMutually exclusive and exhaustive duration of time the tile spent in each of the regimes. (Caught up + Postfrag)
tile_​regime_​duration_​nanos_​processing_​postfragcounterMutually exclusive and exhaustive duration of time the tile spent in each of the regimes. (Processing + Postfrag)

Net Tile

MetricTypeDescription
net_​received_​packetscounterNumber of IP packets received.
net_​received_​bytescounterTotal bytes received (including IP, UDP headers).
net_​sent_​packetscounterNumber of IP packets sent.
net_​sent_​bytescounterTotal bytes sent (including IP, UDP headers).
net_​xdp_​rx_​dropped_​ring_​fullcounterNumber of packets dropped because the RX completion queue was empty. This is only reported for net tile 0, since the measurement is across all RX queues.
net_​xdp_​rx_​dropped_​othercounterNumber of packets dropped for other reasons. This is only reported for net tile 0, since the measurement is across all RX queues.
net_​tx_​droppedcounterNumber of packets dropped because the TX submission queue was empty. This is reported for all net tiles.

Quic Tile

MetricTypeDescription
quic_​txns_​overruncounterCount of txns overrun before reassembled (too small txn_reassembly_count).
quic_​txn_​reasms_​startedcounterCount of fragmented txn receive ops started.
quic_​txn_​reasms_​activegaugeNumber of fragmented txn receive ops currently active.
quic_​frags_​okcounterCount of txn frags received
quic_​frags_​gapcounterCount of txn frags dropped due to data gap
quic_​frags_​dupcounterCount of txn frags dropped due to dup (stream already completed)
quic_​txns_​received_​udpcounterCount of txns received via TPU. (TPU/UDP)
quic_​txns_​received_​quic_​fastcounterCount of txns received via TPU. (TPU/QUIC unfragmented)
quic_​txns_​received_​quic_​fragcounterCount of txns received via TPU. (TPU/QUIC fragmented)
quic_​txns_​abandonedcounterCount of txns abandoned because a conn was lost.
quic_​quic_​packet_​too_​smallcounterCount of packets received on the QUIC port that were too small to be a valid IP packet.
quic_​quic_​txn_​too_​smallcounterCount of txns received via QUIC dropped because they were too small.
quic_​quic_​txn_​too_​largecounterCount of txns received via QUIC dropped because they were too large.
quic_​non_​quic_​packet_​too_​smallcounterCount of packets received on the non-QUIC port that were too small to be a valid IP packet.
quic_​non_​quic_​packet_​too_​largecounterCount of packets received on the non-QUIC port that were too large to be a valid transaction.
quic_​received_​packetscounterNumber of IP packets received.
quic_​received_​bytescounterTotal bytes received (including IP, UDP, QUIC headers).
quic_​sent_​packetscounterNumber of IP packets sent.
quic_​sent_​bytescounterTotal bytes sent (including IP, UDP, QUIC headers).
quic_​connections_​activegaugeThe number of currently active QUIC connections.
quic_​connections_​createdcounterThe total number of connections that have been created.
quic_​connections_​closedcounterNumber of connections gracefully closed.
quic_​connections_​abortedcounterNumber of connections aborted.
quic_​connections_​timed_​outcounterNumber of connections timed out.
quic_​connections_​retriedcounterNumber of connections established with retry.
quic_​connection_​error_​no_​slotscounterNumber of connections that failed to create due to lack of slots.
quic_​connection_​error_​retry_​failcounterNumber of connections that failed during retry (e.g. invalid token).
quic_​pkt_​crypto_​failedcounterNumber of packets that failed decryption.
quic_​pkt_​no_​conncounterNumber of packets with an unknown connection ID.
quic_​pkt_​tx_​alloc_​failcounterNumber of packets failed to send because of metadata alloc fail.
quic_​handshakes_​createdcounterNumber of handshake flows created.
quic_​handshake_​error_​alloc_​failcounterNumber of handshakes dropped due to alloc fail.
quic_​stream_​received_​eventscounterNumber of stream RX events.
quic_​stream_​received_​bytescounterTotal stream payload bytes received.
quic_​received_​frames_​unknowncounterNumber of QUIC frames received. (Unknown frame type)
quic_​received_​frames_​ackcounterNumber of QUIC frames received. (ACK frame)
quic_​received_​frames_​reset_​streamcounterNumber of QUIC frames received. (RESET_STREAM frame)
quic_​received_​frames_​stop_​sendingcounterNumber of QUIC frames received. (STOP_SENDING frame)
quic_​received_​frames_​cryptocounterNumber of QUIC frames received. (CRYPTO frame)
quic_​received_​frames_​new_​tokencounterNumber of QUIC frames received. (NEW_TOKEN frame)
quic_​received_​frames_​streamcounterNumber of QUIC frames received. (STREAM frame)
quic_​received_​frames_​max_​datacounterNumber of QUIC frames received. (MAX_DATA frame)
quic_​received_​frames_​max_​stream_​datacounterNumber of QUIC frames received. (MAX_STREAM_DATA frame)
quic_​received_​frames_​max_​streamscounterNumber of QUIC frames received. (MAX_STREAMS frame)
quic_​received_​frames_​data_​blockedcounterNumber of QUIC frames received. (DATA_BLOCKED frame)
quic_​received_​frames_​stream_​data_​blockedcounterNumber of QUIC frames received. (STREAM_DATA_BLOCKED frame)
quic_​received_​frames_​streams_​blockedcounterNumber of QUIC frames received. (STREAMS_BLOCKED(bidi) frame)
quic_​received_​frames_​new_​conn_​idcounterNumber of QUIC frames received. (NEW_CONN_ID frame)
quic_​received_​frames_​retire_​conn_​idcounterNumber of QUIC frames received. (RETIRE_CONN_ID frame)
quic_​received_​frames_​path_​challengecounterNumber of QUIC frames received. (PATH_CHALLENGE frame)
quic_​received_​frames_​path_​responsecounterNumber of QUIC frames received. (PATH_RESPONSE frame)
quic_​received_​frames_​conn_​close_​quiccounterNumber of QUIC frames received. (CONN_CLOSE(transport) frame)
quic_​received_​frames_​conn_​close_​appcounterNumber of QUIC frames received. (CONN_CLOSE(app) frame)
quic_​received_​frames_​handshake_​donecounterNumber of QUIC frames received. (HANDSHAKE_DONE frame)
quic_​received_​frames_​pingcounterNumber of QUIC frames received. (PING frame)
quic_​received_​frames_​paddingcounterNumber of QUIC frames received. (PADDING frame)
quic_​ack_​tx_​noopcounterACK events (non-ACK-eliciting packet)
quic_​ack_​tx_​newcounterACK events (new ACK range)
quic_​ack_​tx_​mergedcounterACK events (merged into existing ACK range)
quic_​ack_​tx_​dropcounterACK events (out of buffers)
quic_​ack_​tx_​cancelcounterACK events (ACK suppressed by handler)
quic_​service_​duration_​secondshistogramDuration spent in service
quic_​receive_​duration_​secondshistogramDuration spent receiving packets
quic_​frame_​fail_​parsecounterNumber of QUIC frames failed to parse.

Verify Tile

MetricTypeDescription
verify_​transaction_​parse_​failurecounterCount of transactions that failed to parse
verify_​transaction_​dedup_​failurecounterCount of transactions that failed to deduplicate in the verify stage
verify_​transaction_​verify_​failurecounterCount of transactions that failed to deduplicate in the verify stage

Dedup Tile

MetricTypeDescription
dedup_​transaction_​dedup_​failurecounterCount of transactions that failed to deduplicate in the dedup stage
dedup_​gossiped_​votes_​receivedcounterCount of simple vote transactions received over gossip instead of via the normal TPU path

Resolv Tile

MetricTypeDescription
resolv_​no_​bank_​dropcounterCount of transactions dropped because the bank was not available
resolv_​lut_​resolved_​invalid_​lookup_​indexcounterCount of address lookup tables resolved (The transaction referenced an index in a LUT that didn't exist)
resolv_​lut_​resolved_​account_​uninitializedcounterCount of address lookup tables resolved (The account referenced as a LUT hasn't been initialized)
resolv_​lut_​resolved_​invalid_​account_​datacounterCount of address lookup tables resolved (The account referenced as a LUT couldn't be parsed)
resolv_​lut_​resolved_​invalid_​account_​ownercounterCount of address lookup tables resolved (The account referenced as a LUT wasn't owned by the ALUT program ID)
resolv_​lut_​resolved_​account_​not_​foundcounterCount of address lookup tables resolved (The account referenced as a LUT couldn't be found)
resolv_​lut_​resolved_​successcounterCount of address lookup tables resolved (Resolved successfully)
resolv_​blockhash_​expiredcounterCount of transactions that failed to resolve because the blockhash was expired
resolv_​blockhash_​unknowncounterCount of transactions with an unknown blockhash. These may be very recent, very old, nonces, or bogus.

Pack Tile

MetricTypeDescription
pack_​schedule_​microblock_​duration_​secondshistogramDuration of scheduling one microblock
pack_​no_​sched_​microblock_​duration_​secondshistogramDuration of discovering that there are no schedulable transactions
pack_​insert_​transaction_​duration_​secondshistogramDuration of inserting one transaction into the pool of available transactions
pack_​complete_​microblock_​duration_​secondshistogramDuration of the computation associated with marking one microblock as complete
pack_​total_​transactions_​per_​microblock_​counthistogramCount of transactions in a scheduled microblock, including both votes and non-votes
pack_​votes_​per_​microblock_​counthistogramCount of simple vote transactions in a scheduled microblock
pack_​normal_​transaction_​receivedcounterCount of transactions received via the normal TPU path
pack_​transaction_​inserted_​bundle_​blacklistcounterResult of inserting a transaction into the pack object (Transaction uses an account on the bundle blacklist)
pack_​transaction_​inserted_​write_​sysvarcounterResult of inserting a transaction into the pack object (Transaction tries to write to a sysvar)
pack_​transaction_​inserted_​estimation_​failcounterResult of inserting a transaction into the pack object (Estimating compute cost and/or fee failed)
pack_​transaction_​inserted_​duplicate_​accountcounterResult of inserting a transaction into the pack object (Transaction included an account address twice)
pack_​transaction_​inserted_​too_​many_​accountscounterResult of inserting a transaction into the pack object (Transaction tried to load too many accounts)
pack_​transaction_​inserted_​too_​largecounterResult of inserting a transaction into the pack object (Transaction requests too many CUs)
pack_​transaction_​inserted_​expiredcounterResult of inserting a transaction into the pack object (Transaction already expired)
pack_​transaction_​inserted_​addr_​lutcounterResult of inserting a transaction into the pack object (Transaction loaded accounts from a lookup table)
pack_​transaction_​inserted_​unaffordablecounterResult of inserting a transaction into the pack object (Fee payer's balance below transaction fee)
pack_​transaction_​inserted_​duplicatecounterResult of inserting a transaction into the pack object (Pack aware of transaction with same signature)
pack_​transaction_​inserted_​prioritycounterResult of inserting a transaction into the pack object (Transaction's fee was too low given its compute unit requirement and other competing transactions)
pack_​transaction_​inserted_​nonvote_​addcounterResult of inserting a transaction into the pack object (Transaction that was not a simple vote added to pending transactions)
pack_​transaction_​inserted_​vote_​addcounterResult of inserting a transaction into the pack object (Simple vote transaction was added to pending transactions)
pack_​transaction_​inserted_​nonvote_​replacecounterResult of inserting a transaction into the pack object (Transaction that was not a simple vote replaced a lower priority transaction)
pack_​transaction_​inserted_​vote_​replacecounterResult of inserting a transaction into the pack object (Simple vote transaction replaced a lower priority transaction)
pack_​metric_​timing_​no_​txn_​no_​bank_​no_​leader_​no_​microblockcounterTime in nanos spent in each state (Pack had no transactions available, and wasn't leader)
pack_​metric_​timing_​txn_​no_​bank_​no_​leader_​no_​microblockcounterTime in nanos spent in each state (Pack had transactions available, but wasn't leader or had hit a limit)
pack_​metric_​timing_​no_​txn_​bank_​no_​leader_​no_​microblockcounterTime in nanos spent in each state (Pack had no transactions available, had banks but wasn't leader?)
pack_​metric_​timing_​txn_​bank_​no_​leader_​no_​microblockcounterTime in nanos spent in each state (Pack had transactions available, had banks but wasn't leader?)
pack_​metric_​timing_​no_​txn_​no_​bank_​leader_​no_​microblockcounterTime in nanos spent in each state (Pack had no transactions available, and was leader but had no available banks)
pack_​metric_​timing_​txn_​no_​bank_​leader_​no_​microblockcounterTime in nanos spent in each state (Pack had transactions available, was leader, but had no available banks)
pack_​metric_​timing_​no_​txn_​bank_​leader_​no_​microblockcounterTime in nanos spent in each state (Pack had available banks but no transactions)
pack_​metric_​timing_​txn_​bank_​leader_​no_​microblockcounterTime in nanos spent in each state (Pack had banks and transactions available but couldn't schedule anything non-conflicting)
pack_​metric_​timing_​no_​txn_​no_​bank_​no_​leader_​microblockcounterTime in nanos spent in each state (Pack scheduled a non-empty microblock while not leader?)
pack_​metric_​timing_​txn_​no_​bank_​no_​leader_​microblockcounterTime in nanos spent in each state (Pack scheduled a non-empty microblock while not leader?)
pack_​metric_​timing_​no_​txn_​bank_​no_​leader_​microblockcounterTime in nanos spent in each state (Pack scheduled a non-empty microblock while not leader?)
pack_​metric_​timing_​txn_​bank_​no_​leader_​microblockcounterTime in nanos spent in each state (Pack scheduled a non-empty microblock while not leader?)
pack_​metric_​timing_​no_​txn_​no_​bank_​leader_​microblockcounterTime in nanos spent in each state (Pack scheduled a non-empty microblock but all banks were busy?)
pack_​metric_​timing_​txn_​no_​bank_​leader_​microblockcounterTime in nanos spent in each state (Pack scheduled a non-empty microblock but all banks were busy?)
pack_​metric_​timing_​no_​txn_​bank_​leader_​microblockcounterTime in nanos spent in each state (Pack scheduled a non-empty microblock and now has no transactions)
pack_​metric_​timing_​txn_​bank_​leader_​microblockcounterTime in nanos spent in each state (Pack scheduled a non-empty microblock)
pack_​transaction_​dropped_​from_​extracounterTransactions dropped from the extra transaction storage because it was full
pack_​transaction_​inserted_​to_​extracounterTransactions inserted into the extra transaction storage because pack's primary storage was full
pack_​transaction_​inserted_​from_​extracounterTransactions pulled from the extra transaction storage and inserted into pack's primary storage
pack_​transaction_​expiredcounterTransactions deleted from pack because their TTL expired
pack_​available_​transactionsgaugeThe total number of pending transactions in pack's pool that are available to be scheduled
pack_​available_​vote_​transactionsgaugeThe number of pending simple vote transactions in pack's pool that are available to be scheduled
pack_​pending_​transactions_​heap_​sizegaugeThe maximum number of pending transactions that pack can consider. This value is fixed at Firedancer startup but is a useful reference for AvailableTransactions and AvailableVoteTransactions.
pack_​conflicting_​transactionsgaugeThe number of available transactions that are temporarily not being considered due to account lock conflicts with many higher paying transactions
pack_​smallest_​pending_​transactiongaugeA lower bound on the smallest non-vote transaction (in cost units) that is immediately available for scheduling
pack_​microblock_​per_​block_​limitcounterThe number of times pack did not pack a microblock because the limit on microblocks/block had been reached
pack_​data_​per_​block_​limitcounterThe number of times pack did not pack a microblock because it reached reached the data per block limit at the start of trying to schedule a microblock
pack_​transaction_​schedule_​takencounterResult of trying to consider a transaction for scheduling (Pack included the transaction in the microblock)
pack_​transaction_​schedule_​cu_​limitcounterResult of trying to consider a transaction for scheduling (Pack skipped the transaction because it would have exceeded the block CU limit)
pack_​transaction_​schedule_​fast_​pathcounterResult of trying to consider a transaction for scheduling (Pack skipped the transaction because of account conflicts using the fast bitvector check)
pack_​transaction_​schedule_​byte_​limitcounterResult of trying to consider a transaction for scheduling (Pack skipped the transaction because it would have exceeded the block data size limit)
pack_​transaction_​schedule_​write_​costcounterResult of trying to consider a transaction for scheduling (Pack skipped the transaction because it would have caused a writable account to exceed the per-account block write cost limit)
pack_​transaction_​schedule_​slow_​pathcounterResult of trying to consider a transaction for scheduling (Pack skipped the transaction because of account conflicts using the full slow check)
pack_​cus_​consumed_​in_​blockgaugeThe number of cost units consumed in the current block, or 0 if pack is not currently packing a block
pack_​cus_​scheduledhistogramThe number of cost units scheduled for each block pack produced. This can be higher than the block limit because of returned CUs.
pack_​cus_​rebatedhistogramThe number of compute units rebated for each block pack produced. Compute units are rebated when a transaction fails prior to execution or requests more compute units than it uses.
pack_​cus_​nethistogramThe net number of cost units (scheduled - rebated) in each block pack produced.
pack_​delete_​missedcounterCount of attempts to delete a transaction that wasn't found
pack_​delete_​hitcounterCount of attempts to delete a transaction that was found and deleted

Bank Tile

MetricTypeDescription
bank_​transaction_​sanitize_​failurecounterNumber of transactions that failed to sanitize.
bank_​transaction_​not_​executed_​failurecounterNumber of transactions that did not execute. This is different than transactions which fail to execute, which make it onto the chain.
bank_​precompile_​verify_​failurecounterNumber of transactions that failed precompile verification and thus will not execute.
bank_​slot_​acquire_​successcounterResult of acquiring a slot. (Success)
bank_​slot_​acquire_​too_​highcounterResult of acquiring a slot. (Too high)
bank_​slot_​acquire_​too_​lowcounterResult of acquiring a slot. (Too low)
bank_​transaction_​load_​address_​tables_​successcounterResult of loading address lookup tables for a transaction. If there are multiple errors for the transaction, only the first one is reported. (Success)
bank_​transaction_​load_​address_​tables_​slot_​hashes_​sysvar_​not_​foundcounterResult of loading address lookup tables for a transaction. If there are multiple errors for the transaction, only the first one is reported. (The slot hashes syvar could not be found.)
bank_​transaction_​load_​address_​tables_​account_​not_​foundcounterResult of loading address lookup tables for a transaction. If there are multiple errors for the transaction, only the first one is reported. (The account storing the address lookup table was deactivated or could not be found.)
bank_​transaction_​load_​address_​tables_​invalid_​account_​ownercounterResult of loading address lookup tables for a transaction. If there are multiple errors for the transaction, only the first one is reported. (The account that owns the referenced lookup table is not the address lookup table program.)
bank_​transaction_​load_​address_​tables_​invalid_​account_​datacounterResult of loading address lookup tables for a transaction. If there are multiple errors for the transaction, only the first one is reported. (The data for the referenced address lookup table is malformed.)
bank_​transaction_​load_​address_​tables_​invalid_​indexcounterResult of loading address lookup tables for a transaction. If there are multiple errors for the transaction, only the first one is reported. (The referenced index in the address lookup table does not exist.)
bank_​transaction_​load_​successcounterResult of loading a transaction. (Success)
bank_​transaction_​load_​account_​in_​usecounterResult of loading a transaction. (An account is already being processed in another transaction in a way that does not support parallelism.)
bank_​transaction_​load_​account_​loaded_​twicecounterResult of loading a transaction. (A Pubkey appears twice in the transaction's account_keys. Instructions can reference Pubkeys more than once but the message must contain a list with no duplicate keys.)
bank_​transaction_​load_​account_​not_​foundcounterResult of loading a transaction. (Attempt to debit an account but found no record of a prior credit.)
bank_​transaction_​load_​program_​account_​not_​foundcounterResult of loading a transaction. (Attempt to load a program that does not exist.)
bank_​transaction_​load_​insufficient_​funds_​for_​feecounterResult of loading a transaction. (The fee payer Pubkey does not have sufficient balance to pay the fee to schedule the transaction.)
bank_​transaction_​load_​invalid_​account_​for_​feecounterResult of loading a transaction. (This account may not be used to pay transaction fees.)
bank_​transaction_​load_​already_​processedcounterResult of loading a transaction. (The bank has seen this transaction before. This can occur under normal operation when a UDP packet is duplicated, as a user error from a client not updating its recent_blockhash, or as a double-spend attack.)
bank_​transaction_​load_​blockhash_​not_​foundcounterResult of loading a transaction. (The bank has not seen the given recent_blockhash or the transaction is too old and the recent_blockhash has been discarded.)
bank_​transaction_​load_​instruction_​errorcounterResult of loading a transaction. (An error occurred while processing an instruction.)
bank_​transaction_​load_​call_​chain_​too_​deepcounterResult of loading a transaction. (Loader call chain is too deep.)
bank_​transaction_​load_​missing_​signature_​for_​feecounterResult of loading a transaction. (Transaction requires a fee but has no signature present.)
bank_​transaction_​load_​invalid_​account_​indexcounterResult of loading a transaction. (Transaction contains an invalid account reference.)
bank_​transaction_​load_​signature_​failurecounterResult of loading a transaction. (Transaction did not pass signature verification.)
bank_​transaction_​load_​invalid_​program_​for_​executioncounterResult of loading a transaction. (This program may not be used for executing instructions.)
bank_​transaction_​load_​sanitize_​failurecounterResult of loading a transaction. (Transaction failed to sanitize accounts offsets correctly implies that account locks are not taken for this TX, and should not be unlocked.)
bank_​transaction_​load_​cluster_​maintenancecounterResult of loading a transaction. (Transactions are currently disabled due to cluster maintenance.)
bank_​transaction_​load_​account_​borrow_​outstandingcounterResult of loading a transaction. (Transaction processing left an account with an outstanding borrowed reference.)
bank_​transaction_​load_​would_​exceed_​max_​block_​cost_​limitcounterResult of loading a transaction. (Transaction would exceed max Block Cost Limit.)
bank_​transaction_​load_​unsupported_​versioncounterResult of loading a transaction. (Transaction version is unsupported.)
bank_​transaction_​load_​invalid_​writable_​accountcounterResult of loading a transaction. (Transaction loads a writable account that cannot be written.)
bank_​transaction_​load_​would_​exceed_​max_​account_​cost_​limitcounterResult of loading a transaction. (Transaction would exceed max account limit within the block.)
bank_​transaction_​load_​would_​exceed_​account_​data_​block_​limitcounterResult of loading a transaction. (Transaction would exceed account data limit within the block.)
bank_​transaction_​load_​too_​many_​account_​lockscounterResult of loading a transaction. (Transaction locked too many accounts.)
bank_​transaction_​load_​address_​lookup_​table_​not_​foundcounterResult of loading a transaction. (Address lookup table not found.)
bank_​transaction_​load_​invalid_​address_​lookup_​table_​ownercounterResult of loading a transaction. (Attempted to lookup addresses from an account owned by the wrong program.)
bank_​transaction_​load_​invalid_​address_​lookup_​table_​datacounterResult of loading a transaction. (Attempted to lookup addresses from an invalid account.)
bank_​transaction_​load_​invalid_​address_​lookup_​table_​indexcounterResult of loading a transaction. (Address table lookup uses an invalid index.)
bank_​transaction_​load_​invalid_​rent_​paying_​accountcounterResult of loading a transaction. (Transaction leaves an account with a lower balance than rent-exempt minimum.)
bank_​transaction_​load_​would_​exceed_​max_​vote_​cost_​limitcounterResult of loading a transaction. (Transaction would exceed max Vote Cost Limit.)
bank_​transaction_​load_​would_​exceed_​account_​data_​total_​limitcounterResult of loading a transaction. (Transaction would exceed total account data limit.)
bank_​transaction_​load_​duplicate_​instructioncounterResult of loading a transaction. (Transaction contains a duplicate instruction that is not allowed.)
bank_​transaction_​load_​insufficient_​funds_​for_​rentcounterResult of loading a transaction. (Transaction results in an account with insufficient funds for rent.)
bank_​transaction_​load_​max_​loaded_​accounts_​data_​size_​exceededcounterResult of loading a transaction. (Transaction exceeded max loaded accounts data size cap.)
bank_​transaction_​load_​invalid_​loaded_​accounts_​data_​size_​limitcounterResult of loading a transaction. (LoadedAccountsDataSizeLimit set for transaction must be greater than 0.)
bank_​transaction_​load_​resanitization_​neededcounterResult of loading a transaction. (Sanitized transaction differed before/after feature activiation. Needs to be resanitized.)
bank_​transaction_​load_​program_​execution_​temporarily_​restrictedcounterResult of loading a transaction. (Program execution is temporarily restricted on an account.)
bank_​transaction_​load_​unbalanced_​transactioncounterResult of loading a transaction. (The total balance before the transaction does not equal the total balance after the transaction.)
bank_​transaction_​load_​program_​cache_​hit_​max_​limitcounterResult of loading a transaction. (The total program cache size hit the maximum allowed limit.)
bank_​transaction_​executing_​successcounterResult of executing a transaction. Could be a failure or success. (Success)
bank_​transaction_​executing_​account_​in_​usecounterResult of executing a transaction. Could be a failure or success. (An account is already being processed in another transaction in a way that does not support parallelism.)
bank_​transaction_​executing_​account_​loaded_​twicecounterResult of executing a transaction. Could be a failure or success. (A Pubkey appears twice in the transaction's account_keys. Instructions can reference Pubkeys more than once but the message must contain a list with no duplicate keys.)
bank_​transaction_​executing_​account_​not_​foundcounterResult of executing a transaction. Could be a failure or success. (Attempt to debit an account but found no record of a prior credit.)
bank_​transaction_​executing_​program_​account_​not_​foundcounterResult of executing a transaction. Could be a failure or success. (Attempt to load a program that does not exist.)
bank_​transaction_​executing_​insufficient_​funds_​for_​feecounterResult of executing a transaction. Could be a failure or success. (The fee payer Pubkey does not have sufficient balance to pay the fee to schedule the transaction.)
bank_​transaction_​executing_​invalid_​account_​for_​feecounterResult of executing a transaction. Could be a failure or success. (This account may not be used to pay transaction fees.)
bank_​transaction_​executing_​already_​processedcounterResult of executing a transaction. Could be a failure or success. (The bank has seen this transaction before. This can occur under normal operation when a UDP packet is duplicated, as a user error from a client not updating its recent_blockhash, or as a double-spend attack.)
bank_​transaction_​executing_​blockhash_​not_​foundcounterResult of executing a transaction. Could be a failure or success. (The bank has not seen the given recent_blockhash or the transaction is too old and the recent_blockhash has been discarded.)
bank_​transaction_​executing_​instruction_​errorcounterResult of executing a transaction. Could be a failure or success. (An error occurred while processing an instruction.)
bank_​transaction_​executing_​call_​chain_​too_​deepcounterResult of executing a transaction. Could be a failure or success. (Loader call chain is too deep.)
bank_​transaction_​executing_​missing_​signature_​for_​feecounterResult of executing a transaction. Could be a failure or success. (Transaction requires a fee but has no signature present.)
bank_​transaction_​executing_​invalid_​account_​indexcounterResult of executing a transaction. Could be a failure or success. (Transaction contains an invalid account reference.)
bank_​transaction_​executing_​signature_​failurecounterResult of executing a transaction. Could be a failure or success. (Transaction did not pass signature verification.)
bank_​transaction_​executing_​invalid_​program_​for_​executioncounterResult of executing a transaction. Could be a failure or success. (This program may not be used for executing instructions.)
bank_​transaction_​executing_​sanitize_​failurecounterResult of executing a transaction. Could be a failure or success. (Transaction failed to sanitize accounts offsets correctly implies that account locks are not taken for this TX, and should not be unlocked.)
bank_​transaction_​executing_​cluster_​maintenancecounterResult of executing a transaction. Could be a failure or success. (Transactions are currently disabled due to cluster maintenance.)
bank_​transaction_​executing_​account_​borrow_​outstandingcounterResult of executing a transaction. Could be a failure or success. (Transaction processing left an account with an outstanding borrowed reference.)
bank_​transaction_​executing_​would_​exceed_​max_​block_​cost_​limitcounterResult of executing a transaction. Could be a failure or success. (Transaction would exceed max Block Cost Limit.)
bank_​transaction_​executing_​unsupported_​versioncounterResult of executing a transaction. Could be a failure or success. (Transaction version is unsupported.)
bank_​transaction_​executing_​invalid_​writable_​accountcounterResult of executing a transaction. Could be a failure or success. (Transaction loads a writable account that cannot be written.)
bank_​transaction_​executing_​would_​exceed_​max_​account_​cost_​limitcounterResult of executing a transaction. Could be a failure or success. (Transaction would exceed max account limit within the block.)
bank_​transaction_​executing_​would_​exceed_​account_​data_​block_​limitcounterResult of executing a transaction. Could be a failure or success. (Transaction would exceed account data limit within the block.)
bank_​transaction_​executing_​too_​many_​account_​lockscounterResult of executing a transaction. Could be a failure or success. (Transaction locked too many accounts.)
bank_​transaction_​executing_​address_​lookup_​table_​not_​foundcounterResult of executing a transaction. Could be a failure or success. (Address lookup table not found.)
bank_​transaction_​executing_​invalid_​address_​lookup_​table_​ownercounterResult of executing a transaction. Could be a failure or success. (Attempted to lookup addresses from an account owned by the wrong program.)
bank_​transaction_​executing_​invalid_​address_​lookup_​table_​datacounterResult of executing a transaction. Could be a failure or success. (Attempted to lookup addresses from an invalid account.)
bank_​transaction_​executing_​invalid_​address_​lookup_​table_​indexcounterResult of executing a transaction. Could be a failure or success. (Address table lookup uses an invalid index.)
bank_​transaction_​executing_​invalid_​rent_​paying_​accountcounterResult of executing a transaction. Could be a failure or success. (Transaction leaves an account with a lower balance than rent-exempt minimum.)
bank_​transaction_​executing_​would_​exceed_​max_​vote_​cost_​limitcounterResult of executing a transaction. Could be a failure or success. (Transaction would exceed max Vote Cost Limit.)
bank_​transaction_​executing_​would_​exceed_​account_​data_​total_​limitcounterResult of executing a transaction. Could be a failure or success. (Transaction would exceed total account data limit.)
bank_​transaction_​executing_​duplicate_​instructioncounterResult of executing a transaction. Could be a failure or success. (Transaction contains a duplicate instruction that is not allowed.)
bank_​transaction_​executing_​insufficient_​funds_​for_​rentcounterResult of executing a transaction. Could be a failure or success. (Transaction results in an account with insufficient funds for rent.)
bank_​transaction_​executing_​max_​loaded_​accounts_​data_​size_​exceededcounterResult of executing a transaction. Could be a failure or success. (Transaction exceeded max loaded accounts data size cap.)
bank_​transaction_​executing_​invalid_​loaded_​accounts_​data_​size_​limitcounterResult of executing a transaction. Could be a failure or success. (LoadedAccountsDataSizeLimit set for transaction must be greater than 0.)
bank_​transaction_​executing_​resanitization_​neededcounterResult of executing a transaction. Could be a failure or success. (Sanitized transaction differed before/after feature activiation. Needs to be resanitized.)
bank_​transaction_​executing_​program_​execution_​temporarily_​restrictedcounterResult of executing a transaction. Could be a failure or success. (Program execution is temporarily restricted on an account.)
bank_​transaction_​executing_​unbalanced_​transactioncounterResult of executing a transaction. Could be a failure or success. (The total balance before the transaction does not equal the total balance after the transaction.)
bank_​transaction_​executing_​program_​cache_​hit_​max_​limitcounterResult of executing a transaction. Could be a failure or success. (The total program cache size hit the maximum allowed limit.)
bank_​transaction_​executed_​successcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Success)
bank_​transaction_​executed_​account_​in_​usecounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (An account is already being processed in another transaction in a way that does not support parallelism.)
bank_​transaction_​executed_​account_​loaded_​twicecounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (A Pubkey appears twice in the transaction's account_keys. Instructions can reference Pubkeys more than once but the message must contain a list with no duplicate keys.)
bank_​transaction_​executed_​account_​not_​foundcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Attempt to debit an account but found no record of a prior credit.)
bank_​transaction_​executed_​program_​account_​not_​foundcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Attempt to load a program that does not exist.)
bank_​transaction_​executed_​insufficient_​funds_​for_​feecounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (The fee payer Pubkey does not have sufficient balance to pay the fee to schedule the transaction.)
bank_​transaction_​executed_​invalid_​account_​for_​feecounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (This account may not be used to pay transaction fees.)
bank_​transaction_​executed_​already_​processedcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (The bank has seen this transaction before. This can occur under normal operation when a UDP packet is duplicated, as a user error from a client not updating its recent_blockhash, or as a double-spend attack.)
bank_​transaction_​executed_​blockhash_​not_​foundcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (The bank has not seen the given recent_blockhash or the transaction is too old and the recent_blockhash has been discarded.)
bank_​transaction_​executed_​instruction_​errorcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (An error occurred while processing an instruction.)
bank_​transaction_​executed_​call_​chain_​too_​deepcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Loader call chain is too deep.)
bank_​transaction_​executed_​missing_​signature_​for_​feecounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction requires a fee but has no signature present.)
bank_​transaction_​executed_​invalid_​account_​indexcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction contains an invalid account reference.)
bank_​transaction_​executed_​signature_​failurecounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction did not pass signature verification.)
bank_​transaction_​executed_​invalid_​program_​for_​executioncounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (This program may not be used for executing instructions.)
bank_​transaction_​executed_​sanitize_​failurecounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction failed to sanitize accounts offsets correctly implies that account locks are not taken for this TX, and should not be unlocked.)
bank_​transaction_​executed_​cluster_​maintenancecounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transactions are currently disabled due to cluster maintenance.)
bank_​transaction_​executed_​account_​borrow_​outstandingcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction processing left an account with an outstanding borrowed reference.)
bank_​transaction_​executed_​would_​exceed_​max_​block_​cost_​limitcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction would exceed max Block Cost Limit.)
bank_​transaction_​executed_​unsupported_​versioncounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction version is unsupported.)
bank_​transaction_​executed_​invalid_​writable_​accountcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction loads a writable account that cannot be written.)
bank_​transaction_​executed_​would_​exceed_​max_​account_​cost_​limitcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction would exceed max account limit within the block.)
bank_​transaction_​executed_​would_​exceed_​account_​data_​block_​limitcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction would exceed account data limit within the block.)
bank_​transaction_​executed_​too_​many_​account_​lockscounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction locked too many accounts.)
bank_​transaction_​executed_​address_​lookup_​table_​not_​foundcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Address lookup table not found.)
bank_​transaction_​executed_​invalid_​address_​lookup_​table_​ownercounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Attempted to lookup addresses from an account owned by the wrong program.)
bank_​transaction_​executed_​invalid_​address_​lookup_​table_​datacounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Attempted to lookup addresses from an invalid account.)
bank_​transaction_​executed_​invalid_​address_​lookup_​table_​indexcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Address table lookup uses an invalid index.)
bank_​transaction_​executed_​invalid_​rent_​paying_​accountcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction leaves an account with a lower balance than rent-exempt minimum.)
bank_​transaction_​executed_​would_​exceed_​max_​vote_​cost_​limitcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction would exceed max Vote Cost Limit.)
bank_​transaction_​executed_​would_​exceed_​account_​data_​total_​limitcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction would exceed total account data limit.)
bank_​transaction_​executed_​duplicate_​instructioncounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction contains a duplicate instruction that is not allowed.)
bank_​transaction_​executed_​insufficient_​funds_​for_​rentcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction results in an account with insufficient funds for rent.)
bank_​transaction_​executed_​max_​loaded_​accounts_​data_​size_​exceededcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Transaction exceeded max loaded accounts data size cap.)
bank_​transaction_​executed_​invalid_​loaded_​accounts_​data_​size_​limitcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (LoadedAccountsDataSizeLimit set for transaction must be greater than 0.)
bank_​transaction_​executed_​resanitization_​neededcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Sanitized transaction differed before/after feature activiation. Needs to be resanitized.)
bank_​transaction_​executed_​program_​execution_​temporarily_​restrictedcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (Program execution is temporarily restricted on an account.)
bank_​transaction_​executed_​unbalanced_​transactioncounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (The total balance before the transaction does not equal the total balance after the transaction.)
bank_​transaction_​executed_​program_​cache_​hit_​max_​limitcounterWhen a transaction executes (makes it onto the chain), result of executing a transaction. The transaction can still fail. (The total program cache size hit the maximum allowed limit.)
bank_​cost_​model_​undercountcounterCount of transactions that used more CUs than the cost model should have permitted them to

Poh Tile

MetricTypeDescription
poh_​begin_​leader_​delay_​secondshistogramDelay between when we become leader in a slot and when we receive the bank.
poh_​first_​microblock_​delay_​secondshistogramDelay between when we become leader in a slot and when we receive the first microblock.
poh_​slot_​done_​delay_​secondshistogramDelay between when we become leader in a slot and when we finish the slot.

Shred Tile

MetricTypeDescription
shred_​cluster_​contact_​info_​cnthistogramNumber of contact infos in the cluster contact info message
shred_​microblocks_​abandonedcounterThe number of microblocks that were abandoned because we switched slots without finishing the current slot
shred_​batch_​szhistogramThe size (in bytes) of each microblock batch that is shredded
shred_​batch_​microblock_​cnthistogramThe number of microblocks in each microblock batch that is shredded
shred_​shredding_​duration_​secondshistogramDuration of producing one FEC set from the shredder
shred_​add_​shred_​duration_​secondshistogramDuration of verifying and processing one shred received from the network
shred_​shred_​processed_​bad_​slotcounterThe result of processing a thread from the network (Shred was for a slot for which we don't know the leader)
shred_​shred_​processed_​parse_​failedcounterThe result of processing a thread from the network (Shred parsing failed)
shred_​shred_​processed_​rejectedcounterThe result of processing a thread from the network (Shred was invalid for one of many reasons)
shred_​shred_​processed_​ignoredcounterThe result of processing a thread from the network (Shred was ignored because we had already received or reconstructed it)
shred_​shred_​processed_​okaycounterThe result of processing a thread from the network (Shred accepted to an incomplete FEC set)
shred_​shred_​processed_​completescounterThe result of processing a thread from the network (Shred accepted and resulted in a valid, complete FEC set)
shred_​fec_​set_​spilledcounterThe number of FEC sets that were spilled because they didn't complete in time and we needed space
shred_​shred_​rejected_​initialcounterThe number shreds that were rejected before any resources were allocated for the FEC set
shred_​fec_​rejected_​fatalcounterThe number of FEC sets that were rejected for reasons that cause the whole FEC set to become invalid

Store Tile

MetricTypeDescription
store_​transactions_​insertedcounterCount of transactions produced while we were leader in the shreds that have been inserted so far