<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <p>Performance metrics are quantitative measurements that provide visibility into Geode&rsquo;s operational behavior, resource utilization, and query performance. Geode exposes hundreds of metrics covering every aspect of database operations, from query execution times and transaction throughput to memory consumption and disk I/O patterns.</p> <p>By collecting and analyzing metrics, you can identify performance bottlenecks, detect anomalies, optimize resource allocation, and ensure your Geode deployment meets service level objectives (SLOs). Metrics form the foundation of observability, enabling data-driven decisions about scaling, tuning, and capacity planning.</p> <p>This guide covers Geode&rsquo;s metrics architecture, key performance indicators (KPIs), collection strategies, and metrics-driven optimization techniques.</p> <h3 id="metrics-architecture" class="position-relative d-flex align-items-center group"> <span>Metrics Architecture</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="metrics-architecture" aria-haspopup="dialog" aria-label="Share link: Metrics Architecture"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>Geode implements a multi-layered metrics system built on industry standards:</p> <p><strong>Prometheus Exposition Format</strong>: Metrics are exposed at <code>/metrics</code> endpoint in Prometheus-compatible format, making integration with monitoring stacks straightforward.</p> <p><strong>Hierarchical Organization</strong>: Metrics are organized by subsystem (queries, transactions, storage, memory, connections) with consistent naming conventions.</p> <p><strong>Low Overhead</strong>: Metrics collection uses lock-free data structures and sampling techniques to minimize performance impact.</p> <p><strong>Rich Labels</strong>: Metrics include dimensional labels for filtering and aggregation (e.g., query status, client type, operation type).</p> <h3 id="core-metric-types" class="position-relative d-flex align-items-center group"> <span>Core Metric Types</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="core-metric-types" aria-haspopup="dialog" aria-label="Share link: Core Metric Types"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="counter-metrics" class="position-relative d-flex align-items-center group"> <span>Counter Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="counter-metrics" aria-haspopup="dialog" aria-label="Share link: Counter Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Counters track cumulative totals that only increase over time. Use rate functions to convert to per-second rates:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Total queries executed</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_queries_total</span><span class="p">{</span><span class="nl">status</span><span class="o">=</span><span class="p">&#34;</span><span class="s">success</span><span class="p">&#34;}</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="mi">284</span><span class="p">,</span><span class="mi">372</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Query rate (queries per second)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_queries_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Key Counters</strong>:</p> <ul> <li><code>geode_queries_total</code> - Total queries by status (success/error)</li> <li><code>geode_transactions_total</code> - Total transactions by outcome</li> <li><code>geode_connection_errors_total</code> - Failed connection attempts</li> <li><code>geode_disk_io_operations_total</code> - Disk I/O operations by type</li> <li><code>geode_cache_misses_total</code> - Cache miss count</li> </ul> <h4 id="gauge-metrics" class="position-relative d-flex align-items-center group"> <span>Gauge Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="gauge-metrics" aria-haspopup="dialog" aria-label="Share link: Gauge Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Gauges represent point-in-time measurements that can increase or decrease:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Current active connections</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_active_connections</span><span class="w"> </span><span class="mi">127</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Memory usage in bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_memory_used_bytes</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="mi">147</span><span class="p">,</span><span class="mi">483</span><span class="p">,</span><span class="mi">648</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Active transactions</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_active_transactions</span><span class="w"> </span><span class="mi">15</span><span class="w"> </span></span></span></code></pre></div><p><strong>Key Gauges</strong>:</p> <ul> <li><code>geode_active_connections</code> - Current client connections</li> <li><code>geode_active_queries</code> - Currently executing queries</li> <li><code>geode_memory_used_bytes</code> - Total memory consumption</li> <li><code>geode_disk_used_bytes</code> - Disk space used</li> <li><code>geode_connection_pool_size</code> - Connection pool utilization</li> </ul> <h4 id="histogram-metrics" class="position-relative d-flex align-items-center group"> <span>Histogram Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="histogram-metrics" aria-haspopup="dialog" aria-label="Share link: Histogram Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Histograms track distributions of values across predefined buckets, enabling percentile calculations:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Query duration buckets</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">{</span><span class="nl">le</span><span class="o">=</span><span class="p">&#34;</span><span class="s">0.01</span><span class="p">&#34;}</span><span class="w"> </span><span class="mi">45</span><span class="p">,</span><span class="mi">234</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">{</span><span class="nl">le</span><span class="o">=</span><span class="p">&#34;</span><span class="s">0.05</span><span class="p">&#34;}</span><span class="w"> </span><span class="mi">89</span><span class="p">,</span><span class="mi">432</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">{</span><span class="nl">le</span><span class="o">=</span><span class="p">&#34;</span><span class="s">0.1</span><span class="p">&#34;}</span><span class="w"> </span><span class="mi">112</span><span class="p">,</span><span class="mi">847</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">{</span><span class="nl">le</span><span class="o">=</span><span class="p">&#34;</span><span class="s">1.0</span><span class="p">&#34;}</span><span class="w"> </span><span class="mi">125</span><span class="p">,</span><span class="mi">234</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">{</span><span class="nl">le</span><span class="o">=</span><span class="p">&#34;</span><span class="s">+Inf</span><span class="p">&#34;}</span><span class="w"> </span><span class="mi">125</span><span class="p">,</span><span class="mi">847</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Calculate p95 latency</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">histogram_quantile</span><span class="o">(</span><span class="mf">0.95</span><span class="p">,</span><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span></code></pre></div><p><strong>Key Histograms</strong>:</p> <ul> <li><code>geode_query_duration_seconds</code> - Query execution time distribution</li> <li><code>geode_transaction_duration_seconds</code> - Transaction duration distribution</li> <li><code>geode_checkpoint_duration_seconds</code> - Checkpoint time distribution</li> <li><code>geode_index_build_duration_seconds</code> - Index creation time distribution</li> </ul> <h4 id="summary-metrics" class="position-relative d-flex align-items-center group"> <span>Summary Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="summary-metrics" aria-haspopup="dialog" aria-label="Share link: Summary Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Summaries pre-calculate percentiles on the client side:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="nv">geode_query_latency</span><span class="p">{</span><span class="nl">quantile</span><span class="o">=</span><span class="p">&#34;</span><span class="s">0.5</span><span class="p">&#34;}</span><span class="w"> </span><span class="mf">0.012</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_latency</span><span class="p">{</span><span class="nl">quantile</span><span class="o">=</span><span class="p">&#34;</span><span class="s">0.9</span><span class="p">&#34;}</span><span class="w"> </span><span class="mf">0.087</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_latency</span><span class="p">{</span><span class="nl">quantile</span><span class="o">=</span><span class="p">&#34;</span><span class="s">0.99</span><span class="p">&#34;}</span><span class="w"> </span><span class="mf">0.342</span><span class="w"> </span></span></span></code></pre></div> <h3 id="query-performance-metrics" class="position-relative d-flex align-items-center group"> <span>Query Performance Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-performance-metrics" aria-haspopup="dialog" aria-label="Share link: Query Performance Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Track query execution characteristics to identify optimization opportunities:</p> <p><strong>Query Throughput</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Total query rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">sum</span><span class="o">(</span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_queries_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Success rate percentage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_queries_total</span><span class="p">{</span><span class="nl">status</span><span class="o">=</span><span class="p">&#34;</span><span class="s">success</span><span class="p">&#34;}[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_queries_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span></span></span></code></pre></div><p><strong>Query Latency</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Median query time (p50)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">histogram_quantile</span><span class="o">(</span><span class="mf">0.50</span><span class="p">,</span><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># p95 query time (95% of queries complete faster)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">histogram_quantile</span><span class="o">(</span><span class="mf">0.95</span><span class="p">,</span><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># p99 query time (worst-case for 99% of queries)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">histogram_quantile</span><span class="o">(</span><span class="mf">0.99</span><span class="p">,</span><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_query_duration_seconds_bucket</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span></code></pre></div><p><strong>Query Plan Cache</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Cache hit rate (percentage)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_query_plan_cache_hits_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="o">(</span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_query_plan_cache_hits_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_query_plan_cache_misses_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Cache size</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_plan_cache_size_bytes</span><span class="w"> </span></span></span></code></pre></div><p><strong>Slow Queries</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Slow query rate (queries exceeding threshold)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_slow_queries_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Slow query threshold (default 1 second)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_slow_query_threshold_seconds</span><span class="w"> </span></span></span></code></pre></div> <h3 id="transaction-metrics" class="position-relative d-flex align-items-center group"> <span>Transaction Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="transaction-metrics" aria-haspopup="dialog" aria-label="Share link: Transaction Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Monitor transaction behavior and ACID guarantees:</p> <p><strong>Transaction Throughput</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Commits per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transactions_total</span><span class="p">{</span><span class="nl">status</span><span class="o">=</span><span class="p">&#34;</span><span class="s">committed</span><span class="p">&#34;}[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Rollbacks per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transactions_total</span><span class="p">{</span><span class="nl">status</span><span class="o">=</span><span class="p">&#34;</span><span class="s">rolled_back</span><span class="p">&#34;}[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Commit ratio</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transactions_total</span><span class="p">{</span><span class="nl">status</span><span class="o">=</span><span class="p">&#34;</span><span class="s">committed</span><span class="p">&#34;}[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transactions_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span></span></span></code></pre></div><p><strong>Transaction Conflicts</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Serialization conflict rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transaction_conflicts_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Conflict ratio (conflicts per transaction)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transaction_conflicts_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transactions_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Transaction Duration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Average transaction duration</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transaction_duration_seconds_sum</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transaction_duration_seconds_count</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># p95 transaction duration</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">histogram_quantile</span><span class="o">(</span><span class="mf">0.95</span><span class="p">,</span><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transaction_duration_seconds_bucket</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span></code></pre></div><p><strong>Long-Running Transactions</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Transactions exceeding 60 seconds</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_long_running_transactions</span><span class="p">{</span><span class="nl">threshold</span><span class="o">=</span><span class="p">&#34;</span><span class="s">60s</span><span class="p">&#34;}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Oldest active transaction age</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_oldest_transaction_age_seconds</span><span class="w"> </span></span></span></code></pre></div> <h3 id="connection-metrics" class="position-relative d-flex align-items-center group"> <span>Connection Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="connection-metrics" aria-haspopup="dialog" aria-label="Share link: Connection Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Track client connectivity and connection pool health:</p> <p><strong>Connection Utilization</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Current active connections</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_active_connections</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Connection pool utilization percentage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_active_connections</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nv">geode_max_connections</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Connections by client type</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">sum</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="o">(</span><span class="nv">client_type</span><span class="o">)</span><span class="w"> </span><span class="o">(</span><span class="nv">geode_active_connections</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Connection Churn</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># New connections per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_connections_opened_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Closed connections per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_connections_closed_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Connection error rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_connection_errors_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>QUIC Stream Metrics</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Active QUIC streams</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_quic_streams_active</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Stream errors</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_quic_stream_errors_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Stream reset rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_quic_streams_reset_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div> <h3 id="memory-metrics" class="position-relative d-flex align-items-center group"> <span>Memory Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="memory-metrics" aria-haspopup="dialog" aria-label="Share link: Memory Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Monitor memory consumption and allocation patterns:</p> <p><strong>Memory Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Total memory used</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_memory_used_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Memory usage percentage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_memory_used_bytes</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nv">geode_memory_total_bytes</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Memory by subsystem</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">sum</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="o">(</span><span class="nv">subsystem</span><span class="o">)</span><span class="w"> </span><span class="o">(</span><span class="nv">geode_memory_used_bytes</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Cache Metrics</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Query result cache size</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_query_cache_size_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Buffer pool size</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_buffer_pool_size_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Cache hit rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_cache_hits_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="o">(</span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_cache_hits_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_cache_misses_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span></code></pre></div><p><strong>MVCC Version Overhead</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Total MVCC versions in memory</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_mvcc_versions_count</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># MVCC memory overhead</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_mvcc_memory_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Version cleanup rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_mvcc_versions_cleaned_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Allocation Rate</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Memory allocations per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_memory_allocations_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Deallocations per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_memory_deallocations_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Allocation churn</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_memory_allocations_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_memory_deallocations_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div> <h3 id="storage-metrics" class="position-relative d-flex align-items-center group"> <span>Storage Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="storage-metrics" aria-haspopup="dialog" aria-label="Share link: Storage Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Track disk usage and I/O performance:</p> <p><strong>Disk Space</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Disk space used</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_disk_used_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Disk space available</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_disk_free_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Disk usage percentage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_disk_used_bytes</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nv">geode_disk_total_bytes</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span></span></span></code></pre></div><p><strong>Write-Ahead Log (WAL)</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># WAL size in bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_wal_size_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># WAL growth rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">deriv</span><span class="o">(</span><span class="nv">geode_wal_size_bytes</span><span class="p">[</span><span class="s">15m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># WAL segments</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_wal_segments_count</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># WAL flush rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_wal_flushes_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Checkpoint Metrics</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Checkpoint duration</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_checkpoint_duration_seconds</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Checkpoints per hour</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_checkpoints_total</span><span class="p">[</span><span class="s">1h</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">3600</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Data written during checkpoint</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_checkpoint_bytes_written</span><span class="w"> </span></span></span></code></pre></div><p><strong>Disk I/O</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Read operations per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_disk_io_operations_total</span><span class="p">{</span><span class="nl">type</span><span class="o">=</span><span class="p">&#34;</span><span class="s">read</span><span class="p">&#34;}[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Write operations per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_disk_io_operations_total</span><span class="p">{</span><span class="nl">type</span><span class="o">=</span><span class="p">&#34;</span><span class="s">write</span><span class="p">&#34;}[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Bytes read per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_disk_bytes_read_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Bytes written per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_disk_bytes_written_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div> <h3 id="index-metrics" class="position-relative d-flex align-items-center group"> <span>Index Metrics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="index-metrics" aria-haspopup="dialog" aria-label="Share link: Index Metrics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Monitor index effectiveness and storage:</p> <p><strong>Index Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Index lookups per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_index_lookups_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Index hit rate</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_index_hits_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_index_lookups_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Scans vs. seeks</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_index_scans_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_index_seeks_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span></code></pre></div><p><strong>Index Storage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Total index size</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_index_size_bytes</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Index size by type</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">sum</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="o">(</span><span class="nv">index_type</span><span class="o">)</span><span class="w"> </span><span class="o">(</span><span class="nv">geode_index_size_bytes</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Index memory usage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_index_memory_bytes</span><span class="w"> </span></span></span></code></pre></div><p><strong>Index Maintenance</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Index build duration</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_index_build_duration_seconds</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Index updates per second</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_index_updates_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Index rebuilds</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">geode_index_rebuilds_total</span><span class="w"> </span></span></span></code></pre></div> <h3 id="custom-metrics-integration" class="position-relative d-flex align-items-center group"> <span>Custom Metrics Integration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="custom-metrics-integration" aria-haspopup="dialog" aria-label="Share link: Custom Metrics Integration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Extend Geode&rsquo;s metrics with application-specific measurements:</p> <p><strong>Application Metrics via Labels</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Track custom query categories</span> </span></span><span class="line"><span class="cl"><span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">query</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">params</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">labels</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;query_category&#34;</span><span class="p">:</span> <span class="s2">&#34;recommendation&#34;</span><span class="p">,</span> <span class="s2">&#34;version&#34;</span><span class="p">:</span> <span class="s2">&#34;v2&#34;</span><span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span></code></pre></div><p><strong>Custom Metric Exporter</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">prometheus_client</span> <span class="kn">import</span> <span class="n">Counter</span><span class="p">,</span> <span class="n">Histogram</span><span class="p">,</span> <span class="n">Gauge</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Define custom metrics</span> </span></span><span class="line"><span class="cl"><span class="n">recommendation_requests</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;app_recommendation_requests_total&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Total recommendation requests&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">[</span><span class="s1">&#39;algorithm&#39;</span><span class="p">,</span> <span class="s1">&#39;status&#39;</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">recommendation_latency</span> <span class="o">=</span> <span class="n">Histogram</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;app_recommendation_duration_seconds&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;Recommendation generation time&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">[</span><span class="s1">&#39;algorithm&#39;</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Instrument application code</span> </span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="n">recommendation_latency</span><span class="o">.</span><span class="n">labels</span><span class="p">(</span><span class="n">algorithm</span><span class="o">=</span><span class="s1">&#39;collaborative&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">time</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="n">recommendations</span> <span class="o">=</span> <span class="k">await</span> <span class="n">generate_recommendations</span><span class="p">(</span><span class="n">user_id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">recommendation_requests</span><span class="o">.</span><span class="n">labels</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">algorithm</span><span class="o">=</span><span class="s1">&#39;collaborative&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">status</span><span class="o">=</span><span class="s1">&#39;success&#39;</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span><span class="o">.</span><span class="n">inc</span><span class="p">()</span> </span></span></code></pre></div> <h3 id="metrics-driven-optimization" class="position-relative d-flex align-items-center group"> <span>Metrics-Driven Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="metrics-driven-optimization" aria-haspopup="dialog" aria-label="Share link: Metrics-Driven Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Use metrics to guide performance improvements:</p> <p><strong>Identify Hot Queries</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># Queries consuming most total time</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">topk</span><span class="o">(</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_query_duration_seconds_sum</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Most frequently executed queries</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">topk</span><span class="o">(</span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_queries_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">))</span><span class="w"> </span></span></span></code></pre></div><p><strong>Detect Resource Bottlenecks</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># High memory pressure indicator</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="o">(</span><span class="nv">geode_memory_used_bytes</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nv">geode_memory_total_bytes</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mf">0.85</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="ow">and</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="o">(</span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_cache_evictions_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">100</span><span class="o">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># Disk I/O bottleneck indicator</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_disk_io_wait_seconds_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mf">0.1</span><span class="w"> </span></span></span></code></pre></div><p><strong>Transaction Tuning</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># High conflict rate requiring tuning</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transaction_conflicts_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kr">rate</span><span class="o">(</span><span class="nv">geode_transactions_total</span><span class="p">[</span><span class="s">5m</span><span class="p">]</span><span class="o">)</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mf">0.05</span><span class="w"> </span></span></span></code></pre></div> <h3 id="best-practices" class="position-relative d-flex align-items-center group"> <span>Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="best-practices" aria-haspopup="dialog" aria-label="Share link: Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p><strong>Establish Baselines</strong>: Monitor metrics under normal load to establish performance baselines for anomaly detection and capacity planning.</p> <p><strong>Use Recording Rules</strong>: Pre-compute expensive metric queries in Prometheus recording rules to reduce dashboard load times.</p> <p><strong>Set Meaningful Thresholds</strong>: Configure alert thresholds based on actual system behavior and SLO requirements, not arbitrary values.</p> <p><strong>Monitor Metric Cardinality</strong>: Avoid high-cardinality labels (e.g., user IDs) that can explode metric storage requirements.</p> <p><strong>Correlate Metrics</strong>: Analyze multiple related metrics together to understand root causes (e.g., high query latency + memory pressure).</p> <p><strong>Track Trends</strong>: Monitor metric trends over time to predict capacity needs and detect gradual degradation.</p> <p><strong>Validate Changes</strong>: Compare metrics before and after configuration changes to measure impact.</p> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="/tags/monitoring/" >System Monitoring</a> - Comprehensive monitoring strategies</li> <li><a href="/tags/observability/" >Observability</a> - Observability best practices</li> <li><a href="/tags/prometheus/" >Prometheus Integration</a> - Prometheus configuration</li> <li><a href="/tags/performance/" >Performance Tuning</a> - Performance optimization</li> <li><a href="/tags/alerting/" >Alerting</a> - Alert configuration</li> <li><a href="/tags/profiling/" >Profiling</a> - Query profiling techniques</li> </ul> <h3 id="further-reading" class="position-relative d-flex align-items-center group"> <span>Further Reading</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="further-reading" aria-haspopup="dialog" aria-label="Share link: Further Reading"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li>Metrics Reference Documentation</li> <li>Prometheus Query Examples</li> <li>Metrics-Based Alerting Guide</li> <li>Capacity Planning with Metrics</li> <li>Custom Instrumentation Guide</li> </ul>

Related Articles