Denetim izi · Uyumluluk · .NET-native
Her değişiklik. Her değer. Her seferinde.
Reldavi veritabanınızdaki her değişikliği kaydeder: kim yaptı, öncesinde ne yazıyordu, tam olarak ne zaman oldu. Üstelik değişikliği yapan isteğe tek bir milisaniye bile eklemeden. NuGet paketini kurun, üç satır ekleyin; denetim iziniz kendi kendini doldurmaya başlasın.
Kredi kartı gerekmez. Ücretsiz planda ayda 100.000 olay, süresiz.
Denetçinin gerçekten sorduğu sorular için tasarlandı
dotnet add package komutundan ilk kayda kadar geçen süre.
Sorun
Veritabanınız neyin değiştiğini biliyor. Size söylemiyor.
Bir satırda durum = "Kargoda" yazıyor. Kimin kargoya verdiğini, ne zaman, hangi IP'den yaptığını ya da doksan saniye öncesinde "İptal" olduğunu söylemiyor. Bir müşteri ödemeye itiraz ettiğinde, bir denetçi değişiklik geçmişi istediğinde veya bir şey ters gittiğinde ve kimsenin kime dokunduğunu bilmediği anda, eksik olan tam da bu bağlam.
Ekipler bunu kendileri yazmaya çalışır: şuraya bir trigger, buraya bir GuncelleyenKullanici kolonu, kimsenin indekslemediği bir yan tabloda JSON. İlk denetime kadar idare eder; sonra birileri bir çeyreğini bunu sunulabilir hale getirmeye harcar.
Trigger'lar görünmezdir
Veritabanı trigger'ları uygulamanızın göremediği yerde çalışır. Kişisel veriyi maskeleyemez ve kullanıcının kim olduğunu bilemez.
Yan tablolar zamanla dişlenir
İşlemsel veritabanınızdaki bir denetim tablosu, tam da ayıramayacağınız kaynak için canlı trafikle yarışır.
Log dosyası delil değildir
Uygulama logları örneklenir, döndürülür, kesilir. Denetçi yedi yıl ister; saklama politikanız on dört gün yazar.
Ürün
Verileriniz için bir zaman makinesi.
Kaydedilen her değişiklik, onu üreten önce-sonra ekranından tek tık uzakta.
Bir değişikliği pull request okur gibi okuyun.
Alan alan, eski değer karşısında yeni değer, renklendirilmiş ve ilk bakışta okunur. Gözünüzü kısarak bakacağınız bir JSON yığını yok, yeniden kurgulayacağınız bir log satırı yok. Hiç değişmemiş alanlar listede yer almaz; çünkü elli değişmemiş alanı sıralayan bir fark ekranı, gerçekten değişen tek alanı gömer.
- — Yalnızca gerçekten değişen alanlar — aynı değeri geri yazmak hiçbir kayıt üretmez.
- — Maskelenmiş alanlar yalnızca maskeli hâlini gösterir, orijinali asla.
- — Kırpılan değişiklik setleri bunu kaydın içinde belirtir, sessizce alan düşürmez.
Tek bir kaydın tüm geçmişi, sırasıyla.
Herhangi bir faturayı, siparişi veya hesabı açın; başına gelen her şeyi görün: kim oluşturdu, o günden beri hangi düzenlemeler yapıldı, kim sildi. Zaman sınırı yok — "bu kayda ne oldu" sorusu yanında bir tarih aralığıyla gelmez.
- — Saklama süreniz ne kadar geriye gidiyorsa, kaydın tüm yaşamı.
- — Zaman çizelgesindeki herhangi bir satırdan doğrudan fark ekranına geçin.
- — Paylaşılabilir bağlantılar — bir bulgu, delili ile birlikte dolaşsın.
Samanlığı değil, iğneyi bulun.
Kaynağa, aktöre, işleme, ilişki kimliğine veya serbest metne göre filtreleyin; aralık ne kadar geniş olursa olsun. Sonuçlar tam da bu soru biçimi için tasarlanmış sütunsal bir veritabanından gelir; canlı iş yükünüzle boğuşan bir tablodan değil.
- — Kim, ne, ne zaman, hangi proje ve hangi istek — hepsine göre filtre.
- — Türkçe duyarlı büyük-küçük harf araması: “İstanbul” ile “istanbul” eşleşir.
- — İmleç tabanlı sayfalama — ellinci sayfa, birinci sayfa kadar hızlı.
Entegrasyon
Üç satır. Sonrası kendiliğinden.
.NET SDK'sı EF Core'un kayıt hattına bağlanır. Neyin önemli olduğunu işaretlersiniz; o andan itibaren her ekleme, güncelleme ve silme kendini kaydeder.
Paketi kurun
Tek bir dotnet add package. .NET 8 ve .NET 10'u birlikte destekler; önce sürüm yükseltmek zorunda değilsiniz.
Bağlayın
İstemciyi kaydedin, interceptor'ı DbContext'inize ekleyin, mevcut kullanıcıyı sağlayan middleware'i devreye alın.
Hassas alanları işaretleyin
Öznitelikler neyin kaydedileceğine, neyin yok sayılacağına ve neyin daha süreciniz içindeyken maskeleneceğine karar verir.
Entegrasyonun tamamı bu. Şema migrasyonu yok, trigger yok, iş mantığınızda değişiklik yok.
// 1 · Install
dotnet add package Reldavi.EntityFrameworkCore
dotnet add package Reldavi.Client
// 2 · Program.cs
builder.Services.AddReldaviClient(options =>
{
options.Endpoint = new Uri("https://ingest.reldavi.com");
options.ApiKey = builder.Configuration["Reldavi:ApiKey"]!;
});
builder.Services.AddReldaviEntityFrameworkCore(options =>
options.MaskHashSecret = builder.Configuration["Reldavi:MaskSecret"]);
builder.Services.AddDbContext<ShopDbContext>((sp, options) => options
.UseNpgsql(connectionString)
.UseReldavi(sp));
// 3 · After authentication, so changes are attributed to a real user
app.UseAuthentication();
app.UseReldavi();[AuditResource("shop.order")]
public sealed class Order
{
public int Id { get; set; }
[AuditLabel] // shown in the timeline
public string Reference { get; set; } = "";
public string Status { get; set; } = "Pending";
[AuditMask(MaskStrategy.PreserveLast, 4)] // ************4242
public string CardNumber { get; set; } = "";
[AuditMask(MaskStrategy.Hash)] // searchable, not reversible
public string NationalId { get; set; } = "";
[AuditIgnore] // never recorded
public string InternalNotes { get; set; } = "";
}
// Nothing else to call. SaveChanges records itself.
order.Status = "Shipped";
await db.SaveChangesAsync();// Node.js
audit.capture({
action: 'updated',
resourceType: 'shop.order',
resourceId: order.id,
actor: { id: user.id, displayName: user.name },
changes: mask.applyMasks(diff(before, after), {
cardNumber: mask.preserveLast(4),
}),
});
# Python
audit.capture(AuditEvent(
action="updated",
resource=Resource(type="shop.order", id=order.id),
changes=masking.apply_masks(diff(before, after), {
"card_number": masking.preserve_last(4),
}),
))
// Go
client.Capture(reldavi.Event{
Action: reldavi.ActionUpdated,
Resource: reldavi.Resource{Type: "shop.order", ID: order.ID},
Changes: reldavi.Diff(before, after),
})Performans
Sizi yavaşlatması mümkün olmayan bir denetim katmanı.
Yakalama yolu hiçbir ağ çağrısı yapmaz, kilit almaz, beklemez. Tampon dolduğunda yükü atar ve bunu size söyler — çünkü denetim hattının kötü bir günü, asla sizin ödeme akışınızın kötü günü hâline gelmemeli.
İş parçacığınızda I/O yok
Yakalama, bellek içi bir tampona yazar ve döner. Her ağ çağrısı arka plandaki gönderici tarafından yapılır.
Sessizce değil, gürültüyle bozulur
Yakalama hatası loglanır ve yutulur; işleminize asla fırlatılmaz. Düşen olaylar sayılır, böylece alarm kurabilirsiniz.
Geri alınan işlem iz bırakmaz
Olaylar yalnızca işleminiz commit edildikten sonra yayınlanır. Başarısız bir kayıt hiçbir şey yazmaz — olması gerektiği gibi.
Toplu ve sıkıştırılmış
Olaylar paketler hâlinde, gzip'lenerek gönderilir. Denetim JSON'u çok tekrarlıdır ve yaklaşık on kat sıkışır.
Bir olayı yakalamak çağıran iş parçacığına 99. yüzdelikte yaklaşık iki mikrosaniyeye mal oluyor — kodunuzun kendi işlemi içinde yaptığı çağrı; teslimat değil, o daha sonra arka plan iş parçacığında oluyor. Bunu ölçen araç depoda build/loadtest.sh olarak duruyor; yani rakamı bir tanıtım sayfasından almak yerine kendi donanımınızda çalıştırabilirsiniz. Sayı bir büyüklük mertebesi kayarsa derlemeyi de düşürüyor — yakalanmaya değer gerileme zaten bu: birinin yakalamayı eşzamanlı hâle getirmesi.
Zero-PII
Hassas değerler sunucularınızdan hiç çıkmaz.
Maskeleme, henüz hiçbir şey tamponlanmadan, sizin sürecinizin içinde gerçekleşir. Bize hiç ulaşmamış bir veriyi sızdırmamız mümkün değildir.
Bir alanı [AuditMask] ile işaretlediğinizde Reldavi değerin kendisi yerine bir izdüşümünü kaydeder: kartın son dört hanesi, TCKN'nin geri döndürülemez ama aranabilir kalan anahtarlı özeti, ya da tamamen gizlenmiş bir parola. Orijinal değer tampona hiç yazılmaz, hatta seri hâle getirilmez ve depolamamıza asla ulaşmaz.
Uyumluluk
Hangi yükümlülüğü karşılıyorsunuz?
Değişiklik geçmişini iyi bir alışkanlıktan, size ceza kesilebilecek bir zorunluluğa çeviren beş kural. Yapay zekâ mevzuatının istediği ajan kaydı dahil, beşi de bugün çalışıyor.
KVKK
İşleme kayıtları, saklama süreleri ve imha. Maskeleme kaynakta olur, veri Türkiye’de ya da doğrudan kendi sunucunuzda kalabilir.
KVKK imha tutanağı
Her imha, imha ettiği günlerin Merkle köklerini taşıyan numaralı bir tutanak üretir. Çünkü imhayı ispat etmek belgesel bir yükümlülüktür ve rehber, belgenin yokluğunu imhanın hiç yapılmadığına karine sayar.
GDPR
Madde 30 işleme kayıtları ve Madde 17 silme; tasarımdan veri minimizasyonu — SDK yalnızca işaretlediğiniz alanları kaydeder.
EU AI Act, Madde 12
2 Ağustos 2026’dan beri yürürlükte: yüksek riskli yapay zekâ sistemleri olayları otomatik kaydetmek, Madde 26 uyarınca kullananlar da bu kayıtları en az altı ay saklamak zorunda.
GoBD (Almanya)
Alman vergi hukukunda bunun bir adı var: Revisionssicherheit. Kayıtlar eksiksiz, kimin yaptığına kadar izlenebilir, yazıldıktan sonra değiştirilemez ve on yıl okunabilir olmalı — ve bir denetçi bunları makine tarafından okunabilir bir dışa aktarım olarak isteyebilir. Mühürlü günlük kökler, “değiştirilemez” iddiasını bir sağlayıcının sözü olmaktan çıkarıp birinin kontrol edebileceği bir şeye çevirir; dışa aktarım ise yanında özetleriyle birlikte CSV veya NDJSON’dur.
SOC 2 ve ISO 27001
Aktör atıflı değişiklik geçmişi, hiçbir şeyin düzenleyemediği kayıtlar, tanımlı saklama süresi ve dışa aktarılabilir kanıt.
Dilden bağımsız
.NET servisiniz tek servisiniz değil.
Veri alım sözleşmesi yayımlanmış bir JSON Schema'dır. Tüm istemciler aynısını uygular; böylece bir Go worker'ı ve bir Python görevi, ASP.NET API'nizle aynı zaman çizelgesine düşer.
.NET
EF Core interceptor ile otomatik yakalama. Elle çağıracağınız bir şey yok.
Node.js
Sıfır bağımlılık, derleme adımı yok. diff() yardımcısı dahil.
Python
Çalışma zamanı bağımlılığı yok — istemci standart kütüphaneyle HTTP konuşur.
Go
Yalnızca standart kütüphane. Tamponlu bir kanal ve tek bir arka plan göndericisi.
Her SDK aynı şeyi garanti eder: yakalama bloklamaz, hata fırlatmaz, tamponlamadan önce maskeler ve kapanışta tamponu boşaltır. Dördü de MIT lisanslı; yani yakalama katmanı, platformu alsanız da almasanız da sizin.
Tek bir veri biçiminin dört ayrı uygulaması, kimsenin fark etmediği biçimde birbirinden uzaklaşır: birinde farklı yazılmış bir alan adı, saat dilimi taşımayan bir zaman damgası, Latin-1 kodlanmış bir gövde. Bu da tam olarak ikinci servisi bağladığınız gün, sizin entegrasyonunuzda ortaya çıkar. Bu yüzden her derlemede dört SDK da gerçek bir alım uç noktasına gerçek bir soket üzerinden aynı olayı gönderir ve kayıt gerçek sorgu API’sinden geri okunur. Tek bir beklenen satır, dört dil. Araç zinciri bulunmayan bir dil geçti diye değil, denetlenmedi diye raporlanır.
Kurulum
Bizim sunucumuz ya da sizinki. Aynı ürün.
Reldavi Cloud
İşletmesi bizde. Size bir uç nokta ve bir panel; ölçekleme, güncelleme ve yedekleme bizde.
- — Dakikalar içinde hazır
- — Yönetilen saklama ve arşivleme
- — Bölgesel veri ikametgâhı
Kendi sunucunuzda
Tek bir compose dosyası tüm yığını kendi altyapınızda ayağa kaldırır. Hiçbir bileşen dışarı bağlanmaz.
- — Sabit fiyat, sınırsız olay
- — Sizin ağınız, sizin yedekleriniz
- — İnternetsiz ortama uygun — CDN yok, dış font yok
Fiyatlandırma
Kişi başına değil, olay başına.
Denetim kaydı bir altyapıdır; ekibiniz büyüdü diye pahalanmamalı. Her planda sınırsız kullanıcı, panelin tamamı ve bütün SDK’lar var.
Ücretsiz
$0/ay
Ayda 100.000 olay
Takım
$49/ay
Ayda 2.000.000 olay
İşletme
$199/ay
Ayda 10.000.000 olay
Kurumsal
$899+/ay
Ayda 50.000.000+ olay
Bugün kaydetmeye başlayın. Denetimi gelecek yıl kolayca geçin.
Ayda 100.000 olaya kadar süresiz ücretsiz. Kredi kartı yok, satış görüşmesi yok.
Ya da bunu kimin geliştirdiğini ve neyi yapmayı reddettiğini okuyun.