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:
- The name starts with the prefix
stronghold_. The prefix is themetrics_prefixparameter of thetelemetryblock (strongholdby default). The names on this page are given with the default prefix. - The parts of the key are joined with
_, and then the characters space,.,=,-and/are replaced with_. The case is kept: a keyraft,commitTimegivesstronghold_raft_commitTime; a keycore,seal-with-requestgivesstronghold_core_seal_with_request. - Names with variable parts are written with a placeholder in angle brackets, for example
stronghold_audit_<device>_log_request. - 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 examplestronghold_<hostname>_core_active. Withdisable_hostname = true, metric names are the same on all nodes. Withenable_hostname_label = truethehostlabel with the node name is added to all metrics instead.
Mapping of metric kinds to Prometheus types:
| Kind | Prometheus type | Notes |
|---|---|---|
| Gauge | gauge | The last set value. |
| Counter | counter | The name is not changed, the _total suffix is not added. |
| Timer and sample | summary | The 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. Withprometheus_retention_time = 0the Prometheus sink is disabled. - The
HELPtext 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.
| Label | Value |
|---|---|
cluster | The cluster name: the cluster_name configuration parameter or, if it is not set, the automatically generated cluster name. |
quantile | The summary quantile: 0.5, 0.9 or 0.99. |
namespace | The namespace path without the trailing slash; root for the root namespace. |
mount_point | The 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_path | The mount path of a secrets engine or an auth method (for stronghold_route_<operation>_mount). |
auth_method | The auth method type; for tokens also token and response_wrapping. |
secret_engine | The secrets engine type. |
creation_ttl | The TTL bucket on creation: 1m, 10m, 20m, 1h, 2h, 1d, 2d, 7d, 30d or +Inf. |
token_type | The token type: service, batch, default and so on. |
policy | The policy name. |
expiring | The expiration time of leases rounded to lease_metrics_epsilon. |
gauge | The name of the usage gauge collection process. |
peer_id | The ID of a Raft node (peer). |
node_id | The ID of a Raft node in the autopilot metrics. |
database | The Raft BoltDB database: logstore or fsm. |
name | The quota name. |
snapshot_config_name | The name of the automatic snapshot configuration. |
role | The PKI role name. |
term | The barrier keyring term. |
type | Depends on the metric: the mount table type (auth, logical), the activity log client type (entity, direct_token) or the replication mode of a node. |
local | true for local mounts, false for replicated ones. |
dbType | The database type of a plugin instance. |
queue_id | The queue ID of the expiration job manager (the mount accessor). |
rpcType | The Raft RPC type. |
method | The operation of replication RPC calls: get or update. |
result | The result of a KV replication run: success or error. |
local_namespace, local_mount_path | The namespace and the path of the local mount of KV replication. |
source_address, source_namespace, source_mount_path | The 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.
| Alert | Metrics |
|---|---|
D8StrongholdNoActiveNodes | stronghold_core_active |
D8StrongholdSealedNodesPresent | stronghold_core_unsealed, stronghold_runtime_num_goroutines |
D8StrongholdClusterNotHealthy | stronghold_autopilot_healthy |
D8StrongholdQuorumInCriticalState | stronghold_autopilot_failure_tolerance |
D8StrongholdAbsentMetrics | stronghold_runtime_num_goroutines |
D8StrongholdAutoSnapshotFailed | stronghold_core_snapshot_auto_failed |
D8StrongholdAutoSnapshotRotationFailed | stronghold_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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_core_unsealed | gauge | 1 if the node is unsealed, 0 if it is sealed. | cluster |
stronghold_core_active | gauge | 1 on the active (leader) node, 0 on a standby node. | cluster |
stronghold_core_performance_standby | gauge | 1 if the node is a performance standby, otherwise 0. | cluster |
stronghold_core_in_flight_requests | gauge | Number of requests being processed by the node at the moment. | cluster |
stronghold_core_locked_users | gauge | Number 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_entries | gauge | Number of entries in the mount table (secrets engines or auth methods). Updated when the table is persisted. | cluster, type, local |
stronghold_core_mount_table_size | gauge | Size of the serialized (compressed) mount table in bytes, before encryption by the barrier. | cluster, type, local |
stronghold_core_license_expiration_time_epoch | gauge | License expiration time as a Unix timestamp (seconds). Set when the license is loaded or updated. | — |
Timers
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_core_unseal | summary | Duration of the unseal operation, ms. | quantile |
stronghold_core_post_unseal | summary | Duration of post-unseal setup (starting subsystems after unseal), ms. | quantile |
stronghold_core_pre_seal | summary | Duration of pre-seal shutdown of subsystems, ms. | quantile |
stronghold_core_seal | summary | Duration of the seal operation, ms. | quantile |
stronghold_core_seal_with_request | summary | Duration of sealing triggered by a request (sys/seal), ms. | quantile |
stronghold_core_seal_internal | summary | Duration of internal sealing of the core, ms. | quantile |
stronghold_core_step_down | summary | Duration of the leader step-down operation, ms. | quantile |
stronghold_core_leadership_setup_failed | summary | Duration of the active period of a node whose leadership setup failed (time from becoming active until the setup error), ms. | quantile |
stronghold_core_leadership_lost | summary | Duration 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.
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_seal_unreachable_time | gauge | Time 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_time | summary | Duration of a seal encrypt call (all seal types), ms. | quantile |
stronghold_seal_<type>_encrypt_time | summary | Duration of a seal encrypt call for the given seal wrapper type, ms. | quantile |
stronghold_seal_encrypt | counter | Number of seal encrypt calls (all types). | — |
stronghold_seal_<type>_encrypt | counter | Number of seal encrypt calls for the given wrapper type. | — |
stronghold_seal_encrypt_error | counter | Number of failed seal encrypt calls (all types). | — |
stronghold_seal_<type>_encrypt_error | counter | Number of failed encrypt calls for the given wrapper type. | — |
stronghold_seal_decrypt_time | summary | Duration of a seal decrypt call (all seal types), ms. | quantile |
stronghold_seal_<type>_decrypt_time | summary | Duration of a seal decrypt call for the given seal wrapper type, ms. | quantile |
stronghold_seal_decrypt | counter | Number of seal decrypt calls (all types). | — |
stronghold_seal_<type>_decrypt | counter | Number of seal decrypt calls for the given wrapper type. | — |
stronghold_seal_decrypt_error | counter | Number of failed seal decrypt calls (all types). | — |
stronghold_seal_<type>_decrypt_error | counter | Number of failed decrypt calls for the given wrapper type. | — |
stronghold_seal_envelope_encrypt | summary | Duration of envelope encryption of a value, ms. | quantile |
stronghold_seal_envelope_decrypt | summary | Duration of envelope decryption of a value, ms. | quantile |
Requests, login and routing
Request handling
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_core_handle_request | summary | Duration of handling a request in the core, ms. | quantile |
stronghold_core_handle_login_request | summary | Duration of handling a login request, ms. | quantile |
stronghold_core_fetch_acl_and_token | summary | Duration of building the ACL and looking up the token of a request, ms. | quantile |
stronghold_core_check_token | summary | Duration of checking the token and policies of a request (ACL check), ms. | quantile |
stronghold_route_<operation>_mount | summary | Duration 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)
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_ha_rpc_client_forward | summary | Duration of forwarding a request from a standby node to the active node, ms. | quantile |
stronghold_ha_rpc_client_forward_errors | counter | Number of failed request forwardings to the active node. | — |
stronghold_ha_rpc_client_echo | summary | Duration of the periodic echo (heartbeat) RPC from a standby node to the active node, ms. | quantile |
stronghold_ha_rpc_client_echo_errors | counter | Number of failed echo RPCs from a standby node to the active node. | — |
Rollback manager and events
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_rollback_queued | gauge | Number of rollback operations waiting in the queue. | — |
stronghold_rollback_inflight | gauge | Number of rollback operations being executed. | — |
stronghold_rollback_waiting | summary | Duration of waiting of a rollback operation in the queue before execution, ms. | quantile |
stronghold_rollback_attempt | summary | Duration of one rollback attempt, ms. | quantile |
stronghold_events_subscriptions | gauge | Number 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_token_creation | counter | Number 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_creation | counter | Number 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_root | counter | Number of created root tokens. | — |
stronghold_token_createAccessor | summary | Duration of creating a token accessor, ms. | quantile |
stronghold_token_create | summary | Duration of creating a token, ms. | quantile |
stronghold_token_store | summary | Duration of storing a token entry, ms. | quantile |
stronghold_token_lookup | summary | Duration of looking up a token, ms. | quantile |
stronghold_token_revoke | summary | Duration of revoking a token, ms. | quantile |
stronghold_token_revoke_tree | summary | Duration of revoking a token tree (the token and its children), ms. | quantile |
Usage gauges (active node)
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_token_count | gauge | Number of tokens (valid, tracked by the expiration manager) per namespace. | cluster, namespace |
stronghold_token_count_by_policy | gauge | Number of tokens per namespace and policy. A token with several policies is counted for each of them. | cluster, namespace, policy |
stronghold_token_count_by_auth | gauge | Number 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_ttl | gauge | Number 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_expiration | gauge | Number 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_count | gauge | Number 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_metrics_collection_interval | summary | Configured 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_collection | summary | Duration 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_error | counter | Number 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_expire_num_leases | gauge | Total number of leases (including tokens with leases) tracked by the expiration manager. | — |
stronghold_expire_num_irrevocable_leases | gauge | Number of leases that could not be revoked (irrevocable leases). | — |
stronghold_expire_lease_expiration | counter | Number of lease revocation jobs started by the expiration workers (a lease expiry triggers a revocation). | cluster, namespace |
stronghold_expire_lease_expiration_time_in_queue | summary | Duration of a revocation job waiting in the queue (from scheduling until a worker started it), ms. | quantile, cluster, namespace |
stronghold_expire_lease_expiration_error | counter | Number of failed lease revocation jobs. | cluster, namespace |
stronghold_expire_job_manager_queue_length | summary | Length 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_jobs | summary | Total number of jobs in all queues of the expiration job manager, sampled when a job is added or taken. | quantile, cluster |
Timers
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_expire_revoke | summary | Duration of revoking a lease, ms. | quantile |
stronghold_expire_lazy_revoke | summary | Duration of lazy revoking of a lease, ms. | quantile |
stronghold_expire_revoke_common | summary | Duration of common part of revoking a lease, ms. | quantile |
stronghold_expire_revoke_force | summary | Duration of force-revoking leases, ms. | quantile |
stronghold_expire_revoke_prefix | summary | Duration of revoking all leases by a path prefix, ms. | quantile |
stronghold_expire_revoke_by_token | summary | Duration of revoking all leases of a token, ms. | quantile |
stronghold_expire_renew | summary | Duration of renewing a lease, ms. | quantile |
stronghold_expire_renew_token | summary | Duration of renewing a token, ms. | quantile |
stronghold_expire_register | summary | Duration of registering a lease of a secret, ms. | quantile |
stronghold_expire_register_auth | summary | Duration of registering a lease of an auth token, ms. | quantile |
stronghold_expire_fetch_lease_times | summary | Duration of fetching the time data of a lease, ms. | quantile |
stronghold_expire_fetch_lease_times_by_token | summary | Duration of fetching the time data of the lease of a token, ms. | quantile |
Identity and client activity
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_identity_num_entities | gauge | Total number of identity entities. Updated every 10 minutes on the active node (not on standby nodes and DR secondary clusters). | — |
stronghold_identity_entity_count | gauge | Number of entities per namespace. | cluster, namespace |
stronghold_identity_entity_alias_count | gauge | Number of entities per auth method mount. mount_point includes the auth/ prefix. | cluster, namespace, auth_method, mount_point |
stronghold_identity_entity_active_partial_month | gauge | Number 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_monthly | gauge | Number 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_monthly | gauge | Number 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_period | gauge | Number 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_period | gauge | Number 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_creation | counter | Number 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_size | counter | Number 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_write | summary | Duration of writing an activity log segment to storage, ms. | quantile, cluster |
stronghold_identity_create_entity | summary | Duration of creating an entity, ms. | quantile |
stronghold_identity_create_or_fetch_entity | summary | Duration of creating or fetching an entity at login, ms. | quantile |
stronghold_identity_upsert_entity | summary | Duration of creating or updating an entity, ms. | quantile |
stronghold_identity_upsert_entity_txn | summary | Duration of creating or updating an entity within a transaction, ms. | quantile |
stronghold_identity_upsert_group | summary | Duration of creating or updating a group, ms. | quantile |
stronghold_identity_upsert_group_txn | summary | Duration of creating or updating a group within a transaction, ms. | quantile |
stronghold_identity_refresh_external_groups | summary | Duration 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.
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_audit_log_request | summary | Duration of logging a request to all audit devices, ms. | quantile |
stronghold_audit_log_response | summary | Duration of logging a response to all audit devices, ms. | quantile |
stronghold_audit_log_request_failure | counter | Number of requests that could not be logged by the audit devices. | — |
stronghold_audit_log_response_failure | counter | Number of responses that could not be logged by the audit devices. | — |
stronghold_audit_<device>_log_request | summary | Duration of logging a request to the given audit device, ms. | quantile |
stronghold_audit_<device>_log_response | summary | Duration of logging a response to the given audit device, ms. | quantile |
stronghold_audit_fallback_success | counter | Number of requests and responses successfully written by the fallback audit device. | — |
stronghold_audit_fallback_miss | counter | Number of requests and responses that the fallback audit device failed to write. | — |
stronghold_audit_<fallback_device>_log_request | summary | Duration of logging a request to the fallback audit device, ms. | quantile |
stronghold_audit_<fallback_device>_log_response | summary | Duration of logging a response to the fallback audit device, ms. | quantile |
Policies and ACL
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_policy_set_policy | summary | Duration of creating or updating a policy, ms. | quantile |
stronghold_policy_get_policy | summary | Duration of reading a policy, ms. | quantile |
stronghold_policy_list_policies | summary | Duration of listing policies, ms. | quantile |
stronghold_policy_delete_policy | summary | Duration 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_barrier_put | summary | Duration of writing a key through the barrier (encryption and write to the backend), ms. | quantile |
stronghold_barrier_get | summary | Duration of reading a key through the barrier (read from the backend and decryption), ms. | quantile |
stronghold_barrier_delete | summary | Duration of deleting a key through the barrier, ms. | quantile |
stronghold_barrier_list | summary | Duration of listing keys through the barrier, ms. | quantile |
stronghold_barrier_estimated_encryptions | counter | Number 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_rotation | counter | Number of automatic barrier key rotations. | — |
Physical storage cache
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_cache_write | counter | Number of writes to the physical storage cache. | — |
stronghold_cache_hit | counter | Number of reads served from the physical storage cache. | — |
stronghold_cache_miss | counter | Number of reads that were not found in the physical storage cache. | — |
stronghold_cache_delete | counter | Number of key deletions from the physical storage cache. | — |
Storage packer
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_storage_packer_get_item | summary | Duration of reading an item from the storage packer (identity buckets), ms. | quantile |
stronghold_storage_packer_put_item | summary | Duration of writing an item to the storage packer, ms. | quantile |
stronghold_storage_packer_put_bucket | summary | Duration of writing a bucket to the storage packer, ms. | quantile |
stronghold_storage_packer_delete_items | summary | Duration of deleting items from the storage packer, ms. | quantile |
Other storage backends (only for the configured backend)
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_consul_get | summary | Duration of a get call to the Consul backend, ms. | quantile |
stronghold_consul_list | summary | Duration of a list call to the Consul backend, ms. | quantile |
stronghold_consul_transaction | summary | Duration of a transaction on the Consul backend, ms. | quantile |
stronghold_etcd_put | summary | Duration of a put call to the etcd backend, ms. | quantile |
stronghold_etcd_get | summary | Duration of a get call to the etcd backend, ms. | quantile |
stronghold_etcd_delete | summary | Duration of a delete call to the etcd backend, ms. | quantile |
stronghold_etcd_list | summary | Duration of a list call to the etcd backend, ms. | quantile |
stronghold_postgres_put | summary | Duration of a put call to the PostgreSQL backend, ms. | quantile |
stronghold_postgres_get | summary | Duration of a get call to the PostgreSQL backend, ms. | quantile |
stronghold_postgres_delete | summary | Duration of a delete call to the PostgreSQL backend, ms. | quantile |
stronghold_postgres_list | summary | Duration of a list call to the PostgreSQL backend, ms. | quantile |
stronghold_postgres_transaction | summary | Duration 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_storage_stats_term | gauge | Current Raft term of the node. | cluster, peer_id |
stronghold_raft_storage_stats_commit_index | gauge | Index of the last committed Raft log entry known to the node. | cluster, peer_id |
stronghold_raft_storage_stats_applied_index | gauge | Index of the last Raft log entry applied to the FSM on the node. | cluster, peer_id |
stronghold_raft_storage_stats_fsm_pending | gauge | Number of Raft log entries waiting to be applied to the FSM. | cluster, peer_id |
BoltDB statistics
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_storage_bolt_freelist_free_pages | gauge | Number of free pages in the BoltDB database. | cluster, database |
stronghold_raft_storage_bolt_freelist_pending_pages | gauge | Number of pending pages in the BoltDB freelist. | cluster, database |
stronghold_raft_storage_bolt_freelist_allocated_bytes | gauge | Bytes allocated for the BoltDB freelist. | cluster, database |
stronghold_raft_storage_bolt_freelist_used_bytes | gauge | Bytes used by the BoltDB freelist. | cluster, database |
stronghold_raft_storage_bolt_transaction_started_read_transactions | gauge | Total number of started read transactions. | cluster, database |
stronghold_raft_storage_bolt_transaction_currently_open_read_transactions | gauge | Number of currently open read transactions. | cluster, database |
stronghold_raft_storage_bolt_page_count | gauge | Number of page allocations (cumulative counter value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_page_bytes_allocated | gauge | Bytes allocated for pages (cumulative value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_cursor_count | gauge | Number of created cursors (cumulative value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_node_count | gauge | Number of node allocations (cumulative value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_node_dereferences | gauge | Number of node dereferences (cumulative value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_rebalance_count | gauge | Number of node rebalances (cumulative value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_rebalance_time | summary | Cumulative rebalance time of BoltDB (TxStats), ms, sampled every second. | quantile, cluster, database |
stronghold_raft_storage_bolt_split_count | gauge | Number of node splits (cumulative value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_spill_count | gauge | Number of node spills (cumulative value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_spill_time | summary | Cumulative spill time of BoltDB (TxStats), ms, sampled every second. | quantile, cluster, database |
stronghold_raft_storage_bolt_write_count | gauge | Number of writes to disk (cumulative value of BoltDB TxStats). | cluster, database |
stronghold_raft_storage_bolt_write_time | counter | Cumulative 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)
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_storage_follower_last_heartbeat_ms | gauge | Time 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_delta | gauge | Difference between the applied index of the leader and the follower. Emitted by the leader every second. | peer_id |
Operation timers
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_storage_get | summary | Duration of a get call to the Raft backend, ms. | quantile |
stronghold_raft_storage_put | summary | Duration of a put call to the Raft backend, ms. | quantile |
stronghold_raft_storage_delete | summary | Duration of a delete call to the Raft backend, ms. | quantile |
stronghold_raft_storage_list | summary | Duration of a list call to the Raft backend, ms. | quantile |
stronghold_raft_storage_transaction | summary | Duration of a transaction on the Raft backend, ms. | quantile |
stronghold_raft_storage_entry_size | summary | Size in bytes of a Raft command (a batch of storage operations) sent to the log. | quantile |
stronghold_raft_get | summary | Duration of a read from the Raft FSM (duplicates stronghold_raft_storage_fsm_get), ms. | quantile |
stronghold_raft_list | summary | Duration of listing keys in the Raft FSM (duplicates stronghold_raft_storage_fsm_list), ms. | quantile |
stronghold_raft_storage_fsm_get | summary | Duration of a read from the Raft FSM, ms. | quantile |
stronghold_raft_storage_fsm_put | summary | Duration of a write to the Raft FSM, ms. | quantile |
stronghold_raft_storage_fsm_delete | summary | Duration of a key deletion in the Raft FSM, ms. | quantile |
stronghold_raft_storage_fsm_delete_prefix | summary | Duration of deleting keys by prefix in the Raft FSM, ms. | quantile |
stronghold_raft_storage_fsm_list | summary | Duration of listing keys in the Raft FSM, ms. | quantile |
stronghold_raft_storage_fsm_open_db_file | summary | Duration of opening the FSM database file, ms. | quantile |
stronghold_raft_storage_fsm_write_snapshot | summary | Duration of writing a snapshot of the FSM, ms. | quantile |
stronghold_raft_storage_fsm_restore_snapshot | summary | Duration 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_state_follower | counter | Number of transitions of the node to the follower state. | — |
stronghold_raft_state_candidate | counter | Number of transitions of the node to the candidate state (starts of an election). | — |
stronghold_raft_state_leader | counter | Number of transitions of the node to the leader state. | — |
stronghold_raft_transition_heartbeat_timeout | counter | Number of heartbeat timeouts: the follower did not receive a heartbeat from the leader and started an election. | — |
stronghold_raft_transition_leader_lease_timeout | counter | Number of times the leader lost its lease because it could not contact a quorum of followers. | — |
stronghold_raft_peers | gauge | Number of servers in the latest Raft configuration. Updated by the leader when replication starts or stops. | — |
stronghold_raft_candidate_electSelf | summary | Duration of a node election attempt (vote request to all peers), ms. | quantile |
stronghold_raft_candidate_preElectSelf | summary | Duration of the pre-vote phase of an election, ms. | quantile |
Log replication and RPC
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_apply | counter | Number of log entries submitted to Raft for application (Apply calls) on the leader. | — |
stronghold_raft_barrier | counter | Number of Barrier calls on the leader. | — |
stronghold_raft_verify_leader | counter | Number of VerifyLeader calls. | — |
stronghold_raft_restore | counter | Number of Raft restores from a snapshot (Restore calls). | — |
stronghold_raft_commitTime | summary | Duration of committing a log entry (from submission to the quorum acknowledgement) on the leader, ms. | quantile |
stronghold_raft_commitNumLogs | gauge | Number of log entries in the last batch committed by the leader. | — |
stronghold_raft_leader_dispatchLog | summary | Duration of the leader writing a batch of log entries to its own log store, ms. | quantile |
stronghold_raft_leader_dispatchNumLogs | gauge | Number of log entries in the last batch written by the leader to its log store. | — |
stronghold_raft_leader_lastContact | summary | Time 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_oldestLogAge | gauge | Age in milliseconds of the oldest entry in the leader log store. Emitted by the leader. | — |
stronghold_raft_rpc_appendEntries | summary | Duration of processing an AppendEntries RPC on a follower, ms. | quantile |
stronghold_raft_rpc_appendEntries_storeLogs | summary | Duration of storing log entries received in AppendEntries on a follower, ms. | quantile |
stronghold_raft_rpc_appendEntries_processLogs | summary | Duration of processing (commit) log entries received in AppendEntries on a follower, ms. | quantile |
stronghold_raft_rpc_processHeartbeat | summary | Duration of processing a heartbeat RPC on a follower, ms. | quantile |
stronghold_raft_rpc_requestVote | summary | Duration of processing a RequestVote RPC, ms. | quantile |
stronghold_raft_rpc_installSnapshot | summary | Duration of processing an InstallSnapshot RPC on a follower, ms. | quantile |
Replication from the leader and network transport
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_replication_heartbeat | summary | Duration of a heartbeat sent by the leader to a follower, ms. | quantile, peer_id |
stronghold_raft_replication_installSnapshot | summary | Duration of sending a snapshot by the leader to a follower, ms. | quantile, peer_id |
stronghold_raft_replication_appendEntries_rpc | summary | Duration of an AppendEntries RPC from the leader to a follower, ms. | quantile, peer_id |
stronghold_raft_replication_appendEntries_logs | counter | Number of log entries replicated by the leader to the follower. | peer_id |
stronghold_raft_net_getRPCType | summary | Duration of reading the RPC type from the connection in the network transport, ms. | quantile |
stronghold_raft_net_rpcDecode | summary | Duration of decoding an incoming RPC in the network transport, ms. | quantile, rpcType |
stronghold_raft_net_rpcEnqueue | summary | Duration of putting an incoming RPC into the processing queue of the Raft core, ms. | quantile, rpcType |
stronghold_raft_net_rpcRespond | summary | Duration of waiting for and sending the response to an RPC, ms. | quantile, rpcType |
FSM, snapshots and goroutine saturation
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_fsm_apply | summary | Duration of applying a single log entry to the FSM, ms. | quantile |
stronghold_raft_fsm_applyBatch | summary | Duration of applying a batch of log entries to the FSM, ms. | quantile |
stronghold_raft_fsm_applyBatchNum | summary | Number of log entries in a batch applied to the FSM. | quantile |
stronghold_raft_fsm_enqueue | summary | Duration of putting log entries into the FSM queue, ms. | quantile |
stronghold_raft_fsm_store_config | summary | Duration of applying a configuration change to the FSM, ms. | quantile |
stronghold_raft_fsm_snapshot | summary | Duration of creating an FSM snapshot, ms. | quantile |
stronghold_raft_fsm_restore | summary | Duration of restoring the FSM from a snapshot, ms. | quantile |
stronghold_raft_fsm_lastRestoreDuration | gauge | Duration in milliseconds of the last FSM restore from a snapshot. | — |
stronghold_raft_snapshot_takeSnapshot | summary | Duration of the whole process of taking a snapshot (including log compaction), ms. | quantile |
stronghold_raft_snapshot_create | summary | Duration of creating a snapshot (FSM snapshot), ms. | quantile |
stronghold_raft_snapshot_persist | summary | Duration of writing a snapshot to the snapshot store, ms. | quantile |
stronghold_raft_compactLogs | summary | Duration of compacting the Raft log, ms. | quantile |
stronghold_raft_removeOldLogs | summary | Duration of removing old log entries after a snapshot, ms. | quantile |
stronghold_raft_restoreUserSnapshot | summary | Duration of restoring a user snapshot (sys/storage/raft/snapshot restore), ms. | quantile |
stronghold_raft_thread_main_saturation | summary | Saturation 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_saturation | summary | Saturation 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)
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_raft_boltdb_getLog | summary | Duration of reading a log entry from the BoltDB log store, ms. | quantile |
stronghold_raft_boltdb_storeLogs | summary | Duration of writing a batch of log entries to the BoltDB log store (including the commit to disk), ms. | quantile |
stronghold_raft_boltdb_logSize | summary | Size in bytes of a log entry written to the log store. | quantile |
stronghold_raft_boltdb_logsPerBatch | summary | Number of log entries in a batch written to the log store. | quantile |
stronghold_raft_boltdb_logBatchSize | summary | Total size in bytes of a batch of log entries written to the log store. | quantile |
stronghold_raft_boltdb_writeCapacity | summary | Estimated 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.
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_autopilot_healthy | gauge | 1 if the whole cluster is healthy according to autopilot, otherwise 0. | — |
stronghold_autopilot_failure_tolerance | gauge | Number 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_healthy | gauge | 1 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)
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_core_replication_performance_primary | gauge | 1 if the cluster is a performance replication primary, otherwise 0. | cluster |
stronghold_core_replication_performance_secondary | gauge | 1 if the cluster is a performance replication secondary, otherwise 0. | cluster |
stronghold_core_replication_dr_primary | gauge | 1 if the cluster is a DR replication primary, otherwise 0. | cluster |
stronghold_core_replication_dr_secondary | gauge | 1 if the cluster is a DR replication secondary, otherwise 0. | cluster |
stronghold_core_replication_write_undo_logs | gauge | 1 if writing of undo logs is enabled on the node, otherwise 0. | cluster |
WAL
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_replication_wal_last_wal | gauge | Index of the last WAL entry on the node. | — |
stronghold_replication_wal_last_dr_wal | gauge | Index of the last WAL entry of the DR type applied on the node. | — |
stronghold_replication_wal_last_performance_wal | gauge | Index of the last WAL entry of the replicated (performance) type applied on the node. | — |
stronghold_replication_fsm_last_remote_wal | gauge | Index of the last WAL entry applied from the remote (primary) cluster. | — |
stronghold_replication_merkle_commit_index | gauge | Index of the last WAL entry committed to the Merkle tree. | — |
stronghold_wal_gc_total | gauge | Number of WAL entries between the first WAL index and the last committed WAL index at the time of the cleanup. | — |
stronghold_wal_gc_deleted | gauge | Number of WAL entries to be deleted by the cleanup pass (up to the buffered last commit index). | — |
stronghold_replication_wal_gc | summary | Duration of a WAL garbage collection pass, ms. | quantile |
stronghold_wal_flushReady | summary | Duration of flushing a batch of WAL entries to storage, ms. | quantile |
stronghold_wal_flushReady_queue_len | summary | Length of the WAL flush queue when a batch is flushed. | quantile |
stronghold_wal_flushReady_batch_size | summary | Size of the group of WAL entries persisted in a flush. | quantile |
stronghold_wal_persistWALs | summary | Duration of persisting WAL entries, ms. | quantile |
stronghold_wal_loadWAL | summary | Duration of loading a WAL entry, ms. | quantile |
stronghold_wal_deleteWALs | summary | Duration of deleting WAL entries, ms. | quantile |
Merkle trees and synchronization
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_merkle_saveCheckpoint | summary | Duration of saving a Merkle tree checkpoint, ms. | quantile |
stronghold_merkle_saveCheckpoint_num_dirty | gauge | Number of dirty pages of the Merkle tree at the time of saving a checkpoint. | — |
stronghold_merkle_flushDirty | summary | Duration of flushing the dirty pages of the Merkle tree, ms. | quantile |
stronghold_merkle_flushDirtyUntil | summary | Duration of flushing the dirty pages of the Merkle tree up to a given index, ms. | quantile |
stronghold_merkle_flushDirty_num_pages | gauge | Number of pages flushed in the last flush. | — |
stronghold_merkle_flushDirty_num_pages_outstanding | gauge | Number of dirty pages remaining after the last flush. | — |
stronghold_merkle_copy_on_write | counter | Number of copy-on-write operations of Merkle tree pages. | — |
stronghold_merkle_reindex | summary | Duration of reindexing the Merkle tree, ms. | quantile |
stronghold_merkle_reindex_flush_trees | summary | Duration of flushing the trees at the end of a reindex, ms. | quantile |
stronghold_merkle_reindex_fixed | summary | Number of corrupted pages fixed by a reindex. | quantile |
stronghold_merkle_remote_state_snapshot | summary | Duration of taking a snapshot of the remote Merkle tree state, ms. | quantile |
stronghold_merkle_composite_remote_state_snapshot | summary | Duration of taking a snapshot of the remote composite Merkle tree state, ms. | quantile |
stronghold_merkle_diff_conflicts | gauge | Number of conflicting keys found in the last Merkle tree comparison. | — |
stronghold_replication_merkleDiff | summary | Duration of the Merkle tree comparison with the remote cluster, ms. | quantile |
stronghold_replication_merkleSync | summary | Duration of the Merkle tree synchronization with the remote cluster, ms. | quantile |
stronghold_replication_fetchRemoteKeys | summary | Duration of fetching keys from the remote cluster, ms. | quantile |
Log shipper
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_logshipper_fetchKeys | summary | Duration of fetching keys by the log shipper, ms. | quantile |
stronghold_logshipper_streamWALs_missing_guard | counter | Number of WAL stream requests whose guard was not found. | — |
stronghold_logshipper_streamWALs_guard_found | counter | Number of WAL stream requests whose guard was found in the buffer. | — |
stronghold_logshipper_streamWALs_buffer_over_run | counter | Number of buffer overruns while streaming WAL entries. | — |
stronghold_logshipper_streamWALs_scanned_entries | summary | Number 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_length | gauge | Current number of entries in the log shipper buffer. | type |
stronghold_logshipper_buffer_size | gauge | Current size in bytes of the log shipper buffer. | type |
stronghold_logshipper_buffer_max_length | gauge | Maximum number of entries of the log shipper buffer. | type |
stronghold_logshipper_buffer_max_size | gauge | Maximum size in bytes of the log shipper buffer. | type |
Replication RPC: server
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_replication_rpc_server_sync_counter_request | summary | Duration of handling the sync_counter_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_auth_request | summary | Duration of handling the auth_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_fetch_keys_request | summary | Duration of handling the fetch_keys_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_bootstrap_request | summary | Duration of handling the bootstrap_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_conflicting_pages_request | summary | Duration of handling the conflicting_pages_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_sub_page_hashes_request | summary | Duration of handling the sub_page_hashes_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_finalize_merkle_diff_request | summary | Duration of handling the finalize_merkle_diff_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_forwarding_request | summary | Duration of handling the forwarding_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_upsert_group_request | summary | Duration of handling the upsert_group_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_persist_persona_request | summary | Duration of handling the persist_persona_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_register_local_alias_request | summary | Duration of handling the register_local_alias_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_create_entity_request | summary | Duration of handling the create_entity_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_persist_alias_request | summary | Duration of handling the persist_alias_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_guard_hash_request | summary | Duration of handling the guard_hash_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_stream_wals_request | summary | Duration of handling the stream_wals_request call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_echo | summary | Duration of handling the echo call on the replication RPC server, ms. | quantile |
stronghold_replication_rpc_server_save_mfa_response_auth | summary | Duration 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_replication_rpc_client_conflicting_pages | summary | Duration of the conflicting_pages RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_sub_page_hashes | summary | Duration of the sub_page_hashes RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_finalize_merkle_diff | summary | Duration of the finalize_merkle_diff RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_sync_counter | summary | Duration of the sync_counter RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_fetch_keys | summary | Duration of the fetch_keys RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_forward | summary | Duration of the forward RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_register_local_alias | summary | Duration of the register_local_alias RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_create_entity | summary | Duration of the create_entity RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_persist_alias | summary | Duration of the persist_alias RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_save_mfa_auth_response | summary | Duration of the save_mfa_auth_response RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_upsert_group | summary | Duration of the upsert_group RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_stream_wals | summary | Duration of the stream_wals RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_guard_hash | summary | Duration of the guard_hash RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_register_lease | summary | Duration of the register_lease RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_create_token_register_auth_lease | summary | Duration of the create_token_register_auth_lease RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_register_auth | summary | Duration of the register_auth RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_user_failed_login_info | summary | Duration of the user_failed_login_info RPC call from the replication client, ms. | quantile, method |
stronghold_replication_rpc_client_wrap_in_cubbyhole | summary | Duration of the wrap_in_cubbyhole RPC call from the replication client, ms. | quantile |
stronghold_replication_rpc_client_activity_log_fragment | summary | Duration of the activity_log_fragment RPC call from the replication client, ms. | quantile |
Replication RPC: server for standby nodes
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_replication_rpc_standby_server_echo | summary | Duration of handling the echo call on the RPC server of standby nodes, ms. | quantile |
stronghold_replication_rpc_standby_server_register_lease_request | summary | Duration of handling the register_lease_request call on the RPC server of standby nodes, ms. | quantile |
stronghold_replication_rpc_standby_server_register_auth_request | summary | Duration 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_request | summary | Duration 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_request | summary | Duration 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_request | summary | Duration of handling the wrap_token_request call on the RPC server of standby nodes, ms. | quantile |
Replication RPC: DR server
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_replication_rpc_dr_server_fetch_keys_request | summary | Duration of handling the fetch_keys_request call on the DR replication RPC server, ms. | quantile |
stronghold_replication_rpc_dr_server_echo | summary | Duration 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.
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_core_replication_local_mount_count | gauge | Number of local mounts to which KV replication is configured. | — |
stronghold_core_replication_source_mounts_count | gauge | Number of unique source mounts of KV replication. | — |
stronghold_core_replication_source_addresses_count | gauge | Number of unique source addresses (clusters) of KV replication. | — |
stronghold_core_replication_ttl | gauge | TTL of the replication token in seconds. | local_namespace, local_mount_path, source_address, source_namespace, source_mount_path |
stronghold_core_replication_repl_period | gauge | Replication period in minutes. | local_namespace, local_mount_path, source_address, source_namespace, source_mount_path |
stronghold_core_replication_secret_path_count | gauge | Number of secret paths processed in the last replication run. | local_namespace, local_mount_path, source_address, source_namespace, source_mount_path |
stronghold_core_replication_errors | gauge | Number of errors in the last replication run. | local_namespace, local_mount_path, source_address, source_namespace, source_mount_path |
stronghold_core_replication_success | gauge | 1 if the last replication run succeeded, otherwise 0. | local_namespace, local_mount_path, source_address, source_namespace, source_mount_path |
stronghold_core_replication_status | counter | Number of replication runs. result is success or error. | local_namespace, local_mount_path, source_address, source_namespace, source_mount_path, result |
stronghold_core_replication_bytes | summary | Number of bytes transferred in a replication run. | quantile, local_namespace, local_mount_path, source_address, source_namespace, source_mount_path |
stronghold_core_replication_records | summary | Number of records transferred in a replication run. | quantile, local_namespace, local_mount_path, source_address, source_namespace, source_mount_path |
stronghold_core_replication_duration | summary | Duration 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).
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_autosnapshots_save_duration | summary | Duration of taking and saving a snapshot to the configured storage (only successful runs), ms. | quantile, cluster, snapshot_config_name |
stronghold_autosnapshots_last_success_time | gauge | Time of the last successful snapshot as a Unix timestamp (seconds). | cluster, snapshot_config_name |
stronghold_autosnapshots_snapshot_size | summary | Size of a saved snapshot in bytes (only successful runs). | quantile, cluster, snapshot_config_name |
stronghold_autosnapshots_save_errors | counter | Number of failed snapshot attempts. | cluster, snapshot_config_name |
stronghold_autosnapshots_rotate_duration | summary | Duration 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_storage | gauge | Number 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_size | gauge | Total 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_used | gauge | Share 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_failed | gauge | Automatic snapshot failure flag: 1 if the last snapshot attempt of the configuration failed, otherwise 0. | cluster, config |
stronghold_autosnapshots_rotate_failed | gauge | Snapshot 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_<mount>_issue | summary | Duration of issuing a certificate (issue/:role), ms. | quantile, role, namespace |
stronghold_<mount>_sign | summary | Duration of signing a CSR (sign/:role), ms. | quantile, role, namespace |
stronghold_<mount>_sign_verbatim | summary | Duration of signing a CSR verbatim (sign-verbatim), ms. | quantile, role, namespace |
stronghold_<mount>_revoke | summary | Duration of revoking a certificate, ms. | quantile, namespace |
stronghold_<mount>_issue | counter | Number of successful issue requests. | role, namespace |
stronghold_<mount>_sign | counter | Number of successful sign requests. | role, namespace |
stronghold_<mount>_sign_verbatim | counter | Number of successful sign-verbatim requests. | role, namespace |
stronghold_<mount>_revoke | counter | Number of successful revoke requests. | namespace |
stronghold_<mount>_issue_failure | counter | Number of failed issue requests. | role, namespace |
stronghold_<mount>_sign_failure | counter | Number of failed sign requests. | role, namespace |
stronghold_<mount>_sign_verbatim_failure | counter | Number of failed sign-verbatim requests. | role, namespace |
stronghold_<mount>_revoke_failure | counter | Number of failed revoke requests. | namespace |
Certificate counts
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_secrets_pki_<mount_uuid>_total_certificates_stored | gauge | Total 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_stored | gauge | Total number of revoked certificates stored in the engine. Published only if publish_stored_certificate_count_metrics = true. | — |
Tidy operation
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_secrets_pki_tidy_start_time_epoch | gauge | Start time of the current tidy operation as a Unix timestamp (seconds); 0 after the tidy finished. | — |
stronghold_secrets_pki_tidy_cert_store_total_entries | gauge | Number of entries in the certificate store at the start of the tidy of the certificate store. | — |
stronghold_secrets_pki_tidy_cert_store_current_entry | gauge | Index of the certificate store entry being processed. | — |
stronghold_secrets_pki_tidy_cert_store_total_entries_remaining | gauge | Number of certificate store entries remaining to be processed. | — |
stronghold_secrets_pki_tidy_revoked_cert_total_entries | gauge | Number of revoked certificate entries at the start of the tidy of revoked certificates. | — |
stronghold_secrets_pki_tidy_revoked_cert_current_entry | gauge | Index of the revoked certificate entry being processed. | — |
stronghold_secrets_pki_tidy_revoked_cert_total_entries_remaining | gauge | Number of revoked certificate entries remaining to be processed. | — |
stronghold_secrets_pki_tidy_revoked_cert_entries_incorrect_issuers | gauge | Number of revoked certificate entries with a missing or incorrect issuer. | — |
stronghold_secrets_pki_tidy_revoked_cert_entries_fixed_issuers | gauge | Number of revoked certificate entries whose issuer was fixed by the tidy. | — |
stronghold_secrets_pki_tidy_duration | summary | Duration of a tidy operation (recorded at its end), ms. | quantile |
stronghold_secrets_pki_tidy_cert_store_deleted_count | counter | Number of certificate store entries deleted by tidy. | — |
stronghold_secrets_pki_tidy_revoked_cert_deleted_count | counter | Number of revoked certificate entries deleted by tidy. | — |
stronghold_secrets_pki_tidy_success | counter | Number of successfully finished tidy operations. | — |
stronghold_secrets_pki_tidy_failure | counter | Number 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).
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_database_<operation> | summary | Duration of a database plugin operation (all database types), ms. | quantile |
stronghold_database_<db_type>_<operation> | summary | Duration of a database plugin operation for the given database type, ms. | quantile |
stronghold_database_<operation> | counter | Number of database plugin operation calls (all database types). | — |
stronghold_database_<db_type>_<operation> | counter | Number of calls of the operation for the given database type. | — |
stronghold_database_<operation>_error | counter | Number of failed operation calls (all database types). | — |
stronghold_database_<db_type>_<operation>_error | counter | Number of failed operation calls for the given database type. | — |
stronghold_secrets_database_backend_pluginInstances_count | gauge | Number 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
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_ldap_check_out_unavailable_<set_name> | counter | Number 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> | gauge | Number 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.
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_quota_rate_limit_violation | counter | Number of requests rejected because of exceeding the rate limit quota. name is the name of the quota. | cluster, name |
stronghold_quota_lease_count_max | gauge | Maximum number of leases allowed by the lease count quota. Updated when a request is checked against the quota. | cluster, name |
stronghold_quota_lease_count_counter | gauge | Current number of leases counted by the lease count quota. Updated when a request is checked against the quota. | cluster, name |
stronghold_quota_lease_count_violation | counter | Number 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.
| Metric | Type | Description | Labels |
|---|---|---|---|
stronghold_runtime_num_goroutines | gauge | Number of goroutines. Used by the DP module alerts to detect nodes that export metrics. | — |
stronghold_runtime_alloc_bytes | gauge | Bytes of allocated heap objects (Alloc of the Go runtime). | — |
stronghold_runtime_sys_bytes | gauge | Total bytes of memory obtained by the Go runtime from the OS (Sys). | — |
stronghold_runtime_malloc_count | gauge | Cumulative number of heap object allocations (Mallocs). | — |
stronghold_runtime_free_count | gauge | Cumulative number of freed heap objects (Frees). | — |
stronghold_runtime_heap_objects | gauge | Number of allocated heap objects (HeapObjects). | — |
stronghold_runtime_total_gc_pause_ns | gauge | Cumulative GC stop-the-world pause time in nanoseconds (PauseTotalNs). | — |
stronghold_runtime_total_gc_runs | gauge | Number of completed GC cycles (NumGC). | — |
stronghold_runtime_gc_pause_ns | summary | Pause duration of recent GC cycles in nanoseconds (not in milliseconds): a sample per GC cycle since the previous measurement. | quantile |