<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>The <strong>Operations & Production Management</strong> category provides comprehensive documentation for running Geode successfully in production environments. From initial deployment through ongoing maintenance, these resources cover monitoring, observability, backup strategies, disaster recovery, troubleshooting, and capacity planning.</p>
<h3 id="introduction" class="position-relative d-flex align-items-center group">
<span>Introduction</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="introduction"
aria-haspopup="dialog"
aria-label="Share link: Introduction">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden>
<div class="hsm-dialog" role="document">
<div class="hsm-header">
<h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2>
<button type="button" class="hsm-close" aria-label="Close">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<div class="hsm-body">
<label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label>
<div class="input-group mb-4 hsm-url-group">
<input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" />
<button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy">
<i class="fa-duotone fa-clipboard" aria-hidden="true"></i>
</button>
</div>
<div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div>
<div class="hsm-share-grid">
<a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-twitter me-2"></i>Twitter
</a>
<a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-linkedin me-2"></i>LinkedIn
</a>
<a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-facebook me-2"></i>Facebook
</a>
</div>
</div>
</div>
</div>
<style>
.heading-share-modal {
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
background: rgba(0, 0, 0, 0.6);
z-index: 1050;
padding: 1rem;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
.heading-share-modal[hidden] { display: none !important; }
.hsm-dialog {
max-width: 420px;
width: 100%;
background: var(--bs-body-bg, #fff);
color: var(--bs-body-color, #212529);
border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
overflow: hidden;
animation: hsm-fade-in 0.2s ease-out;
}
@keyframes hsm-fade-in {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
[data-bs-theme="dark"] .hsm-dialog {
background: #1e293b;
border-color: rgba(255,255,255,0.1);
color: #f8f9fa;
}
.hsm-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
background: rgba(0,0,0,0.02);
}
[data-bs-theme="dark"] .hsm-header {
background: rgba(255,255,255,0.02);
border-color: rgba(255,255,255,0.1);
}
.hsm-close {
background: transparent;
border: none;
color: inherit;
opacity: 0.5;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
font-size: 1.2rem;
line-height: 1;
transition: opacity 0.2s;
}
.hsm-close:hover {
opacity: 1;
}
.hsm-body {
padding: 1.5rem;
}
.hsm-url-group {
display: flex !important;
align-items: stretch;
}
.hsm-url-group .form-control {
flex: 1;
min-width: 0;
margin: 0;
background: var(--bs-secondary-bg, #f8f9fa);
border-color: var(--bs-border-color, #dee2e6);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
height: 42px;
}
.hsm-url-group .btn {
flex: 0 0 auto;
margin: 0;
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
height: 42px;
display: flex;
align-items: center;
justify-content: center;
padding: 0 1.25rem;
z-index: 2;
}
[data-bs-theme="dark"] .hsm-url-group .form-control {
background: #0f172a;
border-color: #334155;
color: #e2e8f0;
}
.hsm-share-grid {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.hsm-share-grid .btn {
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
padding: 0.6rem;
border-color: var(--bs-border-color);
width: 100%;
}
[data-bs-theme="dark"] .hsm-share-grid .btn {
color: #e2e8f0;
border-color: #475569;
}
[data-bs-theme="dark"] .hsm-share-grid .btn:hover {
background: #334155;
border-color: #cbd5e1;
}
</style>
<script>
(function(){
const modal = document.getElementById('headingShareModal');
if(!modal) return;
const input = modal.querySelector('#headingShareInput');
const copyBtn = modal.querySelector('.hsm-copy');
const twitter = modal.querySelector('#share-twitter');
const linkedin = modal.querySelector('#share-linkedin');
const facebook = modal.querySelector('#share-facebook');
const closeBtn = modal.querySelector('.hsm-close');
let lastFocus=null;
let trapBound=false;
function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; }
function isOpen(){ return !modal.hasAttribute('hidden'); }
function hydrate(id){
const url=buildUrl(id);
input.value=url;
const enc=encodeURIComponent(url);
const text=encodeURIComponent(document.title);
if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`;
if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`;
if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`;
}
function openModal(id){
lastFocus=document.activeElement;
hydrate(id);
if(!isOpen()){
modal.removeAttribute('hidden');
}
requestAnimationFrame(()=>{ input.focus(); });
trapFocus();
}
function closeModal(){
if(!isOpen()) return;
modal.setAttribute('hidden','');
if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus();
}
function copyCurrent(){
try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); }
catch(e){ fallback(); }
}
function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} }
function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); }
function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); }
function bindShareButtons(){
document.querySelectorAll('.h-share').forEach(btn=>{
if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; }
});
}
bindShareButtons();
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', bindShareButtons);
} else {
requestAnimationFrame(bindShareButtons);
}
document.addEventListener('click', function(e){
const shareBtn=e.target.closest && e.target.closest('.h-share');
if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); }
}, true);
document.addEventListener('click', e=>{
if(e.target===modal) closeModal();
if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); }
if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); }
});
document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); });
function trapFocus(){
if(trapBound) return;
trapBound=true;
modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } });
}
if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); });
})();
</script><p>Operating a production database requires more than just installation—it demands comprehensive monitoring, proactive maintenance, robust backup strategies, and rapid incident response capabilities. Geode provides built-in operational tooling designed for production reliability. Prometheus metrics expose detailed performance data. Structured logging enables rapid troubleshooting. Automated backup systems ensure data durability. Health check endpoints integrate with orchestration platforms. These capabilities make Geode operational excellence achievable from day one.</p>
<p>Production operations span the entire database lifecycle: initial capacity planning determines hardware requirements; deployment automation ensures consistent environments; monitoring systems detect issues early; backup procedures protect against data loss; disaster recovery plans enable rapid restoration; performance tuning maintains optimal throughput; and troubleshooting procedures resolve incidents quickly. This category documents all aspects of production operations, providing runbooks, best practices, and reference architectures for reliable Geode deployments.</p>
<h3 id="what-youll-find" class="position-relative d-flex align-items-center group">
<span>What You&rsquo;ll Find</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="what-youll-find"
aria-haspopup="dialog"
aria-label="Share link: What Youll Find">
<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="deployment-and-configuration" class="position-relative d-flex align-items-center group">
<span>Deployment and 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="deployment-and-configuration"
aria-haspopup="dialog"
aria-label="Share link: Deployment and 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><strong>Deployment Options</strong></p>
<ul>
<li>Docker containers for simple deployments</li>
<li>Kubernetes for orchestrated clusters</li>
<li>Binary installation for traditional deployments</li>
<li>Cloud-specific deployment (AWS, Azure, GCP)</li>
<li>On-premises installation guides</li>
<li>Edge deployment patterns</li>
</ul>
<p><strong>Configuration Management</strong></p>
<ul>
<li>Production configuration templates</li>
<li>Performance tuning parameters</li>
<li>Security hardening settings</li>
<li>Resource allocation guidelines</li>
<li>Network configuration</li>
<li>TLS certificate management</li>
<li>Environment-specific configuration</li>
</ul>
<p><strong>Infrastructure as Code</strong></p>
<ul>
<li>Terraform modules for cloud deployment</li>
<li>Kubernetes Helm charts</li>
<li>Docker Compose configurations</li>
<li>Ansible playbooks</li>
<li>GitOps workflows</li>
</ul>
<h4 id="monitoring-and-observability" class="position-relative d-flex align-items-center group">
<span>Monitoring and Observability</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="monitoring-and-observability"
aria-haspopup="dialog"
aria-label="Share link: Monitoring and Observability">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Metrics Collection</strong></p>
<ul>
<li>Prometheus exposition endpoints</li>
<li>Grafana dashboard templates</li>
<li>Query performance metrics</li>
<li>Resource utilization metrics (CPU, memory, disk, network)</li>
<li>Connection pool metrics</li>
<li>Transaction statistics</li>
<li>Index performance metrics</li>
<li>Cache hit rates</li>
<li>Query plan changes</li>
</ul>
<p><strong>Logging</strong></p>
<ul>
<li>Structured JSON logging</li>
<li>Log levels and configuration</li>
<li>Query logging for performance analysis</li>
<li>Slow query logs</li>
<li>Error logs with stack traces</li>
<li>Audit logs for compliance</li>
<li>Log aggregation (ELK, Loki)</li>
<li>Log retention policies</li>
</ul>
<p><strong>Distributed Tracing</strong></p>
<ul>
<li>OpenTelemetry integration</li>
<li>Trace context propagation</li>
<li>Query execution tracing</li>
<li>Distributed transaction tracing</li>
<li>Span attributes and tags</li>
<li>Trace sampling strategies</li>
</ul>
<p><strong>Alerting</strong></p>
<ul>
<li>Alert rules for common issues</li>
<li>Threshold-based alerts</li>
<li>Anomaly detection alerts</li>
<li>Integration with PagerDuty, OpsGenie</li>
<li>Alert escalation policies</li>
<li>Runbook automation</li>
</ul>
<h4 id="backup-and-recovery" class="position-relative d-flex align-items-center group">
<span>Backup and Recovery</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="backup-and-recovery"
aria-haspopup="dialog"
aria-label="Share link: Backup and Recovery">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Backup Strategies</strong></p>
<ul>
<li>Full database backups</li>
<li>Incremental backups</li>
<li>Point-in-time recovery (PITR)</li>
<li>Snapshot-based backups</li>
<li>Continuous WAL archiving</li>
<li>Cross-region backup replication</li>
<li>Backup encryption</li>
<li>Backup verification and testing</li>
</ul>
<p><strong>Disaster Recovery</strong></p>
<ul>
<li>Recovery Time Objective (RTO) planning</li>
<li>Recovery Point Objective (RPO) planning</li>
<li>Automated failover procedures</li>
<li>Manual recovery procedures</li>
<li>Cross-datacenter replication</li>
<li>Backup restoration testing</li>
<li>Disaster recovery drills</li>
</ul>
<p><strong>High Availability</strong></p>
<ul>
<li>Multi-node clustering</li>
<li>Automatic failover</li>
<li>Read replicas for scaling</li>
<li>Load balancing strategies</li>
<li>Split-brain prevention</li>
<li>Quorum-based consensus</li>
<li>Zero-downtime upgrades</li>
</ul>
<h4 id="performance-management" class="position-relative d-flex align-items-center group">
<span>Performance Management</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-management"
aria-haspopup="dialog"
aria-label="Share link: Performance Management">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Capacity Planning</strong></p>
<ul>
<li>Workload characterization</li>
<li>Hardware sizing guidelines</li>
<li>Storage capacity planning</li>
<li>Network bandwidth requirements</li>
<li>CPU and memory sizing</li>
<li>I/O performance planning</li>
<li>Growth projections</li>
</ul>
<p><strong>Performance Tuning</strong></p>
<ul>
<li>Query optimization techniques</li>
<li>Index strategy optimization</li>
<li>Cache tuning</li>
<li>Connection pool sizing</li>
<li>Memory configuration</li>
<li>Disk I/O optimization</li>
<li>Network optimization</li>
</ul>
<p><strong>Benchmarking</strong></p>
<ul>
<li>Performance baseline establishment</li>
<li>Regression testing</li>
<li>Workload simulation</li>
<li>Stress testing</li>
<li>Capacity testing</li>
<li>Performance comparison</li>
</ul>
<h4 id="troubleshooting" class="position-relative d-flex align-items-center group">
<span>Troubleshooting</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="troubleshooting"
aria-haspopup="dialog"
aria-label="Share link: Troubleshooting">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Diagnostic Tools</strong></p>
<ul>
<li>EXPLAIN for query plans</li>
<li>PROFILE for execution analysis</li>
<li>Health check endpoints</li>
<li>Debug logging</li>
<li>Performance counters</li>
<li>System diagnostics</li>
<li>Connection debugging</li>
</ul>
<p><strong>Common Issues</strong></p>
<ul>
<li>Slow query diagnosis</li>
<li>Connection exhaustion</li>
<li>Memory pressure</li>
<li>Disk space issues</li>
<li>Lock contention</li>
<li>Replication lag</li>
<li>Network connectivity</li>
</ul>
<p><strong>Incident Response</strong></p>
<ul>
<li>Incident detection and triage</li>
<li>Escalation procedures</li>
<li>Communication templates</li>
<li>Post-incident reviews</li>
<li>Root cause analysis</li>
<li>Preventive measures</li>
</ul>
<h3 id="use-cases-with-code-examples" class="position-relative d-flex align-items-center group">
<span>Use Cases with Code Examples</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="use-cases-with-code-examples"
aria-haspopup="dialog"
aria-label="Share link: Use Cases with Code Examples">
<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="prometheus-monitoring-setup" class="position-relative d-flex align-items-center group">
<span>Prometheus Monitoring Setup</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="prometheus-monitoring-setup"
aria-haspopup="dialog"
aria-label="Share link: Prometheus Monitoring Setup">
<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"># prometheus.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">global</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scrape_interval</span><span class="p">:</span><span class="w"> </span><span class="l">15s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">evaluation_interval</span><span class="p">:</span><span class="w"> </span><span class="l">15s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">scrape_configs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">job_name</span><span class="p">:</span><span class="w"> </span><span class="s1">'geode'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">static_configs</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">targets</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">'geode-server:3141'</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">metrics_path</span><span class="p">:</span><span class="w"> </span><span class="s1">'/metrics'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scheme</span><span class="p">:</span><span class="w"> </span><span class="s1">'https'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">tls_config</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ca_file</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/prometheus/ca.crt</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cert_file</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/prometheus/client.crt</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">key_file</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/prometheus/client.key</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="c"># Alert rules</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">rule_files</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s1">'geode_alerts.yml'</span><span class="w">
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode_alerts.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">groups</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode_alerts</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rules</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">GeodeHighQueryLatency</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">geode_query_duration_seconds{quantile="0.99"} > 1.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">5m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">severity</span><span class="p">:</span><span class="w"> </span><span class="l">warning</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">"High query latency detected"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="s2">"P99 query latency is {{ $value }}s"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">GeodeHighConnectionCount</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">geode_active_connections > 900</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">2m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">severity</span><span class="p">:</span><span class="w"> </span><span class="l">warning</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">"High connection count"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="s2">"Active connections: {{ $value }}"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">GeodeDowntime</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">up{job="geode"} == 0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">1m</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">severity</span><span class="p">:</span><span class="w"> </span><span class="l">critical</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">"Geode server is down"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="s2">"Geode instance has been down for 1 minute"</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="automated-backup-script" class="position-relative d-flex align-items-center group">
<span>Automated Backup Script</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="automated-backup-script"
aria-haspopup="dialog"
aria-label="Share link: Automated Backup Script">
<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-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="c1"># backup-geode.sh - Automated backup script</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">set</span> -euo pipefail
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Configuration</span>
</span></span><span class="line"><span class="cl"><span class="nv">GEODE_HOST</span><span class="o">=</span><span class="s2">"localhost"</span>
</span></span><span class="line"><span class="cl"><span class="nv">GEODE_PORT</span><span class="o">=</span><span class="s2">"3141"</span>
</span></span><span class="line"><span class="cl"><span class="nv">BACKUP_DIR</span><span class="o">=</span><span class="s2">"/backups/geode"</span>
</span></span><span class="line"><span class="cl"><span class="nv">RETENTION_DAYS</span><span class="o">=</span><span class="m">30</span>
</span></span><span class="line"><span class="cl"><span class="nv">S3_BUCKET</span><span class="o">=</span><span class="s2">"s3://company-backups/geode"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Create backup directory</span>
</span></span><span class="line"><span class="cl"><span class="nv">BACKUP_DATE</span><span class="o">=</span><span class="k">$(</span>date +%Y%m%d-%H%M%S<span class="k">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">BACKUP_PATH</span><span class="o">=</span><span class="s2">"</span><span class="si">${</span><span class="nv">BACKUP_DIR</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">BACKUP_DATE</span><span class="si">}</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">mkdir -p <span class="s2">"</span><span class="si">${</span><span class="nv">BACKUP_PATH</span><span class="si">}</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Perform backup</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">"Starting backup at </span><span class="k">$(</span>date<span class="k">)</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">geode backup <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --host <span class="s2">"</span><span class="si">${</span><span class="nv">GEODE_HOST</span><span class="si">}</span><span class="s2">"</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --port <span class="s2">"</span><span class="si">${</span><span class="nv">GEODE_PORT</span><span class="si">}</span><span class="s2">"</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --output <span class="s2">"</span><span class="si">${</span><span class="nv">BACKUP_PATH</span><span class="si">}</span><span class="s2">"</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --format snapshot <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --compress gzip <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --verify
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Upload to S3</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">"Uploading to S3"</span>
</span></span><span class="line"><span class="cl">aws s3 sync <span class="s2">"</span><span class="si">${</span><span class="nv">BACKUP_PATH</span><span class="si">}</span><span class="s2">"</span> <span class="s2">"</span><span class="si">${</span><span class="nv">S3_BUCKET</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">BACKUP_DATE</span><span class="si">}</span><span class="s2">"</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --storage-class STANDARD_IA <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --sse AES256
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Verify backup integrity</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">"Verifying backup"</span>
</span></span><span class="line"><span class="cl">geode backup verify --path <span class="s2">"</span><span class="si">${</span><span class="nv">BACKUP_PATH</span><span class="si">}</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Clean up old backups</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">"Cleaning up old backups"</span>
</span></span><span class="line"><span class="cl">find <span class="s2">"</span><span class="si">${</span><span class="nv">BACKUP_DIR</span><span class="si">}</span><span class="s2">"</span> -type d -mtime +<span class="si">${</span><span class="nv">RETENTION_DAYS</span><span class="si">}</span> -exec rm -rf <span class="o">{}</span> +
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Send notification</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">"Backup completed successfully at </span><span class="k">$(</span>date<span class="k">)</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">curl -X POST https://monitoring.example.com/webhook <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> -H <span class="s2">"Content-Type: application/json"</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> -d <span class="s2">"{\"status\": \"success\", \"backup\": \"</span><span class="si">${</span><span class="nv">BACKUP_DATE</span><span class="si">}</span><span class="s2">\"}"</span>
</span></span></code></pre></div>
<h4 id="health-check-integration" class="position-relative d-flex align-items-center group">
<span>Health Check 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="health-check-integration"
aria-haspopup="dialog"
aria-label="Share link: Health Check Integration">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><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">aiohttp</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</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">check_geode_health</span><span class="p">()</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Comprehensive health check for Geode."""</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'status'</span><span class="p">:</span> <span class="s1">'healthy'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'checks'</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></span><span class="line"><span class="cl"> <span class="c1"># Check server responsiveness</span>
</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="k">async</span> <span class="k">with</span> <span class="n">aiohttp</span><span class="o">.</span><span class="n">ClientSession</span><span class="p">()</span> <span class="k">as</span> <span class="n">session</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="n">session</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'https://geode:3141/health'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">ssl</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">timeout</span><span class="o">=</span><span class="n">aiohttp</span><span class="o">.</span><span class="n">ClientTimeout</span><span class="p">(</span><span class="n">total</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span> <span class="k">as</span> <span class="n">resp</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'checks'</span><span class="p">][</span><span class="s1">'server'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'status'</span><span class="p">:</span> <span class="s1">'up'</span> <span class="k">if</span> <span class="n">resp</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="mi">200</span> <span class="k">else</span> <span class="s1">'down'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'latency_ms'</span><span class="p">:</span> <span class="n">resp</span><span class="o">.</span><span class="n">headers</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'X-Response-Time'</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="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'checks'</span><span class="p">][</span><span class="s1">'server'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'status'</span><span class="p">:</span> <span class="s1">'down'</span><span class="p">,</span> <span class="s1">'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="n">health</span><span class="p">[</span><span class="s1">'status'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'unhealthy'</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Check database connectivity</span>
</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="kn">import</span> <span class="nn">geode_client</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">'quic://geode:3141'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s1">'MATCH (n) RETURN count(n) LIMIT 1'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span> <span class="k">else</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'checks'</span><span class="p">][</span><span class="s1">'database'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'status'</span><span class="p">:</span> <span class="s1">'up'</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'checks'</span><span class="p">][</span><span class="s1">'database'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'status'</span><span class="p">:</span> <span class="s1">'down'</span><span class="p">,</span> <span class="s1">'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="n">health</span><span class="p">[</span><span class="s1">'status'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'unhealthy'</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Check disk space</span>
</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="kn">import</span> <span class="nn">shutil</span>
</span></span><span class="line"><span class="cl"> <span class="n">stat</span> <span class="o">=</span> <span class="n">shutil</span><span class="o">.</span><span class="n">disk_usage</span><span class="p">(</span><span class="s1">'/data/geode'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">free_percent</span> <span class="o">=</span> <span class="p">(</span><span class="n">stat</span><span class="o">.</span><span class="n">free</span> <span class="o">/</span> <span class="n">stat</span><span class="o">.</span><span class="n">total</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'checks'</span><span class="p">][</span><span class="s1">'disk'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'status'</span><span class="p">:</span> <span class="s1">'up'</span> <span class="k">if</span> <span class="n">free_percent</span> <span class="o">></span> <span class="mi">10</span> <span class="k">else</span> <span class="s1">'warning'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'free_percent'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">free_percent</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'free_gb'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">stat</span><span class="o">.</span><span class="n">free</span> <span class="o">/</span> <span class="p">(</span><span class="mi">1024</span><span class="o">**</span><span class="mi">3</span><span class="p">),</span> <span class="mi">2</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="k">if</span> <span class="n">free_percent</span> <span class="o"><</span> <span class="mi">10</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'status'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'degraded'</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'checks'</span><span class="p">][</span><span class="s1">'disk'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'status'</span><span class="p">:</span> <span class="s1">'unknown'</span><span class="p">,</span> <span class="s1">'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></span><span class="line"><span class="cl"> <span class="c1"># Check replication lag (if applicable)</span>
</span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">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">'quic://geode:3141'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s1">'SHOW REPLICATION STATUS'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">row</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span> <span class="k">else</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl"> <span class="n">lag_seconds</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="s1">'lag_seconds'</span><span class="p">]</span> <span class="k">if</span> <span class="n">row</span> <span class="k">else</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'checks'</span><span class="p">][</span><span class="s1">'replication'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'status'</span><span class="p">:</span> <span class="s1">'up'</span> <span class="k">if</span> <span class="n">lag_seconds</span> <span class="o"><</span> <span class="mi">10</span> <span class="k">else</span> <span class="s1">'warning'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'lag_seconds'</span><span class="p">:</span> <span class="n">lag_seconds</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">lag_seconds</span> <span class="o">></span> <span class="mi">60</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'status'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'degraded'</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span><span class="p">[</span><span class="s1">'checks'</span><span class="p">][</span><span class="s1">'replication'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'status'</span><span class="p">:</span> <span class="s1">'unknown'</span><span class="p">,</span> <span class="s1">'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></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">health</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Kubernetes liveness probe</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">liveness_probe</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Simple liveness check."""</span>
</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="kn">import</span> <span class="nn">geode_client</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">'quic://localhost:3141'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s1">'RETURN 1 AS ok'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span><span class="s1">'alive'</span><span class="p">:</span> <span class="kc">True</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span><span class="s1">'alive'</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Kubernetes readiness probe</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">readiness_probe</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Readiness check for load balancing."""</span>
</span></span><span class="line"><span class="cl"> <span class="n">health</span> <span class="o">=</span> <span class="k">await</span> <span class="n">check_geode_health</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span><span class="s1">'ready'</span><span class="p">:</span> <span class="n">health</span><span class="p">[</span><span class="s1">'status'</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'healthy'</span><span class="p">,</span> <span class="s1">'degraded'</span><span class="p">]}</span>
</span></span></code></pre></div>
<h4 id="capacity-planning-script" class="position-relative d-flex align-items-center group">
<span>Capacity Planning Script</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-script"
aria-haspopup="dialog"
aria-label="Share link: Capacity Planning Script">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">geode_client</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</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">analyze_capacity</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Analyze current capacity and project growth."""</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">'quic://localhost:3141'</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Current database size</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">conn</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"> SELECT database_size_bytes,
</span></span></span><span class="line"><span class="cl"><span class="s2"> wal_size_bytes,
</span></span></span><span class="line"><span class="cl"><span class="s2"> index_size_bytes
</span></span></span><span class="line"><span class="cl"><span class="s2"> FROM system_stats
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">stats</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span> <span class="k">else</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Query rate</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">conn</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"> SELECT COUNT(*) as query_count
</span></span></span><span class="line"><span class="cl"><span class="s2"> FROM metrics_history
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE timestamp > $start
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s1">'start'</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="mi">1</span><span class="p">)})</span>
</span></span><span class="line"><span class="cl"> <span class="n">query_stats</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span> <span class="k">else</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Connection usage</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">conn</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"> SELECT AVG(active_connections) as avg_connections,
</span></span></span><span class="line"><span class="cl"><span class="s2"> MAX(active_connections) as peak_connections
</span></span></span><span class="line"><span class="cl"><span class="s2"> FROM metrics_history
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE timestamp > $start
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s1">'start'</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)})</span>
</span></span><span class="line"><span class="cl"> <span class="n">conn_stats</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span> <span class="k">else</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Calculate projections</span>
</span></span><span class="line"><span class="cl"> <span class="n">current_size_gb</span> <span class="o">=</span> <span class="n">stats</span><span class="p">[</span><span class="s1">'database_size_bytes'</span><span class="p">]</span> <span class="o">/</span> <span class="p">(</span><span class="mi">1024</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">queries_per_hour</span> <span class="o">=</span> <span class="n">query_stats</span><span class="p">[</span><span class="s1">'query_count'</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"> <span class="n">queries_per_second</span> <span class="o">=</span> <span class="n">queries_per_hour</span> <span class="o">/</span> <span class="mi">3600</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">report</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'current_state'</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'database_size_gb'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">current_size_gb</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'wal_size_gb'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">stats</span><span class="p">[</span><span class="s1">'wal_size_bytes'</span><span class="p">]</span> <span class="o">/</span> <span class="p">(</span><span class="mi">1024</span><span class="o">**</span><span class="mi">3</span><span class="p">),</span> <span class="mi">2</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'index_size_gb'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">stats</span><span class="p">[</span><span class="s1">'index_size_bytes'</span><span class="p">]</span> <span class="o">/</span> <span class="p">(</span><span class="mi">1024</span><span class="o">**</span><span class="mi">3</span><span class="p">),</span> <span class="mi">2</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'queries_per_second'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">queries_per_second</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'avg_connections'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">conn_stats</span><span class="p">[</span><span class="s1">'avg_connections'</span><span class="p">],</span> <span class="mi">0</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'peak_connections'</span><span class="p">:</span> <span class="n">conn_stats</span><span class="p">[</span><span class="s1">'peak_connections'</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="s1">'projections_30_days'</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'estimated_size_gb'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">current_size_gb</span> <span class="o">*</span> <span class="mf">1.15</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="c1"># 15% growth</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'recommended_disk_gb'</span><span class="p">:</span> <span class="nb">round</span><span class="p">(</span><span class="n">current_size_gb</span> <span class="o">*</span> <span class="mf">1.15</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="c1"># 2x headroom</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'recommended_connections'</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">conn_stats</span><span class="p">[</span><span class="s1">'peak_connections'</span><span class="p">]</span> <span class="o">*</span> <span class="mf">1.5</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="s1">'recommendations'</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></span><span class="line"><span class="cl"> <span class="c1"># Generate recommendations</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">current_size_gb</span> <span class="o">></span> <span class="mi">500</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">report</span><span class="p">[</span><span class="s1">'recommendations'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'Consider partitioning large labels for better performance'</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">if</span> <span class="n">conn_stats</span><span class="p">[</span><span class="s1">'peak_connections'</span><span class="p">]</span> <span class="o">></span> <span class="mi">800</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">report</span><span class="p">[</span><span class="s1">'recommendations'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'Connection pool approaching limit - consider increasing max_connections'</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">if</span> <span class="n">queries_per_second</span> <span class="o">></span> <span class="mi">1000</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">report</span><span class="p">[</span><span class="s1">'recommendations'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'High query rate - consider read replicas for scaling'</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">report</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Run capacity analysis</span>
</span></span><span class="line"><span class="cl"><span class="n">report</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">analyze_capacity</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">"Capacity Report: </span><span class="si">{</span><span class="n">report</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
</span></span></code></pre></div>
<h3 id="best-practices" class="position-relative d-flex align-items-center group">
<span>Best Practices</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="best-practices"
aria-haspopup="dialog"
aria-label="Share link: Best Practices">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="monitoring" class="position-relative d-flex align-items-center group">
<span>Monitoring</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="monitoring"
aria-haspopup="dialog"
aria-label="Share link: Monitoring">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><ol>
<li><strong>Set Up Alerts</strong>: Configure alerts for critical metrics</li>
<li><strong>Monitor Trends</strong>: Track metrics over time to identify patterns</li>
<li><strong>Dashboard Creation</strong>: Build comprehensive Grafana dashboards</li>
<li><strong>Log Aggregation</strong>: Centralize logs for easy searching</li>
<li><strong>Regular Review</strong>: Review metrics weekly for anomalies</li>
</ol>
<h4 id="backup" class="position-relative d-flex align-items-center group">
<span>Backup</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="backup"
aria-haspopup="dialog"
aria-label="Share link: Backup">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><ol>
<li><strong>Automate Backups</strong>: Schedule automated backups daily</li>
<li><strong>Test Restores</strong>: Regularly test backup restoration</li>
<li><strong>Off-Site Storage</strong>: Store backups in different region/datacenter</li>
<li><strong>Verify Integrity</strong>: Always verify backup integrity</li>
<li><strong>Document Procedures</strong>: Maintain clear recovery procedures</li>
</ol>
<h4 id="performance" class="position-relative d-flex align-items-center group">
<span>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="performance"
aria-haspopup="dialog"
aria-label="Share link: 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><ol>
<li><strong>Establish Baselines</strong>: Define normal performance metrics</li>
<li><strong>Regular Profiling</strong>: Profile queries periodically</li>
<li><strong>Capacity Planning</strong>: Plan for growth 6-12 months ahead</li>
<li><strong>Index Maintenance</strong>: Regularly review and optimize indexes</li>
<li><strong>Resource Monitoring</strong>: Monitor CPU, memory, disk, network</li>
</ol>
<h4 id="operations" class="position-relative d-flex align-items-center group">
<span>Operations</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="operations"
aria-haspopup="dialog"
aria-label="Share link: Operations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><ol>
<li><strong>Runbooks</strong>: Maintain detailed operational runbooks</li>
<li><strong>Change Management</strong>: Use change control procedures</li>
<li><strong>Incident Response</strong>: Have clear incident response process</li>
<li><strong>Post-Mortems</strong>: Conduct blameless post-mortems</li>
<li><strong>Automation</strong>: Automate routine operational tasks</li>
</ol>
<h3 id="related-categories" class="position-relative d-flex align-items-center group">
<span>Related Categories</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-categories"
aria-haspopup="dialog"
aria-label="Share link: Related Categories">
<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="/categories/deployment-and-devops/"
>Deployment and DevOps</a>
- Deployment strategies</li>
<li><a
href="/categories/security/"
>Security</a>
- Security operations</li>
<li><a
href="/categories/performance/"
>Performance</a>
- Performance optimization</li>
<li><a
href="/categories/configuration/"
>Configuration</a>
- Configuration management</li>
</ul>
<h3 id="related-tags" class="position-relative d-flex align-items-center group">
<span>Related Tags</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-tags"
aria-haspopup="dialog"
aria-label="Share link: Related Tags">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><a
href="/tags/monitoring/"
>Monitoring</a>
- Monitoring systems</li>
<li><a
href="/tags/observability/"
>Observability</a>
- Observability practices</li>
<li><a
href="/tags/backup/"
>Backup</a>
- Backup strategies</li>
<li><a
href="/tags/troubleshooting/"
>Troubleshooting</a>
- Problem diagnosis</li>
<li><a
href="/tags/prometheus/"
>Prometheus</a>
- Prometheus integration</li>
<li><a
href="/tags/production/"
>Production</a>
- Production deployments</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><a
href="/docs/ops/"
>Operations Documentation</a>
- Complete operational documentation</li>
<li><a
href="/docs/ops/observability/"
>Observability</a>
- Setting up monitoring</li>
<li><a
href="/docs/guides/backup-automation/"
>Backup Automation</a>
- Backup procedures</li>
<li><a
href="/docs/guides/troubleshooting/"
>Troubleshooting</a>
- Problem resolution</li>
<li><a
href="/docs/query/performance-tuning/"
>Performance Tuning</a>
- Optimization guides</li>
</ul>
Related ArticlesDocs
9 min
Database Recovery Complete guide to database recovery procedures for Geode including crash recovery, point-in-time recovery, disaster recovery, and data restoration
Docs
7 min
Security Enterprise security features including encryption, authentication, authorization, and compliance for Geode
Docs
2 min
Deployment Production deployment patterns for Geode including standalone, distributed, and cloud-native architectures
Docs
5 min
Operations Operational guides for deploying, monitoring, and maintaining Geode in production environments
Docs
5 min
Operations Operational guides for deploying, managing, and maintaining Geode in production environments
Docs
13 min
Audit Logging and Compliance Comprehensive audit logging system in Geode with tamper-evident hash chains, RFC 5424 syslog integration, and enterprise compliance for SOX, PCI-DSS, …