<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Monitoring and observability are essential for operating Geode in production environments. Comprehensive monitoring enables you to track system health, identify performance bottlenecks, detect anomalies, and respond to issues before they impact users.</p>
<p>Geode provides rich telemetry through Prometheus metrics, structured logging, distributed tracing, and real-time performance profiling. Combined with integration capabilities for popular monitoring stacks like Grafana, Datadog, and New Relic, Geode gives you deep visibility into your graph database operations.</p>
<p>This guide covers monitoring strategies, key metrics, alerting patterns, and best practices for maintaining observable Geode deployments.</p>
<h3 id="key-monitoring-concepts" class="position-relative d-flex align-items-center group">
<span>Key Monitoring Concepts</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="key-monitoring-concepts"
aria-haspopup="dialog"
aria-label="Share link: Key Monitoring Concepts">
<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><strong>Metrics</strong>: Quantitative measurements of system behavior collected over time. Geode exposes hundreds of metrics covering queries, transactions, connections, memory, disk I/O, and more.</p>
<p><strong>Logs</strong>: Structured event records providing detailed context about system operations, errors, and state changes. Geode uses structured JSON logging for easy parsing and analysis.</p>
<p><strong>Traces</strong>: End-to-end tracking of requests through distributed systems. Geode supports OpenTelemetry for distributed tracing across services.</p>
<p><strong>Profiling</strong>: Runtime analysis of query execution, resource utilization, and performance characteristics. Use Geode’s <code>PROFILE</code> command for query-level profiling.</p>
<h3 id="prometheus-metrics-integration" class="position-relative d-flex align-items-center group">
<span>Prometheus 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="prometheus-metrics-integration"
aria-haspopup="dialog"
aria-label="Share link: Prometheus 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>Geode exposes metrics in Prometheus format at the <code>/metrics</code> endpoint:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Access metrics endpoint</span>
</span></span><span class="line"><span class="cl">curl http://localhost:3141/metrics
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Sample metrics output</span>
</span></span><span class="line"><span class="cl">geode_queries_total<span class="o">{</span><span class="nv">status</span><span class="o">=</span><span class="s2">"success"</span><span class="o">}</span> <span class="m">12847</span>
</span></span><span class="line"><span class="cl">geode_queries_total<span class="o">{</span><span class="nv">status</span><span class="o">=</span><span class="s2">"error"</span><span class="o">}</span> <span class="m">23</span>
</span></span><span class="line"><span class="cl">geode_query_duration_seconds_bucket<span class="o">{</span><span class="nv">le</span><span class="o">=</span><span class="s2">"0.1"</span><span class="o">}</span> <span class="m">8234</span>
</span></span><span class="line"><span class="cl">geode_active_connections<span class="o">{</span><span class="nv">client</span><span class="o">=</span><span class="s2">"go"</span><span class="o">}</span> <span class="m">45</span>
</span></span><span class="line"><span class="cl">geode_transaction_duration_seconds_sum 1847.3
</span></span></code></pre></div><p><strong>Configure Prometheus Scraping</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># prometheus.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">scrape_configs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">job_name</span><span class="p">:</span><span class="w"> </span><span class="s1">'geode'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">static_configs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">targets</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">'localhost:3141'</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scrape_interval</span><span class="p">:</span><span class="w"> </span><span class="l">15s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scrape_timeout</span><span class="p">:</span><span class="w"> </span><span class="l">10s</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="essential-metrics-to-monitor" class="position-relative d-flex align-items-center group">
<span>Essential Metrics to Monitor</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="essential-metrics-to-monitor"
aria-haspopup="dialog"
aria-label="Share link: Essential Metrics to Monitor">
<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>Query Performance Metrics</strong>:</p>
<ul>
<li><code>geode_queries_total</code>: Total query count by status</li>
<li><code>geode_query_duration_seconds</code>: Query latency histogram</li>
<li><code>geode_query_execution_plan_cache_hits</code>: Query plan cache effectiveness</li>
<li><code>geode_slow_queries_total</code>: Queries exceeding threshold</li>
</ul>
<p><strong>Transaction Metrics</strong>:</p>
<ul>
<li><code>geode_transactions_total</code>: Transaction count by outcome (commit/rollback)</li>
<li><code>geode_transaction_duration_seconds</code>: Transaction latency</li>
<li><code>geode_transaction_conflicts_total</code>: Serialization conflicts</li>
<li><code>geode_active_transactions</code>: Currently executing transactions</li>
</ul>
<p><strong>Connection Metrics</strong>:</p>
<ul>
<li><code>geode_active_connections</code>: Current client connections</li>
<li><code>geode_connection_errors_total</code>: Failed connection attempts</li>
<li><code>geode_connection_pool_size</code>: Connection pool utilization</li>
<li><code>geode_quic_streams_active</code>: Active QUIC streams</li>
</ul>
<p><strong>Memory Metrics</strong>:</p>
<ul>
<li><code>geode_memory_used_bytes</code>: Total memory consumption</li>
<li><code>geode_cache_size_bytes</code>: Query cache and buffer pool sizes</li>
<li><code>geode_mvcc_versions_count</code>: MVCC version overhead</li>
<li><code>geode_memory_allocations_total</code>: Allocation rate</li>
</ul>
<p><strong>Storage Metrics</strong>:</p>
<ul>
<li><code>geode_disk_used_bytes</code>: Disk space consumption</li>
<li><code>geode_wal_size_bytes</code>: Write-ahead log size</li>
<li><code>geode_disk_io_operations_total</code>: I/O operations by type</li>
<li><code>geode_checkpoint_duration_seconds</code>: Checkpoint performance</li>
</ul>
<p><strong>Index Metrics</strong>:</p>
<ul>
<li><code>geode_index_size_bytes</code>: Index storage consumption</li>
<li><code>geode_index_lookups_total</code>: Index usage frequency</li>
<li><code>geode_index_build_duration_seconds</code>: Index creation time</li>
</ul>
<h3 id="structured-logging" class="position-relative d-flex align-items-center group">
<span>Structured Logging</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="structured-logging"
aria-haspopup="dialog"
aria-label="Share link: Structured Logging">
<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>Geode emits structured logs in JSON format for easy processing:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"timestamp"</span><span class="p">:</span> <span class="s2">"2024-01-24T10:15:30.123Z"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"level"</span><span class="p">:</span> <span class="s2">"INFO"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"message"</span><span class="p">:</span> <span class="s2">"Query executed successfully"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"query_id"</span><span class="p">:</span> <span class="s2">"q-12847"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"user"</span><span class="p">:</span> <span class="s2">"analyst"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"duration_ms"</span><span class="p">:</span> <span class="mf">45.3</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"rows_returned"</span><span class="p">:</span> <span class="mi">1250</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"plan_type"</span><span class="p">:</span> <span class="s2">"indexed_lookup"</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p><strong>Configure Log Levels</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="c"># geode.toml</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">logging</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">level</span> <span class="p">=</span> <span class="s2">"INFO"</span> <span class="c"># DEBUG, INFO, WARN, ERROR</span>
</span></span><span class="line"><span class="cl"><span class="nx">format</span> <span class="p">=</span> <span class="s2">"json"</span>
</span></span><span class="line"><span class="cl"><span class="nx">output</span> <span class="p">=</span> <span class="s2">"stdout"</span>
</span></span><span class="line"><span class="cl"><span class="nx">file</span> <span class="p">=</span> <span class="s2">"/var/log/geode/geode.log"</span>
</span></span><span class="line"><span class="cl"><span class="nx">rotate_size</span> <span class="p">=</span> <span class="s2">"100MB"</span>
</span></span><span class="line"><span class="cl"><span class="nx">rotate_count</span> <span class="p">=</span> <span class="mi">10</span>
</span></span></code></pre></div><p><strong>Log Categories</strong>:</p>
<ul>
<li><code>query</code>: Query execution and planning</li>
<li><code>transaction</code>: Transaction lifecycle events</li>
<li><code>connection</code>: Client connections and disconnections</li>
<li><code>storage</code>: Disk I/O and persistence operations</li>
<li><code>replication</code>: Replication and cluster coordination</li>
<li><code>security</code>: Authentication and authorization events</li>
</ul>
<h3 id="query-profiling-and-analysis" class="position-relative d-flex align-items-center group">
<span>Query Profiling and Analysis</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-profiling-and-analysis"
aria-haspopup="dialog"
aria-label="Share link: Query Profiling and Analysis">
<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 Geode’s built-in profiling capabilities to analyze query performance:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Profile</span><span class="w"> </span><span class="py">a</span><span class="w"> </span><span class="kd">query</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">PROFILE</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FOLLOWS</span><span class="p">]</span><span class="err">-></span><span class="p">(</span><span class="py">other</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">created_at</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="err">'</span><span class="py">2024</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">other</span><span class="p">)</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">followers</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">followers</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>Profile Output</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌────────────────────┬─────────┬─────────────┬───────────┐
</span></span><span class="line"><span class="cl">│ Operator │ Rows │ Time (ms) │ Memory │
</span></span><span class="line"><span class="cl">├────────────────────┼─────────┼─────────────┼───────────┤
</span></span><span class="line"><span class="cl">│ Sort + Limit │ 10 │ 2.3 │ 1.2 KB │
</span></span><span class="line"><span class="cl">│ Aggregation │ 8,432 │ 45.7 │ 2.4 MB │
</span></span><span class="line"><span class="cl">│ Expand(FOLLOWS) │ 421,082 │ 187.4 │ 12.8 MB │
</span></span><span class="line"><span class="cl">│ IndexSeek(User) │ 8,432 │ 12.1 │ 856 KB │
</span></span><span class="line"><span class="cl">└────────────────────┴─────────┴─────────────┴───────────┘
</span></span></code></pre></div><p><strong>Explain Query Plans</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">View</span><span class="w"> </span><span class="py">execution</span><span class="w"> </span><span class="py">plan</span><span class="w"> </span><span class="py">without</span><span class="w"> </span><span class="py">running</span><span class="w"> </span><span class="kd">query</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">EXPLAIN</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="alerting-strategies" class="position-relative d-flex align-items-center group">
<span>Alerting Strategies</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="alerting-strategies"
aria-haspopup="dialog"
aria-label="Share link: Alerting Strategies">
<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>Configure alerts for critical conditions:</p>
<p><strong>High Error Rate</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Prometheus alerting rule</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">groups</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode_alerts</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rules</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">HighQueryErrorRate</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd"> rate(geode_queries_total{status="error"}[5m]) > 10</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">5m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">"High query error rate detected"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="s2">"Error rate is {{ $value }} errors/sec"</span><span class="w">
</span></span></span></code></pre></div><p><strong>Slow Query Detection</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">SlowQueriesIncreasing</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd"> rate(geode_slow_queries_total[5m]) > 5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">10m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">"Slow query rate increasing"</span><span class="w">
</span></span></span></code></pre></div><p><strong>Connection Pool Exhaustion</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">ConnectionPoolExhausted</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd"> geode_active_connections >= geode_max_connections * 0.9</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">5m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">"Connection pool near capacity"</span><span class="w">
</span></span></span></code></pre></div><p><strong>Disk Space Low</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">DiskSpaceLow</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd"> geode_disk_free_bytes / geode_disk_total_bytes < 0.1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">15m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">"Disk space below 10%"</span><span class="w">
</span></span></span></code></pre></div><p><strong>Transaction Conflict Rate High</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl">- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">HighTransactionConflicts</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd"> rate(geode_transaction_conflicts_total[5m]) > 100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">10m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">"High transaction conflict rate"</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="grafana-dashboard-integration" class="position-relative d-flex align-items-center group">
<span>Grafana Dashboard 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="grafana-dashboard-integration"
aria-haspopup="dialog"
aria-label="Share link: Grafana Dashboard 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>Create comprehensive Grafana dashboards for Geode monitoring:</p>
<p><strong>Query Performance Dashboard</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"dashboard"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"title"</span><span class="p">:</span> <span class="s2">"Geode Query Performance"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"panels"</span><span class="p">:</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 class="nt">"title"</span><span class="p">:</span> <span class="s2">"Query Rate"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"targets"</span><span class="p">:</span> <span class="p">[{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"expr"</span><span class="p">:</span> <span class="s2">"rate(geode_queries_total[5m])"</span>
</span></span><span class="line"><span class="cl"> <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 class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"title"</span><span class="p">:</span> <span class="s2">"Query Latency (p95)"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"targets"</span><span class="p">:</span> <span class="p">[{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"expr"</span><span class="p">:</span> <span class="s2">"histogram_quantile(0.95, rate(geode_query_duration_seconds_bucket[5m]))"</span>
</span></span><span class="line"><span class="cl"> <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 class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"title"</span><span class="p">:</span> <span class="s2">"Active Queries"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"targets"</span><span class="p">:</span> <span class="p">[{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"expr"</span><span class="p">:</span> <span class="s2">"geode_active_queries"</span>
</span></span><span class="line"><span class="cl"> <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 class="p">]</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
<h3 id="distributed-tracing" class="position-relative d-flex align-items-center group">
<span>Distributed Tracing</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="distributed-tracing"
aria-haspopup="dialog"
aria-label="Share link: Distributed Tracing">
<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>Enable OpenTelemetry tracing for end-to-end visibility:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="c"># geode.toml</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">tracing</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">enabled</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">exporter</span> <span class="p">=</span> <span class="s2">"otlp"</span>
</span></span><span class="line"><span class="cl"><span class="nx">endpoint</span> <span class="p">=</span> <span class="s2">"http://localhost:4317"</span>
</span></span><span class="line"><span class="cl"><span class="nx">sample_rate</span> <span class="p">=</span> <span class="mf">0.1</span> <span class="c"># Sample 10% of traces</span>
</span></span></code></pre></div><p><strong>Trace Example</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Trace: user_recommendation_flow
</span></span><span class="line"><span class="cl">├─ http_request [200ms]
</span></span><span class="line"><span class="cl">│ └─ geode_query: match_user_preferences [120ms]
</span></span><span class="line"><span class="cl">│ ├─ index_lookup: user_by_id [5ms]
</span></span><span class="line"><span class="cl">│ ├─ expand_relationships: purchased [80ms]
</span></span><span class="line"><span class="cl">│ └─ aggregation: compute_scores [35ms]
</span></span><span class="line"><span class="cl">└─ cache_update [10ms]
</span></span></code></pre></div>
<h3 id="health-checks-and-readiness" class="position-relative d-flex align-items-center group">
<span>Health Checks and Readiness</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="health-checks-and-readiness"
aria-haspopup="dialog"
aria-label="Share link: Health Checks and Readiness">
<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>Implement health check endpoints for orchestration platforms:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Liveness probe (is Geode running?)</span>
</span></span><span class="line"><span class="cl">curl http://localhost:3141/health/live
</span></span><span class="line"><span class="cl"><span class="c1"># Returns: {"status": "ok"}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Readiness probe (can Geode serve traffic?)</span>
</span></span><span class="line"><span class="cl">curl http://localhost:3141/health/ready
</span></span><span class="line"><span class="cl"><span class="c1"># Returns: {"status": "ready", "connections": 45, "queries_per_sec": 127}</span>
</span></span></code></pre></div><p><strong>Kubernetes Configuration</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">livenessProbe</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">httpGet</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/health/live</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">3141</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">initialDelaySeconds</span><span class="p">:</span><span class="w"> </span><span class="m">30</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">periodSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">10</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="nt">readinessProbe</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">httpGet</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/health/ready</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">3141</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">initialDelaySeconds</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">periodSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="performance-tuning-with-monitoring-data" class="position-relative d-flex align-items-center group">
<span>Performance Tuning with Monitoring Data</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="performance-tuning-with-monitoring-data"
aria-haspopup="dialog"
aria-label="Share link: Performance Tuning with Monitoring Data">
<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 monitoring data to identify optimization opportunities:</p>
<p><strong>Identify Hot Queries</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">View</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">statistics</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="kd">query</span><span class="nc">_text</span><span class="p">,</span><span class="w"> </span><span class="py">execution_count</span><span class="p">,</span><span class="w"> </span><span class="py">avg_duration_ms</span><span class="p">,</span><span class="w"> </span><span class="py">max_duration_ms</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="kd">query</span><span class="nc">_stats</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">execution_count</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="py">1000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">avg_duration_ms</span><span class="w"> </span><span class="py">DESC</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">20</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>Analyze Index Usage</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Find</span><span class="w"> </span><span class="py">unused</span><span class="w"> </span><span class="py">indexes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="py">index_name</span><span class="p">,</span><span class="w"> </span><span class="py">table_name</span><span class="p">,</span><span class="w"> </span><span class="py">usage_count</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">index_stats</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">usage_count</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">created_at</span><span class="w"> </span><span class="err"><</span><span class="w"> </span><span class="py">current_timestamp</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">INTERVAL</span><span class="w"> </span><span class="err">'</span><span class="py">7</span><span class="w"> </span><span class="py">days</span><span class="err">';</span><span class="w">
</span></span></span></code></pre></div><p><strong>Monitor Cache Effectiveness</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Check</span><span class="w"> </span><span class="py">cache</span><span class="w"> </span><span class="py">hit</span><span class="w"> </span><span class="py">rates</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">cache_hits</span><span class="w"> </span><span class="err">/</span><span class="w"> </span><span class="p">(</span><span class="py">cache_hits</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">cache_misses</span><span class="p">)</span><span class="w"> </span><span class="py">as</span><span class="w"> </span><span class="py">hit_rate</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">cache_evictions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">system</span><span class="err">.</span><span class="py">cache_stats</span><span class="err">;</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="troubleshooting-common-issues" class="position-relative d-flex align-items-center group">
<span>Troubleshooting Common Issues</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="troubleshooting-common-issues"
aria-haspopup="dialog"
aria-label="Share link: Troubleshooting Common Issues">
<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>High Query Latency</strong>:</p>
<ol>
<li>Check <code>PROFILE</code> output for slow operators</li>
<li>Verify index usage with <code>EXPLAIN</code></li>
<li>Review concurrent query load</li>
<li>Check memory pressure and cache hit rates</li>
</ol>
<p><strong>Connection Issues</strong>:</p>
<ol>
<li>Monitor <code>geode_active_connections</code> vs. limits</li>
<li>Check network latency between client and server</li>
<li>Review authentication failures in logs</li>
<li>Verify TLS certificate validity</li>
</ol>
<p><strong>Memory Growth</strong>:</p>
<ol>
<li>Check MVCC version accumulation</li>
<li>Review long-running transactions</li>
<li>Analyze query result set sizes</li>
<li>Monitor cache sizes</li>
</ol>
<p><strong>Disk Space Issues</strong>:</p>
<ol>
<li>Check WAL size growth</li>
<li>Review checkpoint frequency</li>
<li>Analyze data growth rate</li>
<li>Verify backup and archival processes</li>
</ol>
<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 systems under normal load to establish performance baselines for comparison.</p>
<p><strong>Set Appropriate Thresholds</strong>: Tune alert thresholds based on actual system behavior to minimize false positives.</p>
<p><strong>Implement Gradual Rollout</strong>: When deploying changes, monitor metrics closely during incremental rollouts.</p>
<p><strong>Correlate Metrics with Events</strong>: Link monitoring data with deployment events, configuration changes, and incidents.</p>
<p><strong>Automate Responses</strong>: Implement auto-scaling, auto-remediation, and circuit breakers based on monitoring signals.</p>
<p><strong>Regular Review</strong>: Periodically review dashboards, alerts, and runbooks to keep them relevant.</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/prometheus/"
>Prometheus Metrics & Monitoring</a>
</li>
<li><a
href="/tags/performance/"
>Performance Tuning</a>
</li>
<li><a
href="/tags/query-optimization/"
>Query Optimization</a>
</li>
<li><a
href="/tags/observability/"
>Observability Best Practices</a>
</li>
<li><a
href="/tags/operations/"
>Operations and DevOps</a>
</li>
<li><a
href="/tags/profiling/"
>Profiling and Analysis</a>
</li>
<li><a
href="/tags/troubleshooting/"
>Troubleshooting Guide</a>
</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>Monitoring and Observability Guide</li>
<li>Grafana Dashboard Templates</li>
<li>Alert Runbook Templates</li>
<li>Performance Tuning Handbook</li>
<li>Production Operations Checklist</li>
</ul>
Related Articles
Docs
8 min
Monitoring
Set up comprehensive monitoring for Geode including Prometheus metrics, Grafana dashboards, alerting, and log aggregation
Docs
6 min
Monitoring and Telemetry
Monitor Geode with health checks and Prometheus metrics, enable optional paging telemetry, and configure tamper-evident audit logging with tracing IDs
Docs
8 min
Statistics and Metrics Reference
Complete reference for Geode statistics, metrics, and monitoring including query statistics, storage metrics, index statistics, and Prometheus …
Docs
9 min
Advanced Telemetry and Monitoring Guide
Complete guide to Geode's telemetry system including custom metrics, Prometheus integration, Grafana dashboards, paging events, and advanced …
Guides
16 min
Monitoring Guide
Monitor Geode with built-in metrics, Prometheus, Grafana, and alerting
Docs
5 min
Operations
Operational guides for deploying, monitoring, and maintaining Geode in production environments
Docs
13 min
Audit Logging and Compliance
Comprehensive audit logging system in Geode with tamper-evident hash chains, RFC 5424 syslog integration, and enterprise compliance for SOX, PCI-DSS, …