- the engine pod runs
lmcache server - the engine exposes a Prometheus
/metricsendpoint - the operator creates a metrics
Service - optionally, the operator also creates a
ServiceMonitor
- use this page for operator-specific setup and the small set of metrics that matter first
- use the upstream LMCache Observability docs for the full metric catalog and deeper internals
What the operator exposes
When Prometheus is enabled on theLMCacheEngine, the operator configures the engine with a
Prometheus port and creates a metrics Service for it.
At a high level:
- the engine exports LMCache MP metrics
- Prometheus can scrape them through the metrics
Service - if
serviceMonitor.enabledis set and the Prometheus Operator CRD exists, the operator can also create aServiceMonitor
Verify the metrics endpoint
Check that the metricsService exists:
ServiceMonitor, also confirm it exists:
Metrics to watch first
You do not need the full LMCache metric catalog to answer the first operational questions. Start with these.1. Lookup hit rate
These counters tell you how much of the requested prefix was served from LMCache.lmcache_mp_lookup_requested_tokens_totallmcache_mp_lookup_hit_tokens_total
- is LMCache actually hitting?
- did a rollout or config change reduce reuse?
- is one model or tenant getting poor reuse?
2. L1 activity
These counters tell you whether the in-memory cache is being used and churned heavily.lmcache_mp_l1_read_chunks_totallmcache_mp_l1_write_chunks_totallmcache_mp_l1_evicted_chunks_total
- writes increasing but reads staying low -> poor reuse
- evictions rising too quickly -> L1 is likely undersized for the working set
3. L2 store and prefetch activity
If you use filesystem offloading or another L2 backend, these metrics tell you whether the engine is actually using L2:lmcache_mp_l2_store_completed_requests_totallmcache_mp_l2_load_completed_requests_totallmcache_mp_l2_prefetch_failure_chunks_total
- is L2 receiving data?
- is warm traffic actually loading from L2?
- are prefetches failing because of misses or L1 pressure?
4. Retrieved chunk volume
This counter tells you how much data LMCache is actually loading back into the engine:lmcache_mp_num_chunks_loaded_total
5. Reuse-gap histograms
These histograms help you size storage and understand whether cached data is living long enough to be reused:lmcache_mp_real_reuse_gap_secondslmcache_mp_real_reuse_gap_objects_chunks
- whether L1 is too small
- whether L2 retention is worth the storage cost
- whether one tenant’s cache is staying hot enough to justify a larger quota
Per-model and per-tenant slicing
Many LMCache MP metrics carry labels such as:model_namecache_saltl2_name
cache_salt can be high-cardinality. If you export these metrics into
Prometheus, be careful about exploding time-series counts by using one unique salt per request.
Operational rule:
- per-tenant
cache_saltis reasonable - per-request
cache_saltis usually a bad idea for both reuse and observability
Healthy patterns
Healthy LMCache behavior usually looks like this:- lookup hit rate rises on repeated or warm traffic
- L1 reads increase on warm traffic
- L2 loads increase when warm traffic is served from offloaded cache
- eviction is present but not dominating all traffic
- high L1 writes with almost no L1 reads
- constant eviction pressure
- no L2 loads even though you expect warm reuse from offloaded cache
- high prefetch failure counts
When to go deeper
Use the upstream LMCache docs when you need:- the full MP metric catalog
- event/log/tracing details
- exact metric semantics and cardinality notes
- advanced observability and health-monitor design

