# EPS Calculator: Estimate Your EPS, Log Volume &amp; Storage

:root{--lm-accent:rgb(15,15,215);--lm-bg:#f5f5f5;--lm-text:#041c35;--lm-muted:#6b7280;--lm-line:#e5e7eb}
*{box-sizing:border-box}.lm-estimator{font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;padding:64px 16px 80px;background:var(--lm-bg);color:var(--lm-text)}
.lm-inner{max-width:1120px;margin:0 auto}.lm-header{text-align:center;margin-bottom:28px}.lm-eyebrow{font-size:.875rem;font-weight:700;text-transform:uppercase;color:var(--lm-accent);margin-bottom:8px}.lm-title{font-family:Sora,sans-serif;font-size:clamp(1.75rem,4vw,3rem);line-height:1.12;margin:0 0 16px}.lm-subtitle{max-width:780px;margin:0 auto;font-size:1.05rem;line-height:1.65}
.lm-top-toggle{display:flex;justify-content:center;margin:0 0 28px}.lm-toggle{display:inline-flex;padding:4px;gap:4px;border-radius:999px;background:rgba(15,15,215,.08)}.lm-toggle button{border:0;background:transparent;padding:10px 18px;border-radius:999px;cursor:pointer;font-weight:600;color:#3f4650}.lm-toggle button.is-active{background:var(--lm-accent);color:#fff;box-shadow:0 7px 20px rgba(15,15,215,.3)}
.lm-grid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(320px,1fr);gap:30px;align-items:start}.lm-card{background:#fff;border-radius:28px;padding:28px;box-shadow:0 18px 45px rgba(15,23,42,.08)}.lm-card h3{font-size:1.15rem;margin:0 0 18px}.lm-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.lm-field{padding:15px;border-radius:18px;background:#f9fafb}.lm-field label{display:block;font-size:13px;font-weight:700;margin-bottom:7px}.lm-field-note{font-size:11px;line-height:1.45;color:#8a919d;margin-top:6px}.lm-input,.lm-select{width:100%;border:1px solid var(--lm-line);border-radius:999px;padding:10px 12px;background:#fff;font-size:14px;outline:0}.lm-input{text-align:right}.lm-input:focus,.lm-select:focus{border-color:var(--lm-accent);box-shadow:0 0 0 2px rgba(15,15,215,.12)}
.lm-table-wrap{overflow-x:auto}.lm-table{width:100%;border-collapse:collapse;font-size:13px}.lm-table th{text-align:left;color:var(--lm-muted);font-size:12px;padding:7px 5px;border-bottom:1px solid var(--lm-line)}.lm-table td{padding:6px 5px;vertical-align:middle}.lm-table .num{text-align:right}.lm-group td{padding-top:14px;font-size:11px;font-weight:700;text-transform:uppercase;color:#9ca3af}.lm-badge-eps{display:inline-flex;padding:3px 8px;border-radius:999px;background:rgba(15,15,215,.08);color:var(--lm-accent);font-size:11px}.lm-small-input{width:84px;border:1px solid var(--lm-line);border-radius:999px;padding:7px 9px;text-align:right}.lm-settings{border-top:1px solid var(--lm-line);margin-top:18px;padding-top:18px}.lm-settings-title{font-weight:700;margin-bottom:13px}.lm-hidden{display:none!important}
.lm-output-head{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:14px}.lm-output-head h3{margin:0}.lm-live{padding:4px 10px;border-radius:999px;background:rgba(15,15,215,.08);color:var(--lm-accent);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}.lm-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.lm-metric{background:#f9fafb;border-radius:16px;padding:12px}.lm-metric-label{font-size:12px;color:var(--lm-muted);margin-bottom:4px}.lm-metric-value{font-size:15px;font-weight:700}.lm-total{margin:18px 0;padding:22px;border:1px solid var(--lm-line);border-radius:22px;background:radial-gradient(circle at top left,rgba(15,15,215,.12),#fff 48%)}.lm-total-label{font-size:13px;color:var(--lm-muted);margin-bottom:5px}.lm-total-value{font-size:clamp(2rem,5vw,3.1rem);font-weight:800;line-height:1.1}.lm-btn{width:100%;display:inline-flex;justify-content:center;align-items:center;border:0;border-radius:999px;padding:12px 18px;background:var(--lm-accent);color:#fff;font-weight:700;cursor:pointer;box-shadow:0 12px 30px rgba(15,15,215,.3)}.lm-btn:hover{transform:translateY(-1px)}.lm-download-note,.lm-footnote{font-size:11px;color:#8a919d;line-height:1.55}.lm-download-note{margin-top:9px}.lm-footnote{margin-top:16px;padding-top:14px;border-top:1px solid var(--lm-line)}
@media(max-width:900px){.lm-grid{grid-template-columns:1fr}}@media(max-width:620px){.lm-estimator{padding:44px 12px 60px}.lm-card{padding:20px;border-radius:22px}.lm-form-grid,.lm-metrics{grid-template-columns:1fr}.lm-toggle{width:100%}.lm-toggle button{flex:1;padding:9px 10px;font-size:12px}}
Free Tool

# Log Storage &amp; EPS Calculator

Estimate log volume and required storage from events per second (EPS), retention and average event size. The result is an indicative capacity-planning estimate.

Estimate modeSimple estimateAdvanced estimate





### Environment

EmployeesUsed to estimate workstation and identity-related events.



ServersApplication, database, file and infrastructure servers.



Network &amp; security devicesFirewalls, switches, routers, VPN gateways, IDS/IPS and similar devices.



Retentiondays





### Data sources

Group / systemAvg EPS\# of sourcesWindowsWindows Server30 EPSWindows Active Directory100 EPSWindows Desktop2 EPSUNIX / LinuxUNIX / Linux Servers10 EPSSecurityFirewall zones – internal200 EPSFirewall zones – external400 EPSIPS5 EPSVulnerability scanners1 EPSVPN5 EPSAntivirus30 EPSInfrastructureRouters2 EPSSwitch / SCCM1 EPSProxy server300 EPSWi-Fi AP5 EPSLoad balancer5 EPSServersDatabase servers5 EPSWeb servers5 EPSMail servers40 EPSOtherOther sources (total EPS)

Calculation settings

Average event sizebytes

700 bytes is a commonly used planning assumption.



Retentiondays

Total storage equals estimated daily volume multiplied by retention.









### Estimated log volume

Live estimate

Estimated EPS

0



Volume per day

0 GB



Retention

30 days



Estimated storage

0 GB





Estimated storage

0 GB



Download calculation (.xlsx)The workbook contains the entered assumptions, source breakdown and calculated results.

This estimate uses average event rates and should be treated as a capacity-planning guideline, not a guaranteed storage requirement.






(function(){
'use strict';
const BYTES_PER_GB=1073741824, SIMPLE_EVENT_SIZE=700, EMPLOYEE_EPS=2, SERVER_EPS=20, DEVICE_EPS=40;
const text={'file': 'logmanager-eps-calculation-en.xlsx', 'sheet': 'EPS Calculation', 'generated': 'Generated', 'section_inputs': 'INPUTS', 'section_breakdown': 'SOURCE BREAKDOWN', 'section_results': 'RESULTS', 'parameter': 'Parameter', 'value': 'Value', 'source': 'Source', 'count': 'Count', 'eps_each': 'EPS per source', 'total_eps': 'Total EPS', 'mode_value_simple': 'Simple estimate', 'mode_value_advanced': 'Advanced estimate', 'employees': 'Employees', 'servers': 'Servers', 'devices': 'Network & security devices', 'retention': 'Retention', 'days': 'days', 'event_size': 'Average event size', 'bytes': 'bytes', 'other_eps': 'Other sources (total EPS)', 'eps': 'Estimated EPS', 'gb_day': 'GB per day', 'gb_month': 'GB per 30 days', 'total_gb': 'Total storage (GB)', 'total_tb': 'Total storage (TB)', 'load_error': 'The spreadsheet library could not be loaded. Please check the page connection and try again.'};
let mode='simple', state={};
const $=id=>document.getElementById(id), num=el=>Math.max(0,parseFloat(el.value)||0);
const modeButtons=[...document.querySelectorAll('.lm-mode-btn')], sourceInputs=[...document.querySelectorAll('.lm-source-input')];
function number(v,d=0){return Number(v).toLocaleString('en-GB',{minimumFractionDigits:d,maximumFractionDigits:d})}
function storage(gb){if(!isFinite(gb)||gb<=0)return '0 GB';return gb>=1024?number(gb/1024,2)+' TB':number(gb,2)+' GB'}
function calculate(){
 let eps=0,eventSize=SIMPLE_EVENT_SIZE,retention=30,breakdown=[];
 if(mode==='simple'){
  const employees=num($('lm-employees')),servers=num($('lm-servers')),devices=num($('lm-devices'));retention=Math.max(1,num($('lm-simple-retention'))||30);
  breakdown=[[text.employees,employees,EMPLOYEE_EPS,employees*EMPLOYEE_EPS],[text.servers,servers,SERVER_EPS,servers*SERVER_EPS],[text.devices,devices,DEVICE_EPS,devices*DEVICE_EPS]];eps=breakdown.reduce((s,r)=>s+r[3],0);
  state={mode,employees,servers,devices,eventSize,retention,breakdown};
 }else{
  sourceInputs.forEach(input=>{const count=num(input),each=parseFloat(input.dataset.eps)||0,total=count*each;if(count>0)breakdown.push([input.dataset.label,count,each,total]);eps+=total});
  const other=num($('lm-other-eps'));if(other>0)breakdown.push([text.other_eps,'',1,other]);eps+=other;eventSize=Math.max(1,num($('lm-event-size'))||700);retention=Math.max(1,num($('lm-advanced-retention'))||30);
  state={mode,eventSize,retention,other,breakdown};
 }
 const gbDay=eps*eventSize*86400/BYTES_PER_GB,totalGb=gbDay*retention;
 Object.assign(state,{eps,gbDay,gbMonth:gbDay*30,totalGb,totalTb:totalGb/1024});
 $('lm-eps-display').textContent=number(eps,0);$('lm-day-display').textContent=number(gbDay,2)+' GB';$('lm-retention-display').textContent=number(retention,0)+' '+text.days;$('lm-storage-small').textContent=storage(totalGb);$('lm-storage-display').textContent=storage(totalGb);
}
function setMode(next){mode=next;modeButtons.forEach(b=>b.classList.toggle('is-active',b.dataset.mode===mode));$('lm-simple-panel').classList.toggle('lm-hidden',mode!=='simple');$('lm-advanced-panel').classList.toggle('lm-hidden',mode!=='advanced');calculate()}
function downloadXlsx(){
 if(typeof XLSX==='undefined'){alert(text.load_error);return}
 calculate();const rows=[];rows.push(['Logmanager EPS Calculator']);rows.push([text.generated,new Date().toLocaleString('en-GB')]);rows.push([]);rows.push([text.section_inputs]);rows.push([text.parameter,text.value]);rows.push([text.parameter==='Parameter'?'Estimate mode':'Režim odhadu',state.mode==='simple'?text.mode_value_simple:text.mode_value_advanced]);
 if(state.mode==='simple'){rows.push([text.employees,state.employees]);rows.push([text.servers,state.servers]);rows.push([text.devices,state.devices])}
 rows.push([text.event_size,state.eventSize+' '+text.bytes]);rows.push([text.retention,state.retention+' '+text.days]);rows.push([]);rows.push([text.section_breakdown]);rows.push([text.source,text.count,text.eps_each,text.total_eps]);state.breakdown.forEach(r=>rows.push(r));rows.push([]);rows.push([text.section_results]);rows.push([text.parameter,text.value]);rows.push([text.eps,state.eps]);rows.push([text.gb_day,state.gbDay]);rows.push([text.gb_month,state.gbMonth]);rows.push([text.total_gb,state.totalGb]);rows.push([text.total_tb,state.totalTb]);
 const ws=XLSX.utils.aoa_to_sheet(rows);ws['!cols']=[{wch:38},{wch:20},{wch:18},{wch:18}];
 const wb=XLSX.utils.book_new();XLSX.utils.book_append_sheet(wb,ws,text.sheet);XLSX.writeFile(wb,text.file,{compression:true});
}
modeButtons.forEach(b=>b.addEventListener('click',()=>setMode(b.dataset.mode)));document.querySelectorAll('input,select').forEach(el=>el.addEventListener('input',calculate));$('lm-download').addEventListener('click',downloadXlsx);calculate();
})();
