<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Distributed tracing provides end-to-end visibility into request flows through complex systems, enabling you to understand how queries propagate through Geode’s execution pipeline and identify performance bottlenecks with precision. By capturing detailed timing information for each operation, tracing reveals exactly where time is spent during query execution.</p>
<p>Geode implements distributed tracing using OpenTelemetry, the industry-standard observability framework. Traces capture spans for query parsing, optimization, execution, index lookups, relationship traversals, and result serialization, providing comprehensive visibility into database operations.</p>
<p>This guide covers trace architecture, OpenTelemetry integration, instrumentation patterns, sampling strategies, and trace-based performance optimization.</p>
<h3 id="distributed-tracing-concepts" class="position-relative d-flex align-items-center group">
<span>Distributed Tracing 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="distributed-tracing-concepts"
aria-haspopup="dialog"
aria-label="Share link: Distributed Tracing 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>
<h4 id="traces-and-spans" class="position-relative d-flex align-items-center group">
<span>Traces and 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="traces-and-spans"
aria-haspopup="dialog"
aria-label="Share link: Traces and 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>A <strong>trace</strong> represents a complete request flow through the system, composed of multiple <strong>spans</strong>:</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 (total: 250ms)
</span></span><span class="line"><span class="cl">│
</span></span><span class="line"><span class="cl">├─ Span: http_request (250ms)
</span></span><span class="line"><span class="cl">│ │
</span></span><span class="line"><span class="cl">│ ├─ Span: authenticate_user (15ms)
</span></span><span class="line"><span class="cl">│ │
</span></span><span class="line"><span class="cl">│ ├─ Span: execute_gql_query (220ms)
</span></span><span class="line"><span class="cl">│ │ │
</span></span><span class="line"><span class="cl">│ │ ├─ Span: parse_query (5ms)
</span></span><span class="line"><span class="cl">│ │ │
</span></span><span class="line"><span class="cl">│ │ ├─ Span: optimize_plan (10ms)
</span></span><span class="line"><span class="cl">│ │ │
</span></span><span class="line"><span class="cl">│ │ ├─ Span: execute_plan (200ms)
</span></span><span class="line"><span class="cl">│ │ │ │
</span></span><span class="line"><span class="cl">│ │ │ ├─ Span: index_lookup (30ms)
</span></span><span class="line"><span class="cl">│ │ │ │
</span></span><span class="line"><span class="cl">│ │ │ ├─ Span: expand_relationships (150ms)
</span></span><span class="line"><span class="cl">│ │ │ │
</span></span><span class="line"><span class="cl">│ │ │ └─ Span: aggregate_results (20ms)
</span></span><span class="line"><span class="cl">│ │ │
</span></span><span class="line"><span class="cl">│ │ └─ Span: serialize_response (5ms)
</span></span><span class="line"><span class="cl">│ │
</span></span><span class="line"><span class="cl">│ └─ Span: cache_update (15ms)
</span></span></code></pre></div><p>Each span captures:</p>
<ul>
<li><strong>Start time</strong> and <strong>duration</strong></li>
<li><strong>Operation name</strong> (e.g., “execute_gql_query”)</li>
<li><strong>Attributes</strong> (key-value metadata)</li>
<li><strong>Events</strong> (timestamped log entries within span)</li>
<li><strong>Status</strong> (OK, ERROR)</li>
<li><strong>Parent-child relationships</strong></li>
</ul>
<h4 id="trace-context-propagation" class="position-relative d-flex align-items-center group">
<span>Trace Context 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="trace-context-propagation"
aria-haspopup="dialog"
aria-label="Share link: Trace Context 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><p>Trace context flows across service boundaries via HTTP headers or metadata:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">traceparent: 00-abc123def456ghi789-xyz789012345-01
</span></span><span class="line"><span class="cl">tracestate: geode=query_id:q-12847,user:analyst
</span></span></code></pre></div>
<h3 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>
</h3>
<h4 id="configuration" class="position-relative d-flex align-items-center group">
<span>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="configuration"
aria-haspopup="dialog"
aria-label="Share link: 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><p>Enable tracing in Geode configuration:</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="c"># Enable distributed tracing</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></span><span class="line"><span class="cl"><span class="c"># Exporter type: otlp, jaeger, zipkin</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></span><span class="line"><span class="cl"><span class="c"># OTLP endpoint (gRPC or HTTP)</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></span><span class="line"><span class="cl"><span class="c"># Service name in traces</span>
</span></span><span class="line"><span class="cl"><span class="nx">service_name</span> <span class="p">=</span> <span class="s2">"geode"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Environment label</span>
</span></span><span class="line"><span class="cl"><span class="nx">environment</span> <span class="p">=</span> <span class="s2">"production"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Sample rate (0.0 to 1.0)</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></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><span class="line"><span class="cl"><span class="nx">trace_storage_operations</span> <span class="p">=</span> <span class="kc">false</span> <span class="c"># High volume</span>
</span></span><span class="line"><span class="cl"><span class="nx">trace_network_operations</span> <span class="p">=</span> <span class="kc">false</span> <span class="c"># Very high volume</span>
</span></span></code></pre></div>
<h4 id="otlp-exporter" class="position-relative d-flex align-items-center group">
<span>OTLP Exporter</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="otlp-exporter"
aria-haspopup="dialog"
aria-label="Share link: OTLP Exporter">
<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>Send traces to OpenTelemetry Collector:</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></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://otel-collector:4317"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Optional authentication</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">tracing</span><span class="p">.</span><span class="nx">otlp</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">headers</span> <span class="p">=</span> <span class="p">{</span> <span class="s2">"Authorization"</span> <span class="p">=</span> <span class="s2">"Bearer ${OTEL_TOKEN}"</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">compression</span> <span class="p">=</span> <span class="s2">"gzip"</span>
</span></span><span class="line"><span class="cl"><span class="nx">timeout_seconds</span> <span class="p">=</span> <span class="mi">10</span>
</span></span></code></pre></div>
<h4 id="jaeger-exporter" class="position-relative d-flex align-items-center group">
<span>Jaeger Exporter</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="jaeger-exporter"
aria-haspopup="dialog"
aria-label="Share link: Jaeger Exporter">
<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>Send traces directly to Jaeger:</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></span><span class="line"><span class="cl"><span class="nx">exporter</span> <span class="p">=</span> <span class="s2">"jaeger"</span>
</span></span><span class="line"><span class="cl"><span class="nx">endpoint</span> <span class="p">=</span> <span class="s2">"http://jaeger:14250"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">tracing</span><span class="p">.</span><span class="nx">jaeger</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">agent_endpoint</span> <span class="p">=</span> <span class="s2">"jaeger:6831"</span>
</span></span><span class="line"><span class="cl"><span class="nx">max_packet_size</span> <span class="p">=</span> <span class="mi">65000</span>
</span></span></code></pre></div>
<h4 id="zipkin-exporter" class="position-relative d-flex align-items-center group">
<span>Zipkin Exporter</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="zipkin-exporter"
aria-haspopup="dialog"
aria-label="Share link: Zipkin Exporter">
<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>Send traces to Zipkin:</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></span><span class="line"><span class="cl"><span class="nx">exporter</span> <span class="p">=</span> <span class="s2">"zipkin"</span>
</span></span><span class="line"><span class="cl"><span class="nx">endpoint</span> <span class="p">=</span> <span class="s2">"http://zipkin:9411/api/v2/spans"</span>
</span></span></code></pre></div>
<h3 id="automatic-instrumentation" class="position-relative d-flex align-items-center group">
<span>Automatic 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="automatic-instrumentation"
aria-haspopup="dialog"
aria-label="Share link: Automatic 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>
</h3><p>Geode automatically instruments key operations:</p>
<h4 id="query-execution-spans" class="position-relative d-flex align-items-center group">
<span>Query Execution 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="query-execution-spans"
aria-haspopup="dialog"
aria-label="Share link: Query Execution 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><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"> trace_id: abc123def456ghi789
</span></span><span class="line"><span class="cl"> span_id: xyz789012345
</span></span><span class="line"><span class="cl"> start_time: 2026-01-24T10:15:30.000Z
</span></span><span class="line"><span class="cl"> duration: 145ms
</span></span><span class="line"><span class="cl"> status: OK
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Attributes:
</span></span><span class="line"><span class="cl"> db.system: geode
</span></span><span class="line"><span class="cl"> db.operation: query
</span></span><span class="line"><span class="cl"> db.statement: "MATCH (u:User) WHERE u.age > 25 RETURN u"
</span></span><span class="line"><span class="cl"> db.query_id: q-12847
</span></span><span class="line"><span class="cl"> db.user: [email protected]
</span></span><span class="line"><span class="cl"> db.client_type: python
</span></span><span class="line"><span class="cl"> db.rows_returned: 1250
</span></span><span class="line"><span class="cl"> db.cache_hit: false
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Events:
</span></span><span class="line"><span class="cl"> - timestamp: +5ms, name: "parsing_completed"
</span></span><span class="line"><span class="cl"> - timestamp: +15ms, name: "optimization_completed"
</span></span><span class="line"><span class="cl"> - timestamp: +140ms, name: "execution_completed"
</span></span></code></pre></div><p>Child spans for query pipeline stages:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">├─ Span: parse_query (5ms)
</span></span><span class="line"><span class="cl">│ Attributes:
</span></span><span class="line"><span class="cl">│ query.length: 42
</span></span><span class="line"><span class="cl">│ query.tokens: 8
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">├─ Span: optimize_plan (10ms)
</span></span><span class="line"><span class="cl">│ Attributes:
</span></span><span class="line"><span class="cl">│ plan.type: indexed_lookup
</span></span><span class="line"><span class="cl">│ plan.estimated_cost: 125.4
</span></span><span class="line"><span class="cl">│ plan.index_used: User.age
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">├─ Span: execute_plan (125ms)
</span></span><span class="line"><span class="cl">│ Attributes:
</span></span><span class="line"><span class="cl">│ execution.rows_scanned: 5234
</span></span><span class="line"><span class="cl">│ execution.rows_filtered: 3984
</span></span><span class="line"><span class="cl">│ execution.rows_returned: 1250
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">└─ Span: serialize_response (5ms)
</span></span><span class="line"><span class="cl"> Attributes:
</span></span><span class="line"><span class="cl"> serialization.format: json
</span></span><span class="line"><span class="cl"> serialization.bytes: 125840
</span></span></code></pre></div>
<h4 id="transaction-spans" class="position-relative d-flex align-items-center group">
<span>Transaction 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="transaction-spans"
aria-haspopup="dialog"
aria-label="Share link: Transaction 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><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"> trace_id: def456ghi789abc123
</span></span><span class="line"><span class="cl"> span_id: abc123xyz789
</span></span><span class="line"><span class="cl"> start_time: 2026-01-24T10:16:00.000Z
</span></span><span class="line"><span class="cl"> duration: 2340ms
</span></span><span class="line"><span class="cl"> status: OK
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Attributes:
</span></span><span class="line"><span class="cl"> db.system: geode
</span></span><span class="line"><span class="cl"> db.operation: transaction
</span></span><span class="line"><span class="cl"> db.transaction_id: tx-456
</span></span><span class="line"><span class="cl"> db.isolation_level: SERIALIZABLE
</span></span><span class="line"><span class="cl"> db.queries_count: 5
</span></span><span class="line"><span class="cl"> db.rows_modified: 125
</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"> ├─ execute_query_3 (87ms)
</span></span><span class="line"><span class="cl"> ├─ execute_query_4 (156ms)
</span></span><span class="line"><span class="cl"> ├─ execute_query_5 (98ms)
</span></span><span class="line"><span class="cl"> └─ commit (15ms)
</span></span><span class="line"><span class="cl"> Attributes:
</span></span><span class="line"><span class="cl"> commit.wal_position: 00000001000000CD
</span></span><span class="line"><span class="cl"> commit.fsync_duration_ms: 8
</span></span></code></pre></div>
<h4 id="index-operation-spans" class="position-relative d-flex align-items-center group">
<span>Index Operation 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="index-operation-spans"
aria-haspopup="dialog"
aria-label="Share link: Index Operation 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><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"> trace_id: ghi789abc123def456
</span></span><span class="line"><span class="cl"> span_id: def456abc123
</span></span><span class="line"><span class="cl"> start_time: 2026-01-24T10:17:00.000Z
</span></span><span class="line"><span class="cl"> duration: 45000ms
</span></span><span class="line"><span class="cl"> status: OK
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Attributes:
</span></span><span class="line"><span class="cl"> db.system: geode
</span></span><span class="line"><span class="cl"> db.operation: index_build
</span></span><span class="line"><span class="cl"> db.index_name: User.email
</span></span><span class="line"><span class="cl"> db.index_type: btree
</span></span><span class="line"><span class="cl"> db.table: User
</span></span><span class="line"><span class="cl"> db.column: email
</span></span><span class="line"><span class="cl"> db.rows_indexed: 1000000
</span></span><span class="line"><span class="cl"> db.index_size_bytes: 67108864
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Events:
</span></span><span class="line"><span class="cl"> - timestamp: +100ms, name: "scan_started"
</span></span><span class="line"><span class="cl"> - timestamp: +30000ms, name: "sort_completed"
</span></span><span class="line"><span class="cl"> - timestamp: +44000ms, name: "index_written"
</span></span><span class="line"><span class="cl"> - timestamp: +45000ms, name: "index_activated"
</span></span></code></pre></div>
<h3 id="custom-instrumentation" class="position-relative d-flex align-items-center group">
<span>Custom 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="custom-instrumentation"
aria-haspopup="dialog"
aria-label="Share link: Custom 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>
</h3><p>Add application-specific spans for business logic:</p>
<h4 id="python-client" class="position-relative d-flex align-items-center group">
<span>Python Client</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="python-client"
aria-haspopup="dialog"
aria-label="Share link: Python Client">
<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">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 class="kn">from</span> <span class="nn">opentelemetry.trace</span> <span class="kn">import</span> <span class="n">Status</span><span class="p">,</span> <span class="n">StatusCode</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="c1"># Get tracer</span>
</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="c1"># Create parent span for entire recommendation flow</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">"recommend_products"</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">"user_id"</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">span</span><span class="o">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="s2">"algorithm"</span><span class="p">,</span> <span class="s2">"collaborative_filtering"</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="c1"># Fetch user preferences (creates child span automatically)</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">"fetch_user_preferences"</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span> <span class="o">=</span> <span class="n">geode_client</span><span class="o">.</span><span class="n">open_database</span><span class="p">(</span><span class="s2">"localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">preferences</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">"MATCH (u:User {id: $id})-[:LIKES]->(p:Product) RETURN p"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">"id"</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 class="n">span</span><span class="o">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="s2">"preferences_count"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">preferences</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Find similar users</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">"find_similar_users"</span><span class="p">)</span> <span class="k">as</span> <span class="n">sim_span</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">similar_users</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="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u1:User {id: $id})-[:LIKES]->(p:Product)<-[:LIKES]-(u2:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE u1 <> u2
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u2, count(p) as common_likes
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY common_likes DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"> <span class="n">sim_span</span><span class="o">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="s2">"similar_users_found"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">similar_users</span><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">"generate_recommendations"</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">recommendations</span> <span class="o">=</span> <span class="k">await</span> <span class="n">compute_recommendations</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">preferences</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">similar_users</span>
</span></span><span class="line"><span class="cl"> <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">"recommendations_count"</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="c1"># Add event to span</span>
</span></span><span class="line"><span class="cl"> <span class="n">rec_span</span><span class="o">.</span><span class="n">add_event</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"recommendations_generated"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">attributes</span><span class="o">=</span><span class="p">{</span><span class="s2">"algorithm_version"</span><span class="p">:</span> <span class="s2">"2.1"</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"># Mark span as successful</span>
</span></span><span class="line"><span class="cl"> <span class="n">span</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="n">Status</span><span class="p">(</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">OK</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">recommendations</span>
</span></span><span class="line"><span class="cl">
</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="c1"># Record error in span</span>
</span></span><span class="line"><span class="cl"> <span class="n">span</span><span class="o">.</span><span class="n">record_exception</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">span</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="n">Status</span><span class="p">(</span><span class="n">StatusCode</span><span class="o">.</span><span class="n">ERROR</span><span class="p">,</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="k">raise</span>
</span></span></code></pre></div>
<h4 id="go-client" class="position-relative d-flex align-items-center group">
<span>Go Client</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="go-client"
aria-haspopup="dialog"
aria-label="Share link: Go Client">
<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-go" data-lang="go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s">"context"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"go.opentelemetry.io/otel"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"go.opentelemetry.io/otel/attribute"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"go.opentelemetry.io/otel/trace"</span>
</span></span><span class="line"><span class="cl"> <span class="s">"geodedb.com/geode"</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="kd">var</span> <span class="nx">tracer</span> <span class="p">=</span> <span class="nx">otel</span><span class="p">.</span><span class="nf">Tracer</span><span class="p">(</span><span class="s">"myapp"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">recommendProducts</span><span class="p">(</span><span class="nx">ctx</span> <span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="p">,</span> <span class="nx">userID</span> <span class="kt">int64</span><span class="p">)</span> <span class="p">([]</span><span class="nx">Product</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">ctx</span><span class="p">,</span> <span class="nx">span</span> <span class="o">:=</span> <span class="nx">tracer</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">"recommend_products"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">defer</span> <span class="nx">span</span><span class="p">.</span><span class="nf">End</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="nx">span</span><span class="p">.</span><span class="nf">SetAttributes</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="nx">attribute</span><span class="p">.</span><span class="nf">Int64</span><span class="p">(</span><span class="s">"user_id"</span><span class="p">,</span> <span class="nx">userID</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">attribute</span><span class="p">.</span><span class="nf">String</span><span class="p">(</span><span class="s">"algorithm"</span><span class="p">,</span> <span class="s">"collaborative_filtering"</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">// Fetch preferences
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">ctx</span><span class="p">,</span> <span class="nx">prefSpan</span> <span class="o">:=</span> <span class="nx">tracer</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">"fetch_user_preferences"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="nx">preferences</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">Query</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">`
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: $id})-[:LIKES]->(p:Product)
</span></span></span><span class="line"><span class="cl"><span class="s"> RETURN p
</span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">geode</span><span class="p">.</span><span class="nx">Params</span><span class="p">{</span><span class="s">"id"</span><span class="p">:</span> <span class="nx">userID</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">span</span><span class="p">.</span><span class="nf">RecordError</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="nx">span</span><span class="p">.</span><span class="nf">SetStatus</span><span class="p">(</span><span class="nx">codes</span><span class="p">.</span><span class="nx">Error</span><span class="p">,</span> <span class="nx">err</span><span class="p">.</span><span class="nf">Error</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">err</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="nx">prefSpan</span><span class="p">.</span><span class="nf">SetAttributes</span><span class="p">(</span><span class="nx">attribute</span><span class="p">.</span><span class="nf">Int</span><span class="p">(</span><span class="s">"preferences_count"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nx">preferences</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl"> <span class="nx">prefSpan</span><span class="p">.</span><span class="nf">End</span><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="c1"></span> <span class="nx">ctx</span><span class="p">,</span> <span class="nx">recSpan</span> <span class="o">:=</span> <span class="nx">tracer</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">"generate_recommendations"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="nx">recommendations</span> <span class="o">:=</span> <span class="nf">computeRecommendations</span><span class="p">(</span><span class="nx">preferences</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="nx">recSpan</span><span class="p">.</span><span class="nf">SetAttributes</span><span class="p">(</span><span class="nx">attribute</span><span class="p">.</span><span class="nf">Int</span><span class="p">(</span><span class="s">"recommendations_count"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nx">recommendations</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl"> <span class="nx">recSpan</span><span class="p">.</span><span class="nf">End</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="nx">span</span><span class="p">.</span><span class="nf">SetStatus</span><span class="p">(</span><span class="nx">codes</span><span class="p">.</span><span class="nx">Ok</span><span class="p">,</span> <span class="s">"Success"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nx">recommendations</span><span class="p">,</span> <span class="kc">nil</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
<h4 id="rust-client" class="position-relative d-flex align-items-center group">
<span>Rust Client</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="rust-client"
aria-haspopup="dialog"
aria-label="Share link: Rust Client">
<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-rust" data-lang="rust"><span class="line"><span class="cl"><span class="k">use</span><span class="w"> </span><span class="n">opentelemetry</span>::<span class="n">trace</span>::<span class="p">{</span><span class="n">Tracer</span><span class="p">,</span><span class="w"> </span><span class="n">Span</span><span class="p">,</span><span class="w"> </span><span class="n">Status</span><span class="p">};</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">use</span><span class="w"> </span><span class="n">opentelemetry</span>::<span class="n">KeyValue</span><span class="p">;</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="k">async</span><span class="w"> </span><span class="k">fn</span> <span class="nf">recommend_products</span><span class="p">(</span><span class="n">user_id</span>: <span class="kt">i64</span><span class="p">)</span><span class="w"> </span>-> <span class="nb">Result</span><span class="o"><</span><span class="nb">Vec</span><span class="o"><</span><span class="n">Product</span><span class="o">>></span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">tracer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">opentelemetry</span>::<span class="n">global</span>::<span class="n">tracer</span><span class="p">(</span><span class="s">"myapp"</span><span class="p">);</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="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">span</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tracer</span><span class="p">.</span><span class="n">start</span><span class="p">(</span><span class="s">"recommend_products"</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">span</span><span class="p">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="n">KeyValue</span>::<span class="n">new</span><span class="p">(</span><span class="s">"user_id"</span><span class="p">,</span><span class="w"> </span><span class="n">user_id</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">span</span><span class="p">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="n">KeyValue</span>::<span class="n">new</span><span class="p">(</span><span class="s">"algorithm"</span><span class="p">,</span><span class="w"> </span><span class="s">"collaborative_filtering"</span><span class="p">));</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="kd">let</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Fetch preferences
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">pref_span</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tracer</span><span class="p">.</span><span class="n">start</span><span class="p">(</span><span class="s">"fetch_user_preferences"</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">preferences</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">"MATCH (u:User {id: $id})-[:LIKES]->(p:Product) RETURN p"</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">params!</span><span class="p">(</span><span class="s">"id"</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="n">user_id</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">pref_span</span><span class="p">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="n">KeyValue</span>::<span class="n">new</span><span class="p">(</span><span class="s">"preferences_count"</span><span class="p">,</span><span class="w"> </span><span class="n">preferences</span><span class="p">.</span><span class="n">len</span><span class="p">()</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="kt">i64</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">pref_span</span><span class="p">.</span><span class="n">end</span><span class="p">();</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">// Generate recommendations
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">rec_span</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tracer</span><span class="p">.</span><span class="n">start</span><span class="p">(</span><span class="s">"generate_recommendations"</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">recommendations</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">compute_recommendations</span><span class="p">(</span><span class="o">&</span><span class="n">preferences</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">rec_span</span><span class="p">.</span><span class="n">set_attribute</span><span class="p">(</span><span class="n">KeyValue</span>::<span class="n">new</span><span class="p">(</span><span class="s">"recommendations_count"</span><span class="p">,</span><span class="w"> </span><span class="n">recommendations</span><span class="p">.</span><span class="n">len</span><span class="p">()</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="kt">i64</span><span class="p">));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">rec_span</span><span class="p">.</span><span class="n">end</span><span class="p">();</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="nb">Ok</span><span class="p">(</span><span class="n">recommendations</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}.</span><span class="k">await</span><span class="p">;</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="k">match</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">recs</span><span class="p">)</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">span</span><span class="p">.</span><span class="n">set_status</span><span class="p">(</span><span class="n">Status</span>::<span class="nb">Ok</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">span</span><span class="p">.</span><span class="n">end</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Ok</span><span class="p">(</span><span class="n">recs</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Err</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">span</span><span class="p">.</span><span class="n">record_error</span><span class="p">(</span><span class="o">&</span><span class="n">e</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">span</span><span class="p">.</span><span class="n">set_status</span><span class="p">(</span><span class="n">Status</span>::<span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">.</span><span class="n">to_string</span><span class="p">()));</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="n">span</span><span class="p">.</span><span class="n">end</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nb">Err</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="sampling-strategies" class="position-relative d-flex align-items-center group">
<span>Sampling 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="sampling-strategies"
aria-haspopup="dialog"
aria-label="Share link: Sampling 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>Control trace volume with intelligent sampling:</p>
<h4 id="probabilistic-sampling" class="position-relative d-flex align-items-center group">
<span>Probabilistic 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="probabilistic-sampling"
aria-haspopup="dialog"
aria-label="Share link: Probabilistic 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>Sample a fixed percentage of traces:</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">"probabilistic"</span>
</span></span><span class="line"><span class="cl"><span class="nx">rate</span> <span class="p">=</span> <span class="mf">0.1</span> <span class="c"># Sample 10% of all traces</span>
</span></span></code></pre></div>
<h4 id="tail-based-sampling" class="position-relative d-flex align-items-center group">
<span>Tail-Based 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="tail-based-sampling"
aria-haspopup="dialog"
aria-label="Share link: Tail-Based 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>Sample based on trace characteristics after completion:</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">"tail_based"</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 transactions</span>
</span></span><span class="line"><span class="cl"><span class="nx">sample_transactions</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"># Default rate for 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.05</span> <span class="c"># 5%</span>
</span></span></code></pre></div>
<h4 id="adaptive-sampling" class="position-relative d-flex align-items-center group">
<span>Adaptive 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="adaptive-sampling"
aria-haspopup="dialog"
aria-label="Share link: Adaptive 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>Dynamically adjust sample rate based on load:</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">"adaptive"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Target traces per second</span>
</span></span><span class="line"><span class="cl"><span class="nx">target_tps</span> <span class="p">=</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Adjust sample rate every N seconds</span>
</span></span><span class="line"><span class="cl"><span class="nx">adjust_interval_seconds</span> <span class="p">=</span> <span class="mi">60</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Minimum sample rate</span>
</span></span><span class="line"><span class="cl"><span class="nx">min_rate</span> <span class="p">=</span> <span class="mf">0.01</span> <span class="c"># 1%</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Maximum sample rate</span>
</span></span><span class="line"><span class="cl"><span class="nx">max_rate</span> <span class="p">=</span> <span class="mf">1.0</span> <span class="c"># 100%</span>
</span></span></code></pre></div>
<h4 id="custom-sampling-rules" class="position-relative d-flex align-items-center group">
<span>Custom Sampling Rules</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-sampling-rules"
aria-haspopup="dialog"
aria-label="Share link: Custom Sampling Rules">
<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>Define rules for specific scenarios:</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 class="nx">rules</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="c"># Always sample specific users</span>
</span></span><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 class="nx">rules</span><span class="p">.</span><span class="nx">always</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">user</span> <span class="p">=</span> <span class="s2">"[email protected]"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Always sample specific operations</span>
</span></span><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 class="nx">rules</span><span class="p">.</span><span class="nx">always</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">operation</span> <span class="p">=</span> <span class="s2">"CREATE_GRAPH"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c"># Never sample health checks</span>
</span></span><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 class="nx">rules</span><span class="p">.</span><span class="nx">never</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl"><span class="nx">query_text</span> <span class="p">=</span> <span class="s2">"MATCH (n) RETURN count(n)"</span>
</span></span></code></pre></div>
<h3 id="trace-analysis" class="position-relative d-flex align-items-center group">
<span>Trace 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="trace-analysis"
aria-haspopup="dialog"
aria-label="Share link: Trace 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>
<h4 id="jaeger-ui" class="position-relative d-flex align-items-center group">
<span>Jaeger UI</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="jaeger-ui"
aria-haspopup="dialog"
aria-label="Share link: Jaeger UI">
<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>Query and visualize traces in Jaeger:</p>
<p><strong>Find slow queries</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">service: geode
</span></span><span class="line"><span class="cl">operation: execute_gql_query
</span></span><span class="line"><span class="cl">min_duration: 1s
</span></span></code></pre></div><p><strong>Find errors</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">service: geode
</span></span><span class="line"><span class="cl">tags: error=true
</span></span></code></pre></div><p><strong>Find by user</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">service: geode
</span></span><span class="line"><span class="cl">tags: [email protected]
</span></span></code></pre></div>
<h4 id="programmatic-analysis" class="position-relative d-flex align-items-center group">
<span>Programmatic 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="programmatic-analysis"
aria-haspopup="dialog"
aria-label="Share link: Programmatic 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>
</h4><p>Query trace data via Jaeger API:</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">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Find traces</span>
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"http://jaeger:16686/api/traces"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">params</span><span class="o">=</span><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"service"</span><span class="p">:</span> <span class="s2">"geode"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"operation"</span><span class="p">:</span> <span class="s2">"execute_gql_query"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"minDuration"</span><span class="p">:</span> <span class="s2">"1s"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"limit"</span><span class="p">:</span> <span class="mi">100</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></span><span class="line"><span class="cl"><span class="n">traces</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Analyze trace durations</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">trace</span> <span class="ow">in</span> <span class="n">traces</span><span class="p">[</span><span class="s2">"data"</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl"> <span class="n">root_span</span> <span class="o">=</span> <span class="n">trace</span><span class="p">[</span><span class="s2">"spans"</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Trace </span><span class="si">{</span><span class="n">trace</span><span class="p">[</span><span class="s1">'traceID'</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">root_span</span><span class="p">[</span><span class="s1">'duration'</span><span class="p">]</span><span class="o">/</span><span class="mi">1000</span><span class="si">}</span><span class="s2">ms"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Find slowest child span</span>
</span></span><span class="line"><span class="cl"> <span class="n">slowest</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">trace</span><span class="p">[</span><span class="s2">"spans"</span><span class="p">],</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="n">s</span><span class="p">[</span><span class="s2">"duration"</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">" Slowest operation: </span><span class="si">{</span><span class="n">slowest</span><span class="p">[</span><span class="s1">'operationName'</span><span class="p">]</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">slowest</span><span class="p">[</span><span class="s1">'duration'</span><span class="p">]</span><span class="o">/</span><span class="mi">1000</span><span class="si">}</span><span class="s2">ms)"</span><span class="p">)</span>
</span></span></code></pre></div>
<h3 id="performance-optimization-with-traces" class="position-relative d-flex align-items-center group">
<span>Performance Optimization with Traces</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-optimization-with-traces"
aria-haspopup="dialog"
aria-label="Share link: Performance Optimization with Traces">
<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="identify-bottlenecks" class="position-relative d-flex align-items-center group">
<span>Identify Bottlenecks</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="identify-bottlenecks"
aria-haspopup="dialog"
aria-label="Share link: Identify Bottlenecks">
<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>Analyze span durations to find optimization opportunities:</p>
<ol>
<li><strong>Sort spans by duration</strong> to find slowest operations</li>
<li><strong>Compare similar traces</strong> to find anomalies</li>
<li><strong>Examine span attributes</strong> for context (index usage, row counts)</li>
<li><strong>Look for sequential operations</strong> that could be parallelized</li>
</ol>
<h4 id="example-analysis" class="position-relative d-flex align-items-center group">
<span>Example 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="example-analysis"
aria-haspopup="dialog"
aria-label="Share link: Example 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>
</h4><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 (total: 2500ms)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">├─ fetch_user_preferences (50ms) ✓ Fast
</span></span><span class="line"><span class="cl">├─ find_similar_users (2200ms) ⚠️ BOTTLENECK
</span></span><span class="line"><span class="cl">│ └─ expand_relationships (2150ms) ⚠️ Missing index?
</span></span><span class="line"><span class="cl">└─ generate_recommendations (250ms) ✓ Acceptable
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Action: Add index on LIKES relationship
</span></span><span class="line"><span class="cl">Expected improvement: 2200ms → 150ms
</span></span></code></pre></div>
<h3 id="best-practices" class="position-relative d-flex align-items-center group">
<span>Best Practices</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="best-practices"
aria-haspopup="dialog"
aria-label="Share link: Best Practices">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p><strong>Strategic Sampling</strong>: Use tail-based sampling to capture all errors and slow requests while sampling normal traffic.</p>
<p><strong>Meaningful Span Names</strong>: Use descriptive operation names (e.g., “recommend_products”, not “function_A”).</p>
<p><strong>Rich Attributes</strong>: Include relevant context in span attributes for filtering and analysis.</p>
<p><strong>Avoid High Cardinality</strong>: Don’t use unbounded values (user IDs, query text) as span names.</p>
<p><strong>Propagate Context</strong>: Ensure trace context flows through all service boundaries.</p>
<p><strong>Monitor Overhead</strong>: Tracing should consume <2% of CPU; adjust sampling if higher.</p>
<p><strong>Correlate with Logs</strong>: Include trace IDs in logs for cross-pillar correlation.</p>
<p><strong>Set Retention Policies</strong>: Retain traces for 3-7 days (longer than logs, shorter than metrics).</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/observability/"
>System Observability</a>
- Observability pillars</li>
<li><a
href="/tags/logging/"
>Application Logging</a>
- Structured logging</li>
<li><a
href="/tags/metrics/"
>Performance Metrics</a>
- Metrics collection</li>
<li><a
href="/tags/monitoring/"
>System Monitoring</a>
- Monitoring strategies</li>
<li><a
href="/tags/performance/"
>Performance Tuning</a>
- Optimization techniques</li>
<li><a
href="/tags/profiling/"
>Profiling</a>
- Query profiling</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>OpenTelemetry Documentation</li>
<li>Distributed Tracing Best Practices</li>
<li>Jaeger Deployment Guide</li>
<li>Trace-Based Debugging Patterns</li>
<li>Performance Optimization with Traces</li>
</ul>
Related Articles
No articles found with this tag yet.
Back to Home