<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <p>Observability is the ability to understand a system&rsquo;s internal state by examining its outputs. Unlike traditional monitoring that focuses on predefined metrics, observability enables you to ask arbitrary questions about your system&rsquo;s behavior, making it essential for debugging complex distributed systems and understanding emergent behaviors.</p> <p>Geode implements comprehensive observability through the three pillars: metrics for quantitative measurements, logs for detailed event records, and traces for request flow visualization. This multi-dimensional approach provides complete visibility into query execution, transaction behavior, resource utilization, and system health.</p> <p>This guide covers observability architecture, implementation patterns, debugging strategies, and best practices for maintaining observable Geode deployments.</p> <h3 id="the-three-pillars-of-observability" class="position-relative d-flex align-items-center group"> <span>The Three Pillars of Observability</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="the-three-pillars-of-observability" aria-haspopup="dialog" aria-label="Share link: The Three Pillars of Observability"> <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> <h4 id="metrics-what-is-happening" class="position-relative d-flex align-items-center group"> <span>Metrics: What is Happening</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-what-is-happening" aria-haspopup="dialog" aria-label="Share link: Metrics: What is Happening"> <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>Metrics provide aggregated, time-series data about system behavior:</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 throughput over time</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><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 latency trend</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"># Memory usage pattern</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></code></pre></div><p><strong>Use Cases</strong>:</p> <ul> <li>Trend analysis and anomaly detection</li> <li>Performance baseline establishment</li> <li>Capacity planning</li> <li>SLO monitoring</li> <li>Alerting on threshold violations</li> </ul> <h4 id="logs-why-is-it-happening" class="position-relative d-flex align-items-center group"> <span>Logs: Why is it Happening</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="logs-why-is-it-happening" aria-haspopup="dialog" aria-label="Share link: Logs: Why is it Happening"> <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>Logs capture discrete events with contextual details:</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">&#34;timestamp&#34;</span><span class="p">:</span> <span class="s2">&#34;2026-01-24T10:15:30.123Z&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;ERROR&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;message&#34;</span><span class="p">:</span> <span class="s2">&#34;Query execution failed&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;query_id&#34;</span><span class="p">:</span> <span class="s2">&#34;q-12847&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;user&#34;</span><span class="p">:</span> <span class="s2">&#34;analyst&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;error&#34;</span><span class="p">:</span> <span class="s2">&#34;Index out of bounds&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;query_text&#34;</span><span class="p">:</span> <span class="s2">&#34;MATCH (n:User) WHERE n.id &gt; $limit RETURN n&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;stack_trace&#34;</span><span class="p">:</span> <span class="s2">&#34;...&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;duration_ms&#34;</span><span class="p">:</span> <span class="mf">234.5</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>Use Cases</strong>:</p> <ul> <li>Root cause analysis</li> <li>Error investigation</li> <li>Audit trails</li> <li>Security forensics</li> <li>Understanding specific execution paths</li> </ul> <h4 id="traces-how-is-it-flowing" class="position-relative d-flex align-items-center group"> <span>Traces: How is it Flowing</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="traces-how-is-it-flowing" aria-haspopup="dialog" aria-label="Share link: Traces: How is it Flowing"> <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>Traces show request flows through distributed systems:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Trace ID: abc123-def456-ghi789 </span></span><span class="line"><span class="cl">Span: http_handler [250ms] </span></span><span class="line"><span class="cl"> └─ Span: authenticate_user [15ms] </span></span><span class="line"><span class="cl"> └─ Span: execute_gql_query [220ms] </span></span><span class="line"><span class="cl"> ├─ Span: parse_query [5ms] </span></span><span class="line"><span class="cl"> ├─ Span: optimize_plan [10ms] </span></span><span class="line"><span class="cl"> ├─ Span: execute_plan [200ms] </span></span><span class="line"><span class="cl"> │ ├─ Span: index_lookup [30ms] </span></span><span class="line"><span class="cl"> │ ├─ Span: expand_relationships [150ms] </span></span><span class="line"><span class="cl"> │ └─ Span: aggregate_results [20ms] </span></span><span class="line"><span class="cl"> └─ Span: serialize_response [5ms] </span></span></code></pre></div><p><strong>Use Cases</strong>:</p> <ul> <li>Performance bottleneck identification</li> <li>Understanding service dependencies</li> <li>Latency attribution</li> <li>Distributed debugging</li> <li>Optimization targeting</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 uses structured JSON logging for machine-readable, queryable log data:</p> <h4 id="log-configuration" class="position-relative d-flex align-items-center group"> <span>Log Configuration</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="log-configuration" aria-haspopup="dialog" aria-label="Share link: Log Configuration"> <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><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">&#34;INFO&#34;</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">&#34;json&#34;</span> <span class="c"># json or text</span> </span></span><span class="line"><span class="cl"><span class="nx">output</span> <span class="p">=</span> <span class="s2">&#34;stdout&#34;</span> <span class="c"># stdout, stderr, file</span> </span></span><span class="line"><span class="cl"><span class="nx">file</span> <span class="p">=</span> <span class="s2">&#34;/var/log/geode/geode.log&#34;</span> </span></span><span class="line"><span class="cl"><span class="nx">rotate_size</span> <span class="p">=</span> <span class="s2">&#34;100MB&#34;</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><span class="line"><span class="cl"><span class="nx">include_caller</span> <span class="p">=</span> <span class="kc">true</span> <span class="c"># Include file:line information</span> </span></span></code></pre></div> <h4 id="log-levels" class="position-relative d-flex align-items-center group"> <span>Log Levels</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="log-levels" aria-haspopup="dialog" aria-label="Share link: Log Levels"> <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><strong>DEBUG</strong>: Detailed diagnostic information</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">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;DEBUG&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;message&#34;</span><span class="p">:</span> <span class="s2">&#34;Query plan generated&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;query_id&#34;</span><span class="p">:</span> <span class="s2">&#34;q-12847&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;plan_type&#34;</span><span class="p">:</span> <span class="s2">&#34;indexed_lookup&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;estimated_rows&#34;</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">&#34;index_used&#34;</span><span class="p">:</span> <span class="s2">&#34;User.email&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>INFO</strong>: General operational events</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">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;INFO&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;message&#34;</span><span class="p">:</span> <span class="s2">&#34;Query executed successfully&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;query_id&#34;</span><span class="p">:</span> <span class="s2">&#34;q-12847&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;duration_ms&#34;</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">&#34;rows_returned&#34;</span><span class="p">:</span> <span class="mi">1250</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>WARN</strong>: Warning conditions</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">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;WARN&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;message&#34;</span><span class="p">:</span> <span class="s2">&#34;Slow query detected&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;query_id&#34;</span><span class="p">:</span> <span class="s2">&#34;q-12847&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;duration_ms&#34;</span><span class="p">:</span> <span class="mf">1234.5</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;threshold_ms&#34;</span><span class="p">:</span> <span class="mi">1000</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;query_text&#34;</span><span class="p">:</span> <span class="s2">&#34;MATCH (n) RETURN n&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>ERROR</strong>: Error events requiring attention</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">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;ERROR&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;message&#34;</span><span class="p">:</span> <span class="s2">&#34;Transaction conflict&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;transaction_id&#34;</span><span class="p">:</span> <span class="s2">&#34;tx-456&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;conflict_type&#34;</span><span class="p">:</span> <span class="s2">&#34;write_write&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;retry_count&#34;</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;error_code&#34;</span><span class="p">:</span> <span class="s2">&#34;40001&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="contextual-logging" class="position-relative d-flex align-items-center group"> <span>Contextual 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="contextual-logging" aria-haspopup="dialog" aria-label="Share link: Contextual 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> </h4><p>Add context to log entries for correlation:</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"># Python client with logging context</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">logging</span> </span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">geode_client</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">process_user_query</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">query</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Add context to all subsequent logs</span> </span></span><span class="line"><span class="cl"> <span class="k">with</span> <span class="n">logger</span><span class="o">.</span><span class="n">contextualize</span><span class="p">(</span><span class="n">user_id</span><span class="o">=</span><span class="n">user_id</span><span class="p">,</span> <span class="n">request_id</span><span class="o">=</span><span class="n">generate_id</span><span class="p">()):</span> </span></span><span class="line"><span class="cl"> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&#34;Processing user query&#34;</span><span class="p">,</span> <span class="n">query_type</span><span class="o">=</span><span class="s2">&#34;recommendation&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Query completed&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">rows_returned</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="n">duration_ms</span><span class="o">=</span><span class="n">result</span><span class="o">.</span><span class="n">duration</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">result</span> </span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;Query failed&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">error</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="n">query_text</span><span class="o">=</span><span class="n">query</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">raise</span> </span></span></code></pre></div> <h4 id="log-aggregation" class="position-relative d-flex align-items-center group"> <span>Log Aggregation</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="log-aggregation" aria-haspopup="dialog" aria-label="Share link: Log Aggregation"> <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>Centralize logs with popular aggregation tools:</p> <p><strong>Elasticsearch Integration</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"># filebeat.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">filebeat.inputs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">log</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">paths</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/var/log/geode/*.log</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">json.keys_under_root</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">json.add_error_key</span><span class="p">:</span><span class="w"> </span><span class="kc">true</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">output.elasticsearch</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;elasticsearch:9200&#34;</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">index</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;geode-logs-%{+yyyy.MM.dd}&#34;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Loki Integration</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"># promtail.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">clients</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="l">http://loki:3100/loki/api/v1/push</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">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="l">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></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">localhost</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</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</span><span class="p">:</span><span class="w"> </span><span class="l">geode</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">/var/log/geode/*.log</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">pipeline_stages</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">json</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expressions</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">level</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timestamp</span><span class="p">:</span><span class="w"> </span><span class="l">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">message</span><span class="p">:</span><span class="w"> </span><span class="l">message</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">level</span><span class="p">:</span><span class="w"> </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> <h4 id="opentelemetry-integration" class="position-relative d-flex align-items-center group"> <span>OpenTelemetry 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="opentelemetry-integration" aria-haspopup="dialog" aria-label="Share link: OpenTelemetry 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> </h4><p>Geode supports OpenTelemetry for standardized distributed tracing:</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">&#34;otlp&#34;</span> </span></span><span class="line"><span class="cl"><span class="nx">endpoint</span> <span class="p">=</span> <span class="s2">&#34;http://localhost:4317&#34;</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><span class="line"><span class="cl"><span class="nx">service_name</span> <span class="p">=</span> <span class="s2">&#34;geode&#34;</span> </span></span><span class="line"><span class="cl"><span class="nx">environment</span> <span class="p">=</span> <span class="s2">&#34;production&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c"># Trace specific operations</span> </span></span><span class="line"><span class="cl"><span class="nx">trace_queries</span> <span class="p">=</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"><span class="nx">trace_transactions</span> <span class="p">=</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"><span class="nx">trace_index_operations</span> <span class="p">=</span> <span class="kc">true</span> </span></span></code></pre></div> <h4 id="trace-instrumentation" class="position-relative d-flex align-items-center group"> <span>Trace Instrumentation</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="trace-instrumentation" aria-haspopup="dialog" aria-label="Share link: Trace Instrumentation"> <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>Automatic instrumentation captures spans for:</p> <p><strong>Query Execution</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Span: execute_gql_query </span></span><span class="line"><span class="cl"> Attributes: </span></span><span class="line"><span class="cl"> - query.text: &#34;MATCH (u:User) WHERE u.age &gt; 25 RETURN u&#34; </span></span><span class="line"><span class="cl"> - query.id: &#34;q-12847&#34; </span></span><span class="line"><span class="cl"> - query.status: &#34;success&#34; </span></span><span class="line"><span class="cl"> - query.rows: 1250 </span></span><span class="line"><span class="cl"> Duration: 145ms </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> Child Spans: </span></span><span class="line"><span class="cl"> - parse_query (5ms) </span></span><span class="line"><span class="cl"> - optimize_plan (10ms) </span></span><span class="line"><span class="cl"> - execute_plan (125ms) </span></span><span class="line"><span class="cl"> - serialize_response (5ms) </span></span></code></pre></div><p><strong>Transaction Lifecycle</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Span: transaction </span></span><span class="line"><span class="cl"> Attributes: </span></span><span class="line"><span class="cl"> - tx.id: &#34;tx-456&#34; </span></span><span class="line"><span class="cl"> - tx.isolation_level: &#34;SERIALIZABLE&#34; </span></span><span class="line"><span class="cl"> - tx.status: &#34;committed&#34; </span></span><span class="line"><span class="cl"> Duration: 2340ms </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> Child Spans: </span></span><span class="line"><span class="cl"> - begin (2ms) </span></span><span class="line"><span class="cl"> - execute_query_1 (145ms) </span></span><span class="line"><span class="cl"> - execute_query_2 (234ms) </span></span><span class="line"><span class="cl"> - commit (15ms) </span></span></code></pre></div><p><strong>Index Operations</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Span: index_build </span></span><span class="line"><span class="cl"> Attributes: </span></span><span class="line"><span class="cl"> - index.name: &#34;User.email&#34; </span></span><span class="line"><span class="cl"> - index.type: &#34;btree&#34; </span></span><span class="line"><span class="cl"> - index.rows: 1000000 </span></span><span class="line"><span class="cl"> Duration: 45000ms </span></span></code></pre></div> <h4 id="custom-spans" class="position-relative d-flex align-items-center group"> <span>Custom Spans</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-spans" aria-haspopup="dialog" aria-label="Share link: Custom Spans"> <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>Add application-specific tracing:</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">opentelemetry</span> <span class="kn">import</span> <span class="n">trace</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">tracer</span> <span class="o">=</span> <span class="n">trace</span><span class="o">.</span><span class="n">get_tracer</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">recommend_products</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="k">with</span> <span class="n">tracer</span><span class="o">.</span><span class="n">start_as_current_span</span><span class="p">(</span><span class="s2">&#34;recommend_products&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">span</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">span</span><span class="o">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="s2">&#34;user_id&#34;</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Fetch user preferences</span> </span></span><span class="line"><span class="cl"> <span class="k">with</span> <span class="n">tracer</span><span class="o">.</span><span class="n">start_as_current_span</span><span class="p">(</span><span class="s2">&#34;fetch_preferences&#34;</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="n">prefs</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;MATCH (u:User {id: $id})-[:LIKES]-&gt;(p:Product) RETURN p&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">&#34;id&#34;</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="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Generate recommendations</span> </span></span><span class="line"><span class="cl"> <span class="k">with</span> <span class="n">tracer</span><span class="o">.</span><span class="n">start_as_current_span</span><span class="p">(</span><span class="s2">&#34;generate_recommendations&#34;</span><span class="p">)</span> <span class="k">as</span> <span class="n">rec_span</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">rec_span</span><span class="o">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="s2">&#34;input_products&#34;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefs</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">compute_recommendations</span><span class="p">(</span><span class="n">prefs</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">rec_span</span><span class="o">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="s2">&#34;recommendations_count&#34;</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">recommendations</span><span class="p">))</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">recommendations</span> </span></span></code></pre></div> <h4 id="trace-sampling" class="position-relative d-flex align-items-center group"> <span>Trace Sampling</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="trace-sampling" aria-haspopup="dialog" aria-label="Share link: Trace Sampling"> <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>Control trace volume with intelligent sampling:</p> <p><strong>Tail-Based Sampling</strong>: Sample based on trace characteristics</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">tracing</span><span class="p">.</span><span class="nx">sampling</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="nx">strategy</span> <span class="p">=</span> <span class="s2">&#34;tail_based&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c"># Always sample errors</span> </span></span><span class="line"><span class="cl"><span class="nx">sample_on_error</span> <span class="p">=</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c"># Always sample slow requests</span> </span></span><span class="line"><span class="cl"><span class="nx">slow_threshold_ms</span> <span class="p">=</span> <span class="mi">1000</span> </span></span><span class="line"><span class="cl"><span class="nx">sample_slow</span> <span class="p">=</span> <span class="kc">true</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c"># Sample 10% of normal requests</span> </span></span><span class="line"><span class="cl"><span class="nx">default_rate</span> <span class="p">=</span> <span class="mf">0.1</span> </span></span></code></pre></div><p><strong>Probabilistic Sampling</strong>: Random sampling percentage</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">tracing</span><span class="p">.</span><span class="nx">sampling</span><span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="nx">strategy</span> <span class="p">=</span> <span class="s2">&#34;probabilistic&#34;</span> </span></span><span class="line"><span class="cl"><span class="nx">rate</span> <span class="p">=</span> <span class="mf">0.05</span> <span class="c"># Sample 5% of traces</span> </span></span></code></pre></div> <h3 id="correlation-across-pillars" class="position-relative d-flex align-items-center group"> <span>Correlation Across Pillars</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="correlation-across-pillars" aria-haspopup="dialog" aria-label="Share link: Correlation Across Pillars"> <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>Link metrics, logs, and traces for comprehensive debugging:</p> <h4 id="request-id-propagation" class="position-relative d-flex align-items-center group"> <span>Request ID Propagation</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="request-id-propagation" aria-haspopup="dialog" aria-label="Share link: Request ID Propagation"> <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><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">uuid</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Generate request ID</span> </span></span><span class="line"><span class="cl"><span class="n">request_id</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">())</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Include in query metadata</span> </span></span><span class="line"><span class="cl"><span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</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">metadata</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;request_id&#34;</span><span class="p">:</span> <span class="n">request_id</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"># Request ID appears in:</span> </span></span><span class="line"><span class="cl"><span class="c1"># - Trace (span attribute)</span> </span></span><span class="line"><span class="cl"><span class="c1"># - Logs (log field)</span> </span></span><span class="line"><span class="cl"><span class="c1"># - Metrics (optional label for custom metrics)</span> </span></span></code></pre></div> <h4 id="trace-id-in-logs" class="position-relative d-flex align-items-center group"> <span>Trace ID in Logs</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="trace-id-in-logs" aria-haspopup="dialog" aria-label="Share link: Trace ID in Logs"> <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><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">&#34;timestamp&#34;</span><span class="p">:</span> <span class="s2">&#34;2026-01-24T10:15:30.123Z&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;ERROR&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;message&#34;</span><span class="p">:</span> <span class="s2">&#34;Query execution failed&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;trace_id&#34;</span><span class="p">:</span> <span class="s2">&#34;abc123def456ghi789&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;span_id&#34;</span><span class="p">:</span> <span class="s2">&#34;xyz789&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;query_id&#34;</span><span class="p">:</span> <span class="s2">&#34;q-12847&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;error&#34;</span><span class="p">:</span> <span class="s2">&#34;Index out of bounds&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p>Query logs in trace UI or trace from logs:</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"># Find logs for specific trace</span> </span></span><span class="line"><span class="cl">jq <span class="s1">&#39;select(.trace_id == &#34;abc123def456ghi789&#34;)&#39;</span> /var/log/geode/geode.log </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Find trace from log entry</span> </span></span><span class="line"><span class="cl">curl <span class="s2">&#34;http://jaeger:16686/api/traces/abc123def456ghi789&#34;</span> </span></span></code></pre></div> <h3 id="observability-driven-debugging" class="position-relative d-flex align-items-center group"> <span>Observability-Driven Debugging</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="observability-driven-debugging" aria-haspopup="dialog" aria-label="Share link: Observability-Driven Debugging"> <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="performance-regression-investigation" class="position-relative d-flex align-items-center group"> <span>Performance Regression Investigation</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-regression-investigation" aria-haspopup="dialog" aria-label="Share link: Performance Regression Investigation"> <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><ol> <li><strong>Detect anomaly in metrics</strong>:</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># p95 latency spiked</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 class="o">&gt;</span><span class="w"> </span><span class="mf">0.5</span><span class="w"> </span></span></span></code></pre></div><ol start="2"> <li><strong>Identify affected queries from logs</strong>:</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">jq <span class="s1">&#39;select(.duration_ms &gt; 500) | {query_id, query_text, duration_ms}&#39;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> /var/log/geode/geode.log </span></span></code></pre></div><ol start="3"> <li> <p><strong>Analyze traces for bottlenecks</strong>: Look for spans with unexpectedly high duration in trace viewer.</p> </li> <li> <p><strong>Profile slow query</strong>:</p> </li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">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">-&gt;</span><span class="p">(</span><span class="py">other</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="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="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="error-rate-spike-investigation" class="position-relative d-flex align-items-center group"> <span>Error Rate Spike Investigation</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="error-rate-spike-investigation" aria-haspopup="dialog" aria-label="Share link: Error Rate Spike Investigation"> <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><ol> <li><strong>Detect in metrics</strong>:</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><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">error</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">&gt;</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span></span></span></code></pre></div><ol start="2"> <li><strong>Analyze error logs</strong>:</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">jq <span class="s1">&#39;select(.level == &#34;ERROR&#34;) | {timestamp, message, error, query_text}&#39;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> /var/log/geode/geode.log <span class="p">|</span> tail -100 </span></span></code></pre></div><ol start="3"> <li><strong>Group errors by type</strong>:</li> </ol> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">jq -r <span class="s1">&#39;select(.level == &#34;ERROR&#34;) | .error&#39;</span> /var/log/geode/geode.log <span class="p">|</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> sort <span class="p">|</span> uniq -c <span class="p">|</span> sort -rn </span></span></code></pre></div><ol start="4"> <li><strong>Examine failed traces</strong>: Filter traces by error status to see failure patterns.</li> </ol> <h3 id="observability-best-practices" class="position-relative d-flex align-items-center group"> <span>Observability 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="observability-best-practices" aria-haspopup="dialog" aria-label="Share link: Observability 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>High Cardinality Awareness</strong>: Avoid unbounded label/field values (user IDs, session IDs) that explode storage requirements.</p> <p><strong>Consistent Naming</strong>: Use consistent naming conventions across metrics, logs, and traces for easy correlation.</p> <p><strong>Contextual Enrichment</strong>: Include relevant context (user, query type, client) in all observability signals.</p> <p><strong>Sampling Strategy</strong>: Sample traces appropriately to balance coverage and overhead (1-10% for high-volume systems).</p> <p><strong>Retention Policies</strong>: Define appropriate retention periods for each pillar based on use case (metrics: 30d, logs: 7d, traces: 3d).</p> <p><strong>Alert on Symptoms, Not Causes</strong>: Alert on user-impacting symptoms (high latency, errors) rather than internal metrics (CPU, memory).</p> <p><strong>Documentation</strong>: Maintain runbooks linking alerts to investigation procedures using observability tools.</p> <p><strong>Cost Management</strong>: Monitor observability pipeline costs and optimize sampling, retention, and cardinality.</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> - Monitoring strategies</li> <li><a href="/tags/metrics/" >Performance Metrics</a> - Metrics collection</li> <li><a href="/tags/logging/" >Application Logging</a> - Logging best practices</li> <li><a href="/tags/tracing/" >Distributed Tracing</a> - Tracing implementation</li> <li><a href="/tags/prometheus/" >Prometheus Integration</a> - Metrics collection</li> <li><a href="/tags/performance/" >Performance Tuning</a> - Optimization techniques</li> <li><a href="/tags/troubleshooting/" >Troubleshooting</a> - Debugging guide</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>Observability Engineering Handbook</li> <li>OpenTelemetry Integration Guide</li> <li>Distributed Tracing Patterns</li> <li>Log Analysis Best Practices</li> <li>Production Debugging Strategies</li> </ul>

Related Articles