7.4 KiB
Observability
This document describes how to monitor and observe a running Mooncake Store deployment.
Master Metrics Log
When started, the Mooncake master periodically prints a metrics summary log every 10 seconds (configurable via kMetricReportIntervalSeconds). This log provides a comprehensive snapshot of the master's runtime state.
Log Format
I0512 15:03:30.321475 239489 rpc_service.cpp:269] Master Admin Metrics: role=leader, state=serving, service_ready=true, master={...}, ha={...}, leader=127.0.0.1:50051, view_version=1
Each log line contains:
- GLog header: timestamp, thread ID, source file and line number
- role: HA role —
leaderorstandby - state: HA runtime state —
serving,starting,stopping, etc. - service_ready: whether the gRPC service is accepting requests
- master: master metrics block (see below)
- ha: HA metrics block
- leader: (only when available) the current leader address and view version
Master Metrics Block
A typical master={...} block looks like this:
Mem Storage: 94.09 MB / 100.00 MB (94.1%) | SSD Storage: 0 B / 0 B | Keys: 16058 (soft-pinned: 0) | Clients: 1 | Requests (Success/Total per sec): PutStart=0.00/0.00, PutEnd=0.00/0.00, PutRevoke=0.00/0.00, Get=0.00/0.00, Exist=0.00/0.00, Del=0.00/0.00, DelAll=0.00/0.00, Ping=1.00/1.00, CopyStart=0.00/0.00, CopyEnd=0.00/0.00, CopyRevoke=0.00/0.00, MoveStart=0.00/0.00, MoveEnd=0.00/0.00, MoveRevoke=0.00/0.00, EvictDiskReplica=0.00/0.00 | Batch Requests (per sec, Req=Success/PartialSuccess/Total, Item=Success/Total): PutStart:(Req=0.00/0.00/0.00, Item=0.00/0.00), PutEnd:(Req=0.00/0.00/0.00, Item=0.00/0.00), PutRevoke:(Req=0.00/0.00/0.00, Item=0.00/0.00), Get:(Req=0.00/0.00/0.00, Item=0.00/0.00), ExistKey:(Req=0.00/0.00/0.00, Item=0.00/0.00), QueryIp:(Req=0.00/0.00/0.00, Item=0.00/0.00), Clear:(Req=0.00/0.00/0.00, Item=0.00/0.00), CreateMoveTask:(Req=0.00/0.00), CreateCopyTask:(Req=0.00/0.00), QueryTask:(Req=0.00/0.00), FetchTasks:(Req=0.00/0.00), MarkTaskToComplete:(Req=0.00/0.00) | Eviction: Success/Attempts=0/0, AllocFail=0, keys=0, size=0 B | Discard: Released/Total=0/0, StagingSize=0 B | Snapshots: Success=0, Fail=0
Request counters are reported as rates per second over the time window between two consecutive log outputs (10 seconds by default). Real-time state values (storage, key count, client count, discard staging size) are not rate-limited and reflect the current value at log time.
The metrics block consists of the following sections:
Storage
| Field | Description |
|---|---|
Mem Storage |
Current memory usage / total memory capacity, with percentage |
SSD Storage |
Current SSD-backed storage usage / total SSD capacity |
Keys and Clients
| Field | Description |
|---|---|
Keys |
Total number of keys managed by the master |
soft-pinned |
Number of keys with active soft-pin leases (protected from eviction) |
Clients |
Number of currently connected clients |
Requests (Success/Total per sec)
Rate counters for individual (non-batch) RPC requests over the last time window. Each shows <success_rate>/<total_rate> in requests per second:
| Counter | Description |
|---|---|
PutStart |
Put object allocation requests |
PutEnd |
Put object commit requests |
PutRevoke |
Put object cancellation requests |
Get |
Get replica list requests |
Exist |
Key existence check requests |
Del |
Single key deletion requests |
DelAll |
Delete-all objects requests |
Ping |
Client heartbeat/ping requests |
CopyStart |
Copy object allocation requests |
CopyEnd |
Copy object commit requests |
CopyRevoke |
Copy object cancellation requests |
MoveStart |
Move object allocation requests |
MoveEnd |
Move object commit requests |
MoveRevoke |
Move object cancellation requests |
EvictDiskReplica |
Evict disk replica requests |
Batch Requests (per sec)
Batch operations aggregate multiple items into a single RPC. Rates are per second over the last time window. Format: Req=<success>/<partial_success>/<total>, Item=<success_items>/<total_items>:
| Counter | Description |
|---|---|
PutStart |
Batch put object allocation requests |
PutEnd |
Batch put object commit requests |
PutRevoke |
Batch put object cancellation requests |
Get |
Batch get replica list requests |
ExistKey |
Batch key existence check requests |
QueryIp |
Batch query IP requests |
Clear |
Batch replica clear requests |
A request is considered "partial success" when it succeeds for some items but not all.
Task Operations
| Counter | Description |
|---|---|
CreateMoveTask |
Move task creation requests |
CreateCopyTask |
Copy task creation requests |
QueryTask |
Task status query requests |
FetchTasks |
Pending task fetch requests (polled by store clients) |
MarkTaskToComplete |
Task completion acknowledgement requests |
Eviction & Discard
Eviction counters are deltas between two consecutive log outputs — they show what happened in the time window, not cumulative totals.
| Field | Description |
|---|---|
Eviction: Success/Attempts |
Eviction rounds that succeeded at least partially vs. total attempts in this window |
AllocFail |
Number of PutStart/UpsertStart failures caused by replica allocation failure (triggers eviction) in this window |
keys |
Number of keys evicted in this window |
size |
Total size of evicted data in this window |
Discard: Released/Total |
Released (cleaned up) vs. total discarded PutStart staging replicas (live values) |
StagingSize |
Current size of discarded but not-yet-released staging buffers (live value) |
Prometheus Metrics Endpoint
Mooncake master exposes Prometheus-format metrics at the HTTP admin endpoint. This allows integration with Prometheus, Grafana, or any Prometheus-compatible monitoring stack.
Endpoints
The admin HTTP server runs on metrics_port (default: 9003) and exposes the following endpoints:
| Endpoint | Content-Type | Description |
|---|---|---|
GET /metrics |
text/plain; version=0.0.4 |
All metrics in Prometheus exposition format |
GET /metrics/summary |
text/plain; version=0.0.4 |
Human-readable summary (same content as the periodic log) |
GET /health |
application/json |
Health check with role, HA state, and service readiness |
GET /role |
text/plain |
Current HA role (leader / standby) |
GET /ha_status |
text/plain |
Current HA runtime state (serving / starting / etc.) |
Usage
Scrape the /metrics endpoint with Prometheus:
Add a scrape config to your prometheus.yml:
scrape_configs:
- job_name: 'mooncake-master'
static_configs:
- targets: ['<master-host>:9003']
metrics_path: '/metrics'
Quick check with curl:
# Get Prometheus metrics
curl http://<master-host>:9003/metrics
# Get human-readable summary
curl http://<master-host>:9003/metrics/summary
# Check health
curl http://<master-host>:9003/health
Configuration
The admin HTTP server is configured in the master config file (master.json or master.yaml):
{
"enable_metric_reporting": true,
"metrics_port": 9003,
...
}
Set enable_metric_reporting to false to disable the periodic metrics log. HTTP endpoints (/metrics, /health, etc.) remain available regardless of this setting.