<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<p>Audit logging in Geode provides comprehensive tracking of all database operations, creating an immutable record of who accessed what data, when they accessed it, and what changes they made. This capability is essential for security monitoring, compliance requirements, forensic analysis, and operational troubleshooting.</p>
<h3 id="overview-of-audit-logging" class="position-relative d-flex align-items-center group">
<span>Overview of Audit Logging</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="overview-of-audit-logging"
aria-haspopup="dialog"
aria-label="Share link: Overview of Audit Logging">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><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>Geode’s audit logging system captures detailed information about every database operation, including:</p>
<ul>
<li><strong>User Authentication</strong>: Login attempts, authentication failures, session creation and termination</li>
<li><strong>Query Execution</strong>: All GQL queries with parameters, execution time, and results metadata</li>
<li><strong>Data Modifications</strong>: INSERT, UPDATE, DELETE operations on nodes and relationships</li>
<li><strong>Schema Changes</strong>: Graph type definitions, constraint modifications, index creation</li>
<li><strong>Access Control</strong>: Permission checks, authorization failures, role changes</li>
<li><strong>Configuration Changes</strong>: Server settings, security policy updates, feature toggles</li>
<li><strong>Administrative Actions</strong>: User management, backup operations, maintenance tasks</li>
</ul>
<p>All audit events include:</p>
<ul>
<li>Timestamp with microsecond precision</li>
<li>User identity and session information</li>
<li>Client IP address and connection details</li>
<li>Operation type and affected resources</li>
<li>Success or failure status</li>
<li>Detailed error information for failures</li>
</ul>
<h3 id="enabling-audit-logging" class="position-relative d-flex align-items-center group">
<span>Enabling Audit Logging</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="enabling-audit-logging"
aria-haspopup="dialog"
aria-label="Share link: Enabling Audit Logging">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Audit logging is configured through server settings and can be enabled at various levels of granularity:</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"># Enable comprehensive audit logging</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-level<span class="o">=</span>comprehensive <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-file<span class="o">=</span>/var/log/geode/audit.log <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-format<span class="o">=</span>json
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Enable audit logging for specific operations only</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-level<span class="o">=</span>security <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-events<span class="o">=</span>auth,access,admin
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Configure audit log rotation</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-max-size<span class="o">=</span>100MB <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-max-files<span class="o">=</span><span class="m">10</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-compress<span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div>
<h4 id="audit-log-levels" class="position-relative d-flex align-items-center group">
<span>Audit Log Levels</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="audit-log-levels"
aria-haspopup="dialog"
aria-label="Share link: Audit Log Levels">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Comprehensive</strong>: Logs all database operations including queries, data modifications, schema changes, and administrative actions. Use for strict compliance environments.</p>
<p><strong>Security</strong>: Logs authentication, authorization, access control, and security-related events. Recommended for most production deployments.</p>
<p><strong>Compliance</strong>: Logs data access and modifications required for regulatory compliance (GDPR, HIPAA, SOC2). Optimized balance between detail and performance.</p>
<p><strong>Minimal</strong>: Logs only critical security events like authentication failures, authorization denials, and administrative actions.</p>
<h3 id="audit-log-format" class="position-relative d-flex align-items-center group">
<span>Audit Log Format</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="audit-log-format"
aria-haspopup="dialog"
aria-label="Share link: Audit Log Format">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Geode supports multiple audit log formats to integrate with existing security information and event management (SIEM) systems:</p>
<h4 id="json-format-recommended" class="position-relative d-flex align-items-center group">
<span>JSON Format (Recommended)</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="json-format-recommended"
aria-haspopup="dialog"
aria-label="Share link: JSON Format (Recommended)">
<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">"timestamp"</span><span class="p">:</span> <span class="s2">"2026-01-24T10:15:32.123456Z"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"event_type"</span><span class="p">:</span> <span class="s2">"query_execution"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"event_id"</span><span class="p">:</span> <span class="s2">"evt_9k2j8h3g7f6d5s4a"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"session_id"</span><span class="p">:</span> <span class="s2">"sess_abc123def456"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"user"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"username"</span><span class="p">:</span> <span class="s2">"[email protected]"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"roles"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"data_analyst"</span><span class="p">,</span> <span class="s2">"viewer"</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"ip_address"</span><span class="p">:</span> <span class="s2">"192.168.1.100"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"user_agent"</span><span class="p">:</span> <span class="s2">"geode-client-python/0.3.19"</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"operation"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"type"</span><span class="p">:</span> <span class="s2">"SELECT"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"query"</span><span class="p">:</span> <span class="s2">"MATCH (p:Person)-[:WORKS_AT]->(c:Company) WHERE c.industry = $industry RETURN p.name, c.name"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"parameters"</span><span class="p">:</span> <span class="p">{</span><span class="nt">"industry"</span><span class="p">:</span> <span class="s2">"technology"</span><span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"execution_time_ms"</span><span class="p">:</span> <span class="mi">45</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"rows_returned"</span><span class="p">:</span> <span class="mi">127</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"bytes_transferred"</span><span class="p">:</span> <span class="mi">8192</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"result"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"rows_affected"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"error"</span><span class="p">:</span> <span class="kc">null</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"metadata"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"graph"</span><span class="p">:</span> <span class="s2">"corporate_network"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"transaction_id"</span><span class="p">:</span> <span class="s2">"txn_xyz789"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"query_plan_hash"</span><span class="p">:</span> <span class="s2">"hash_abc123"</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>
<h4 id="syslog-format" class="position-relative d-flex align-items-center group">
<span>Syslog Format</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="syslog-format"
aria-haspopup="dialog"
aria-label="Share link: Syslog Format">
<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>For integration with traditional logging infrastructure:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Jan 24 10:15:32 geode-server audit[12345]: event=query_execution [email protected] session=sess_abc123 query="MATCH (p:Person)..." status=success rows=127 duration_ms=45
</span></span></code></pre></div>
<h4 id="common-event-format-cef" class="position-relative d-flex align-items-center group">
<span>Common Event Format (CEF)</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="common-event-format-cef"
aria-haspopup="dialog"
aria-label="Share link: Common Event Format (CEF)">
<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>For SIEM systems that support CEF:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">CEF:0|CodePros|Geode|0.2.18|query_execution|Query Executed|5|src=192.168.1.100 [email protected] act=SELECT outcome=success rt=Jan 24 2026 10:15:32 cs1=sess_abc123 cs1Label=SessionID
</span></span></code></pre></div>
<h3 id="compliance-requirements" class="position-relative d-flex align-items-center group">
<span>Compliance Requirements</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="compliance-requirements"
aria-haspopup="dialog"
aria-label="Share link: Compliance Requirements">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p>Geode’s audit logging helps organizations meet various regulatory compliance requirements:</p>
<h4 id="gdpr-compliance" class="position-relative d-flex align-items-center group">
<span>GDPR Compliance</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="gdpr-compliance"
aria-haspopup="dialog"
aria-label="Share link: GDPR Compliance">
<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>The General Data Protection Regulation requires organizations to maintain records of data processing activities:</p>
<ul>
<li><strong>Article 30 (Records of Processing)</strong>: Audit logs document all personal data access and modifications</li>
<li><strong>Article 32 (Security of Processing)</strong>: Logs provide evidence of security measures and breach detection</li>
<li><strong>Article 33 (Breach Notification)</strong>: Detailed logs enable rapid breach assessment and reporting</li>
</ul>
<p>Example GDPR-focused audit configuration:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">geode serve --audit-log-level<span class="o">=</span>compliance <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-events<span class="o">=</span>data_access,data_modification,data_export <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-retention-days<span class="o">=</span><span class="m">2555</span> <span class="c1"># 7 years as recommended</span>
</span></span><span class="line"><span class="cl"> --audit-include-pii-metadata<span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div>
<h4 id="hipaa-compliance" class="position-relative d-flex align-items-center group">
<span>HIPAA Compliance</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="hipaa-compliance"
aria-haspopup="dialog"
aria-label="Share link: HIPAA Compliance">
<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>The Health Insurance Portability and Accountability Act requires covered entities to maintain audit logs:</p>
<ul>
<li><strong>164.308(a)(1)(ii)(D)</strong>: Information system activity review</li>
<li><strong>164.312(b)</strong>: Audit controls to record and examine system activity</li>
<li><strong>164.312(d)</strong>: Person or entity authentication</li>
</ul>
<p>HIPAA-compliant audit logging configuration:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">geode serve --audit-log-level<span class="o">=</span>comprehensive <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-retention-days<span class="o">=</span><span class="m">2555</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-events<span class="o">=</span>all <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-phi-access<span class="o">=</span><span class="nb">true</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-minimum-necessary<span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div>
<h4 id="soc-2-compliance" class="position-relative d-flex align-items-center group">
<span>SOC 2 Compliance</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="soc-2-compliance"
aria-haspopup="dialog"
aria-label="Share link: SOC 2 Compliance">
<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>Service Organization Control 2 requires detailed logging for security monitoring:</p>
<ul>
<li><strong>CC6.1</strong>: Logical and physical access controls</li>
<li><strong>CC6.2</strong>: Prior to issuing system credentials</li>
<li><strong>CC7.2</strong>: System monitoring to detect security breaches</li>
</ul>
<p>SOC 2 audit configuration:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">geode serve --audit-log-level<span class="o">=</span>security <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-events<span class="o">=</span>auth,access,config,admin <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-immutable<span class="o">=</span><span class="nb">true</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-encryption<span class="o">=</span>aes-256-gcm
</span></span></code></pre></div>
<h3 id="query-audit-examples" class="position-relative d-flex align-items-center group">
<span>Query Audit 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="query-audit-examples"
aria-haspopup="dialog"
aria-label="Share link: Query Audit 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><p>Track specific query patterns for compliance or security monitoring:</p>
<h4 id="tracking-personal-data-access" class="position-relative d-flex align-items-center group">
<span>Tracking Personal Data Access</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="tracking-personal-data-access"
aria-haspopup="dialog"
aria-label="Share link: Tracking Personal Data Access">
<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-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">All</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="py">accessing</span><span class="w"> </span><span class="py">Person</span><span class="w"> </span><span class="py">nodes</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">automatically</span><span class="w"> </span><span class="py">logged</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">email</span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nc">user</span><span class="nd">@example</span><span class="err">.</span><span class="py">com</span><span class="err">'</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">ssn</span><span class="p">,</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">medical_records</span><span class="err">;</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="err">--</span><span class="w"> </span><span class="py">Audit</span><span class="w"> </span><span class="py">log</span><span class="w"> </span><span class="py">entry</span><span class="w"> </span><span class="py">includes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Full</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">text</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Parameters</span><span class="w"> </span><span class="py">used</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Rows</span><span class="w"> </span><span class="py">returned</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Sensitive</span><span class="w"> </span><span class="py">fields</span><span class="w"> </span><span class="py">accessed</span><span class="w"> </span><span class="p">(</span><span class="py">ssn</span><span class="p">,</span><span class="w"> </span><span class="py">medical_records</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">User</span><span class="w"> </span><span class="py">who</span><span class="w"> </span><span class="py">executed</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="kd">query</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Timestamp</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">session</span><span class="w"> </span><span class="py">information</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="monitoring-data-modifications" class="position-relative d-flex align-items-center group">
<span>Monitoring Data Modifications</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-data-modifications"
aria-haspopup="dialog"
aria-label="Share link: Monitoring Data Modifications">
<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-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Data</span><span class="w"> </span><span class="py">modifications</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">logged</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">before</span><span class="err">/</span><span class="py">after</span><span class="w"> </span><span class="py">values</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$person_id</span><span class="p">})</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nc">SET</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">salary</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nv">$new_salary</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">;</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="err">--</span><span class="w"> </span><span class="py">Audit</span><span class="w"> </span><span class="py">log</span><span class="w"> </span><span class="py">captures</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Original</span><span class="w"> </span><span class="py">salary</span><span class="w"> </span><span class="py">value</span><span class="p">:</span><span class="w"> </span><span class="nv">$85000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">New</span><span class="w"> </span><span class="py">salary</span><span class="w"> </span><span class="py">value</span><span class="p">:</span><span class="w"> </span><span class="nv">$92000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">User</span><span class="w"> </span><span class="py">who</span><span class="w"> </span><span class="py">made</span><span class="w"> </span><span class="py">the</span><span class="w"> </span><span class="py">change</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Timestamp</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">justification</span><span class="w"> </span><span class="p">(</span><span class="py">if</span><span class="w"> </span><span class="py">provided</span><span class="p">)</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="detecting-unauthorized-access-attempts" class="position-relative d-flex align-items-center group">
<span>Detecting Unauthorized Access Attempts</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="detecting-unauthorized-access-attempts"
aria-haspopup="dialog"
aria-label="Share link: Detecting Unauthorized Access Attempts">
<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-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Failed</span><span class="w"> </span><span class="py">authorization</span><span class="w"> </span><span class="py">attempts</span><span class="w"> </span><span class="py">are</span><span class="w"> </span><span class="py">logged</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">department</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">'</span><span class="py">Executive</span><span class="err">'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">salary</span><span class="err">;</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="err">--</span><span class="w"> </span><span class="py">If</span><span class="w"> </span><span class="py">user</span><span class="w"> </span><span class="py">lacks</span><span class="w"> </span><span class="py">permission</span><span class="p">,</span><span class="w"> </span><span class="py">audit</span><span class="w"> </span><span class="py">log</span><span class="w"> </span><span class="py">shows</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Attempted</span><span class="w"> </span><span class="kd">query</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">User</span><span class="w"> </span><span class="py">identity</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Required</span><span class="w"> </span><span class="py">permissions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">'</span><span class="nc">read</span><span class="p">:</span><span class="nc">executive_data</span><span class="err">'</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Actual</span><span class="w"> </span><span class="py">permissions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">'</span><span class="nc">read</span><span class="p">:</span><span class="nc">general_data</span><span class="err">'</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Denial</span><span class="w"> </span><span class="py">reason</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">timestamp</span><span class="w">
</span></span></span></code></pre></div>
<h3 id="audit-log-management" class="position-relative d-flex align-items-center group">
<span>Audit Log 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="audit-log-management"
aria-haspopup="dialog"
aria-label="Share link: Audit Log 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>
</h3>
<h4 id="log-rotation-and-retention" class="position-relative d-flex align-items-center group">
<span>Log Rotation and Retention</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="log-rotation-and-retention"
aria-haspopup="dialog"
aria-label="Share link: Log Rotation and Retention">
<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 automatic log rotation to prevent disk space issues:</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"># Rotate logs daily, keep 90 days</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-rotate<span class="o">=</span>daily <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-retention-days<span class="o">=</span><span class="m">90</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-compress<span class="o">=</span>gzip
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Rotate when logs reach size limit</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-max-size<span class="o">=</span>500MB <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-max-files<span class="o">=</span><span class="m">20</span>
</span></span></code></pre></div>
<h4 id="secure-log-storage" class="position-relative d-flex align-items-center group">
<span>Secure Log Storage</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="secure-log-storage"
aria-haspopup="dialog"
aria-label="Share link: Secure Log Storage">
<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>Protect audit logs from tampering:</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"># Enable log encryption and integrity checking</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-encryption<span class="o">=</span>aes-256-gcm <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-signing<span class="o">=</span><span class="nb">true</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-key-file<span class="o">=</span>/etc/geode/audit-key.pem
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Store logs on write-once storage</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-file<span class="o">=</span>/mnt/worm-storage/geode-audit.log <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-immutable<span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div>
<h4 id="log-analysis-and-monitoring" class="position-relative d-flex align-items-center group">
<span>Log Analysis and 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="log-analysis-and-monitoring"
aria-haspopup="dialog"
aria-label="Share link: Log Analysis and 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><p>Query audit logs for security monitoring:</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"># Search for failed authentication attempts</span>
</span></span><span class="line"><span class="cl">jq <span class="s1">'select(.event_type == "authentication" and .result.status == "failure")'</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> /var/log/geode/audit.log
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Find queries accessing sensitive data</span>
</span></span><span class="line"><span class="cl">jq <span class="s1">'select(.operation.query | contains("ssn") or contains("medical"))'</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> /var/log/geode/audit.log
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Identify unusual access patterns</span>
</span></span><span class="line"><span class="cl">jq <span class="s1">'select(.operation.rows_returned > 10000)'</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> /var/log/geode/audit.log <span class="p">|</span> jq -s <span class="s1">'group_by(.user.username)'</span>
</span></span></code></pre></div>
<h3 id="integration-with-siem-systems" class="position-relative d-flex align-items-center group">
<span>Integration with SIEM Systems</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="integration-with-siem-systems"
aria-haspopup="dialog"
aria-label="Share link: Integration with SIEM Systems">
<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="splunk-integration" class="position-relative d-flex align-items-center group">
<span>Splunk 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="splunk-integration"
aria-haspopup="dialog"
aria-label="Share link: Splunk Integration">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Forward audit logs to Splunk for centralized monitoring:</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"># Configure Splunk forwarder</span>
</span></span><span class="line"><span class="cl">cat > /opt/splunkforwarder/etc/system/local/inputs.conf <span class="s"><<EOF
</span></span></span><span class="line"><span class="cl"><span class="s">[monitor:///var/log/geode/audit.log]
</span></span></span><span class="line"><span class="cl"><span class="s">disabled = false
</span></span></span><span class="line"><span class="cl"><span class="s">sourcetype = geode:audit:json
</span></span></span><span class="line"><span class="cl"><span class="s">index = database_audit
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span></code></pre></div>
<h4 id="elasticsearch-integration" class="position-relative d-flex align-items-center group">
<span>Elasticsearch 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="elasticsearch-integration"
aria-haspopup="dialog"
aria-label="Share link: Elasticsearch Integration">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Send audit logs to Elasticsearch:</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"># Use Filebeat to ship logs</span>
</span></span><span class="line"><span class="cl">cat > /etc/filebeat/filebeat.yml <span class="s"><<EOF
</span></span></span><span class="line"><span class="cl"><span class="s">filebeat.inputs:
</span></span></span><span class="line"><span class="cl"><span class="s">- type: log
</span></span></span><span class="line"><span class="cl"><span class="s"> enabled: true
</span></span></span><span class="line"><span class="cl"><span class="s"> paths:
</span></span></span><span class="line"><span class="cl"><span class="s"> - /var/log/geode/audit.log
</span></span></span><span class="line"><span class="cl"><span class="s"> json.keys_under_root: true
</span></span></span><span class="line"><span class="cl"><span class="s"> json.add_error_key: true
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">output.elasticsearch:
</span></span></span><span class="line"><span class="cl"><span class="s"> hosts: ["elasticsearch:9200"]
</span></span></span><span class="line"><span class="cl"><span class="s"> index: "geode-audit-%{+yyyy.MM.dd}"
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span></code></pre></div>
<h4 id="datadog-integration" class="position-relative d-flex align-items-center group">
<span>Datadog 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="datadog-integration"
aria-haspopup="dialog"
aria-label="Share link: Datadog Integration">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Stream audit events to Datadog:</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"># Configure Datadog agent</span>
</span></span><span class="line"><span class="cl">cat > /etc/datadog-agent/conf.d/geode.d/conf.yaml <span class="s"><<EOF
</span></span></span><span class="line"><span class="cl"><span class="s">logs:
</span></span></span><span class="line"><span class="cl"><span class="s"> - type: file
</span></span></span><span class="line"><span class="cl"><span class="s"> path: /var/log/geode/audit.log
</span></span></span><span class="line"><span class="cl"><span class="s"> service: geode
</span></span></span><span class="line"><span class="cl"><span class="s"> source: geode-audit
</span></span></span><span class="line"><span class="cl"><span class="s"> sourcecategory: database
</span></span></span><span class="line"><span class="cl"><span class="s"> tags:
</span></span></span><span class="line"><span class="cl"><span class="s"> - env:production
</span></span></span><span class="line"><span class="cl"><span class="s"> - database:graph
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span></code></pre></div>
<h3 id="troubleshooting-audit-logging" class="position-relative d-flex align-items-center group">
<span>Troubleshooting Audit Logging</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="troubleshooting-audit-logging"
aria-haspopup="dialog"
aria-label="Share link: Troubleshooting Audit Logging">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="missing-audit-entries" class="position-relative d-flex align-items-center group">
<span>Missing Audit Entries</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="missing-audit-entries"
aria-haspopup="dialog"
aria-label="Share link: Missing Audit Entries">
<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>If expected events are not appearing in audit logs:</p>
<ol>
<li><strong>Check audit level</strong>: Ensure the event type is included in your configured audit level</li>
<li><strong>Verify file permissions</strong>: Audit log file must be writable by the Geode process</li>
<li><strong>Check disk space</strong>: Insufficient disk space prevents log writes</li>
<li><strong>Review filters</strong>: Event filters may be excluding the events you expect</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Enable verbose audit logging for debugging</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-level<span class="o">=</span>comprehensive --audit-debug<span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div>
<h4 id="performance-impact" class="position-relative d-flex align-items-center group">
<span>Performance Impact</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-impact"
aria-haspopup="dialog"
aria-label="Share link: Performance Impact">
<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>Audit logging has minimal performance impact, but comprehensive logging can affect high-throughput systems:</p>
<ul>
<li><strong>Async logging</strong>: Logs are written asynchronously to avoid blocking queries</li>
<li><strong>Buffering</strong>: Events are buffered in memory before writing to disk</li>
<li><strong>Batch writes</strong>: Multiple events written in single I/O operations</li>
</ul>
<p>Optimize audit logging performance:</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"># Configure larger buffer for high-throughput systems</span>
</span></span><span class="line"><span class="cl">geode serve --audit-log-buffer-size<span class="o">=</span>10MB <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span> --audit-log-flush-interval<span class="o">=</span>5s
</span></span></code></pre></div>
<h4 id="log-analysis-performance" class="position-relative d-flex align-items-center group">
<span>Log Analysis 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="log-analysis-performance"
aria-haspopup="dialog"
aria-label="Share link: Log Analysis 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>For large audit logs, use indexed search tools:</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"># Index logs with lnav for fast searching</span>
</span></span><span class="line"><span class="cl">lnav /var/log/geode/audit.log
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Use jq with streaming for large files</span>
</span></span><span class="line"><span class="cl">cat audit.log <span class="p">|</span> jq -c <span class="s1">'select(.user.username == "[email protected]")'</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><ol>
<li><strong>Enable audit logging in production</strong>: Always run production systems with at least security-level auditing</li>
<li><strong>Protect audit logs</strong>: Store logs on separate storage with restricted access and encryption</li>
<li><strong>Regular review</strong>: Implement automated monitoring and regular manual review of audit logs</li>
<li><strong>Retention policies</strong>: Align retention periods with compliance requirements (typically 7 years)</li>
<li><strong>Test log integrity</strong>: Regularly verify that audit logs are being written correctly and are tamper-proof</li>
<li><strong>Document procedures</strong>: Maintain clear procedures for accessing and analyzing audit logs</li>
<li><strong>Monitor log volume</strong>: Set up alerts for unusual log volume that might indicate an attack or misconfiguration</li>
</ol>
<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/compliance/"
>Compliance</a>
- Regulatory compliance frameworks (GDPR, HIPAA, SOC2)</li>
<li><a
href="/tags/row-level-security/"
>Row-Level Security</a>
- Fine-grained access control with audit integration</li>
<li><a
href="/tags/governance/"
>Governance</a>
- Data governance policies and enforcement</li>
<li><a
href="/tags/encryption/"
>Encryption</a>
- Data encryption at rest and in transit</li>
<li><a
href="/docs/security/overview/"
>Security Overview</a>
- Security documentation</li>
</ul>
Related Articles
Security and Compliance Guide
Configure Geode authentication and policies, enable row-level security, use TDE/FLE with KMS integration, and deploy tamper-evident audit logging
Monitoring and Telemetry
Monitor Geode with health checks and Prometheus metrics, enable optional paging telemetry, and configure tamper-evident audit logging with tracing IDs