This page lists the metrics that Stronghold exports in the Prometheus format. For how to enable telemetry and collect the metrics, see Monitoring.

The set of metrics on a node depends on the node role (active or standby), the enabled secrets engines and auth methods, the used storage backend, the edition (some components are available in Stronghold EE only) and the metric sink filters (prefix_filter, filter_default). Some metrics appear only after the first event (for example, an error or a lease creation).

To get the actual list of metrics from a live node, request the endpoint and select the lines with types:

curl -s --header "X-Vault-Token: ${STRONGHOLD_TOKEN}" "${STRONGHOLD_ADDR}/v1/sys/metrics?format=prometheus" | grep '^# TYPE'

Naming rules

A metric name in the Prometheus output is built from the metric key by the following rules:

  1. The name starts with the prefix stronghold_. The prefix is the metrics_prefix parameter of the telemetry block (stronghold by default). The names on this page are given with the default prefix.
  2. The parts of the key are joined with _, and then the characters space, ., =, - and / are replaced with _. The case is kept: a key raft, commitTime gives stronghold_raft_commitTime; a key core, seal-with-request gives stronghold_core_seal_with_request.
  3. Names with variable parts are written with a placeholder in angle brackets, for example stronghold_audit_<device>_log_request.
  4. With the Prometheus sink alone, the node hostname is never added to metric names. If two or more sinks are enabled and disable_hostname = false, the hostname is inserted into the names of gauges (and only gauges), for example stronghold_<hostname>_core_active. With disable_hostname = true, metric names are the same on all nodes. With enable_hostname_label = true the host label with the node name is added to all metrics instead.

Mapping of metric kinds to Prometheus types:

KindPrometheus typeNotes
GaugegaugeThe last set value.
CountercounterThe name is not changed, the _total suffix is not added.
Timer and samplesummaryThe series with the quantile label (0.5, 0.9, 0.99) and the series <name>_sum and <name>_count. Timers are in milliseconds, other samples are in the units of the value. The quantiles are calculated over a sliding window of 10 seconds, while _sum and _count accumulate.

Features of the Prometheus output:

  • A series that has not been updated for prometheus_retention_time (24 hours by default) is removed from the output. Rarely updated metrics can disappear and appear again. With prometheus_retention_time = 0 the Prometheus sink is disabled.
  • The HELP text of a metric is the same as its name, the sink does not set other descriptions.
  • Values are passed as 32-bit floating-point numbers, so large values (Unix timestamps, Raft indexes, byte counts) are rounded to about 7 significant digits.
  • In addition to the Stronghold metrics, the endpoint returns the standard Go and process metrics (go_*, process_*).
  • A number of timers and counters share one name. Such a collision is noted in the corresponding sections.

Labels

The set of labels depends on the metric. The cluster label is added to most Stronghold core metrics; the Raft metrics and the metrics of some components have no cluster label. In the tables, the labels of every metric are listed explicitly.

LabelValue
clusterThe cluster name: the cluster_name configuration parameter or, if it is not set, the automatically generated cluster name.
quantileThe summary quantile: 0.5, 0.9 or 0.99.
namespaceThe namespace path without the trailing slash; root for the root namespace.
mount_pointThe mount path without the namespace path and the trailing slash (for tokens and leases); for stronghold_identity_entity_alias_count the path of the auth method mount with the auth/ prefix.
mount_pathThe mount path of a secrets engine or an auth method (for stronghold_route_<operation>_mount).
auth_methodThe auth method type; for tokens also token and response_wrapping.
secret_engineThe secrets engine type.
creation_ttlThe TTL bucket on creation: 1m, 10m, 20m, 1h, 2h, 1d, 2d, 7d, 30d or +Inf.
token_typeThe token type: service, batch, default and so on.
policyThe policy name.
expiringThe expiration time of leases rounded to lease_metrics_epsilon.
gaugeThe name of the usage gauge collection process.
peer_idThe ID of a Raft node (peer).
node_idThe ID of a Raft node in the autopilot metrics.
databaseThe Raft BoltDB database: logstore or fsm.
nameThe quota name.
snapshot_config_nameThe name of the automatic snapshot configuration.
roleThe PKI role name.
termThe barrier keyring term.
typeDepends on the metric: the mount table type (auth, logical), the activity log client type (entity, direct_token) or the replication mode of a node.
localtrue for local mounts, false for replicated ones.
dbTypeThe database type of a plugin instance.
queue_idThe queue ID of the expiration job manager (the mount accessor).
rpcTypeThe Raft RPC type.
methodThe operation of replication RPC calls: get or update.
resultThe result of a KV replication run: success or error.
local_namespace, local_mount_pathThe namespace and the path of the local mount of KV replication.
source_address, source_namespace, source_mount_pathThe address of the source cluster, and the namespace and the path of the source mount of KV replication.

Metrics used in DP alerts

The Deckhouse module alerts use the following metrics. The alerts are described in Monitoring.

AlertMetrics
D8StrongholdNoActiveNodesstronghold_core_active
D8StrongholdSealedNodesPresentstronghold_core_unsealed, stronghold_runtime_num_goroutines
D8StrongholdClusterNotHealthystronghold_autopilot_healthy
D8StrongholdQuorumInCriticalStatestronghold_autopilot_failure_tolerance
D8StrongholdAbsentMetricsstronghold_runtime_num_goroutines
D8StrongholdAutoSnapshotFailedstronghold_core_snapshot_auto_failed
D8StrongholdAutoSnapshotRotationFailedstronghold_autosnapshots_rotate_failed

Metrics by subsystem

The tables are grouped by subsystem. The type is the type in the Prometheus output; the timers (summary) are in milliseconds unless stated otherwise.

Core, seal state and HA

State gauges are refreshed every second on all nodes of the cluster and, additionally, at the moment of the event (unseal, seal, leadership change).

State

MetricTypeDescriptionLabels
stronghold_core_unsealedgauge1 if the node is unsealed, 0 if it is sealed.cluster
stronghold_core_activegauge1 on the active (leader) node, 0 on a standby node.cluster
stronghold_core_performance_standbygauge1 if the node is a performance standby, otherwise 0.cluster
stronghold_core_in_flight_requestsgaugeNumber of requests being processed by the node at the moment.cluster
stronghold_core_locked_usersgaugeNumber of users currently locked out after failed logins, summed over all namespaces and mounts. Recalculated on the active node at start and then every 15 minutes.—
stronghold_core_mount_table_num_entriesgaugeNumber of entries in the mount table (secrets engines or auth methods). Updated when the table is persisted.cluster, type, local
stronghold_core_mount_table_sizegaugeSize of the serialized (compressed) mount table in bytes, before encryption by the barrier.cluster, type, local
stronghold_core_license_expiration_time_epochgaugeLicense expiration time as a Unix timestamp (seconds). Set when the license is loaded or updated.—

Timers

MetricTypeDescriptionLabels
stronghold_core_unsealsummaryDuration of the unseal operation, ms.quantile
stronghold_core_post_unsealsummaryDuration of post-unseal setup (starting subsystems after unseal), ms.quantile
stronghold_core_pre_sealsummaryDuration of pre-seal shutdown of subsystems, ms.quantile
stronghold_core_sealsummaryDuration of the seal operation, ms.quantile
stronghold_core_seal_with_requestsummaryDuration of sealing triggered by a request (sys/seal), ms.quantile
stronghold_core_seal_internalsummaryDuration of internal sealing of the core, ms.quantile
stronghold_core_step_downsummaryDuration of the leader step-down operation, ms.quantile
stronghold_core_leadership_setup_failedsummaryDuration of the active period of a node whose leadership setup failed (time from becoming active until the setup error), ms.quantile
stronghold_core_leadership_lostsummaryDuration of the time the node stayed active until it lost leadership, ms.quantile

Seal and unseal key protection

Metrics of encrypt and decrypt calls to the seal (the unseal key protection mechanism: Shamir, KMS, Transit, PKCS#11 and others). Metrics with <type> in the name are duplicated for each seal wrapper type: shamir, aead, awskms, azurekeyvault, gcpckms, alicloudkms, ocikms, transit, pkcs11, hsm-auto (becomes hsm_auto), and so on.

MetricTypeDescriptionLabels
stronghold_seal_unreachable_timegaugeTime in milliseconds since the last successful seal health check, 0 while the seal is healthy. Emitted by the auto-unseal health check (every 10 minutes, every minute while the seal is unhealthy).cluster
stronghold_seal_encrypt_timesummaryDuration of a seal encrypt call (all seal types), ms.quantile
stronghold_seal_<type>_encrypt_timesummaryDuration of a seal encrypt call for the given seal wrapper type, ms.quantile
stronghold_seal_encryptcounterNumber of seal encrypt calls (all types).—
stronghold_seal_<type>_encryptcounterNumber of seal encrypt calls for the given wrapper type.—
stronghold_seal_encrypt_errorcounterNumber of failed seal encrypt calls (all types).—
stronghold_seal_<type>_encrypt_errorcounterNumber of failed encrypt calls for the given wrapper type.—
stronghold_seal_decrypt_timesummaryDuration of a seal decrypt call (all seal types), ms.quantile
stronghold_seal_<type>_decrypt_timesummaryDuration of a seal decrypt call for the given seal wrapper type, ms.quantile
stronghold_seal_decryptcounterNumber of seal decrypt calls (all types).—
stronghold_seal_<type>_decryptcounterNumber of seal decrypt calls for the given wrapper type.—
stronghold_seal_decrypt_errorcounterNumber of failed seal decrypt calls (all types).—
stronghold_seal_<type>_decrypt_errorcounterNumber of failed decrypt calls for the given wrapper type.—
stronghold_seal_envelope_encryptsummaryDuration of envelope encryption of a value, ms.quantile
stronghold_seal_envelope_decryptsummaryDuration of envelope decryption of a value, ms.quantile

Requests, login and routing

Request handling

MetricTypeDescriptionLabels
stronghold_core_handle_requestsummaryDuration of handling a request in the core, ms.quantile
stronghold_core_handle_login_requestsummaryDuration of handling a login request, ms.quantile
stronghold_core_fetch_acl_and_tokensummaryDuration of building the ACL and looking up the token of a request, ms.quantile
stronghold_core_check_tokensummaryDuration of checking the token and policies of a request (ACL check), ms.quantile
stronghold_route_<operation>_mountsummaryDuration of routing a request of the given operation to a mount. <operation> is the request operation: create, read, update, patch, delete, list, help, alias-lookahead (becomes alias_lookahead), resolve-role (resolve_role), header, revoke, renew, rollback, period-task (period_task). Not emitted for existence checks, ms.quantile, namespace, mount_path

Request forwarding between nodes (standby nodes)

MetricTypeDescriptionLabels
stronghold_ha_rpc_client_forwardsummaryDuration of forwarding a request from a standby node to the active node, ms.quantile
stronghold_ha_rpc_client_forward_errorscounterNumber of failed request forwardings to the active node.—
stronghold_ha_rpc_client_echosummaryDuration of the periodic echo (heartbeat) RPC from a standby node to the active node, ms.quantile
stronghold_ha_rpc_client_echo_errorscounterNumber of failed echo RPCs from a standby node to the active node.—

Rollback manager and events

MetricTypeDescriptionLabels
stronghold_rollback_queuedgaugeNumber of rollback operations waiting in the queue.—
stronghold_rollback_inflightgaugeNumber of rollback operations being executed.—
stronghold_rollback_waitingsummaryDuration of waiting of a rollback operation in the queue before execution, ms.quantile
stronghold_rollback_attemptsummaryDuration of one rollback attempt, ms.quantile
stronghold_events_subscriptionsgaugeNumber of event subscriptions in all event buses of the process.—

Tokens, secret leases and usage gauges

Usage gauges (token_count*, expire_leases_by_expiration, secret_kv_count, identity_entity_*count, identity_entity_active_partial_month) are collected only on the active node by background collection processes. The period is set by usage_gauge_period (10 minutes by default; none disables collection), the number of series per gauge is limited by maximum_gauge_cardinality (500 by default, the series with the biggest values are kept). Collection is not performed on standby nodes and DR secondary clusters. If a collection takes more than a set share of the period, the period is doubled until restart.

Creation and operations

MetricTypeDescriptionLabels
stronghold_token_creationcounterNumber of created tokens. auth_method is the auth method type, token for tokens created through the token store, or response_wrapping for response-wrapping tokens; creation_ttl is the TTL bucket (1m, 10m, 20m, 1h, 2h, 1d, 2d, 7d, 30d, +Inf); token_type is the token type (service, batch, default, and so on).cluster, namespace, auth_method, mount_point, creation_ttl, token_type
stronghold_secret_lease_creationcounterNumber of created secret leases. creation_ttl is the TTL bucket (see stronghold_token_creation).cluster, namespace, secret_engine, mount_point, creation_ttl
stronghold_token_create_rootcounterNumber of created root tokens.—
stronghold_token_createAccessorsummaryDuration of creating a token accessor, ms.quantile
stronghold_token_createsummaryDuration of creating a token, ms.quantile
stronghold_token_storesummaryDuration of storing a token entry, ms.quantile
stronghold_token_lookupsummaryDuration of looking up a token, ms.quantile
stronghold_token_revokesummaryDuration of revoking a token, ms.quantile
stronghold_token_revoke_treesummaryDuration of revoking a token tree (the token and its children), ms.quantile

Usage gauges (active node)

MetricTypeDescriptionLabels
stronghold_token_countgaugeNumber of tokens (valid, tracked by the expiration manager) per namespace.cluster, namespace
stronghold_token_count_by_policygaugeNumber of tokens per namespace and policy. A token with several policies is counted for each of them.cluster, namespace, policy
stronghold_token_count_by_authgaugeNumber of tokens per namespace and auth method (the mount path prefix of the token; unknown if it cannot be determined).cluster, namespace, auth_method
stronghold_token_count_by_ttlgaugeNumber of tokens per namespace and TTL bucket at creation (1m … 30d, +Inf; tokens with zero TTL fall into +Inf).cluster, namespace, creation_ttl
stronghold_expire_leases_by_expirationgaugeNumber of leases by expiration time, rounded to lease_metrics_epsilon (1 hour by default); only leases that expire within the window of num_lease_metrics_buckets buckets (168 by default) are counted. The namespace label is present if add_lease_metrics_namespace_labels = true.cluster, expiring, namespace
stronghold_secret_kv_countgaugeNumber of secrets in KV mounts (KV v1 and v2; for v2 the keys under metadata/ are counted). Collection lists all keys and can be heavy: it can be disabled by the VAULT_DISABLE_KV_GAUGE environment variable.cluster, namespace, mount_point

Service metrics of gauge collection

MetricTypeDescriptionLabels
stronghold_metrics_collection_intervalsummaryConfigured collection interval of a usage gauge, ms. Recorded at each collection. gauge is the name of the collection process (for example token_by_namespace, token_by_policy, token_by_auth, token_by_ttl, leases_by_expiration, kv_secrets_by_mountpoint, identity_by_namespace, identity_by_mountpoint, identity_active_month).quantile, cluster, gauge
stronghold_metrics_collectionsummaryDuration of one collection of a usage gauge, ms. If it exceeds the target share of the interval, the interval is doubled. Labels are the same as for stronghold_metrics_collection_interval.quantile, cluster, gauge
stronghold_metrics_collection_errorcounterNumber of failed collections of a usage gauge (collector error, or an error when listing KV keys).cluster, gauge

Leases and expiration

The expiration manager metrics. expire_num_leases and expire_num_irrevocable_leases are emitted every second by the active node only.

Counters and queue

MetricTypeDescriptionLabels
stronghold_expire_num_leasesgaugeTotal number of leases (including tokens with leases) tracked by the expiration manager.—
stronghold_expire_num_irrevocable_leasesgaugeNumber of leases that could not be revoked (irrevocable leases).—
stronghold_expire_lease_expirationcounterNumber of lease revocation jobs started by the expiration workers (a lease expiry triggers a revocation).cluster, namespace
stronghold_expire_lease_expiration_time_in_queuesummaryDuration of a revocation job waiting in the queue (from scheduling until a worker started it), ms.quantile, cluster, namespace
stronghold_expire_lease_expiration_errorcounterNumber of failed lease revocation jobs.cluster, namespace
stronghold_expire_job_manager_queue_lengthsummaryLength of the job queue of the expiration job manager, sampled when a job is added or taken. queue_id is the queue identifier (the mount accessor the leases belong to).quantile, cluster, queue_id
stronghold_expire_job_manager_total_jobssummaryTotal number of jobs in all queues of the expiration job manager, sampled when a job is added or taken.quantile, cluster

Timers

MetricTypeDescriptionLabels
stronghold_expire_revokesummaryDuration of revoking a lease, ms.quantile
stronghold_expire_lazy_revokesummaryDuration of lazy revoking of a lease, ms.quantile
stronghold_expire_revoke_commonsummaryDuration of common part of revoking a lease, ms.quantile
stronghold_expire_revoke_forcesummaryDuration of force-revoking leases, ms.quantile
stronghold_expire_revoke_prefixsummaryDuration of revoking all leases by a path prefix, ms.quantile
stronghold_expire_revoke_by_tokensummaryDuration of revoking all leases of a token, ms.quantile
stronghold_expire_renewsummaryDuration of renewing a lease, ms.quantile
stronghold_expire_renew_tokensummaryDuration of renewing a token, ms.quantile
stronghold_expire_registersummaryDuration of registering a lease of a secret, ms.quantile
stronghold_expire_register_authsummaryDuration of registering a lease of an auth token, ms.quantile
stronghold_expire_fetch_lease_timessummaryDuration of fetching the time data of a lease, ms.quantile
stronghold_expire_fetch_lease_times_by_tokensummaryDuration of fetching the time data of the lease of a token, ms.quantile

Identity and client activity

MetricTypeDescriptionLabels
stronghold_identity_num_entitiesgaugeTotal number of identity entities. Updated every 10 minutes on the active node (not on standby nodes and DR secondary clusters).—
stronghold_identity_entity_countgaugeNumber of entities per namespace.cluster, namespace
stronghold_identity_entity_alias_countgaugeNumber of entities per auth method mount. mount_point includes the auth/ prefix.cluster, namespace, auth_method, mount_point
stronghold_identity_entity_active_partial_monthgaugeNumber of active clients (entities) in the current, not yet complete month of the activity log. Reported only if the activity log is enabled.cluster
stronghold_identity_entity_active_monthlygaugeNumber of active entity clients in the namespace for the latest month of the activity log. Set when the activity log segments are processed.cluster, namespace
stronghold_identity_nonentity_active_monthlygaugeNumber of active non-entity clients (tokens without an entity) in the namespace for the latest month of the activity log.cluster, namespace
stronghold_identity_entity_active_reporting_periodgaugeNumber of active entity clients in the namespace for the first month of the reporting (retention) period of the activity log.cluster, namespace
stronghold_identity_nonentity_active_reporting_periodgaugeNumber of active non-entity clients in the namespace for the first month of the reporting period of the activity log.cluster, namespace
stronghold_identity_entity_creationcounterNumber of created entities. When an entity is created together with an alias at login, the auth_method and mount_point labels are added.cluster, namespace, auth_method, mount_point
stronghold_core_activity_fragment_sizecounterNumber of clients in the activity log fragments written to storage: type="entity" for entity clients, type="direct_token" for tokens without an entity.cluster, type
stronghold_core_activity_segment_writesummaryDuration of writing an activity log segment to storage, ms.quantile, cluster
stronghold_identity_create_entitysummaryDuration of creating an entity, ms.quantile
stronghold_identity_create_or_fetch_entitysummaryDuration of creating or fetching an entity at login, ms.quantile
stronghold_identity_upsert_entitysummaryDuration of creating or updating an entity, ms.quantile
stronghold_identity_upsert_entity_txnsummaryDuration of creating or updating an entity within a transaction, ms.quantile
stronghold_identity_upsert_groupsummaryDuration of creating or updating a group, ms.quantile
stronghold_identity_upsert_group_txnsummaryDuration of creating or updating a group within a transaction, ms.quantile
stronghold_identity_refresh_external_groupssummaryDuration of refreshing the external groups of an entity, ms.quantile

Audit

In the metrics with <device>, <device> is the name of the audit device (the mount path with - and / replaced by _). Failure counters are incremented by 1 on a failed request or response logging and by 0 on success.

MetricTypeDescriptionLabels
stronghold_audit_log_requestsummaryDuration of logging a request to all audit devices, ms.quantile
stronghold_audit_log_responsesummaryDuration of logging a response to all audit devices, ms.quantile
stronghold_audit_log_request_failurecounterNumber of requests that could not be logged by the audit devices.—
stronghold_audit_log_response_failurecounterNumber of responses that could not be logged by the audit devices.—
stronghold_audit_<device>_log_requestsummaryDuration of logging a request to the given audit device, ms.quantile
stronghold_audit_<device>_log_responsesummaryDuration of logging a response to the given audit device, ms.quantile
stronghold_audit_fallback_successcounterNumber of requests and responses successfully written by the fallback audit device.—
stronghold_audit_fallback_misscounterNumber of requests and responses that the fallback audit device failed to write.—
stronghold_audit_<fallback_device>_log_requestsummaryDuration of logging a request to the fallback audit device, ms.quantile
stronghold_audit_<fallback_device>_log_responsesummaryDuration of logging a response to the fallback audit device, ms.quantile

Policies and ACL

MetricTypeDescriptionLabels
stronghold_policy_set_policysummaryDuration of creating or updating a policy, ms.quantile
stronghold_policy_get_policysummaryDuration of reading a policy, ms.quantile
stronghold_policy_list_policiessummaryDuration of listing policies, ms.quantile
stronghold_policy_delete_policysummaryDuration of deleting a policy, ms.quantile

Barrier, cache and storage backends

The barrier encrypts all data before it is written to the physical backend. The storage timers measure the calls of the Stronghold core to the backend; for Raft see also the Raft section.

Barrier

MetricTypeDescriptionLabels
stronghold_barrier_putsummaryDuration of writing a key through the barrier (encryption and write to the backend), ms.quantile
stronghold_barrier_getsummaryDuration of reading a key through the barrier (read from the backend and decryption), ms.quantile
stronghold_barrier_deletesummaryDuration of deleting a key through the barrier, ms.quantile
stronghold_barrier_listsummaryDuration of listing keys through the barrier, ms.quantile
stronghold_barrier_estimated_encryptionscounterNumber of encryptions performed with the barrier key of the given term (the barrier key rotates automatically after a limit of encryptions). term is the barrier keyring term.term
stronghold_barrier_auto_rotationcounterNumber of automatic barrier key rotations.—

Physical storage cache

MetricTypeDescriptionLabels
stronghold_cache_writecounterNumber of writes to the physical storage cache.—
stronghold_cache_hitcounterNumber of reads served from the physical storage cache.—
stronghold_cache_misscounterNumber of reads that were not found in the physical storage cache.—
stronghold_cache_deletecounterNumber of key deletions from the physical storage cache.—

Storage packer

MetricTypeDescriptionLabels
stronghold_storage_packer_get_itemsummaryDuration of reading an item from the storage packer (identity buckets), ms.quantile
stronghold_storage_packer_put_itemsummaryDuration of writing an item to the storage packer, ms.quantile
stronghold_storage_packer_put_bucketsummaryDuration of writing a bucket to the storage packer, ms.quantile
stronghold_storage_packer_delete_itemssummaryDuration of deleting items from the storage packer, ms.quantile

Other storage backends (only for the configured backend)

MetricTypeDescriptionLabels
stronghold_consul_getsummaryDuration of a get call to the Consul backend, ms.quantile
stronghold_consul_listsummaryDuration of a list call to the Consul backend, ms.quantile
stronghold_consul_transactionsummaryDuration of a transaction on the Consul backend, ms.quantile
stronghold_etcd_putsummaryDuration of a put call to the etcd backend, ms.quantile
stronghold_etcd_getsummaryDuration of a get call to the etcd backend, ms.quantile
stronghold_etcd_deletesummaryDuration of a delete call to the etcd backend, ms.quantile
stronghold_etcd_listsummaryDuration of a list call to the etcd backend, ms.quantile
stronghold_postgres_putsummaryDuration of a put call to the PostgreSQL backend, ms.quantile
stronghold_postgres_getsummaryDuration of a get call to the PostgreSQL backend, ms.quantile
stronghold_postgres_deletesummaryDuration of a delete call to the PostgreSQL backend, ms.quantile
stronghold_postgres_listsummaryDuration of a list call to the PostgreSQL backend, ms.quantile
stronghold_postgres_transactionsummaryDuration of a transaction on the PostgreSQL backend, ms.quantile

Raft storage

Metrics of the integrated Raft storage emitted by Stronghold itself. The gauges raft_storage_stats_* and raft_storage_bolt_* are updated every second on every node. The database label of the BoltDB statistics is logstore (raft.db, the log store) or fsm (the FSM database). The metrics of the Raft library are described in the next section.

Raft statistics

MetricTypeDescriptionLabels
stronghold_raft_storage_stats_termgaugeCurrent Raft term of the node.cluster, peer_id
stronghold_raft_storage_stats_commit_indexgaugeIndex of the last committed Raft log entry known to the node.cluster, peer_id
stronghold_raft_storage_stats_applied_indexgaugeIndex of the last Raft log entry applied to the FSM on the node.cluster, peer_id
stronghold_raft_storage_stats_fsm_pendinggaugeNumber of Raft log entries waiting to be applied to the FSM.cluster, peer_id

BoltDB statistics

MetricTypeDescriptionLabels
stronghold_raft_storage_bolt_freelist_free_pagesgaugeNumber of free pages in the BoltDB database.cluster, database
stronghold_raft_storage_bolt_freelist_pending_pagesgaugeNumber of pending pages in the BoltDB freelist.cluster, database
stronghold_raft_storage_bolt_freelist_allocated_bytesgaugeBytes allocated for the BoltDB freelist.cluster, database
stronghold_raft_storage_bolt_freelist_used_bytesgaugeBytes used by the BoltDB freelist.cluster, database
stronghold_raft_storage_bolt_transaction_started_read_transactionsgaugeTotal number of started read transactions.cluster, database
stronghold_raft_storage_bolt_transaction_currently_open_read_transactionsgaugeNumber of currently open read transactions.cluster, database
stronghold_raft_storage_bolt_page_countgaugeNumber of page allocations (cumulative counter value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_page_bytes_allocatedgaugeBytes allocated for pages (cumulative value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_cursor_countgaugeNumber of created cursors (cumulative value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_node_countgaugeNumber of node allocations (cumulative value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_node_dereferencesgaugeNumber of node dereferences (cumulative value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_rebalance_countgaugeNumber of node rebalances (cumulative value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_rebalance_timesummaryCumulative rebalance time of BoltDB (TxStats), ms, sampled every second.quantile, cluster, database
stronghold_raft_storage_bolt_split_countgaugeNumber of node splits (cumulative value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_spill_countgaugeNumber of node spills (cumulative value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_spill_timesummaryCumulative spill time of BoltDB (TxStats), ms, sampled every second.quantile, cluster, database
stronghold_raft_storage_bolt_write_countgaugeNumber of writes to disk (cumulative value of BoltDB TxStats).cluster, database
stronghold_raft_storage_bolt_write_timecounterCumulative disk write time of BoltDB (TxStats), ms. The counter is increased every second by the value of TxStats, so use it only for relative comparison.cluster, database

Followers (emitted by the Raft leader)

MetricTypeDescriptionLabels
stronghold_raft_storage_follower_last_heartbeat_msgaugeTime in milliseconds since the last heartbeat from the follower. Emitted by the leader every second for each follower.peer_id
stronghold_raft_storage_follower_applied_index_deltagaugeDifference between the applied index of the leader and the follower. Emitted by the leader every second.peer_id

Operation timers

MetricTypeDescriptionLabels
stronghold_raft_storage_getsummaryDuration of a get call to the Raft backend, ms.quantile
stronghold_raft_storage_putsummaryDuration of a put call to the Raft backend, ms.quantile
stronghold_raft_storage_deletesummaryDuration of a delete call to the Raft backend, ms.quantile
stronghold_raft_storage_listsummaryDuration of a list call to the Raft backend, ms.quantile
stronghold_raft_storage_transactionsummaryDuration of a transaction on the Raft backend, ms.quantile
stronghold_raft_storage_entry_sizesummarySize in bytes of a Raft command (a batch of storage operations) sent to the log.quantile
stronghold_raft_getsummaryDuration of a read from the Raft FSM (duplicates stronghold_raft_storage_fsm_get), ms.quantile
stronghold_raft_listsummaryDuration of listing keys in the Raft FSM (duplicates stronghold_raft_storage_fsm_list), ms.quantile
stronghold_raft_storage_fsm_getsummaryDuration of a read from the Raft FSM, ms.quantile
stronghold_raft_storage_fsm_putsummaryDuration of a write to the Raft FSM, ms.quantile
stronghold_raft_storage_fsm_deletesummaryDuration of a key deletion in the Raft FSM, ms.quantile
stronghold_raft_storage_fsm_delete_prefixsummaryDuration of deleting keys by prefix in the Raft FSM, ms.quantile
stronghold_raft_storage_fsm_listsummaryDuration of listing keys in the Raft FSM, ms.quantile
stronghold_raft_storage_fsm_open_db_filesummaryDuration of opening the FSM database file, ms.quantile
stronghold_raft_storage_fsm_write_snapshotsummaryDuration of writing a snapshot of the FSM, ms.quantile
stronghold_raft_storage_fsm_restore_snapshotsummaryDuration of restoring the FSM from a snapshot, ms.quantile

Raft library

Metrics of the Raft storage. They have no cluster label. Metrics emitted only by the leader or only by followers are noted in the descriptions. Stronghold also emits legacy metrics with the peer ID as a name suffix (stronghold_raft_replication_heartbeat_<peer_id>, stronghold_raft_replication_installSnapshot_<peer_id>, stronghold_raft_replication_appendEntries_rpc_<peer_id>, stronghold_raft_replication_appendEntries_logs_<peer_id>), which duplicate the labeled metrics; use the labeled ones. The rpcType label of raft_net_* is one of Heartbeat, AppendEntries, RequestVote, RequestPreVote, InstallSnapshot, TimeoutNow. Latency metrics are in milliseconds.

State and elections

MetricTypeDescriptionLabels
stronghold_raft_state_followercounterNumber of transitions of the node to the follower state.—
stronghold_raft_state_candidatecounterNumber of transitions of the node to the candidate state (starts of an election).—
stronghold_raft_state_leadercounterNumber of transitions of the node to the leader state.—
stronghold_raft_transition_heartbeat_timeoutcounterNumber of heartbeat timeouts: the follower did not receive a heartbeat from the leader and started an election.—
stronghold_raft_transition_leader_lease_timeoutcounterNumber of times the leader lost its lease because it could not contact a quorum of followers.—
stronghold_raft_peersgaugeNumber of servers in the latest Raft configuration. Updated by the leader when replication starts or stops.—
stronghold_raft_candidate_electSelfsummaryDuration of a node election attempt (vote request to all peers), ms.quantile
stronghold_raft_candidate_preElectSelfsummaryDuration of the pre-vote phase of an election, ms.quantile

Log replication and RPC

MetricTypeDescriptionLabels
stronghold_raft_applycounterNumber of log entries submitted to Raft for application (Apply calls) on the leader.—
stronghold_raft_barriercounterNumber of Barrier calls on the leader.—
stronghold_raft_verify_leadercounterNumber of VerifyLeader calls.—
stronghold_raft_restorecounterNumber of Raft restores from a snapshot (Restore calls).—
stronghold_raft_commitTimesummaryDuration of committing a log entry (from submission to the quorum acknowledgement) on the leader, ms.quantile
stronghold_raft_commitNumLogsgaugeNumber of log entries in the last batch committed by the leader.—
stronghold_raft_leader_dispatchLogsummaryDuration of the leader writing a batch of log entries to its own log store, ms.quantile
stronghold_raft_leader_dispatchNumLogsgaugeNumber of log entries in the last batch written by the leader to its log store.—
stronghold_raft_leader_lastContactsummaryTime in milliseconds since the last contact with a follower, sampled by the leader for each follower when it checks the leader lease. A growing value indicates problems with a follower or the network.quantile
stronghold_raft_leader_oldestLogAgegaugeAge in milliseconds of the oldest entry in the leader log store. Emitted by the leader.—
stronghold_raft_rpc_appendEntriessummaryDuration of processing an AppendEntries RPC on a follower, ms.quantile
stronghold_raft_rpc_appendEntries_storeLogssummaryDuration of storing log entries received in AppendEntries on a follower, ms.quantile
stronghold_raft_rpc_appendEntries_processLogssummaryDuration of processing (commit) log entries received in AppendEntries on a follower, ms.quantile
stronghold_raft_rpc_processHeartbeatsummaryDuration of processing a heartbeat RPC on a follower, ms.quantile
stronghold_raft_rpc_requestVotesummaryDuration of processing a RequestVote RPC, ms.quantile
stronghold_raft_rpc_installSnapshotsummaryDuration of processing an InstallSnapshot RPC on a follower, ms.quantile

Replication from the leader and network transport

MetricTypeDescriptionLabels
stronghold_raft_replication_heartbeatsummaryDuration of a heartbeat sent by the leader to a follower, ms.quantile, peer_id
stronghold_raft_replication_installSnapshotsummaryDuration of sending a snapshot by the leader to a follower, ms.quantile, peer_id
stronghold_raft_replication_appendEntries_rpcsummaryDuration of an AppendEntries RPC from the leader to a follower, ms.quantile, peer_id
stronghold_raft_replication_appendEntries_logscounterNumber of log entries replicated by the leader to the follower.peer_id
stronghold_raft_net_getRPCTypesummaryDuration of reading the RPC type from the connection in the network transport, ms.quantile
stronghold_raft_net_rpcDecodesummaryDuration of decoding an incoming RPC in the network transport, ms.quantile, rpcType
stronghold_raft_net_rpcEnqueuesummaryDuration of putting an incoming RPC into the processing queue of the Raft core, ms.quantile, rpcType
stronghold_raft_net_rpcRespondsummaryDuration of waiting for and sending the response to an RPC, ms.quantile, rpcType

FSM, snapshots and goroutine saturation

MetricTypeDescriptionLabels
stronghold_raft_fsm_applysummaryDuration of applying a single log entry to the FSM, ms.quantile
stronghold_raft_fsm_applyBatchsummaryDuration of applying a batch of log entries to the FSM, ms.quantile
stronghold_raft_fsm_applyBatchNumsummaryNumber of log entries in a batch applied to the FSM.quantile
stronghold_raft_fsm_enqueuesummaryDuration of putting log entries into the FSM queue, ms.quantile
stronghold_raft_fsm_store_configsummaryDuration of applying a configuration change to the FSM, ms.quantile
stronghold_raft_fsm_snapshotsummaryDuration of creating an FSM snapshot, ms.quantile
stronghold_raft_fsm_restoresummaryDuration of restoring the FSM from a snapshot, ms.quantile
stronghold_raft_fsm_lastRestoreDurationgaugeDuration in milliseconds of the last FSM restore from a snapshot.—
stronghold_raft_snapshot_takeSnapshotsummaryDuration of the whole process of taking a snapshot (including log compaction), ms.quantile
stronghold_raft_snapshot_createsummaryDuration of creating a snapshot (FSM snapshot), ms.quantile
stronghold_raft_snapshot_persistsummaryDuration of writing a snapshot to the snapshot store, ms.quantile
stronghold_raft_compactLogssummaryDuration of compacting the Raft log, ms.quantile
stronghold_raft_removeOldLogssummaryDuration of removing old log entries after a snapshot, ms.quantile
stronghold_raft_restoreUserSnapshotsummaryDuration of restoring a user snapshot (sys/storage/raft/snapshot restore), ms.quantile
stronghold_raft_thread_main_saturationsummarySaturation of the main Raft goroutine: the share of time (from 0 to 1) the goroutine was busy rather than waiting, over a 1-second interval. A value close to 1 means the Raft core is overloaded.quantile
stronghold_raft_thread_fsm_saturationsummarySaturation of the FSM goroutine: the share of time (from 0 to 1) the goroutine was busy applying entries, over a 1-second interval.quantile

BoltDB log store (raft-boltdb)

MetricTypeDescriptionLabels
stronghold_raft_boltdb_getLogsummaryDuration of reading a log entry from the BoltDB log store, ms.quantile
stronghold_raft_boltdb_storeLogssummaryDuration of writing a batch of log entries to the BoltDB log store (including the commit to disk), ms.quantile
stronghold_raft_boltdb_logSizesummarySize in bytes of a log entry written to the log store.quantile
stronghold_raft_boltdb_logsPerBatchsummaryNumber of log entries in a batch written to the log store.quantile
stronghold_raft_boltdb_logBatchSizesummaryTotal size in bytes of a batch of log entries written to the log store.quantile
stronghold_raft_boltdb_writeCapacitysummaryEstimated write capacity of the log store: the number of log entries per second at the speed of the last batch.quantile

Raft autopilot and cluster health

Autopilot metrics are emitted by the Raft leader each time the autopilot state is updated. They have no cluster label (to count nodes, use sum/max over series from all nodes). The metrics of the autopilot library itself are not exported; the state is published by Stronghold.

MetricTypeDescriptionLabels
stronghold_autopilot_healthygauge1 if the whole cluster is healthy according to autopilot, otherwise 0.—
stronghold_autopilot_failure_tolerancegaugeNumber of nodes that can fail without losing the quorum. 0 means that the loss of one more node makes the cluster unavailable.—
stronghold_autopilot_node_healthygauge1 if the node is healthy according to autopilot, otherwise 0. node_id is the Raft node ID.node_id

Replication (PR, DR) and WAL

The metrics of replication components (WAL, Merkle trees, log shipping, replication RPC) and replication roles. Available in Stronghold EE. They are emitted only if the node uses the corresponding replication mode. They have no cluster label, except the role gauges core_replication_*.

Replication roles (every second on all nodes)

MetricTypeDescriptionLabels
stronghold_core_replication_performance_primarygauge1 if the cluster is a performance replication primary, otherwise 0.cluster
stronghold_core_replication_performance_secondarygauge1 if the cluster is a performance replication secondary, otherwise 0.cluster
stronghold_core_replication_dr_primarygauge1 if the cluster is a DR replication primary, otherwise 0.cluster
stronghold_core_replication_dr_secondarygauge1 if the cluster is a DR replication secondary, otherwise 0.cluster
stronghold_core_replication_write_undo_logsgauge1 if writing of undo logs is enabled on the node, otherwise 0.cluster

WAL

MetricTypeDescriptionLabels
stronghold_replication_wal_last_walgaugeIndex of the last WAL entry on the node.—
stronghold_replication_wal_last_dr_walgaugeIndex of the last WAL entry of the DR type applied on the node.—
stronghold_replication_wal_last_performance_walgaugeIndex of the last WAL entry of the replicated (performance) type applied on the node.—
stronghold_replication_fsm_last_remote_walgaugeIndex of the last WAL entry applied from the remote (primary) cluster.—
stronghold_replication_merkle_commit_indexgaugeIndex of the last WAL entry committed to the Merkle tree.—
stronghold_wal_gc_totalgaugeNumber of WAL entries between the first WAL index and the last committed WAL index at the time of the cleanup.—
stronghold_wal_gc_deletedgaugeNumber of WAL entries to be deleted by the cleanup pass (up to the buffered last commit index).—
stronghold_replication_wal_gcsummaryDuration of a WAL garbage collection pass, ms.quantile
stronghold_wal_flushReadysummaryDuration of flushing a batch of WAL entries to storage, ms.quantile
stronghold_wal_flushReady_queue_lensummaryLength of the WAL flush queue when a batch is flushed.quantile
stronghold_wal_flushReady_batch_sizesummarySize of the group of WAL entries persisted in a flush.quantile
stronghold_wal_persistWALssummaryDuration of persisting WAL entries, ms.quantile
stronghold_wal_loadWALsummaryDuration of loading a WAL entry, ms.quantile
stronghold_wal_deleteWALssummaryDuration of deleting WAL entries, ms.quantile

Merkle trees and synchronization

MetricTypeDescriptionLabels
stronghold_merkle_saveCheckpointsummaryDuration of saving a Merkle tree checkpoint, ms.quantile
stronghold_merkle_saveCheckpoint_num_dirtygaugeNumber of dirty pages of the Merkle tree at the time of saving a checkpoint.—
stronghold_merkle_flushDirtysummaryDuration of flushing the dirty pages of the Merkle tree, ms.quantile
stronghold_merkle_flushDirtyUntilsummaryDuration of flushing the dirty pages of the Merkle tree up to a given index, ms.quantile
stronghold_merkle_flushDirty_num_pagesgaugeNumber of pages flushed in the last flush.—
stronghold_merkle_flushDirty_num_pages_outstandinggaugeNumber of dirty pages remaining after the last flush.—
stronghold_merkle_copy_on_writecounterNumber of copy-on-write operations of Merkle tree pages.—
stronghold_merkle_reindexsummaryDuration of reindexing the Merkle tree, ms.quantile
stronghold_merkle_reindex_flush_treessummaryDuration of flushing the trees at the end of a reindex, ms.quantile
stronghold_merkle_reindex_fixedsummaryNumber of corrupted pages fixed by a reindex.quantile
stronghold_merkle_remote_state_snapshotsummaryDuration of taking a snapshot of the remote Merkle tree state, ms.quantile
stronghold_merkle_composite_remote_state_snapshotsummaryDuration of taking a snapshot of the remote composite Merkle tree state, ms.quantile
stronghold_merkle_diff_conflictsgaugeNumber of conflicting keys found in the last Merkle tree comparison.—
stronghold_replication_merkleDiffsummaryDuration of the Merkle tree comparison with the remote cluster, ms.quantile
stronghold_replication_merkleSyncsummaryDuration of the Merkle tree synchronization with the remote cluster, ms.quantile
stronghold_replication_fetchRemoteKeyssummaryDuration of fetching keys from the remote cluster, ms.quantile

Log shipper

MetricTypeDescriptionLabels
stronghold_logshipper_fetchKeyssummaryDuration of fetching keys by the log shipper, ms.quantile
stronghold_logshipper_streamWALs_missing_guardcounterNumber of WAL stream requests whose guard was not found.—
stronghold_logshipper_streamWALs_guard_foundcounterNumber of WAL stream requests whose guard was found in the buffer.—
stronghold_logshipper_streamWALs_buffer_over_runcounterNumber of buffer overruns while streaming WAL entries.—
stronghold_logshipper_streamWALs_scanned_entriessummaryNumber of buffer entries scanned when searching for the guard of a WAL stream request. type is the replication mode of the node.quantile, type
stronghold_logshipper_buffer_lengthgaugeCurrent number of entries in the log shipper buffer.type
stronghold_logshipper_buffer_sizegaugeCurrent size in bytes of the log shipper buffer.type
stronghold_logshipper_buffer_max_lengthgaugeMaximum number of entries of the log shipper buffer.type
stronghold_logshipper_buffer_max_sizegaugeMaximum size in bytes of the log shipper buffer.type

Replication RPC: server

MetricTypeDescriptionLabels
stronghold_replication_rpc_server_sync_counter_requestsummaryDuration of handling the sync_counter_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_auth_requestsummaryDuration of handling the auth_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_fetch_keys_requestsummaryDuration of handling the fetch_keys_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_bootstrap_requestsummaryDuration of handling the bootstrap_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_conflicting_pages_requestsummaryDuration of handling the conflicting_pages_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_sub_page_hashes_requestsummaryDuration of handling the sub_page_hashes_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_finalize_merkle_diff_requestsummaryDuration of handling the finalize_merkle_diff_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_forwarding_requestsummaryDuration of handling the forwarding_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_upsert_group_requestsummaryDuration of handling the upsert_group_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_persist_persona_requestsummaryDuration of handling the persist_persona_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_register_local_alias_requestsummaryDuration of handling the register_local_alias_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_create_entity_requestsummaryDuration of handling the create_entity_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_persist_alias_requestsummaryDuration of handling the persist_alias_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_guard_hash_requestsummaryDuration of handling the guard_hash_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_stream_wals_requestsummaryDuration of handling the stream_wals_request call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_echosummaryDuration of handling the echo call on the replication RPC server, ms.quantile
stronghold_replication_rpc_server_save_mfa_response_authsummaryDuration of handling the save_mfa_response_auth call on the replication RPC server, ms.quantile

The method label (get or update) is present on user_failed_login_info metrics.

Replication RPC: client

MetricTypeDescriptionLabels
stronghold_replication_rpc_client_conflicting_pagessummaryDuration of the conflicting_pages RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_sub_page_hashessummaryDuration of the sub_page_hashes RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_finalize_merkle_diffsummaryDuration of the finalize_merkle_diff RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_sync_countersummaryDuration of the sync_counter RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_fetch_keyssummaryDuration of the fetch_keys RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_forwardsummaryDuration of the forward RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_register_local_aliassummaryDuration of the register_local_alias RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_create_entitysummaryDuration of the create_entity RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_persist_aliassummaryDuration of the persist_alias RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_save_mfa_auth_responsesummaryDuration of the save_mfa_auth_response RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_upsert_groupsummaryDuration of the upsert_group RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_stream_walssummaryDuration of the stream_wals RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_guard_hashsummaryDuration of the guard_hash RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_register_leasesummaryDuration of the register_lease RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_create_token_register_auth_leasesummaryDuration of the create_token_register_auth_lease RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_register_authsummaryDuration of the register_auth RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_user_failed_login_infosummaryDuration of the user_failed_login_info RPC call from the replication client, ms.quantile, method
stronghold_replication_rpc_client_wrap_in_cubbyholesummaryDuration of the wrap_in_cubbyhole RPC call from the replication client, ms.quantile
stronghold_replication_rpc_client_activity_log_fragmentsummaryDuration of the activity_log_fragment RPC call from the replication client, ms.quantile

Replication RPC: server for standby nodes

MetricTypeDescriptionLabels
stronghold_replication_rpc_standby_server_echosummaryDuration of handling the echo call on the RPC server of standby nodes, ms.quantile
stronghold_replication_rpc_standby_server_register_lease_requestsummaryDuration of handling the register_lease_request call on the RPC server of standby nodes, ms.quantile
stronghold_replication_rpc_standby_server_register_auth_requestsummaryDuration of handling the register_auth_request call on the RPC server of standby nodes, ms.quantile
stronghold_replication_rpc_standby_server_create_token_register_auth_lease_requestsummaryDuration of handling the create_token_register_auth_lease_request call on the RPC server of standby nodes, ms.quantile
stronghold_replication_rpc_standby_server_user_failed_login_info_requestsummaryDuration of handling the user_failed_login_info_request call on the RPC server of standby nodes, ms.quantile, method
stronghold_replication_rpc_standby_server_wrap_token_requestsummaryDuration of handling the wrap_token_request call on the RPC server of standby nodes, ms.quantile

Replication RPC: DR server

MetricTypeDescriptionLabels
stronghold_replication_rpc_dr_server_fetch_keys_requestsummaryDuration of handling the fetch_keys_request call on the DR replication RPC server, ms.quantile
stronghold_replication_rpc_dr_server_echosummaryDuration of handling the echo call on the DR replication RPC server, ms.quantile

KV replication

Metrics of KV secrets replication between mounts. The records are identified by the pair of the source mount and the local mount. The gauges are exported every second; the summaries and the counter are updated after each replication run. The metrics have no cluster label.

MetricTypeDescriptionLabels
stronghold_core_replication_local_mount_countgaugeNumber of local mounts to which KV replication is configured.—
stronghold_core_replication_source_mounts_countgaugeNumber of unique source mounts of KV replication.—
stronghold_core_replication_source_addresses_countgaugeNumber of unique source addresses (clusters) of KV replication.—
stronghold_core_replication_ttlgaugeTTL of the replication token in seconds.local_namespace, local_mount_path, source_address, source_namespace, source_mount_path
stronghold_core_replication_repl_periodgaugeReplication period in minutes.local_namespace, local_mount_path, source_address, source_namespace, source_mount_path
stronghold_core_replication_secret_path_countgaugeNumber of secret paths processed in the last replication run.local_namespace, local_mount_path, source_address, source_namespace, source_mount_path
stronghold_core_replication_errorsgaugeNumber of errors in the last replication run.local_namespace, local_mount_path, source_address, source_namespace, source_mount_path
stronghold_core_replication_successgauge1 if the last replication run succeeded, otherwise 0.local_namespace, local_mount_path, source_address, source_namespace, source_mount_path
stronghold_core_replication_statuscounterNumber of replication runs. result is success or error.local_namespace, local_mount_path, source_address, source_namespace, source_mount_path, result
stronghold_core_replication_bytessummaryNumber of bytes transferred in a replication run.quantile, local_namespace, local_mount_path, source_address, source_namespace, source_mount_path
stronghold_core_replication_recordssummaryNumber of records transferred in a replication run.quantile, local_namespace, local_mount_path, source_address, source_namespace, source_mount_path
stronghold_core_replication_durationsummaryDuration of a replication run in seconds.quantile, local_namespace, local_mount_path, source_address, source_namespace, source_mount_path

Automatic snapshots

Metrics of automatic Raft snapshots (sys/storage/raft/snapshot-auto). Available in Stronghold EE. snapshot_config_name is the name of the automatic snapshot configuration. The metrics are emitted by the node that performs the snapshot (the active node).

MetricTypeDescriptionLabels
stronghold_autosnapshots_save_durationsummaryDuration of taking and saving a snapshot to the configured storage (only successful runs), ms.quantile, cluster, snapshot_config_name
stronghold_autosnapshots_last_success_timegaugeTime of the last successful snapshot as a Unix timestamp (seconds).cluster, snapshot_config_name
stronghold_autosnapshots_snapshot_sizesummarySize of a saved snapshot in bytes (only successful runs).quantile, cluster, snapshot_config_name
stronghold_autosnapshots_save_errorscounterNumber of failed snapshot attempts.cluster, snapshot_config_name
stronghold_autosnapshots_rotate_durationsummaryDuration of rotating snapshots (deleting the snapshots that exceed the retain limit); also recorded when there is nothing to delete, ms.quantile, cluster, snapshot_config_name
stronghold_autosnapshots_snapshots_in_storagegaugeNumber of snapshots in the storage after the rotation (set if the list of snapshots was read successfully).cluster, snapshot_config_name
stronghold_autosnapshots_total_snapshot_sizegaugeTotal size in bytes of the snapshot files in the local storage directory (only for the local storage type).cluster, snapshot_config_name
stronghold_autosnapshots_percent_maxspace_usedgaugeShare of the local storage space limit used by the snapshots (a value from 0 to 1; only for the local storage type).cluster, snapshot_config_name
stronghold_core_snapshot_auto_failedgaugeAutomatic snapshot failure flag: 1 if the last snapshot attempt of the configuration failed, otherwise 0.cluster, config
stronghold_autosnapshots_rotate_failedgaugeSnapshot rotation failure flag: 1 if deleting old snapshots failed after a successful snapshot, otherwise 0.cluster, snapshot_config_name

The DP module alerts D8StrongholdAutoSnapshotFailed and D8StrongholdAutoSnapshotRotationFailed use stronghold_core_snapshot_auto_failed and stronghold_autosnapshots_rotate_failed. For your own alerts on failed automatic snapshots, you can also use stronghold_autosnapshots_save_errors and stronghold_autosnapshots_last_success_time. An alert example is in Alerting rule examples.

PKI secrets engine

In the names of the request metrics, <mount> is the mount point of the PKI engine without the trailing slash, where /, - and . are replaced by _ (for example, the mount pki_int/ gives pki_int). The timer and the counter of one operation have the same name, so in the Prometheus output one of these series can be dropped as inconsistent in type; check the output on a live node.

Requests

MetricTypeDescriptionLabels
stronghold_<mount>_issuesummaryDuration of issuing a certificate (issue/:role), ms.quantile, role, namespace
stronghold_<mount>_signsummaryDuration of signing a CSR (sign/:role), ms.quantile, role, namespace
stronghold_<mount>_sign_verbatimsummaryDuration of signing a CSR verbatim (sign-verbatim), ms.quantile, role, namespace
stronghold_<mount>_revokesummaryDuration of revoking a certificate, ms.quantile, namespace
stronghold_<mount>_issuecounterNumber of successful issue requests.role, namespace
stronghold_<mount>_signcounterNumber of successful sign requests.role, namespace
stronghold_<mount>_sign_verbatimcounterNumber of successful sign-verbatim requests.role, namespace
stronghold_<mount>_revokecounterNumber of successful revoke requests.namespace
stronghold_<mount>_issue_failurecounterNumber of failed issue requests.role, namespace
stronghold_<mount>_sign_failurecounterNumber of failed sign requests.role, namespace
stronghold_<mount>_sign_verbatim_failurecounterNumber of failed sign-verbatim requests.role, namespace
stronghold_<mount>_revoke_failurecounterNumber of failed revoke requests.namespace

Certificate counts

MetricTypeDescriptionLabels
stronghold_secrets_pki_<mount_uuid>_total_certificates_storedgaugeTotal number of certificates stored in the engine. <mount_uuid> is the backend UUID with - replaced by _. Published only if publish_stored_certificate_count_metrics = true in the tidy configuration.—
stronghold_secrets_pki_<mount_uuid>_total_revoked_certificates_storedgaugeTotal number of revoked certificates stored in the engine. Published only if publish_stored_certificate_count_metrics = true.—

Tidy operation

MetricTypeDescriptionLabels
stronghold_secrets_pki_tidy_start_time_epochgaugeStart time of the current tidy operation as a Unix timestamp (seconds); 0 after the tidy finished.—
stronghold_secrets_pki_tidy_cert_store_total_entriesgaugeNumber of entries in the certificate store at the start of the tidy of the certificate store.—
stronghold_secrets_pki_tidy_cert_store_current_entrygaugeIndex of the certificate store entry being processed.—
stronghold_secrets_pki_tidy_cert_store_total_entries_remaininggaugeNumber of certificate store entries remaining to be processed.—
stronghold_secrets_pki_tidy_revoked_cert_total_entriesgaugeNumber of revoked certificate entries at the start of the tidy of revoked certificates.—
stronghold_secrets_pki_tidy_revoked_cert_current_entrygaugeIndex of the revoked certificate entry being processed.—
stronghold_secrets_pki_tidy_revoked_cert_total_entries_remaininggaugeNumber of revoked certificate entries remaining to be processed.—
stronghold_secrets_pki_tidy_revoked_cert_entries_incorrect_issuersgaugeNumber of revoked certificate entries with a missing or incorrect issuer.—
stronghold_secrets_pki_tidy_revoked_cert_entries_fixed_issuersgaugeNumber of revoked certificate entries whose issuer was fixed by the tidy.—
stronghold_secrets_pki_tidy_durationsummaryDuration of a tidy operation (recorded at its end), ms.quantile
stronghold_secrets_pki_tidy_cert_store_deleted_countcounterNumber of certificate store entries deleted by tidy.—
stronghold_secrets_pki_tidy_revoked_cert_deleted_countcounterNumber of revoked certificate entries deleted by tidy.—
stronghold_secrets_pki_tidy_successcounterNumber of successfully finished tidy operations.—
stronghold_secrets_pki_tidy_failurecounterNumber of failed tidy operations.—

Database secrets engine

The metrics are emitted by the wrapper of database plugins. In the names, <operation> is the plugin operation and <db_type> is the database type returned by the plugin (for example, postgresql; - is replaced by _). Operations of plugins of the current interface: Initialize, NewUser, UpdateUser, DeleteUser, Close, PluginVersion; of legacy plugins: Initialize, CreateUser, RenewUser, RevokeUser, RotateRootCredentials, GenerateCredentials, SetCredentials, Close. The timer and the counter of an operation have the same name (see the note in the PKI section).

MetricTypeDescriptionLabels
stronghold_database_<operation>summaryDuration of a database plugin operation (all database types), ms.quantile
stronghold_database_<db_type>_<operation>summaryDuration of a database plugin operation for the given database type, ms.quantile
stronghold_database_<operation>counterNumber of database plugin operation calls (all database types).—
stronghold_database_<db_type>_<operation>counterNumber of calls of the operation for the given database type.—
stronghold_database_<operation>_errorcounterNumber of failed operation calls (all database types).—
stronghold_database_<db_type>_<operation>_errorcounterNumber of failed operation calls for the given database type.—
stronghold_secrets_database_backend_pluginInstances_countgaugeNumber of open plugin instances (connections) in a Database engine mount, by database type. Collected every 10 minutes.dbType

The collection process of secrets_database_backend_pluginInstances_count reports its own metrics stronghold_metrics_collection_interval, stronghold_metrics_collection and stronghold_metrics_collection_error without labels. These metrics are described in Tokens, secret leases and usage gauges.

Other secrets engines and plugins

MetricTypeDescriptionLabels
stronghold_ldap_check_out_unavailable_<set_name>counterNumber of check-out requests of the LDAP secrets engine (library of service accounts) that found no free account in the set <set_name>.—
stronghold_builtin_ent_plugin_<type>gaugeNumber of mounts of the built-in plugin of the given type that is available in Stronghold EE only. Updated every second from the cache of loop gauges.cluster

Quotas

Metrics of rate limit and lease count quotas. For rate limit quotas, see also Quotas.

MetricTypeDescriptionLabels
stronghold_quota_rate_limit_violationcounterNumber of requests rejected because of exceeding the rate limit quota. name is the name of the quota.cluster, name
stronghold_quota_lease_count_maxgaugeMaximum number of leases allowed by the lease count quota. Updated when a request is checked against the quota.cluster, name
stronghold_quota_lease_count_countergaugeCurrent number of leases counted by the lease count quota. Updated when a request is checked against the quota.cluster, name
stronghold_quota_lease_count_violationcounterNumber of requests rejected because of exceeding the lease count quota.cluster, name

Runtime and process

The Go runtime metrics are collected every second (enabled by default). They have no cluster label. In addition, the Prometheus output contains the standard Go and process metrics of the client_golang library (go_*, process_*), which are not described here.

MetricTypeDescriptionLabels
stronghold_runtime_num_goroutinesgaugeNumber of goroutines. Used by the DP module alerts to detect nodes that export metrics.—
stronghold_runtime_alloc_bytesgaugeBytes of allocated heap objects (Alloc of the Go runtime).—
stronghold_runtime_sys_bytesgaugeTotal bytes of memory obtained by the Go runtime from the OS (Sys).—
stronghold_runtime_malloc_countgaugeCumulative number of heap object allocations (Mallocs).—
stronghold_runtime_free_countgaugeCumulative number of freed heap objects (Frees).—
stronghold_runtime_heap_objectsgaugeNumber of allocated heap objects (HeapObjects).—
stronghold_runtime_total_gc_pause_nsgaugeCumulative GC stop-the-world pause time in nanoseconds (PauseTotalNs).—
stronghold_runtime_total_gc_runsgaugeNumber of completed GC cycles (NumGC).—
stronghold_runtime_gc_pause_nssummaryPause duration of recent GC cycles in nanoseconds (not in milliseconds): a sample per GC cycle since the previous measurement.quantile