Tüm yazılar
·7 dk okuma·ShamashAi Ekibi

ShamashAi Usage & Capacity: Lisans Yenileme ve Disk Doluluk Öngörüsü

ShamashAi Operations modülü, lisans limitine ne kadar yaklaştığınızı, disk kapasitesinin ne zaman dolacağını ve EPS trendlerini tek endpoint'ten gösterir. Yenileme zamanı gelmeden 30 gün önce alarm üretir.

Cuma akşamı 18:45: Mali işler aradı

Mali işler müdürü cep telefonundan arıyor: "Lisans 15 Kasım'da bitiyor, satıcı yenileme için kaç cihaz sayısını yazacağımızı soruyor. Şu an kaç cihaz aktif?"

Açıyorsun ShamashAi Admin Panel → Sites → elle sayıyorsun 127 branch office, her branch'te 3-8 cihaz, merkez DC'de 45 sunucu, artı yeni açılan Kayseri deposu... hesap makinesi. Sonra satıcı ikinci soruyu soruyor: "Geçen yıl ortalama günlük event hacminiz 2.3 milyon idi, şimdi ne kadar?" — bu sefer hiç bilmiyorsun.

Bu sahne Türkiye'deki yüzlerce orta ölçekli firmada her lisans yenileme döneminde tekrar ediyor. ShamashAi Operations modülü, bu soruları 200 ms'den kısa sürede cevaplayacak GET /operations/usage-capacity endpoint'i sağlar. Bu yazıda, ShamashAi'nin lisans büyüme ve disk öngörüsü mekanizmasını, döndürdüğü metrikleri ve hangi limitlerde çalıştığını inceleyeceğiz.

Neden önemli: Lisans ve disk bütçe kalemlerinin en büyük sürpriz kaynağı

Orta ölçekli Türk firmaları (100-500 cihaz) genellikle SIEM lisansını yıllık sabit bütçe kalemi olarak görür. Ancak gerçekte:

  • Cihaz sayısı organik büyür: yeni şube, yeni sunucu, yeni firewall — altı ay içinde +%20 artış yaşayan firmalar yaygın.
  • Retention artışı disk ihtiyacını 3x yapabilir: eski 90 gün retention'dan ISO 27001:2022 Annex A.8.15 gereği 1 yıla çıkan firma, disk ihtiyacını 4 kat artırır.
  • Event hacmi mevsimsel dalgalanır: e-ticaret firmaları Kasım-Aralık'ta 3-4x event görür, turizm firmaları yaz aylarında pik yapar.
Bu üç faktör birleşince, lisans yenileme zamanı gelmeden 2 hafta önce "mevcut lisans 250 cihaz, ama 312 cihaz var" veya "disk %94 dolu, haftaya retention otomatik kısalacak" gibi acil senaryolar ortaya çıkar.

ShamashAi Usage & Capacity modülü, bu sürprizleri 30 gün önceden görünür hale getirir.

GET /operations/usage-capacity: Tek endpoint, dört kritik metrik

ShamashAi API'si, tüm operasyonel kapasite metriklerini tek bir endpoint'ten sunar:

javascript // Node.js Fastify route handler const response = await fetch('https://shamashai.local:9443/operations/usage-capacity', { method: 'GET', headers: { 'Authorization': Bearer ${process.env.SHAMASHAI_API_TOKEN}, 'Accept': 'application/json' } });

const data = await response.json();

console.log('Cihaz kullanımı:', data.usage.devices.count, '/', data.license.max_devices); console.log('Site sayısı:', data.usage.sites.count); console.log('EPS (1 saat):', data.usage.ingest.eps_avg_1h); console.log('EPS (24 saat):', data.usage.ingest.eps_avg_24h); console.log('EPS (7 gün):', data.usage.ingest.eps_avg_7d); console.log('Event tablo boyutu (MB):', data.usage.storage.events_size_mb); console.log('Retention (gün):', data.usage.storage.retention_days); console.log('Disk dolacak tarih:', data.usage.storage.projected_full_at); console.log('Lisans bitiş tarihi:', data.license.expires_at);

Yukarıdaki kod, ShamashAi Next.js admin panelinin "Usage Overview" sayfasında her 5 dakikada bir çalışır ve aşağıdaki JSON yanıtını döndürür:

{ "usage": { "devices": { "count": 312, "breakdown": { "windows": 187, "linux": 64, "network": 48, "cloud": 13 } }, "sites": { "count": 23 }, "ingest": { "eps_avg_1h": 428.3, "eps_avg_24h": 312.7, "eps_avg_7d": 289.1 }, "storage": { "events_size_mb": 847320, "retention_days": 365, "projected_full_at": "2027-02-14T00:00:00Z" } }, "license": { "max_devices": 350, "expires_at": "2026-11-15T23:59:59Z", "days_until_expiry": 16 } }

Dört ana metrik grubunun detayı

1. usage.devices: Cihaz sayısı ve lisans marjı

usage.devices.count değeri, dbo.devices tablosunda status = 'active' olan kayıt sayısıdır. ShamashAi .NET 8 agent'ı ilk kez heartbeat gönderdiğinde bu tabloya INSERT yapar; 7 gün heartbeat alınmazsa status → 'inactive' olur.

license.max_devices değeri, ShamashAi lisans dosyasında (/opt/shamashai/license.lic) tanımlı maksimum cihaz sayısıdır. count > max_devices durumunda, yeni agent kaydı reddedilir ve dbo.audit_log tablosuna şu event yazılır:

sql INSERT INTO dbo.audit_log (event_time, event_type, severity, message) VALUES (GETUTCDATE(), 'LICENSE_LIMIT_EXCEEDED', 'critical', 'Yeni cihaz kaydı reddedildi: mevcut 312/350, yeni cihaz: dc-kayseri-02');

ShamashAi, license.max_devices - usage.devices.count < 20 olduğunda (yani %94 doluluk), lisans yöneticisine otomatik e-posta gönderir:

Konu: ShamashAi lisans kapasitesi %94
İçerik: Mevcut cihaz sayısı 330/350. Yeni şube veya sunucu eklenmesi planlanıyorsa, lisans artırımı için shamashai.com.tr/iletisim adresine başvurun.

2. usage.sites: Şube/lokasyon sayısı

usage.sites.count değeri, dbo.sites tablosundaki benzersiz kayıt sayısıdır. ShamashAi'da "site", fiziksel veya mantıksal lokasyon demektir: Ankara HQ, İzmir Depo, AWS eu-west-1 gibi.

Bu metrik, coğrafi dağılım raporlaması için kritiktir. Örneğin ISO 27001 denetiminde "hangi lokasyonlarda veri işleniyor?" sorusunun cevabı bu sayıdır. ShamashAi Compliance modülü, GET /compliance/evidence endpoint'inde site listesini şu şekilde döndürür:

javascript const evidenceResponse = await fetch('https://shamashai.local:9443/compliance/evidence?scope=sites', { headers: { 'Authorization': Bearer ${token} } });

const evidence = await evidenceResponse.json(); // evidence.sites = ["Ankara HQ", "İzmir Depo", "Kayseri Şube", ...]

3. usage.ingest: EPS (Events Per Second) trendi

ShamashAi, üç farklı zaman penceresinde EPS ortalaması hesaplar:

  • eps_avg_1h: Son 1 saatlik ortalama, anlık spike'ları gösterir.
  • eps_avg_24h: Son 1 günlük ortalama, gün içi dalgalanmaları dengeler.
  • eps_avg_7d: Son 7 günlük ortalama, mevsimsel trendi verir.
Hesaplama mantığı SQL Server'da şöyle:

sql SELECT COUNT(*) / 3600.0 AS eps_avg_1h FROM dbo.events WHERE event_time >= DATEADD(HOUR, -1, GETUTCDATE());

SELECT COUNT(*) / 86400.0 AS eps_avg_24h FROM dbo.events WHERE event_time >= DATEADD(DAY, -1, GETUTCDATE());

SELECT COUNT(*) / 604800.0 AS eps_avg_7d FROM dbo.events WHERE event_time >= DATEADD(DAY, -7, GETUTCDATE());

Örnek senaryoda eps_avg_1h = 428.3 ama eps_avg_7d = 289.1 — bu, "son 1 saatte olağandışı yoğunluk var" demektir. Örneğin bir Windows update dalgası veya bir brute-force saldırısı.

Bu metrik, disk büyüme hızını tahmin etmek için kullanılır. Eğer 7 günlük EPS %30 artmışsa, disk doluluk tarihi (projected_full_at) öne çekilir.

4. usage.storage: Event tablo boyutu ve disk öngörüsü

events_size_mb değeri, SQL Server'da dbo.events tablosunun disk kullanımıdır:

sql SELECT SUM(a.total_pages) * 8 / 1024.0 AS events_size_mb FROM sys.tables t INNER JOIN sys.indexes i ON t.object_id = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id WHERE t.name = 'events';

Örnek yanıtta events_size_mb = 847320 (yani ~827 GB). Bu değer, retention_days = 365 ile birleşince projected_full_at hesaplanır:

1. Günlük event artışı = events_size_mb / retention_days = 847320 / 365 ≈ 2321 MB/gün 2. Kalan disk = (Toplam disk - Kullanılan disk) — ShamashAi dokümantasyonu bu hesaplamada sistem disk boyutunu nasıl aldığını detaylandırmıyor; muhtemelen /opt/shamashai/data/ partition'ının df -h çıktısı kullanılıyor. 3. Kalan gün = Kalan disk / 2321 MB 4. projected_full_at = Bugün + Kalan gün

Örnekte projected_full_at = 2027-02-14 — yani yaklaşık 3.5 ay sonra disk dolacak.

Lisans yenileme alarmı: 30 gün önceden uyarı

ShamashAi, license.expires_at - bugün < 30 gün olduğunda, dbo.audit_log tablosuna şu event'i yazar:

sql INSERT INTO dbo.audit_log (event_time, event_type, severity, message) VALUES (GETUTCDATE(), 'LICENSE_RENEWAL_ALARM', 'warning', 'Lisans 16 gün sonra sona erecek (2026-11-15). Yenileme için shamashai.com.tr/iletisim');

Bu event, ShamashAi Admin Panel ana sayfasında kırmızı banner olarak görünür:

⚠️ Lisans 16 gün sonra sona eriyor — Yenileme için AfnTeknoloji ile iletişime geçin.

Ayrıca, haftalık özet raporunda (GET /reports/evidence-pack?type=weekly) bu alarm mutlaka yer alır.

C# .NET 8 agent tarafında heartbeat mekanizması

ShamashAi .NET 8 agent'ı, her 60 saniyede bir heartbeat gönderir:

csharp using System.Net.Http; using System.Text.Json;

var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", $"Bearer {agentToken}");

var heartbeat = new { device_name = Environment.MachineName, site_id = "ankara-hq", agent_version = "2.4.1", os = Environment.OSVersion.ToString() };

var content = new StringContent( JsonSerializer.Serialize(heartbeat), System.Text.Encoding.UTF8, "application/json" );

var response = await client.PostAsync( "https://shamashai.local:9443/agent/heartbeat", content );

if (response.IsSuccessStatusCode) { Console.WriteLine("Heartbeat başarılı"); } else if (response.StatusCode == System.Net.HttpStatusCode.Forbidden) { Console.WriteLine("HATA: Lisans limiti aşıldı, heartbeat reddedildi"); }

Eğer POST /agent/heartbeat yanıtı 403 Forbidden dönerse, agent log dosyasına (C:\ProgramData\ShamashAi\agent.log) şu satırı yazar:

2026-10-30 09:15:08 [ERROR] Heartbeat failed: license limit exceeded (current 312/350)

Disk doluluk senaryosunda otomatik retention kısaltma

ShamashAi, projected_full_at - bugün < 14 gün olduğunda (yani disk 2 hafta içinde dolacaksa), otomatik olarak retention_days değerini %80'e düşürür:

  • Eski retention = 365 gün → Yeni retention = 292 gün
  • dbo.events tablosunda event_time < DATEADD(DAY, -292, GETUTCDATE()) olan kayıtlar silinir
  • dbo.audit_log tablosuna şu event yazılır:
sql INSERT INTO dbo.audit_log (event_time, event_type, severity, message) VALUES (GETUTCDATE(), 'RETENTION_AUTO_REDUCED', 'warning', 'Disk doluluk öngörüsü < 14 gün, retention 365 → 292 güne düşürüldü');

Bu otomatik aksiyon, KVKK Madde 12 (veri minimizasyonu) ile uyumludur — gereksiz eski log tutulmaz. Ancak ISO 27001 denetimi için 1 yıl retention gerekiyorsa, bu otomatik kısaltma denetim kanıtını kaybettirir. Bu yüzden ShamashAi Admin Panel'de "Otomatik retention kısaltma" seçeneği kapatılabilir (varsayılan: açık).

Örnek Dashboard widget: Next.js bileşeni

ShamashAi Next.js admin panelinde, Usage & Capacity widget'ı şöyle render edilir:

javascript // components/UsageCapacityWidget.jsx import { useEffect, useState } from 'react';

export default function UsageCapacityWidget() { const [data, setData] = useState(null);

useEffect(() => { async function fetchUsage() { const res = await fetch('/api/operations/usage-capacity'); const json = await res.json(); setData(json); } fetchUsage(); const interval = setInterval(fetchUsage, 300000); // 5 dakika return () => clearInterval(interval); }, []);

if (!data) return <div>Yükleniyor...</div>;

const devicePercent = (data.usage.devices.count / data.license.max_devices) * 100; const diskDaysLeft = Math.ceil( (new Date(data.usage.storage.projected_full_at) - new Date()) / 86400000 );

return ( <div className="widget"> <h3>Kapasite Durumu</h3> <div className="metric"> <span>Cihaz Kullanımı</span> <strong>{data.usage.devices.count} / {data.license.max_devices}</strong> <progress value={devicePercent} max="100" /> </div> <div className="metric"> <span>Disk Dolacak</span> <strong>{diskDaysLeft} gün sonra</strong> </div> <div className="metric"> <span>EPS (7 gün ort.)</span> <strong>{data.usage.ingest.eps_avg_7d.toFixed(1)}</strong> </div> <div className="metric"> <span>Lisans Bitiş</span> <strong>{data.license.days_until_expiry} gün</strong> </div> </div> ); }

Bu widget, ana sayfada sağ üst köşede görünür ve her 5 dakikada otomatik güncellenir.

Limitler ve dürüst notlar

  • Disk boyutu tahmini dış faktörlere hassas: ShamashAi, yalnızca dbo.events tablosu boyutunu izler. SQL Server log dosyası, backup dosyaları, sistem logları gibi diğer disk kullanımlarını hesaba katmaz. Gerçek disk doluluk tarihi 1-2 hafta öne veya arkaya kayabilir.
  • EPS hesaplaması yalnızca dbo.events tablosuna dayanır: ShamashAi, dbo.audit_log, dbo.soar_actions, dbo.behavior_baselines gibi diğer tabloların event hacmini EPS metriğine dahil etmez. Yoğun SOAR kullanımında gerçek ingest %10-15 daha yüksek olabilir.
  • Cihaz breakdown (windows/linux/network/cloud) statik sayım: ShamashAi, cihaz tipini agent ilk kayıtta bildirdiği device_type alanından alır. Bir Windows sunucu sonradan Linux'a migrate edilirse, manuel güncelleme gerekir (PUT /devices/{id}).
  • Lisans yenileme alarmı e-posta gönderimi opsiyonel: Varsayılan kurulumda e-posta sunucusu yapılandırılmamışsa, alarm yalnızca dbo.audit_log tablosuna yazılır ve admin panelde görünür — otomatik e-posta gitmez.
  • projected_full_at tahmini doğrusal büyüme varsayar: Eğer firma büyük bir proje (örneğin yeni 50 sunucu) açacaksa veya retention artıracaksa, tahmin geçersiz olur. ShamashAi, gelecekteki büyüme planlarını bilmez.

Sonuç: Sürprizsiz lisans ve disk yönetimi

ShamashAi Usage & Capacity modülü, orta ölçekli Türk firmalarının SIEM operasyonunda en sık karşılaştığı iki belirsizliği ortadan kaldırır:

1. Lisans yenileme zamanı ne kadar cihaz olduğunu bilmemek → usage.devices.count ve license.max_devices her an güncel. 2. Disk doluluk tarihini bilmemek → projected_full_at metriki 30 gün önceden uyarı verir.

Bu iki metrik, CFO'nun bütçe planlaması için ve IT yöneticisinin operasyonel risk yönetimi için kritik girdilerdir. ShamashAi dokümantasyonu, disk boyutu tahmininde hangi sistem çağrılarını kullandığını ve otomatik retention kısaltma eşiğini nasıl yapılandıracağınızı detaylandırmıyor; pilot programı kapsamında bu bilgiler paylaşılır.

Pilot programı 30 gün ücretsiz: shamashai.com.tr/iletisim

Paylaş

Bu konuyu projenize uygulayalım

Pilot programı kapsamında ürünü gerçek altyapınızda 30 gün ücretsiz deneyin.