muscles

Metrics

The server exports these metrics in the Prometheus text format on /metrics. A label listed with values has a series for each value from startup. Metrics marked as set at runtime get their series on first use.

NameTypeLabelsDescription
muscles_http_requests_totalcounterset at runtimeTotal HTTP requests by route, method and status.
muscles_http_request_duration_secondshistogramset at runtimeHTTP request latency in seconds by route.
muscles_http_accept_errors_totalcounterset at runtimeFailed accept() calls on the HTTP listener, by error. The worker waits and accepts again.
muscles_http_slow_reader_disconnects_totalcounterset at runtimeStreaming responses closed because the reader stayed below the minimum throughput, by route.
muscles_query_duration_secondshistogramstatus: ok, errorSQL query wall-clock latency in seconds by outcome.
muscles_query_rows_scanned_totalcounterset at runtimeTotal rows scanned by queries, by table.
muscles_query_bytes_read_totalcounterset at runtimeTotal bytes read by queries, by table.
muscles_query_bytes_scanned_uncompressed_totalcounterset at runtimeTotal uncompressed bytes scanned by queries, by table. Compare with muscles_query_bytes_read_total for the compression ratio.
muscles_queries_failed_totalcounterreason: parse, execute, scan, drop_horizonTotal failed queries, by reason.
muscles_query_granules_scanned_totalcounterset at runtimeGranules that queries read, by table. Granules that an index or zone map skipped are not counted.
muscles_query_granules_skipped_totalcounterset at runtimeGranules of opened parts skipped by marks, zone maps or skip indexes, by table.
muscles_query_governor_rejected_totalcounterreason: too_many_concurrent_queries, query_time_exceeded, rows_read_limit_exceeded, result_rows_limit_exceeded, result_row_cap_exceeded, memory_limit_exceeded, quota_queries, quota_errors, quota_result_rows, quota_read_rows, quota_execution_time_msQueries rejected by the query governor or a per-user quota, by reason, such as too_many_concurrent_queries, memory_limit_exceeded or quota_<dimension>.
muscles_query_priority_yields_totalcountertier: low, normal, highScan batches where a normal or low priority query paused for waiting higher-priority work, by band. A rise under load means ingest gets the CPU as intended.
muscles_query_priority_starvation_guard_totalcountertier: low, normal, highQueries promoted to never yield again because their total deferral reached MUSCLES_SCHED_MAX_YIELD_MS, by band. Each query is counted once.
muscles_query_priority_activegaugetier: low, normal, highGoverned queries running now, by scheduling band.
muscles_query_priority_deferredgaugetier: low, normal, highRunning queries that are paused at a yield point, by scheduling band.
muscles_ingest_pressuregaugeIngest tasks running now, such as Kafka consume, flush, merge and shard forwarding. A value above 0 means queries defer to ingest.
muscles_ingest_pressure_raised_totalcounterIngest work spans that raised scheduler pressure. If it stays flat on a node that consumes Kafka with MUSCLES_SCHED_PRIORITY set, queries do not defer to ingest.
muscles_sched_setpriority_failures_totalcounterRejected setpriority calls that lower the nice value of query threads. A non-zero value means the nice bias does not work, but the yield point still protects ingest.
muscles_table_rows_ingested_totalcounterset at runtimeRows ingested by table and source (http, clickhouse, kafka, insert_select or import). Use rate() for the per-table ingest rate.
muscles_table_bytes_ingested_totalcounterset at runtimePayload bytes ingested by table and source. For Kafka the payload is the record value size.
muscles_table_ingest_series_dropped_totalcounterIngest counts not recorded per table because the per-table ingest series reached the cap.
muscles_ingest_records_totalcounterset at runtimeTotal records ingested, by topic.
muscles_ingest_bytes_totalcounterset at runtimeTotal bytes ingested, by topic.
muscles_ingest_consumer_laggaugeset at runtimeConsumer lag in records, by topic and partition. It is the broker high watermark minus the consumer position, updated on every poll cycle.
muscles_ingest_partition_stalledgaugeset at runtime1 while a partition's ingest is stopped at a record batch it cannot decode or acknowledge, otherwise 0. Ingest never skips such a batch on its own.
muscles_kafka_reconnects_totalcounterset at runtimeKafka connections dropped after a broken request and opened again, by client.
muscles_ch_http_ignored_settings_totalcounterset at runtimeURL settings that the ClickHouse HTTP bridge ignored because it does not support them, by name. MUSCLES_CH_HTTP_STRICT_SETTINGS=1 refuses them with code 115 instead.
muscles_llm_calls_totalcounterfunction: classify, complete, embedModel calls sent to the LLM endpoint, by function: classify for llmClassify, complete for llmSummarize and embed for llmEmbed. Cache hits are not counted.
muscles_llm_cache_totalcounterresult: hit, missLLM result cache lookups, by result (hit, miss).
muscles_llm_errors_totalcounterkind: not_permitted, nondeterministic_context, busy, call_budget, token_budget, query_timeout, prompt_too_large, invalid_labels, endpoint_rejected, timeout, transport, http_status, response_too_large, bad_response, outside_label_set, cache_writeLLM calls or results that were refused, by kind, such as permission, limit, endpoint or transport.
muscles_llm_tokens_totalcounterdirection: prompt, completionTokens reported by the LLM endpoint, by direction (prompt, completion).
muscles_llm_call_duration_secondshistogramfunction: classify, complete, embedLatency of model calls in seconds, by function.
muscles_ingest_lag_query_failures_totalcounterBroker errors while computing consumer lag. The lag gauge goes stale for that cycle, but ingest continues.
muscles_ingest_topics_trackedgaugeTopics this node ingests now. A value below muscles_ingest_topics_discovered means MUSCLES_KAFKA_MAX_TOPICS dropped topics.
muscles_ingest_topics_discoveredgaugeEligible topics the broker advertised in discovery mode. It is not set when MUSCLES_KAFKA_TOPICS lists the topics.
muscles_ingest_topic_cap_dropped_totalcounterTopics not ingested because the tracked set reached MUSCLES_KAFKA_MAX_TOPICS. Raise the limit when this is above 0.
muscles_ingest_partition_cap_dropped_totalcounterset at runtimePartitions not ingested because their topic reached MUSCLES_KAFKA_MAX_PARTITIONS, by topic. Raise the limit when this is above 0.
muscles_ingest_pausedgauge1 while Kafka ingestion is paused on this node by POST /api/ingestion/pause, otherwise 0. Alert when it stays at 1 for too long.
muscles_ingest_decode_errors_totalcounterTotal Avro/decode errors during ingestion.
muscles_ingest_share_append_stalled_totalcounterShare-group partitions stopped because a record kept failing to decode, find its table or append. The record stays unacknowledged, and the log names its topic, partition and offset.
muscles_ingest_share_partitions_stalledgaugeset at runtime1 while the share consumer of a topic is stopped at a record that keeps failing, otherwise 0. Alert when it is 1, because lag grows until you fix the cause and post the topic configuration again.
muscles_ingest_poison_dropped_totalcounterTotal poison records dropped after the delivery-attempt cap.
muscles_ingest_redeliveries_totalcounterShare-group records acquired again after an earlier delivery that timed out or was released.
muscles_ingestion_failed_topicsgaugeNumber of topics whose non-critical ingestion errored on the current cycle.
muscles_ingest_failed_topicsgaugeTopics quarantined after repeated unrecoverable errors. They are skipped until recovery or reset.
muscles_ingest_topic_errors_totalcounterset at runtimeTopic-level ingestion errors, by topic and class (transient|unrecoverable).
muscles_ingest_topic_skipped_totalcounterset at runtimeShare-group cycles in which a topic was not consumed at all, by topic and reason. A skip alone is not a failure.
muscles_ingest_skipped_topicsgaugeTopics that were neither consumed nor failed on the current ingest cycle.
muscles_ingest_schema_rejected_totalcounterset at runtimeRecords rejected by the schema-evolution compatibility gate, by topic.
muscles_ingest_oversized_cell_stalled_partitionsgaugeKafka partitions stopped at a record larger than half of MUSCLES_PART_BLOCK_MAX_BYTES. Raise the cap and restart, or run SYSTEM SKIP KAFKA RECORD.
muscles_ingest_oversized_cell_skipped_totalcounterset at runtimeOversized Kafka records dropped after an operator approved the skip with SYSTEM SKIP KAFKA RECORD, by topic.
muscles_ingest_schema_evolved_totalcounterset at runtimeAccepted schema promotions (table schema commits), by topic.
muscles_ingest_lossy_promotion_totalcounterset at runtimeAccepted promotions from int64 to float64, which can lose precision above 2^53, by topic.
muscles_ingestion_degraded_topicsgaugeTopics with a rejected producer schema. Records with accepted schema ids still flow.
muscles_ingest_schema_quarantinedgaugeset at runtimeQuarantined writer-schema ids per topic and reason. Records that carry them are dropped, and system.ingest_quarantine lists each id.
muscles_ingest_schema_quarantined_since_secondsgaugeset at runtimeUnix time in seconds of the oldest active schema quarantine of a topic.
muscles_ingest_share_foreign_blocks_totalcounterset at runtimeShareFetch response blocks for a partition the request did not name, discarded, by leader broker. It should stay at 0, and a rise means the request and the broker's share session disagree.
muscles_ingest_share_targets_deferredgaugeset at runtimeTopic-partitions left out of a ShareFetch because the per-request target limit was reached, by leader broker. Later cycles serve them, and the value should stay at 0.
muscles_ingest_share_topics_unsubscribedgaugeTracked topics that do not fit in one share-group subscription and are never consumed by this member. It should stay at 0.
muscles_ingest_local_totalcounterset at runtimeRecords ingested on the shard that owns them under keyed ingest, by topic.
muscles_ingest_forward_pending_totalcounterset at runtimeRecords left in Kafka because their partition stalled on rows owned by another shard, by topic. The forward was not acknowledged or MUSCLES_SHARD_MAP is unset.
muscles_ingest_eager_table_created_totalcounterset at runtimeDestination tables created from a topic's Schema Registry subject at discovery, before this node consumed a record, by topic.
muscles_ingest_eager_subject_missing_totalcounterset at runtimeTopics without a <topic>-value Schema Registry subject. Their table is created from the first consumed record, so create it on every node before distributed queries.
muscles_ingest_eager_unsafe_versions_totalcounterset at runtimeTopics not created at discovery because an older subject version would be rejected by a table built from the latest one. The first record creates their table instead.
muscles_ingest_eager_unverified_totalcounterset at runtimeTopics not created at discovery because their subject's versions could not all be checked. The first record creates their table instead.
muscles_ingest_offset_reset_totalcounterset at runtimeTimes a classic ingest partition's fetch offset was out of range and was reset to the log start or end, by topic. Each reset after retention loses records that were never ingested.
muscles_ingest_offset_reset_skipped_totalcounterset at runtimeRecords skipped by classic ingest offset resets because retention deleted them before they were ingested, by topic.
muscles_ingest_forwarded_totalcounterset at runtimeRecords forwarded to their owner shard and durably acknowledged by it, by topic.
muscles_ingest_forward_received_totalcounterset at runtimeForwarded records this shard durably applied from /internal/ingest-forward, by topic.
muscles_ingest_forward_oversized_totalcounterset at runtimeForwarded records skipped because they exceed the receiver's size limit, by topic. These records are not delivered.
muscles_ingest_forward_nondedup_totalcounterset at runtimeForwarded records applied to a table that is not KAFKA DEDUP or Replacing, by topic. A retried forward duplicates such rows.
muscles_ingest_topic_alignedgaugeset at runtime1 when a topic is ingested without forwarding, otherwise 0, by topic. It applies when MUSCLES_KAFKA_ALIGNED is set and the shard count divides the partition count.
muscles_ingest_alignment_violation_totalcounterset at runtimeRecords forwarded although their topic is declared aligned, by topic. A non-zero value means the producer's partitioner does not match shardOf.
muscles_import_files_totalcounterData files (Parquet) committed by IMPORT ICEBERG and IMPORT PARQUET.
muscles_import_rows_totalcounterRows committed by IMPORT ICEBERG and IMPORT PARQUET. Only committed imports count.
muscles_import_failures_totalcounterIMPORT statements that failed. A failed import leaves no partial table.
muscles_parts_activegaugeset at runtimeActive parts, hot and cold, by table; sampled at scrape time.
muscles_flush_duration_secondshistogramMemTable flush duration in seconds.
muscles_flush_bytes_totalcounterTotal bytes flushed to sealed parts.
muscles_flushes_totalcounterCompleted MemTable flushes (flush-loop throughput).
muscles_flush_failures_totalcounterset at runtimeMemTable flushes that failed, by table. A steadily rising count means the table's memtable is not draining and ingest into it will hit backpressure.
muscles_merge_runninggaugePart merges currently running on this node.
muscles_merge_duration_secondshistogramset at runtimeMerge duration in seconds.
muscles_merge_bytes_written_totalcounterset at runtimeTotal bytes written by merges.
muscles_merge_backloggaugeset at runtimeParts the background merger would still merge, by table, plus lone parts with deleted rows. A settled table reads 0. Sampled at scrape time.
muscles_merge_failures_totalcounterset at runtimePart merges that failed, by table and reason. The parts stay unmerged and are retried after a backoff, so a rising count means the part count grows.
muscles_merge_unsorted_inputs_totalcounteroutcome: sorted, skippedMerge inputs of a replacing or aggregating table with a varchar key that were not sorted by value, by outcome. A skipped input keeps its rows uncollapsed until a later merge sorts it.
muscles_merges_totalcounterCompleted part merges (merge-loop throughput).
muscles_dedup_merges_totalcounterCompleted merges that ran the Replacing dedup reducer.
muscles_dedup_rows_dropped_totalcounterRows collapsed as superseded duplicates by the Replacing reducer. A winning tombstone is kept and not counted.
muscles_fsync_failures_totalcounterkind: wal, part, manifest, dirfsync failures at a durable-write boundary, by kind. The operation still fails with the error, and this counter is the signal to alert on for risk of data loss.
muscles_wal_failed_tablesgaugeTables whose WAL failed an fsync and rejects writes until their rows are flushed to parts and the WAL recovers.
muscles_wal_bytes_appended_totalcounterWAL frame bytes durably appended across all tables (ingest write volume).
muscles_wal_appends_totalcounterWAL append records written across all tables.
muscles_wal_corruption_segments_totalcounterWAL segments with corruption that recovery salvaged under MUSCLES_WAL_ON_CORRUPTION=salvage; each one lost acknowledged rows.
muscles_parts_corrupt_salvaged_totalcounterParts with a corrupt manifest skipped at recovery under MUSCLES_WAL_ON_CORRUPTION=salvage; each one lost acknowledged rows.
muscles_wal_corruption_records_salvaged_totalcounterWAL records recovered from the intact prefix of salvaged segments. They stay in the segment until a part covers them.
muscles_wal_corruption_records_lost_totalcounterEstimated WAL records lost in salvaged segments. The salvage log line gives the lsn range to re-ingest.
muscles_ingest_backpressure_totalcounterDurable inserts rejected with backpressure (ingest outrunning the flush loop).
muscles_snapshots_totalcounterConsistent local snapshots written successfully.
muscles_snapshot_failures_totalcounterConsistent-snapshot attempts that failed.
muscles_matview_refresh_failures_totalcounterset at runtimeFailures of materialized-view refresh on insert, by view. The view is marked stale.
muscles_matview_lagging_viewsgaugeMaterialized views that lag their source because a refresh did not fit the memory budget or failed temporarily. Each catches up from the source WAL when memory is free.
muscles_matview_retired_viewsgaugeMaterialized views from failed DDL that stay in memory until the process stops, because a reader may still hold them. Each takes a few KiB.
muscles_matview_lagginggaugeset at runtime1 while the view lags its source, else 0.
muscles_matview_lag_rowsgaugeset at runtimeSource rows the view has not applied yet.
muscles_matview_lag_bytesgaugeset at runtimeBytes of source WAL segments that hold the view's backlog, counted in whole segments.
muscles_matview_lag_secondsgaugeset at runtimeSeconds since the oldest source row the view has not applied arrived.
muscles_matview_stale_viewsgaugeMaterialized views that are stale now. Each holds its source WAL until DROP, so a rising value risks unbounded WAL growth and a halt of ingest.
muscles_matview_over_replacing_source_totalcounterAggregating materialized views and rollups created over a Replacing (dedup) source, which can over-count duplicates until they collapse on merge.
muscles_matview_stale_wal_dropped_totalcounterset at runtimeStale materialized views dropped automatically because their frozen WAL backlog passed MUSCLES_MV_STALE_WAL_MAX_BYTES, by view. Recreate the named view.
muscles_view_backfills_totalcounteroutcome: committed, failedMaterialized-view backfills and rebuilds that ended, by outcome. A failed run leaves the view and its target unchanged, and system.view_backfills names the error.
muscles_view_backfills_runninggaugeMaterialized-view backfills and rebuilds running now. Each holds a hidden staging table and, for a rebuild, the old and new target rows on disk.
muscles_view_backfill_rows_totalcounterSource rows that view backfills and rebuilds wrote to their staging tables.
muscles_matview_collapse_skipped_totalcounterAggregate-state view groups that a merge could not collapse and wrote uncollapsed. The merge itself still succeeds.
muscles_memtable_bytesgaugeset at runtimeEstimated in-memory MemTable size in bytes, by table. It feeds backpressure and is sampled at scrape time.
muscles_memtable_rowsgaugeset at runtimeIn-memory MemTable row count, by table; sampled at scrape time.
muscles_disk_used_bytesgaugeset at runtimeBytes used on the filesystem of each data disk (total minus available), by mount: the storage-policy disk name, or default.
muscles_disk_free_bytesgaugeset at runtimeBytes available to muscles on the filesystem of each data disk, by mount: the storage-policy disk name, or default.
muscles_tier_partsgaugetier: hot, coldInstalled parts by storage tier (hot|cold).
muscles_tier_bytesgaugetier: hot, coldOn-disk part bytes by storage tier. A cold part's payload lives in S3.
muscles_tier_moves_totalcounterHot parts moved to the S3 cold tier.
muscles_tier_move_failures_totalcounterreason: oom, read, upload, stub, superseded, publish, crashTier moves that did not complete, by reason. The part stays hot and is retried on the next poll.
muscles_tier_local_moves_totalcounterParts moved between two local volumes by the tier mover.
muscles_gdpr_delete_block_skipped_totalcounterGDPR DELETE masks abandoned because a merge or tier move replaced the target part first. Run the DELETE again.
muscles_delete_conflicts_totalcounterDELETEs that returned 503 and Retry-After because another DELETE held the table too long or merges kept replacing the matched parts.
muscles_gdpr_rows_purged_totalcounterRows physically removed from disk by a merge because a deletion vector marked them.
muscles_tier_local_move_failures_totalcounterreason: oom, read, copy, redirect, superseded, publish, crashLocal part moves that did not complete, by reason. The part stays on its source volume and is retried on the next poll.
muscles_tier_local_orphans_swept_totalcounterLeftovers of local part moves that the orphan sweep reclaimed, such as .orphan files and part copies from crashed moves.
muscles_cold_upload_bytes_totalcounterPayload bytes uploaded to the S3 cold tier by the mover.
muscles_cold_upload_duration_secondshistogramCold-tier object upload latency in seconds.
muscles_cold_upload_last_success_timestamp_secondsgaugeUnix time in seconds of the last successful cold-tier upload.
muscles_cold_cache_hits_totalcounterCold-payload cache hits, where a scan reused a cached column without an S3 GET.
muscles_cold_cache_misses_totalcounterCold-payload cache misses, where a scan loaded a column from S3.
muscles_cold_cache_evictions_totalcounterCold-payload cache files evicted to stay under MUSCLES_COLD_CACHE_MAX_BYTES.
muscles_cold_cache_bytesgaugeResident cold-payload cache bytes (payload files only).
muscles_cold_fetch_bytes_totalcounterPayload bytes fetched from the S3 cold tier by scans (ranged GETs).
muscles_cold_fetch_duration_secondshistogramCold-tier ranged-GET latency in seconds (per projected column fault).
muscles_cold_fetch_failures_totalcounterCold-tier ranged GETs that failed. The query fails with an error and never returns partial results.
muscles_tier_expired_totalcounterParts deleted after aging past MUSCLES_TIER_DELETE_AFTER_MS, hot or cold. A cold part loses its S3 object and its local metadata.
muscles_tier_gc_backloggaugeCold-object deletes queued but not yet confirmed against S3. A persistent S3 delete failure keeps items queued, so a rising value needs attention.
muscles_tier_orphans_swept_totalcounterStray S3 objects that no local cold stub references, reclaimed by the reconciliation sweep after the grace period.
muscles_tier_sweep_incomplete_totalcounterOrphan-sweep cycles skipped because a local part.cold stub failed to parse and the reference set was incomplete. A rising value means the sweep is not running.
muscles_retention_parts_dropped_totalcounterset at runtimeLocal parts destroyed by a table TTL, by table. Cold parts in S3 are not counted.
muscles_retention_rows_dropped_totalcounterset at runtimeRows removed by a per-table TTL, by table: the live rows of every dropped part, the rows masked by a sweep and the rows a merge left out.
muscles_migrate_holds_activegaugeOpen migration export sessions. Each one pauses merges and TTL drops on its tables.
muscles_migrate_hold_age_secondsgaugeAge of the oldest open migration hold in seconds. A value near the hold age cap means a migrator died or stalled.
muscles_migrate_hold_partsgaugeLargest number of parts a held table has gained since its migration session began. Merges are paused, so it grows with every flush.
muscles_migrate_holds_ended_totalcounterreason: end, lease, age_cap, parts_capMigration holds ended, by reason: end (released by the migrator), lease (lease expired), age_cap (hold age cap), parts_cap (part count cap).
muscles_retention_sweeps_totalcounterRetention sweep cycles completed. A flat value means the sweeper is not running or MUSCLES_RETENTION_ENABLED is not set.
muscles_query_history_archive_failures_totalcounterQueries that could not be archived to system.query_history because its table could not be created or the durable append failed. Each one is missing from the history.
muscles_query_history_fsync_failures_totalcounterFailed fsyncs of the system.query_history WAL. With MUSCLES_QUERY_HISTORY_SYNC=sync, a non-zero value means an answered query may not be archived durably.
muscles_rollup_raw_dropped_totalcounterRaw source parts deleted by downsampling after rollups durably stored their whole range.
muscles_rollup_raw_drop_deferred_totalcounterreason: drop_disabled, no_rung, rung_not_durable, no_watermark_seam, no_source_wal, below_rung_floorRaw parts that downsampling kept instead of dropping, by reason. The usual reason is drop_disabled, because raw drop is off by default.
muscles_query_below_drop_horizon_totalcounteroutcome: refused, signaledQueries that needed rows below the downsampling drop horizon, by outcome. A refused query gets HTTP 400, which is the default, and a signaled query returns partial rows under allow_partial_below_drop_horizon.
muscles_policy_reject_totalcounterscope: schema, table, column, overflow, unresolved, derived_def, mask, mask_star, mask_derived, filter, embargo, dictionaryQueries rejected by a data-level RBAC policy, by the scope that fired or the check that could not prove the query safe.
muscles_audit_captured_totalcounterkind: query_start, query_finish, query_exception, login_success, login_failure, logout, access_denied, ddl, insert, node_boot, audit_truncate, operator_actionEvents written to the audit chain, by kind. It stays 0 while MUSCLES_AUDIT_ENABLED is unset.
muscles_audit_capture_dropped_totalcounterkind: query_start, query_finish, query_exception, login_success, login_failure, logout, access_denied, ddl, insert, node_boot, audit_truncate, operator_actionEvents that could not be written to the audit chain, by kind. With MUSCLES_AUDIT_MODE=sync the request also fails with 503.
muscles_asserted_identity_rejected_totalcounterreason: control_char, invalid_utf8Proxy-forwarded end-user claims rejected as malformed, by reason. The audit attribution of the request stays empty.
muscles_auth_proxy_identity_refused_totalcounterreason: empty, too_long, sentinel, control_char, invalid_utf8, unknownTrusted-proxy identity headers refused, by reason. Each refusal is a 401, most often for an identity longer than 64 bytes, and the reason unknown should stay at 0.
muscles_auth_oidc_unlisted_refused_totalcounterOIDC sign-ins refused with 403 because the identity is not in MUSCLES_ADMINS, MUSCLES_VIEWERS or the users file and MUSCLES_OAUTH_UNLISTED_ROLE is none.
muscles_audit_boot_immutablegauge1 when this process started with MUSCLES_AUDIT_IMMUTABLE on, otherwise 0. It is set only at startup, so a drop to 0 means a restart without WORM.
muscles_audit_expired_blocks_totalcounterSealed audit blocks deleted by local expiry. It applies only with MUSCLES_AUDIT_IMMUTABLE off and MUSCLES_AUDIT_RETENTION_DAYS or MUSCLES_AUDIT_MAX_BYTES set.
muscles_audit_truncate_totalcounterCompleted audit-log truncations, each with a durable marker and an audit_truncate record in the chain.
muscles_audit_record_truncated_totalcounterAudit records whose over-long column, usually the query text, was cut at capture and marked inline with [audit:truncated N bytes]. A sustained non-zero value usually means a client sends multi-megabyte statements.
muscles_audit_s3_uploaded_blocks_totalcounterSealed audit blocks archived to S3 and verified by reading them back. It stays 0 unless MUSCLES_AUDIT_S3_BUCKET is set.
muscles_audit_s3_uploaded_bytes_totalcounterBytes of compressed audit archive objects written to S3.
muscles_audit_s3_upload_fail_totalcounterAudit archive sweeps that failed; local audit blocks are kept until a sweep succeeds.
muscles_audit_s3_backlog_blocksgaugeSealed local audit blocks not yet covered by the verified S3 archive.
muscles_audit_s3_divergence_totalcounterTimes the S3 audit archive and this node disagreed about a sequence range. Archiving then stops until restart, and no local audit block is reclaimed.
muscles_audit_s3_archived_uptogaugeSequence number below which every audit block has a verified S3 copy. Only blocks below it may be reclaimed locally.
muscles_audit_s3_lock_posturegauge1 when this node verified that the archive bucket has versioning and Object Lock, otherwise 0. With MUSCLES_AUDIT_S3_OBJECT_LOCK=require, 0 means nothing is archived.
muscles_audit_s3_lock_unproven_totalcounterTimes the archive bucket answered but lacked versioning or Object Lock.
muscles_audit_s3_locked_objects_totalcounterAudit archive objects whose Object Lock retention was verified by reading it back.
muscles_audit_s3_digest_objects_totalcounterAudit digest objects committed to S3. It stays 0 unless MUSCLES_AUDIT_S3_DIGEST=1.
muscles_audit_s3_digest_fail_totalcounterAudit digest writes that failed. The archive is unaffected, but the tip hash of that batch is missing from the digest history.
muscles_audit_mirror_objects_totalcounterParquet mirror objects of the audit log, written for auditors and not verified. It stays 0 unless MUSCLES_AUDIT_S3_PARQUET_MIRROR=1.
muscles_audit_mirror_blocks_totalcounterAudit blocks written to the Parquet mirror. Compare with muscles_audit_s3_uploaded_blocks_total to see how far the mirror lags.
muscles_audit_mirror_fail_totalcounterParquet mirror writes that failed. Failed objects are not retried, and the S3 archive is not affected.
muscles_retention_immutable_skips_totalcounterset at runtimeRetention sweeps skipped because MUSCLES_AUDIT_IMMUTABLE is on, by table. A non-zero value means retention is not enforced for that table.
muscles_search_cold_index_missing_totalcounterCold parts searched by a brute-force full-text scan because their search index file was missing or corrupt. Results stay correct.
muscles_vector_knn_index_used_totalcounterParts whose vector KNN query used the IVF index (probe plus exact re-rank).
muscles_vector_knn_bruteforce_totalcounterreason: io_error, no_sidecar, corrupt_index, metric_mismatch, dim_mismatch, null_vectors, underfilled, has_deletionsParts whose vector KNN query ran an exact brute-force scan, by reason (io_error|no_sidecar|corrupt_index|metric_mismatch|dim_mismatch|null_vectors|underfilled|has_deletions).
muscles_replication_commits_rejected_totalcounterCommit-log records rejected because a name or table from the wire failed the path check. A non-zero value means a peer sends malformed commits.
muscles_replication_emit_totalcounterPart records shipped to the cold tier and commit log, PART_ADDED or PART_REMOVED, while MUSCLES_REPLICATION_EMIT is on.
muscles_replication_schema_wait_ms_totalcounterMilliseconds the emit thread waited for a catalog change to queue its schema records.
muscles_replication_schema_wait_timeouts_totalcounterPart records that waited for a catalog change whose schema records were not queued, so they failed to ship. A later pass ships them.
muscles_replication_ddl_apply_failures_totalcounterSchema records the replica could not apply. The drain halts at the record.
muscles_replication_ddl_apply_haltedgauge1 while the drain is halted at a schema record that could not be applied, else 0; alert when it stays 1.
muscles_replication_schema_waitinggauge1 while the replica waits for a schema snapshot it can apply (none in the bucket, or it failed a check) and drains nothing, else 0.
muscles_replication_ddl_withheld_totalcounterSchema records for objects the primary withheld because their definition held a secret or was too long. Create those objects by hand.
muscles_replication_ddl_quarantined_parts_totalcounterParts of tables that a failover snapshot dropped. They stay in the replication-quarantine directory until you remove them.
muscles_replication_ddl_kept_for_local_view_totalcounterTables the primary dropped that the replica keeps because a view created on the replica uses them. The replica differs from the primary until you drop them.
muscles_replication_ddl_parts_skipped_totalcounterParts the replica skipped because their table was dropped or belongs to an older incarnation of the name.
muscles_replication_schema_sync_failures_totalcounterCatalog changes that could not be queued as schema records, because the epoch file write failed, the outbox was full or the definition was unreadable. The next start announces the catalog again.
muscles_replication_emit_failures_totalcounterEmit attempts that failed, either an S3 PUT or a Kafka append. The local part stays durable and replicas catch up later.
muscles_replication_emit_dropped_totalcounterFlush additions dropped because the emit queue was full. The local part stays durable and the emit reconcile ships it again.
muscles_replication_emit_reshipped_totalcounterLive parts whose S3 bundle was missing and that the emit reconcile shipped again. It is non-zero after a crash during a ship and not expected otherwise.
muscles_replication_merge_deferred_totalcounterMerges skipped because the emitter had no room for the merge's output and removals, so the commit-log broker or S3 cannot keep up. The table is merged on a later pass.
muscles_replication_merge_deferredgaugeMerges skipped in a row since the last merge that got room. A non-zero value means merges are held back now.
muscles_replication_emit_pending_removalsgaugeRemovals (PART_REMOVED) queued or awaiting retry in the emitter.
muscles_replication_emit_outputs_heldgaugeMerge outputs waiting to be shipped. The tier mover does not move them to the cold tier until they ship.
muscles_replication_emit_removals_lost_totalcounterRemovals never shipped because the emitter stopped with them queued, the list was full or memory ran out. A replica may keep those parts.
muscles_replication_emit_merge_output_skipped_totalcounterMerge outputs not shipped because the part was no longer live when its turn came, so its rows left this node too. The removals of the merge still ship.
muscles_replication_drain_applied_totalcounterParts installed by the replication drain loop (PART_ADDED) while MUSCLES_REPLICATION_DRAIN is on.
muscles_replication_drain_removed_totalcounterParts removed by the replication drain loop (PART_REMOVED). A removal for a part that was never installed is not counted.
muscles_replication_drain_rejected_totalcounterCommit-log records the drain loop rejected because a name or table from the wire failed the path check.
muscles_replication_drain_errors_totalcounterDrain iterations that failed because of a broker or S3 transport error or an offset checkpoint fsync. The next iteration retries from the same offset.
muscles_replication_drain_offsetgaugeDurable commit-log offset the drain resumes from. It advances only after the parts of the batch are durably installed.
muscles_replication_drain_transient_totalcountercause: s3_get, table_missing, tombstoned, unreadable, uninstall, missing_bundle, install, migrate_sealedCommit-log records whose install or removal failed temporarily and is retried. A steady rise means the drain is stuck, for example because destination tables are missing.
muscles_replication_drain_offset_reset_totalcounterTimes the drain offset was reset to the earliest offset after OFFSET_OUT_OF_RANGE, because the replica fell behind the commit topic's retention.
muscles_replication_drain_reset_catchup_totalcounterS3 catch-ups that succeeded after the drain offset was reset past commits that fell out of the commit topic's retention.
muscles_replication_drain_reset_catchup_failures_totalcounterS3 catch-ups after a drain offset reset that failed. The reset is retried with the old offset.
muscles_replication_catchup_retired_totalcounterReplicated parts uninstalled by a catch-up because the shard manifest no longer lists them.
muscles_replication_rejoin_quarantined_parts_totalcounterParts a former primary wrote, the new primary's manifest does not list, and its rejoin moved to replication-quarantine.
muscles_replication_rejoin_quarantined_rows_totalcounterRows in the parts a rejoin moved to replication-quarantine.
muscles_replication_drain_missing_bundle_totalcounterCommit-log records whose part bundle was missing from S3 when the drain fetched it. The drain retries, then falls back to a manifest catch-up.
muscles_replication_drain_missing_bundle_fallback_totalcounterManifest catch-ups the drain ran because it was stuck on a missing part bundle.
muscles_replication_drain_missing_bundle_skipped_totalcounterRecords with a missing part bundle that the drain skipped after a fallback catch-up, because the shard manifest does not list the part.
muscles_replication_bundle_gc_deleted_totalcounterPart bundles the emitter deleted from S3 after the part was removed and the grace period passed.
muscles_replication_bundle_gc_failures_totalcounterBundle GC passes or deletes that failed because of an S3 error or an unreadable manifest. A later pass retries them.
muscles_replication_bundle_gc_untracked_totalcounterRemoved parts whose bundle the GC does not track because its candidate list was full. Those bundles stay in S3.
muscles_replication_fence_scan_errors_totalcounterEmitter fence scans of the commit log that failed because of a broker error or a rejected record. The S3 manifest check still runs.
muscles_replication_catchup_runs_totalcounterCatch-up runs that read the shard's S3 manifest and installed the live parts missing on this node. Catch-up never removes parts.
muscles_replication_catchup_installed_totalcounterParts fetched from S3 and installed by catch-up because they were missing locally.
muscles_replication_catchup_already_present_totalcounterManifest parts that catch-up found already installed on this node.
muscles_replication_catchup_rejected_totalcounterManifest entries catch-up rejected: an unsafe part name, a reserved system table, or a part bundle that disagrees with the manifest.
muscles_replication_catchup_no_table_totalcounterManifest parts that catch-up skipped because their table does not exist on this node. They are installed once the table exists.
muscles_replication_catchup_transient_totalcounterManifest parts whose fetch or install failed temporarily during catch-up. The next run retries them.
muscles_replication_manifest_put_totalcounterShard liveness manifest PUTs to S3 by the emitter after a batch changed the live part set.
muscles_replication_manifest_put_failures_totalcounterShard manifest PUTs that failed. Replicas keep using the previous manifest until a PUT succeeds.
muscles_replication_fenced_totalcounterTimes a primary stopped emitting because it saw a higher or conflicting ownership generation. Expect one per promotion, and otherwise demote or restart the node.
muscles_replication_generation_conflict_totalcounterTimes two primaries claimed the same ownership generation. Resolve it by raising MUSCLES_SHARD_GENERATION on one node.
muscles_replication_stale_generation_dropped_totalcounterCommit-log records dropped because they came from a lower ownership generation than the newest seen; a steady rise means the old primary did not stop.
muscles_replication_unsupported_version_totalcounterCommit-log records with a record version this binary does not read. The drain and the fence scan halt at the record and retry after a backoff.
muscles_replication_drain_haltedgauge1 while the commit-log drain is halted at a record version this binary does not read, else 0; alert when it stays 1.
muscles_replication_fence_haltedgauge1 while the emitter fence scan is halted at a record version this binary does not read, else 0; alert when it stays 1.
muscles_replication_mac_rejected_totalcounterCommit-log records rejected for a missing or invalid signature, before any state changes.
muscles_replication_mac_context_mismatch_totalcounterAuthentic commit-log records rejected because their signed shard id differs from this consumer's. It means another shard's records reach this topic.
muscles_replication_system_table_rejected_totalcounterCommit-log records and catch-up manifest entries rejected because they target a reserved system table, which is never replicated. Expect some during a rolling upgrade.
muscles_replication_part_name_collision_totalcounterReplicated parts not installed because a different part on this node already holds their directory name.
muscles_process_resident_memory_bytesgaugeset at runtimeResident set size of the process in bytes, sampled at scrape time on Linux. Alert before an out-of-memory kill.
muscles_process_open_fdsgaugeset at runtimeOpen file descriptors of the process, sampled at scrape time on Linux.
muscles_cpu_limitgaugeCPUs the process may use: the smaller of the CPU affinity count and the cgroup CPU quota, rounded up. Per-CPU defaults such as scan workers follow it.
muscles_memory_limit_bytesgaugeMemory the process may use: the smaller of physical RAM and the cgroup memory limit, read at boot. 0 when neither could be read.
muscles_query_memory_limit_bytesgaugeBytes one query may hold before it fails with a memory limit error (max_memory_bytes). 0 means no cap.
muscles_query_memory_total_limit_bytesgaugeBytes all running queries may hold together before a query fails with a memory limit error. 0 means no cap.
muscles_memory_bytesgaugesubsystem: memtable, mv_refire, mv_refresh, merge, query, wal_replay, cache, otherBytes each subsystem holds from the shared memory budget, sampled at scrape time. other is resident memory that no subsystem accounts for.
muscles_memory_budget_bytesgaugesubsystem: memtable, mv_refire, mv_refresh, merge, query, wal_replay, cache, otherBytes each subsystem aims to hold within the shared memory budget, where 0 means no budget of its own. Queries and merges wait or fail past it, and memtables, view refresh and replay are only counted.
muscles_memory_waits_totalcountersubsystem: memtable, mv_refire, mv_refresh, merge, query, wal_replay, cache, otherBackground work that the shared memory budget deferred, by subsystem, such as a merge that waits for a later poll. A query refused memory counts in muscles_query_governor_rejected_total with reason memory_limit_exceeded.
muscles_process_threadsgaugeset at runtimeOS threads of the process, sampled at scrape time on Linux.
muscles_process_cpu_seconds_totalcounterset at runtimeUser plus system CPU time of the process in seconds, sampled at scrape time on Linux.
muscles_background_seconds_totalcounteractivity: merge, materialized_view, rollup, retention, flushElapsed time spent in background work, by activity: merges, flushes and retention sweeps on their own threads; materialized view and rollup refresh on the inserting thread.
muscles_readygauge1 when the node is ready, otherwise 0. Ready means the node has started and is neither draining nor lagging in its WAL, as /ready reports. Sampled at scrape time.
muscles_assistant_requests_totalcounterset at runtimeAssistant chat requests by provider and terminal status.
muscles_assistant_stream_secondshistogramset at runtimeAssistant stream duration in seconds, by provider.
muscles_assistant_activegaugeAssistant requests currently streaming.
muscles_trace_spans_exported_totalcounterFinished spans sent to the OTLP collector by the exporter thread.
muscles_trace_spans_dropped_totalcounterreason: queue_full, encode, poolFinished spans dropped by the exporter, by reason: queue_full, encode, or pool when a background trace could not allocate its span pool and exported its root only. Traces are lost but queries are not.
muscles_trace_slow_queries_totalcounterQueries that ran at least MUSCLES_TRACE_SLOW_QUERY_MS and were exported regardless of the sample ratio.
muscles_trace_export_failures_totalcounterreason: connect, timeout, httpOTLP export POSTs that failed, by reason. The batch is dropped, and a down collector never blocks or slows a query.
muscles_trace_export_duration_secondshistogramOTLP export POST round-trip latency in seconds (per flush tick that had spans).
muscles_trace_queue_depthgaugeFinished-span batches queued for the exporter thread, sampled on each flush tick. A value near the configured queue depth means spans are about to be dropped.
muscles_rulesgaugeRecording rules loaded by the evaluator on this node.
muscles_rule_upgaugeset at runtime1 when the rule's last evaluation succeeded, 0 when it failed or has not run yet, by rule.
muscles_rule_seriesgaugeset at runtimeSeries the rule's last successful evaluation exports (rows times numeric columns), by rule; 0 after a failure.
muscles_rule_last_success_timestamp_secondsgaugeset at runtimeUnix time of the rule's last successful evaluation, by rule; 0 before the first.
muscles_rule_evaluations_totalcounterset at runtimeRule evaluations run, successful or not, by rule.
muscles_rule_evaluations_skipped_totalcounterset at runtimeEvaluations that were due but skipped because the previous one overran, by rule.
muscles_rule_evaluation_failures_totalcounterset at runtimeFailed rule evaluations, by rule and reason. A failed rule exports no series.
muscles_rule_evaluation_duration_secondshistogramset at runtimeRule evaluation time in seconds, by rule.
muscles_alert_notifications_sent_totalcountertarget: alertmanager, webhookAlerts delivered, by target kind (alertmanager|webhook).
muscles_alert_notifications_failed_totalcountertarget: alertmanager, webhookAlerts in requests that still failed after their retries, by target kind; they are dropped and sent again at the next resend.
muscles_alert_notifications_dropped_totalcountertarget: alertmanager, webhookAlerts dropped from a full delivery queue (MUSCLES_ALERT_QUEUE_CAPACITY), oldest first, by target kind.
muscles_alert_notification_retries_totalcountertarget: alertmanager, webhookAlert delivery requests retried after a timeout, transport error, 429 or 5xx, by target kind.
muscles_alert_notification_queue_lengthgaugetarget: alertmanager, webhookAlerts waiting to be delivered, by target kind.
muscles_alert_notification_latency_secondshistogramtarget: alertmanager, webhookTime of one alert delivery request in seconds, by target kind.