<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Application Performance Monitoring (APM) provides end-to-end visibility into application behavior, tracking requests from user interactions through application layers down to database queries. APM solutions combine distributed tracing, metrics collection, error tracking, and business analytics to give comprehensive insight into application health and user experience.</p>
<p>Geode integrates with popular APM platforms including Datadog, New Relic, Elastic APM, and AppDynamics, enabling you to monitor database performance in the context of full application request flows. This holistic view helps identify bottlenecks, understand user impact, and optimize both application and database performance.</p>
<p>This guide covers APM concepts, integration patterns, platform-specific configuration, and best practices for monitoring Geode-powered applications.</p>
<h3 id="apm-architecture" class="position-relative d-flex align-items-center group">
<span>APM Architecture</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="apm-architecture"
aria-haspopup="dialog"
aria-label="Share link: APM Architecture">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden>
<div class="hsm-dialog" role="document">
<div class="hsm-header">
<h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2>
<button type="button" class="hsm-close" aria-label="Close">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<div class="hsm-body">
<label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label>
<div class="input-group mb-4 hsm-url-group">
<input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" />
<button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy">
<i class="fa-duotone fa-clipboard" aria-hidden="true"></i>
</button>
</div>
<div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div>
<div class="hsm-share-grid">
<a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-twitter me-2"></i>Twitter
</a>
<a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-linkedin me-2"></i>LinkedIn
</a>
<a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-facebook me-2"></i>Facebook
</a>
</div>
</div>
</div>
</div>
<style>
.heading-share-modal {
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
background: rgba(0, 0, 0, 0.6);
z-index: 1050;
padding: 1rem;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
.heading-share-modal[hidden] { display: none !important; }
.hsm-dialog {
max-width: 420px;
width: 100%;
background: var(--bs-body-bg, #fff);
color: var(--bs-body-color, #212529);
border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
overflow: hidden;
animation: hsm-fade-in 0.2s ease-out;
}
@keyframes hsm-fade-in {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
[data-bs-theme="dark"] .hsm-dialog {
background: #1e293b;
border-color: rgba(255,255,255,0.1);
color: #f8f9fa;
}
.hsm-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
background: rgba(0,0,0,0.02);
}
[data-bs-theme="dark"] .hsm-header {
background: rgba(255,255,255,0.02);
border-color: rgba(255,255,255,0.1);
}
.hsm-close {
background: transparent;
border: none;
color: inherit;
opacity: 0.5;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
font-size: 1.2rem;
line-height: 1;
transition: opacity 0.2s;
}
.hsm-close:hover {
opacity: 1;
}
.hsm-body {
padding: 1.5rem;
}
.hsm-url-group {
display: flex !important;
align-items: stretch;
}
.hsm-url-group .form-control {
flex: 1;
min-width: 0;
margin: 0;
background: var(--bs-secondary-bg, #f8f9fa);
border-color: var(--bs-border-color, #dee2e6);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
height: 42px;
}
.hsm-url-group .btn {
flex: 0 0 auto;
margin: 0;
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
height: 42px;
display: flex;
align-items: center;
justify-content: center;
padding: 0 1.25rem;
z-index: 2;
}
[data-bs-theme="dark"] .hsm-url-group .form-control {
background: #0f172a;
border-color: #334155;
color: #e2e8f0;
}
.hsm-share-grid {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.hsm-share-grid .btn {
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
padding: 0.6rem;
border-color: var(--bs-border-color);
width: 100%;
}
[data-bs-theme="dark"] .hsm-share-grid .btn {
color: #e2e8f0;
border-color: #475569;
}
[data-bs-theme="dark"] .hsm-share-grid .btn:hover {
background: #334155;
border-color: #cbd5e1;
}
</style>
<script>
(function(){
const modal = document.getElementById('headingShareModal');
if(!modal) return;
const input = modal.querySelector('#headingShareInput');
const copyBtn = modal.querySelector('.hsm-copy');
const twitter = modal.querySelector('#share-twitter');
const linkedin = modal.querySelector('#share-linkedin');
const facebook = modal.querySelector('#share-facebook');
const closeBtn = modal.querySelector('.hsm-close');
let lastFocus=null;
let trapBound=false;
function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; }
function isOpen(){ return !modal.hasAttribute('hidden'); }
function hydrate(id){
const url=buildUrl(id);
input.value=url;
const enc=encodeURIComponent(url);
const text=encodeURIComponent(document.title);
if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`;
if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`;
if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`;
}
function openModal(id){
lastFocus=document.activeElement;
hydrate(id);
if(!isOpen()){
modal.removeAttribute('hidden');
}
requestAnimationFrame(()=>{ input.focus(); });
trapFocus();
}
function closeModal(){
if(!isOpen()) return;
modal.setAttribute('hidden','');
if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus();
}
function copyCurrent(){
try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); }
catch(e){ fallback(); }
}
function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} }
function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); }
function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); }
function bindShareButtons(){
document.querySelectorAll('.h-share').forEach(btn=>{
if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; }
});
}
bindShareButtons();
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', bindShareButtons);
} else {
requestAnimationFrame(bindShareButtons);
}
document.addEventListener('click', function(e){
const shareBtn=e.target.closest && e.target.closest('.h-share');
if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); }
}, true);
document.addEventListener('click', e=>{
if(e.target===modal) closeModal();
if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); }
if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); }
});
document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); });
function trapFocus(){
if(trapBound) return;
trapBound=true;
modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } });
}
if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); });
})();
</script>
<h4 id="full-stack-visibility" class="position-relative d-flex align-items-center group">
<span>Full-Stack Visibility</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="full-stack-visibility"
aria-haspopup="dialog"
aria-label="Share link: Full-Stack Visibility">
<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>APM provides unified monitoring across the entire stack:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">User</span> <span class="n">Request</span> <span class="n">Flow</span> <span class="n">with</span> <span class="n">APM</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"><span class="err">┌─────────────────────────────────────────────────────┐</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="n">Browser</span><span class="o">/</span><span class="n">Mobile</span> <span class="n">App</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="o">-</span> <span class="n">Page</span> <span class="nb">load</span> <span class="n">time</span><span class="p">:</span> <span class="mi">850</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="o">-</span> <span class="n">JavaScript</span> <span class="n">errors</span><span class="p">:</span> <span class="mi">0</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">└──────────────────┬──────────────────────────────────┘</span>
</span></span><span class="line"><span class="cl"> <span class="err">│</span>
</span></span><span class="line"><span class="cl"> <span class="err">▼</span>
</span></span><span class="line"><span class="cl"><span class="err">┌─────────────────────────────────────────────────────┐</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="n">Load</span> <span class="n">Balancer</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="o">-</span> <span class="n">Request</span> <span class="n">forwarding</span><span class="p">:</span> <span class="mi">2</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">└──────────────────┬──────────────────────────────────┘</span>
</span></span><span class="line"><span class="cl"> <span class="err">│</span>
</span></span><span class="line"><span class="cl"> <span class="err">▼</span>
</span></span><span class="line"><span class="cl"><span class="err">┌─────────────────────────────────────────────────────┐</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="n">Application</span> <span class="n">Server</span> <span class="p">(</span><span class="n">Python</span><span class="o">/</span><span class="n">Go</span><span class="o">/</span><span class="n">Rust</span><span class="p">)</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="o">-</span> <span class="n">Request</span> <span class="n">handling</span><span class="p">:</span> <span class="mi">420</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">├─</span> <span class="n">Authentication</span><span class="p">:</span> <span class="mi">15</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">├─</span> <span class="n">Business</span> <span class="n">logic</span><span class="p">:</span> <span class="mi">45</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">├─</span> <span class="n">Database</span> <span class="n">queries</span><span class="p">:</span> <span class="mi">350</span><span class="n">ms</span> <span class="err">◄──</span> <span class="n">Geode</span> <span class="n">queries</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">└─</span> <span class="n">Response</span> <span class="n">serialization</span><span class="p">:</span> <span class="mi">10</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">└──────────────────┬──────────────────────────────────┘</span>
</span></span><span class="line"><span class="cl"> <span class="err">│</span>
</span></span><span class="line"><span class="cl"> <span class="err">▼</span>
</span></span><span class="line"><span class="cl"><span class="err">┌─────────────────────────────────────────────────────┐</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="n">Geode</span> <span class="n">Database</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="o">-</span> <span class="n">Query</span> <span class="n">execution</span><span class="p">:</span> <span class="mi">350</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">├─</span> <span class="n">Parse</span><span class="p">:</span> <span class="mi">5</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">├─</span> <span class="n">Optimize</span><span class="p">:</span> <span class="mi">10</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">├─</span> <span class="n">Execute</span><span class="p">:</span> <span class="mi">330</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">│</span> <span class="err">├─</span> <span class="n">Index</span> <span class="n">lookup</span><span class="p">:</span> <span class="mi">30</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="n">Relationship</span> <span class="n">traversal</span><span class="p">:</span> <span class="mi">300</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">│</span> <span class="err">└─</span> <span class="n">Serialize</span><span class="p">:</span> <span class="mi">5</span><span class="n">ms</span> <span class="err">│</span>
</span></span><span class="line"><span class="cl"><span class="err">└─────────────────────────────────────────────────────┘</span>
</span></span></code></pre></div><p>APM shows that 83% of request time is spent in database queries, specifically relationship traversal—actionable insight for optimization.</p>
<h3 id="core-apm-capabilities" class="position-relative d-flex align-items-center group">
<span>Core APM Capabilities</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="core-apm-capabilities"
aria-haspopup="dialog"
aria-label="Share link: Core APM Capabilities">
<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="transaction-tracing" class="position-relative d-flex align-items-center group">
<span>Transaction 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="transaction-tracing"
aria-haspopup="dialog"
aria-label="Share link: Transaction 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>
</h4><p>Capture distributed traces showing complete request flows:</p>
<p><strong>Transaction Overview</strong>:</p>
<ul>
<li><strong>Transaction Name</strong>: <code>POST /api/recommendations</code></li>
<li><strong>Total Duration</strong>: 850ms</li>
<li><strong>Status</strong>: Success (200 OK)</li>
<li><strong>User Impact</strong>: 1 user request</li>
<li><strong>Timestamp</strong>: 2026-01-24 10:15:30 UTC</li>
</ul>
<p><strong>Trace Breakdown</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Transaction: POST /api/recommendations (850ms)
</span></span><span class="line"><span class="cl">├─ HTTP Handler (420ms)
</span></span><span class="line"><span class="cl">│ ├─ Authenticate User (15ms)
</span></span><span class="line"><span class="cl">│ ├─ Get User Preferences (350ms)
</span></span><span class="line"><span class="cl">│ │ └─ Geode Query: MATCH (u:User)-[:LIKES]->() (350ms)
</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 (330ms)
</span></span><span class="line"><span class="cl">│ │ │ ├─ Index Lookup (30ms)
</span></span><span class="line"><span class="cl">│ │ │ └─ Expand Relationships (300ms) ◄── BOTTLENECK
</span></span><span class="line"><span class="cl">│ │ └─ Serialize Results (5ms)
</span></span><span class="line"><span class="cl">│ ├─ Compute Recommendations (45ms)
</span></span><span class="line"><span class="cl">│ └─ Serialize Response (10ms)
</span></span><span class="line"><span class="cl">└─ Network Transmission (430ms)
</span></span></code></pre></div>
<h4 id="error-tracking" class="position-relative d-flex align-items-center group">
<span>Error Tracking</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-tracking"
aria-haspopup="dialog"
aria-label="Share link: Error Tracking">
<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>Capture and analyze application errors:</p>
<p><strong>Error Details</strong>:</p>
<ul>
<li><strong>Error Type</strong>: <code>DatabaseQueryError</code></li>
<li><strong>Message</strong>: “Query timeout after 30 seconds”</li>
<li><strong>Stack Trace</strong>: Full Python/Go/Rust stack trace</li>
<li><strong>Query</strong>: <code>MATCH (u:User)-[*1..5]->(other) RETURN other</code></li>
<li><strong>User</strong>: <code>[email protected]</code></li>
<li><strong>Impact</strong>: 5 users affected in last hour</li>
<li><strong>First Seen</strong>: 2026-01-24 09:30:00 UTC</li>
</ul>
<h4 id="performance-metrics" class="position-relative d-flex align-items-center group">
<span>Performance Metrics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="performance-metrics"
aria-haspopup="dialog"
aria-label="Share link: Performance Metrics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Track application-level performance metrics:</p>
<p><strong>Key Metrics</strong>:</p>
<ul>
<li><strong>Throughput</strong>: Requests per minute</li>
<li><strong>Latency</strong>: p50, p95, p99 response times</li>
<li><strong>Error Rate</strong>: Errors per minute</li>
<li><strong>Apdex Score</strong>: User satisfaction metric</li>
<li><strong>Database Time</strong>: Time spent in database queries</li>
<li><strong>External Services</strong>: Time in external API calls</li>
</ul>
<h4 id="business-analytics" class="position-relative d-flex align-items-center group">
<span>Business Analytics</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="business-analytics"
aria-haspopup="dialog"
aria-label="Share link: Business Analytics">
<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>Connect performance to business metrics:</p>
<p><strong>User Journey Analysis</strong>:</p>
<ul>
<li><strong>Conversion Rate</strong>: 12.3% (impacted by slow recommendations)</li>
<li><strong>Cart Abandonment</strong>: 8.5% (correlated with timeout errors)</li>
<li><strong>Revenue Per Request</strong>: $15.42 average</li>
<li><strong>Top Revenue Transactions</strong>: Product search, checkout, recommendations</li>
</ul>
<h3 id="apm-platform-integration" class="position-relative d-flex align-items-center group">
<span>APM Platform 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="apm-platform-integration"
aria-haspopup="dialog"
aria-label="Share link: APM Platform 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="datadog-apm" class="position-relative d-flex align-items-center group">
<span>Datadog APM</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="datadog-apm"
aria-haspopup="dialog"
aria-label="Share link: Datadog APM">
<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>
<h5 id="installation" class="position-relative d-flex align-items-center group">
<span>Installation</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="installation"
aria-haspopup="dialog"
aria-label="Share link: Installation">
<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>
</h5><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 application with Datadog APM</span>
</span></span><span class="line"><span class="cl"><span class="c1"># requirements.txt</span>
</span></span><span class="line"><span class="cl"><span class="n">ddtrace</span><span class="o">>=</span><span class="mf">1.0.0</span>
</span></span><span class="line"><span class="cl"><span class="n">geode</span><span class="o">-</span><span class="n">client</span><span class="o">>=</span><span class="mf">0.3.19</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Install</span>
</span></span><span class="line"><span class="cl"><span class="n">pip</span> <span class="n">install</span> <span class="n">ddtrace</span> <span class="n">geode</span><span class="o">-</span><span class="n">client</span>
</span></span></code></pre></div>
<h5 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>
</h5><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># app.py</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">ddtrace</span> <span class="kn">import</span> <span class="n">tracer</span><span class="p">,</span> <span class="n">patch_all</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"># Auto-instrument Python libraries</span>
</span></span><span class="line"><span class="cl"><span class="n">patch_all</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Configure tracer</span>
</span></span><span class="line"><span class="cl"><span class="n">tracer</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">hostname</span><span class="o">=</span><span class="s1">'datadog-agent'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">port</span><span class="o">=</span><span class="mi">8126</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">service_name</span><span class="o">=</span><span class="s1">'recommendation-service'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">env</span><span class="o">=</span><span class="s1">'production'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">version</span><span class="o">=</span><span class="s1">'1.2.3'</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"># Geode queries automatically traced</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">get_user_preferences</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">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="s1">'localhost:3141'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># This query automatically creates a span in Datadog</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="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></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">result</span>
</span></span></code></pre></div>
<h5 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>
</h5><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">ddtrace</span> <span class="kn">import</span> <span class="n">tracer</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@tracer.wrap</span><span class="p">(</span><span class="n">service</span><span class="o">=</span><span class="s1">'recommendation-service'</span><span class="p">,</span> <span class="n">resource</span><span class="o">=</span><span class="s1">'generate_recommendations'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">generate_recommendations</span><span class="p">(</span><span class="n">user_id</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="n">span</span> <span class="o">=</span> <span class="n">tracer</span><span class="o">.</span><span class="n">current_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_tag</span><span class="p">(</span><span class="s1">'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_tag</span><span class="p">(</span><span class="s1">'algorithm'</span><span class="p">,</span> <span class="s1">'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="c1"># Business logic</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">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="n">span</span><span class="o">.</span><span class="n">set_metric</span><span class="p">(</span><span class="s1">'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 class="k">return</span> <span class="n">recommendations</span>
</span></span></code></pre></div>
<h4 id="new-relic-apm" class="position-relative d-flex align-items-center group">
<span>New Relic APM</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="new-relic-apm"
aria-haspopup="dialog"
aria-label="Share link: New Relic APM">
<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>
<h5 id="installation-1" class="position-relative d-flex align-items-center group">
<span>Installation</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="installation-1"
aria-haspopup="dialog"
aria-label="Share link: Installation">
<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>
</h5><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 application with New Relic</span>
</span></span><span class="line"><span class="cl"><span class="c1"># requirements.txt</span>
</span></span><span class="line"><span class="cl"><span class="n">newrelic</span><span class="o">>=</span><span class="mf">8.0.0</span>
</span></span><span class="line"><span class="cl"><span class="n">geode</span><span class="o">-</span><span class="n">client</span><span class="o">>=</span><span class="mf">0.3.19</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Install</span>
</span></span><span class="line"><span class="cl"><span class="n">pip</span> <span class="n">install</span> <span class="n">newrelic</span> <span class="n">geode</span><span class="o">-</span><span class="n">client</span>
</span></span></code></pre></div>
<h5 id="configuration-1" 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-1"
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>
</h5><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="c1"># newrelic.ini</span>
</span></span><span class="line"><span class="cl"><span class="k">[newrelic]</span>
</span></span><span class="line"><span class="cl"><span class="na">license_key</span> <span class="o">=</span> <span class="s">YOUR_LICENSE_KEY</span>
</span></span><span class="line"><span class="cl"><span class="na">app_name</span> <span class="o">=</span> <span class="s">Recommendation Service</span>
</span></span><span class="line"><span class="cl"><span class="na">monitor_mode</span> <span class="o">=</span> <span class="s">true</span>
</span></span><span class="line"><span class="cl"><span class="na">log_level</span> <span class="o">=</span> <span class="s">info</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Distributed tracing</span>
</span></span><span class="line"><span class="cl"><span class="na">distributed_tracing.enabled</span> <span class="o">=</span> <span class="s">true</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Database monitoring</span>
</span></span><span class="line"><span class="cl"><span class="na">transaction_tracer.enabled</span> <span class="o">=</span> <span class="s">true</span>
</span></span><span class="line"><span class="cl"><span class="na">transaction_tracer.record_sql</span> <span class="o">=</span> <span class="s">obfuscated</span>
</span></span></code></pre></div><p>Run application:</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"># Start with New Relic agent</span>
</span></span><span class="line"><span class="cl"><span class="nv">NEW_RELIC_CONFIG_FILE</span><span class="o">=</span>newrelic.ini newrelic-admin run-program python app.py
</span></span></code></pre></div>
<h5 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>
</h5><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">newrelic.agent</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@newrelic.agent.background_task</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">process_recommendations_batch</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="n">application</span> <span class="o">=</span> <span class="n">newrelic</span><span class="o">.</span><span class="n">agent</span><span class="o">.</span><span class="n">application</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">with</span> <span class="n">newrelic</span><span class="o">.</span><span class="n">agent</span><span class="o">.</span><span class="n">BackgroundTask</span><span class="p">(</span><span class="n">application</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">'batch_recommendations'</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">process_batch</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Custom metrics</span>
</span></span><span class="line"><span class="cl"><span class="n">newrelic</span><span class="o">.</span><span class="n">agent</span><span class="o">.</span><span class="n">record_custom_metric</span><span class="p">(</span><span class="s1">'Custom/Recommendations/Generated'</span><span class="p">,</span> <span class="n">count</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">newrelic</span><span class="o">.</span><span class="n">agent</span><span class="o">.</span><span class="n">record_custom_event</span><span class="p">(</span><span class="s1">'RecommendationGenerated'</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'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="s1">'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 class="s1">'algorithm'</span><span class="p">:</span> <span class="s1">'collaborative_filtering'</span>
</span></span><span class="line"><span class="cl"><span class="p">})</span>
</span></span></code></pre></div>
<h4 id="elastic-apm" class="position-relative d-flex align-items-center group">
<span>Elastic APM</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="elastic-apm"
aria-haspopup="dialog"
aria-label="Share link: Elastic APM">
<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>
<h5 id="installation-2" class="position-relative d-flex align-items-center group">
<span>Installation</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="installation-2"
aria-haspopup="dialog"
aria-label="Share link: Installation">
<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>
</h5><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 application with Elastic APM</span>
</span></span><span class="line"><span class="cl"><span class="c1"># requirements.txt</span>
</span></span><span class="line"><span class="cl"><span class="n">elastic</span><span class="o">-</span><span class="n">apm</span><span class="p">[</span><span class="n">flask</span><span class="p">]</span><span class="o">>=</span><span class="mf">6.0.0</span>
</span></span><span class="line"><span class="cl"><span class="n">geode</span><span class="o">-</span><span class="n">client</span><span class="o">>=</span><span class="mf">0.3.19</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Install</span>
</span></span><span class="line"><span class="cl"><span class="n">pip</span> <span class="n">install</span> <span class="n">elastic</span><span class="o">-</span><span class="n">apm</span> <span class="n">geode</span><span class="o">-</span><span class="n">client</span>
</span></span></code></pre></div>
<h5 id="configuration-2" 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-2"
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>
</h5><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># app.py</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">elasticapm.contrib.flask</span> <span class="kn">import</span> <span class="n">ElasticAPM</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">Flask</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">app</span> <span class="o">=</span> <span class="n">Flask</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="c1"># Configure Elastic APM</span>
</span></span><span class="line"><span class="cl"><span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s1">'ELASTIC_APM'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'SERVICE_NAME'</span><span class="p">:</span> <span class="s1">'recommendation-service'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'SERVER_URL'</span><span class="p">:</span> <span class="s1">'http://apm-server:8200'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'ENVIRONMENT'</span><span class="p">:</span> <span class="s1">'production'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'CAPTURE_BODY'</span><span class="p">:</span> <span class="s1">'all'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'TRANSACTION_SAMPLE_RATE'</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'SPAN_FRAMES_MIN_DURATION'</span><span class="p">:</span> <span class="s1">'5ms'</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">apm</span> <span class="o">=</span> <span class="n">ElasticAPM</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.route</span><span class="p">(</span><span class="s1">'/recommendations/<user_id>'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">recommendations</span><span class="p">(</span><span class="n">user_id</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Transaction automatically created and traced</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="s1">'localhost:3141'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Geode query creates span</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="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></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
</span></span></code></pre></div>
<h5 id="custom-spans-1" 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-1"
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>
</h5><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">elasticapm</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@elasticapm.capture_span</span><span class="p">(</span><span class="s1">'compute_recommendations'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">compute_recommendations</span><span class="p">(</span><span class="n">preferences</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Custom span tracking</span>
</span></span><span class="line"><span class="cl"> <span class="n">elasticapm</span><span class="o">.</span><span class="n">set_custom_context</span><span class="p">({</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'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 class="s1">'algorithm'</span><span class="p">:</span> <span class="s1">'collaborative_filtering'</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">recommendations</span> <span class="o">=</span> <span class="k">await</span> <span class="n">algorithm</span><span class="o">.</span><span class="n">compute</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="n">elasticapm</span><span class="o">.</span><span class="n">label</span><span class="p">(</span><span class="n">recommendations_count</span><span class="o">=</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 class="k">return</span> <span class="n">recommendations</span>
</span></span></code></pre></div>
<h4 id="appdynamics" class="position-relative d-flex align-items-center group">
<span>AppDynamics</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="appdynamics"
aria-haspopup="dialog"
aria-label="Share link: AppDynamics">
<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>
<h5 id="installation-3" class="position-relative d-flex align-items-center group">
<span>Installation</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="installation-3"
aria-haspopup="dialog"
aria-label="Share link: Installation">
<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>
</h5><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Download AppDynamics Python agent</span>
</span></span><span class="line"><span class="cl">pip install appdynamics
</span></span></code></pre></div>
<h5 id="configuration-3" 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-3"
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>
</h5><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># app.py</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">appdynamics.agent</span> <span class="kn">import</span> <span class="n">agent</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Initialize agent</span>
</span></span><span class="line"><span class="cl"><span class="n">agent</span><span class="o">.</span><span class="n">initialize</span><span class="p">({</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'controller_host'</span><span class="p">:</span> <span class="s1">'controller.appdynamics.com'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'controller_port'</span><span class="p">:</span> <span class="mi">443</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'controller_ssl'</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'account_name'</span><span class="p">:</span> <span class="s1">'customer1'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'account_access_key'</span><span class="p">:</span> <span class="s1">'your-access-key'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'application_name'</span><span class="p">:</span> <span class="s1">'RecommendationService'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'tier_name'</span><span class="p">:</span> <span class="s1">'API'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'node_name'</span><span class="p">:</span> <span class="s1">'api-node-1'</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"># Geode queries automatically instrumented</span>
</span></span></code></pre></div>
<h3 id="geode-specific-apm-configuration" class="position-relative d-flex align-items-center group">
<span>Geode-Specific APM 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="geode-specific-apm-configuration"
aria-haspopup="dialog"
aria-label="Share link: Geode-Specific APM 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>
</h3>
<h4 id="query-tagging" class="position-relative d-flex align-items-center group">
<span>Query Tagging</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-tagging"
aria-haspopup="dialog"
aria-label="Share link: Query Tagging">
<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 custom tags to queries for APM categorization:</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"># Tag queries by category</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">tags</span><span class="o">=</span><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'query_category'</span><span class="p">:</span> <span class="s1">'recommendation'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'business_function'</span><span class="p">:</span> <span class="s1">'product_discovery'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'priority'</span><span class="p">:</span> <span class="s1">'high'</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><p>Tags appear in APM traces:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Span: Geode Query
</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"> - query.category: recommendation
</span></span><span class="line"><span class="cl"> - business.function: product_discovery
</span></span><span class="line"><span class="cl"> - priority: high
</span></span></code></pre></div>
<h4 id="slow-query-tracking" class="position-relative d-flex align-items-center group">
<span>Slow Query Tracking</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="slow-query-tracking"
aria-haspopup="dialog"
aria-label="Share link: Slow Query Tracking">
<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>Configure slow query threshold for APM alerting:</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">performance</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">slow_query_threshold_ms</span> <span class="p">=</span> <span class="mi">1000</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">apm</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="c"># Send slow queries to APM with full details</span>
</span></span><span class="line"><span class="cl"><span class="nx">report_slow_queries</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">include_query_text</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">include_execution_plan</span> <span class="p">=</span> <span class="kc">true</span>
</span></span></code></pre></div>
<h4 id="database-metrics-in-apm" class="position-relative d-flex align-items-center group">
<span>Database Metrics in APM</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="database-metrics-in-apm"
aria-haspopup="dialog"
aria-label="Share link: Database Metrics in APM">
<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 reports database metrics to APM platforms:</p>
<p><strong>Connection Pool</strong>:</p>
<ul>
<li>Active connections</li>
<li>Pool utilization %</li>
<li>Connection wait time</li>
</ul>
<p><strong>Query Performance</strong>:</p>
<ul>
<li>Queries per second</li>
<li>Average query duration</li>
<li>Slow query rate</li>
</ul>
<p><strong>Transaction Performance</strong>:</p>
<ul>
<li>Transactions per second</li>
<li>Transaction duration</li>
<li>Conflict rate</li>
</ul>
<h3 id="apm-alerting" class="position-relative d-flex align-items-center group">
<span>APM Alerting</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="apm-alerting"
aria-haspopup="dialog"
aria-label="Share link: APM Alerting">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Configure alerts in APM platforms based on application behavior:</p>
<h4 id="datadog-alerts" class="position-relative d-flex align-items-center group">
<span>Datadog Alerts</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="datadog-alerts"
aria-haspopup="dialog"
aria-label="Share link: Datadog Alerts">
<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-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Datadog monitor</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"High Geode Query Latency"</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">apm</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">query</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd"> avg(last_5m):
</span></span></span><span class="line"><span class="cl"><span class="sd"> avg:trace.geode.query.duration{env:production} > 1000</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="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd"> Geode query latency is high ({{ value }}ms)
</span></span></span><span class="line"><span class="cl"><span class="sd"> @slack-database-alerts
</span></span></span><span class="line"><span class="cl"><span class="sd"> @pagerduty-oncall</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">tags</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">service:recommendation-service</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">database:geode</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="new-relic-alerts" class="position-relative d-flex align-items-center group">
<span>New Relic Alerts</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="new-relic-alerts"
aria-haspopup="dialog"
aria-label="Share link: New Relic Alerts">
<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-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># New Relic alert condition</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"Geode Error Rate High"</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">apm_app_metric</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metric</span><span class="p">:</span><span class="w"> </span><span class="l">error_rate</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">condition_scope</span><span class="p">:</span><span class="w"> </span><span class="l">application</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">terms</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">duration</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">operator</span><span class="p">:</span><span class="w"> </span><span class="l">above</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">threshold</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">time_function</span><span class="p">:</span><span class="w"> </span><span class="l">all</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">incident_preference</span><span class="p">:</span><span class="w"> </span><span class="l">PER_CONDITION</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="elastic-apm-alerts" class="position-relative d-flex align-items-center group">
<span>Elastic APM Alerts</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="elastic-apm-alerts"
aria-haspopup="dialog"
aria-label="Share link: Elastic APM Alerts">
<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">"name"</span><span class="p">:</span> <span class="s2">"Slow Geode Transactions"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"params"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"threshold"</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">"serviceName"</span><span class="p">:</span> <span class="s2">"recommendation-service"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"transactionType"</span><span class="p">:</span> <span class="s2">"request"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"environment"</span><span class="p">:</span> <span class="s2">"production"</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"actions"</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"group"</span><span class="p">:</span> <span class="s2">"default"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"id"</span><span class="p">:</span> <span class="s2">"slack"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"params"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"message"</span><span class="p">:</span> <span class="s2">"Transaction latency exceeded threshold"</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
<h3 id="performance-optimization-with-apm" class="position-relative d-flex align-items-center group">
<span>Performance Optimization with APM</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-apm"
aria-haspopup="dialog"
aria-label="Share link: Performance Optimization with APM">
<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>Use APM transaction traces to find optimization opportunities:</p>
<ol>
<li><strong>Sort transactions by duration</strong> to find slowest endpoints</li>
<li><strong>Examine span breakdowns</strong> to identify time-consuming operations</li>
<li><strong>Analyze database queries</strong> for missing indexes or inefficient patterns</li>
<li><strong>Check external service calls</strong> for timeout or latency issues</li>
</ol>
<p><strong>Example Analysis</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Transaction: GET /user/recommendations
</span></span><span class="line"><span class="cl">Total: 1250ms
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Breakdown:
</span></span><span class="line"><span class="cl">- Database queries: 1100ms (88%) ◄── OPTIMIZE HERE
</span></span><span class="line"><span class="cl"> - User preferences query: 850ms
</span></span><span class="line"><span class="cl"> - Similar users query: 250ms
</span></span><span class="line"><span class="cl">- Business logic: 100ms (8%)
</span></span><span class="line"><span class="cl">- Serialization: 50ms (4%)
</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: 1100ms → 150ms
</span></span></code></pre></div>
<h4 id="ab-testing-performance" class="position-relative d-flex align-items-center group">
<span>A/B Testing Performance</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="ab-testing-performance"
aria-haspopup="dialog"
aria-label="Share link: A/B Testing Performance">
<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>Compare performance across application versions:</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"># Tag transactions by version for comparison</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">elasticapm</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">elasticapm</span><span class="o">.</span><span class="n">set_custom_context</span><span class="p">({</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'version'</span><span class="p">:</span> <span class="s1">'v2.0.0'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'feature_flag'</span><span class="p">:</span> <span class="s1">'new_recommendation_algo'</span>
</span></span><span class="line"><span class="cl"><span class="p">})</span>
</span></span></code></pre></div><p>APM dashboards show:</p>
<ul>
<li>v1.0.0 average latency: 850ms</li>
<li>v2.0.0 average latency: 320ms (62% improvement)</li>
</ul>
<h4 id="capacity-planning" class="position-relative d-flex align-items-center group">
<span>Capacity Planning</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="capacity-planning"
aria-haspopup="dialog"
aria-label="Share link: Capacity Planning">
<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>Use APM data for capacity planning:</p>
<p><strong>Metrics to Track</strong>:</p>
<ul>
<li>Peak requests per minute</li>
<li>Database query rate at peak</li>
<li>Resource utilization during peak</li>
<li>Growth trends over time</li>
</ul>
<p><strong>Forecast Scaling Needs</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Current: 1000 req/min peak
</span></span><span class="line"><span class="cl">Growth: +20% per quarter
</span></span><span class="line"><span class="cl">Forecast: 1728 req/min in 3 quarters
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Database scaling needed:
</span></span><span class="line"><span class="cl">- Current: Single instance handles 1500 req/min
</span></span><span class="line"><span class="cl">- Q3 2026: Add read replica
</span></span><span class="line"><span class="cl">- Q4 2026: Partition by user geography
</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>Instrument Comprehensively</strong>: Add APM to all application layers (frontend, backend, database).</p>
<p><strong>Use Consistent Tags</strong>: Apply consistent tagging across traces for filtering and analysis.</p>
<p><strong>Set Meaningful Transaction Names</strong>: Use descriptive names that reflect business operations.</p>
<p><strong>Monitor Business Metrics</strong>: Track metrics that matter to business (conversion rate, revenue).</p>
<p><strong>Configure Sampling Appropriately</strong>: Balance visibility with overhead (sample 100% for low-volume, 10% for high-volume).</p>
<p><strong>Correlate with Logs</strong>: Link traces to logs for comprehensive debugging.</p>
<p><strong>Set Alert Thresholds Based on SLOs</strong>: Alert on user-impacting issues, not arbitrary thresholds.</p>
<p><strong>Review Regularly</strong>: Analyze APM data weekly to identify trends and optimization opportunities.</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/tracing/"
>Distributed Tracing</a>
- OpenTelemetry tracing</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/logging/"
>Application Logging</a>
- Structured logging</li>
<li><a
href="/tags/performance/"
>Performance Tuning</a>
- Optimization techniques</li>
</ul>
<h3 id="further-reading" class="position-relative d-flex align-items-center group">
<span>Further Reading</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="further-reading"
aria-haspopup="dialog"
aria-label="Share link: Further Reading">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li>APM Platform Comparison</li>
<li>Distributed Tracing Best Practices</li>
<li>Performance Monitoring Strategies</li>
<li>Business Metrics in APM</li>
<li>End-to-End Application Monitoring</li>
</ul>
Related Articles
No articles found with this tag yet.
Back to Home