Birleşik denetim zaman çizelgesi: kim ne yaptı, ne zaman, neden için şema ve UI
Girişler, veri değişiklikleri ve iş akışı adımları boyunca kim ne yaptı, ne zaman ve neden gösteren birleşik bir denetim zaman çizelgesi tasarlamak için pratik bir şema ve UI düzeni.

Birleşik denetim zaman çizelgesi nedir (ve neden işe yarar)\n\nBirleşik denetim zaman çizelgesi, ürününüzdeki olayların zaman sırasına göre tek, okunabilir bir akışıdır. Araçlar arasında atlamadan ne olduğunu anlamanızı sağlar. Ayrı oturum/giriş günlükleri, veritabanı geçmiş tabloları ve iş akışı izleyiciler yerine, olayların hikâyesini anlatan tek bir yeriniz olur.\n\nEkipler genellikle bir şey ters gittiğinde acıyı hisseder: bir müşteri değişikliği onaylamadığını söyler, bir kayıt “gizemli” şekilde güncellenir veya bir hesap tehlikede görünür. Veri genellikle vardır, ama dağınıktır, farklı etiketlenmiştir ve ham günlükleri açıklamaya dönüştürecek küçük detaylardan yoksundur. Soruşturmalar yavaşlar ve insanlar tahminde bulunmaya başlar.\n\nBirleşik denetim zaman çizelgesinin beş soruyu yanıtlaması gerekir:\n\n- Kim yaptı (kullanıcı, servis veya sistem)\n- Ne yaptı (eylem ve hedef)\n- Ne zaman oldu (kesin zaman damgası, açık bir zaman diliminde)\n- Nerede oldu (web, mobil, API)\n- Neden oldu (sebep, istek veya onay)\n\nKapsam önemlidir. Çoğu ürün için oturumlar ve girişler, CRUD veri değişiklikleri, iş akışı adımları (onaylar ve durum geçişleri) ve kilit sistem olayları (izin değişiklikleri veya başarısız erişim denemeleri gibi) kapsanmalıdır. Bunları iyi açıklayabiliyorsanız, günlük denetim sorularının çoğunu çözersiniz.\n\nAyrıca bunun ne olmadığını netleştirmek faydalıdır. Birleşik denetim zaman çizelgesi tam bir SIEM değildir ve derinlemesine analiz aracı değildir. Amaç, destek, güvenlik incelemeleri ve iç hesap verebilirlik için hızlı, güvenilir cevaplar sunmaktır.\n\nNo-code platformlarda (örneğin AppMaster) uygulama geliştiriyorsanız, backend mantığı, UI aksiyonları ve entegrasyonlar aynı olay formatını yayımlayabildiği için birleşik bir zaman çizelgesi daha da faydalı olur. Bu, ürünün hikâyesini okuyan herkes için tutarlılık sağlar.\n\n## Hangi olaylar dahil edilmeli: girişler, veri değişiklikleri, iş akışı adımları\n\nBirleşik zaman çizelgesi, gerçek eylemlerin gerçekleştiği yerlerden veri çekmezse işe yaramaz. Çoğu ürünün dört ana kaynağı vardır: kimlik doğrulama (girişler ve oturumlar), veri değişiklikleri (oluşturma, güncelleme, silme), iş akışı adımları (onaylar, atamalar, durum geçişleri) ve entegrasyonlar (webhook'lar, içe aktarımlar, botlar).\n\nBaşlangıç için küçük bir olay kategorisi seti tanımlayın ve buna sadık kalın. Kategoriler uygulamayı değil niyeti açıklamalıdır. Örneğin, şifre sıfırlama ile bir API anahtarının döndürülmesi farklı sistemlerden gelse bile her ikisi de erişim olayıdır. İnsanların zaman çizelgesini hızlı tarayabilmesi için access.login.succeeded veya data.customer.updated gibi tutarlı adlandırma kullanın.\n\nHer şey denetlenmek zorunda değildir. Pratik bir kural: durumu değiştiren, erişimi değiştiren veya iş sonuçlarını tetikleyen eylemleri kaydedin. Sayfa görüntülemeleri, otomatik kaydetmeler ve tekrar eden arka plan denemeleri gibi gürültuyu atlayın; olay çözümlemesi için gerekiyorsa bunları dahil edin.\n\nKimlik (actor) türlerini açık hale getirin ki “kim” asla tahmin edilmesin. Bir zaman çizelgesi öğesi, eylemin bir kullanıcı, yönetici, servis hesabı veya otomasyon tarafından yapıldığını net şekilde söylemelidir.\n\nBaşlangıç için basit olay grupları örneği:\n\n- Erişim: giriş başarılı/başarısız, çıkış, MFA değişiklikleri, şifre sıfırlama\n- Veri: kayıt oluşturuldu/güncellendi/silindi, toplu düzenlemeler, dışa aktarmalar\n- İş akışı: durum değişikliği, onay/red, atama, SLA ihlali\n- Entegrasyon: içe aktarma tamamlandı/başarısız, webhook alındı, dış senkronizasyon\n- Yönetici/güvenlik: rol değişiklikleri, izin değişiklikleri, API anahtarı olayları\n\nUygulamanız çok kiracılı (multi-tenant) ise her olayda tenant kimliğini ekleyin. Ayrıca ortamı (prod, staging, dev) kaydedin ki soruşturmalar sırasında zaman çizelgelerini karıştırmayın.\n\n## Zaman çizelgesini okunabilir yapan minimum veri modeli\n\nBir zaman çizelgesi, her satır aynı temel soruları yanıtladığında birleşik hisseder. Her sistem farklı logluyorsa, şifreli kayıtlar değil, net bir hikâye ortaya çıkar.\n\nHer olayı tek bir basit yapıya standardize edin. İleride ekstra ayrıntılar saklayabilirsiniz, ama zaman çizelgesinin her zaman tutarlı bir başlığı olmalı.\n\n### Bulunması gereken beş alan\n\nBir satırın detay paneli açmadan anlaşılmasını sağlayan minimum alanlar:\n\n- event_id: belirli bir olayı referans almak için benzersiz, sabit bir kimlik\n- timestamp: ne zaman olduğu (mümkünse milisaniye hassasiyetiyle)\n- actor: bunu yapan (kullanıcı, servis hesabı, otomasyon)\n- action + target: ne oldu ve kime/neyi yapıldı (ör. “updated” + “Invoice #1042”)\n- outcome: başarı/başarısızlık (ve başarısızsa kısa bir sebep kodu)\n\nBu beş alan zaman çizelgesini okunabilir kılar. Ancak soruşturmalar genellikle tek satırlardan ziyade olay zincirleri içerir.\n\n### Günlükleri hikâyeye çeviren üç ID\n\nEkranlar, API'ler ve arka plan işleri arasında aktiviteyi takip etmenizi sağlayan birkaç tanımlayıcı ekleyin:\n\n- correlation_id: bir kullanıcı niyetini birden fazla adımda bağlar (tıklama -> doğrulama -> güncelleme -> bildirim)\n- session_id: olayları bir oturumla ilişkilendirir; hesap paylaşımı veya kaçırma modellerini tespit etmeye yardımcı olur\n- request_id (veya trace_id): API çağrılarını ve arka plan işlerindeki zinciri bağlar\n\nZaman son sürprizdir. Zaman damgalarını UTC'de saklayın ve UI'nın doğru sıralama yaparken local zamanı gösterebilmesi için bir timezone alanı (veya actor'un locale'i) tutun.\n\nÖrnek: bir kullanıcı “İade onayla”ya tıklar. Zaman çizelgesi görünür bir eylem gösterebilir; aynı zamanda correlation_id onayı, durum değişikliğini, müşteriye gönderilen e-postayı ve otomatik ödeme adımını tek bir tutarlı zincir halinde gruplayabilir.\n\n## Şema önerisi: tablolar ve alanlar (pratik, kusursuz değil)\n\nBirleşik denetim zaman çizelgesi, her anda tek bir olay kaydettiğinizde en iyi çalışır ve detayları bunun üzerine iliştirirsiniz. Temel satırı küçük ve tutarlı tutun; değişen detayları ayrı yere koyun.\n\n### Temel tablolar\n\nÇoğu ürünü kapsayan dört tablo:\n\n- audit_event: id, tenant_id, occurred_at, event_type (login, data_change, workflow), actor_id, target_type, target_id, summary, ip, user_agent, request_id, correlation_id, why_id (nullable)\n- audit_actor: id, tenant_id, actor_type (user, api_key, system), user_id (nullable), display_name, role_snapshot (opsiyonel JSON)\n- audit_target (opsiyonel, bir olayın birden çok hedefi olabilir): event_id, target_type, target_id, label (örneğin “Invoice INV-1042”)\n- audit_change: event_id, field_path (örneğin billing.address.city), old_value_json, new_value_json, value_type, redacted (bool)\n\nHedefler için en basit model audit_event içinde target_type + target_id tutmaktır. Bir olay birden fazla kaydı etkiliyorsa audit_target ekleyin ve hızlı filtreleme için audit_event üzerinde birincil hedefi saklayın.\n\nDeğerler için, alan başına satırlar audit_change içinde tutmak UI'ı okunabilir ve aranabilir kılar. Tam anlık görüntülere (snapshots) ihtiyacınız varsa audit_evente old_record_json ve new_record_json ekleyebilirsiniz; ama depolama kontrolü için bunları opsiyonel tutun.\n\n### İş akışı alanları\n\nİş akışı adımları için audit_eventde (sadece event_type='workflow' olanlar) şu sütunları ekleyin: workflow_id, step_key, transition_key, from_status, to_status, result (success, blocked).\n\n### Hızı koruyan indeksler\n\nÇoğu ekran “bir tenant için son etkinlik”, “bir kayıtla ilgili her şey” veya “bir kişi tarafından yapılan her şey” sorgular. Bu yolara indeks ekleyin:\n\n- (tenant_id, occurred_at desc)\n- (tenant_id, target_type, target_id, occurred_at desc)\n- (tenant_id, actor_id, occurred_at desc)\n- audit_change üzerinde: (event_id), ve alan bazlı filtreleme yapıyorsanız (field_path)\n\n## “Neden”i yakalamak: sebepler, onaylar ve bağlam\n\nSadece “kim ne yaptı, ne zaman” gösteren bir zaman çizelgesi en zor soruyu yanıtlamaz: neden yaptılar? Neden yoksa soruşturmalar tahminlere dönüşür ve insanlar eski biletler veya sohbet dizilerini takip etmek zorunda kalır.\n\n### Sebep kodları serbest metinden daha iyidir (çoğunlukla)\n\nSerbest metin faydalı olabilir, ama düzensiz olur. İnsanlar aynı şey için farklı ifadeler kullanır veya hiç yazmayı unutur. Kısa, tutarlı bir reason_code temiz filtreleme sağlar; gerektiğinde opsiyonel reason_text insan detayını ekler.\n\nHem olaya hem de iş akışı geçişine koyun ki her giriş bağlam taşısın:\n\n- reason_code (veri veya durum değiştirildiğinde zorunlu)\n- reason_text (opsiyonel, kısa ve gözden geçirilmiş)\n\nPratik bir yöntem, alan başına 10-30 arası sabit sebep kodu tanımlamaktır (fatura, erişim, sipariş, destek gibi). Bunları stabil tutun ve yenilerini yavaşça ekleyin.\n\n### Onaylar ve otomasyon bağlamı\n\n“Neden” çoğu zaman “bir politika böyle dedi” veya “birisi onayladı” demektir. Onay bağlamını yapılandırılmış alanlarda saklayın ki başka bir sistemi açmadan soruları hızlıca cevaplayabilesiniz.\n\nHerhangi bir olay onaylanmış, otomatikleştirilmiş veya bir başkası adına yürütülmüşse, ilgili olduğunda şu alanları saklayın:\n\n- approved_by_actor_id ve approved_at\n- approval_rule_id (veya policy_name) ve decision (approved/denied)\n- reference_id (ticket, case veya change request numarası)\n- automation_rule_name ve rule_version\n- automation_inputs (güvenli, minimal parametreler örn. threshold=5000)\n\nBir uyarı: “neden” alanları gizli bilgilerin sızdığı yerler olabilir. Şifreler, API anahtarları, tam oturum tokenları veya ham ödeme bilgilerini reason_text veya automation_inputs içinde saklamayın. Bir değer hassassa kırpılmış bir versiyonunu (son 4 hane) veya token_present=true gibi bir gösterge saklayın.\n\nÖrnek: iade limiti yükseltildi. Zaman çizelgesi “Limit 500'den 5000'e değişti” derken reason_code=RISK_REVIEW, approved_by=Maria, policy=RefundLimitPolicy v3, reference_id=CASE-18422 ve automation_rule_name boş (manuel) olabilir. Bu giriş durumu açıklamak için yeterlidir.\n\n## UI düzeni: soruları hızlı cevaplayan tek ekran\n\nİyi bir birleşik denetim zaman çizelgesi arama sonuçları sayfası, bir hikâye ve bir fiş (receipt) karışımı gibidir. Amaç hızdır: 10 saniye içinde ne olduğunu fark edebilmelisiniz, ardından bir satırı açıp harekete geçmek için yeterli bağlamı görmelisiniz.\n\n### Basit üçlü panel düzeni\n\nHer şeyi aynı ekranda üç alana koyun: solda filtre paneli, ortada zaman çizelgesi listesi ve sağda detay çekmecesi (veya slide-over). Detaylar incelenirken liste görünür kalmalı ki yerinizi kaybetmeyin.\n\nFiltreleri az fakat faydalı tutun. Olay veya destek görüşmeleri sırasında insanların ilk başvurduğu filtrelerle başlayın:\n\n- Tarih aralığı (hızlı ön ayarlar: son 1 saat, son 24 saat)\n- Actor (kullanıcı, API anahtarı, sistem)\n- Hedef (kayıt, nesne türü, iş akışı örneği)\n- Olay türü (login, update, approval, export)\n- Sonuç (success, failed, denied)\n\nOrtadaki listede her satır açmadan “kim/ne/zaman/neden” sorusunu yanıtlamalı. Zaman damgası (zaman dilimiyle), actor adı (ve gerekiyorsa rol), eylem fiili, hedef etiketi ve kısa bir sebep snippet'i gösterin. Sebep yoksa boş bırakmayın; yerine “Sebep belirtilmemiş” gibi net bir yer tutucu gösterin.\n\n### Detay çekmecesi: kanıtı gösterin\n\nDetay görünümü güven kazanacağınız yerdir. Tam bağlamı gösterin: girişler için actor IP'si ve cihaz, veri düzenlemeleri için önce/sonra alan değerleri, onaylar için iş akışı adımı, atanan kişi ve karar.\n\nYük (payload) üzerinde bir “İlgili olaylar” şeridi ekleyin ki “İstek oluşturuldu” -> “Yönetici onayladı” -> “Ödeme başarısız” gibi yakın adımlara atlayabilesiniz. Denetçiler ve mühendisler için raw payload görünümü ekleyin ama varsayılan gizli olsun.\n\nBaşarısızlık durumlarını belirgin yapın. Reddedilen veya başarısız sonuçlar için net stil kullanın ve “İzin reddedildi” veya “Doğrulama başarısız” gibi mesajlar gösterin.\n\n## Adım adım: gerçek bir üründe nasıl inşa edilir\n\nDenetim zaman çizelgesini bir özellik gibi ele alın, bir günlük yığını gibi değil. Destek ve uyumluluk ekipleri “kim ne yaptı, ne zaman ve neden” sorusunu bir dakikadan kısa sürede yanıtlayamıyorsa, tekrar gözden geçirin.\n\nÇoğu uygulama için işe yarayan bir yapım sırası:\n\n- Önce küçük bir olay taksonomisi ve zorunlu alanları tanımlayın. Ne sayılır, hangi alanlar zorunlu: actor, zaman, eylem, nesne, sonuç ve correlation ID gibi alanları kilitleyin.\n- Gerçeği zaten bilen kaynakları enstrümante edin. Kimlik doğrulama giriş ve token olayları üretir, CRUD katmanları alan değişiklikleri ile create/update/delete olayları üretir, iş akışı motorları adım ve karar olayları üretir.\n- Olayları append-only bir denetim deposuna yazın. Denetim satırlarını güncellemeyin. Yazma sırasında sıkı doğrulama yapın (eksik actor, eksik nesne ID, geçersiz zaman damgası) ki “sonradan düzeltme” güveni bozmasın.\n\n- İnsanların nasıl soruşturduğuna uygun okumalar (reads) inşa edin. Genelde üç görünüm gerekir: ana zaman çizelgesi, olay detay paneli ve “ilgili olaylar” sorguları (aynı correlation ID, aynı nesne, aynı actor, aynı oturum).\n\n- Rol tabanlı erişim ekleyin ve destek ekibi gibi test edin. Denetim verileri hassas alanlar içerebilir; bu yüzden rol bazlı filtreleme ve maskelenmiş değerler ekleyin.\n\nAppMaster içinde inşa ediyorsanız, denetim tablolarını Data Designer'da modelleyin, karar noktalarında İş Süreci Düzenleyicisinden olay yayınlayın ve UI oluşturucularla zaman çizelgesini yan yana render edin.\n\nYayınlamadan önce gerçek bir senaryo çalıştırın: bir yönetici bir sipariş tutarının değiştiğini raporlasın. Destek, sadece zaman çizelgesi ekranını kullanarak hangi alanın değiştiğini, hangi IP ve kullanıcıyla yapıldığını, hangi iş akışı adımının tetiklendiğini ve neden (veya “sebep yok”) görüyor olmalı.\n\n## Birleşik zaman çizelgelerini işe yaramaz yapan yaygın hatalar\n\nBirleşik zaman çizelgesi, insanların ona güvenmesi ve hızlı okuyabilmesi durumunda işe yarar. Çoğu zaman çizelgesi öngörülebilir hatalar yüzünden başarısız olur.\n\nAşırı kayıt ilk hatadır. Her sayfa görüntüleme, fareyle üzerinde gezinme ve otomatik kaydetme bir olay olursa, önemli anlar kaybolur. Zaman çizelgesini durumu, erişimi veya sonucu değiştiren eylemlerle sınırlayın. Yüksek hacimli teknik günlükler gerekiyorsa, bunları ayrı tutun ve içsel olarak event ID ile bağlayın.\n\nAz kayıt da aynı şekilde kötüdür. “Kayıt güncellendi” gibi actor, hedef veya net sonuç içermeyen bir giriş kimseye yardımcı olmaz. Her olay kim yaptı, neye müdahale etti, ne zaman oldu ve ne değişti bilgilerini içermelidir. Ürününüz sebep istiyorsa (veya onay gerektiriyorsa), bu bağlamı olayın üzerine kaydedin; ayrı bir sistemde saklamayın ki soruşturma sırasında erişilemesin.\n\nDeğiştirilebilir günlükler güveni yok eder. Yöneticiler denetim olaylarını düzenleyebiliyorsa artık bir denetim izi değil, notlar vardır. Denetim olaylarını append-only tutun. Yanlış kaydedildiyse, düzeltmeyi açıklayan yeni bir olay yazın.\n\nTutarsız fiiller filtrelemeyi ve taramayı zorlaştırır. Aynı eylem için “Updated”, “Changed” ve “Edited” üç farklı olay türü olmamalıdır. Küçük bir fiil seti seçin ve ona sadık kalın: örn. created, updated, deleted, approved, rejected, logged_in, permission_changed.\n\nSon olarak, hassas verileri sızdırmayın. Ham difflar şifreler, tokenlar, kişisel veriler veya ödeme bilgileri içerebilir. Yalnızca gerekeni saklayın, hassas alanları maskelenmiş tutun ve belirli izne sahip olmayanlar için bazı detayları gizleyin. Örneğin “Telefon numarası değişti” gösterin ama eski ve yeni değerleri yalnızca yetkili biri görsün.\n\n## Göndermeden önce hızlı kontrol listesi\n\nZaman çizelgesini destek ve güvenlik gözünden test edin. Bir hassas kayıt seçin (örneğin müşteri ödemesi ayarı) ve sadece zaman çizelgesi ekranını kullanarak ne olduğunu açıklamaya çalışın.\n\nDoğrulama soruları:\n\n- Her zaman aktörü isimlendirebiliyor musunuz? Hassas kayıtlarda “yapan” bilgisi (kullanıcı, servis hesabı veya sistem), rol ve kullanılan kimlik doğrulama yöntemi (şifre, SSO, API anahtarı) gösterilmelidir.\n- Ne değiştiyi kanıtlayabiliyor musunuz? Kilit alanlar için önce ve sonra değerlerini gösterin. Eğer değer çok hassassa maskelenmiş bir versiyon ve değişiklik olduğunu kanıtlayan bir hash gösterin.\n- Bir eylemi uçtan uca takip edebiliyor musunuz? correlation_id giriş, UI eylemi, iş akışı adımları ve veritabanı yazmaları arasında bağlantı kurmalı.\n- Destek doğru olayı hızlı bulabiliyor mu? Filtrelerin actor, hedef (kayıt türü ve ID), zaman aralığı ve sonuçlar (success, failed, denied) için çalıştığını doğrulayın.\n- Denetim erişimi kontrollü ve dışa aktarmalar görünür mü? Denetim verilerini görüntüleyebilen ve dışa aktarabilenleri sınırlandırın; her görüntüleme/dışa aktarma işlemini kendi olayı olarak kaydedin (kim, ne zaman, ne dışa aktarıldı).\n\nBasit bir son test: zaman çizelgesini yapmayan birine verin ve “Bu kayıt neden 15:12'de değişmiş?” diye sorun. 60 saniyede cevap veremiyorsa muhtemelen daha fazla bağlam alanı eklemelisiniz (reason, request ID, onay veya hata detayları).\n\n## Örnek: şüpheli bir değişikliği dakikalar içinde soruşturma\n\nBir destek müdürü size şöyle der: “Acme Corp müşteri kaydı yanlış görünüyor. Fatura e-postası değişti ve müşteri ekibinden kimse yapmadığını söylüyor.” Müşteri ID'si için birleşik zaman çizelgesini açarsınız.\n\nTüm ilgili olaylar aynı correlation_id paylaştığı için zincir nettir.\n\nÖnce bir giriş görürsünüz: Sam (satış temsilcisi) 09:12'de yeni bir cihazdan ve alışılmadık bir konumdan giriş yapmış. Oturum bloğu IP, user agent ve MFA durumunu içerir. İki dakika sonra “Müşteri kaydını görüntüleme” ve ardından “Müşteri kaydını düzenleme” olayları görünür.\n\nKayıt güncelleme olayı okunması kolaydır. Tam alan değişikliklerini (fatura e-postası eski -> yeni) ve kaynağı (web uygulama) listeler. Hemen altında reason_code olarak Customer requested update görünür, fakat not boş olabilir.\n\nArdından iş akışı girdileri neler olduğuna açıklık getirir. Bir otomasyon kuralı çalışmış: “Fatura e-postası değişirse finansı bilgilendir ve onay gerektir.” Zaman çizelgesi bekleyen bir onay adımını, ardından 09:18'de Dana (takım lideri) tarafından “CASE-4812’e istinaden onaylandı” şeklinde kısa bir notla onaylandı bilgisini gösterir.\n\nDestek tahminde bulunmadan vakayı çözebilir:\n\n- Aktörü doğrula: Sam'in girişi şüpheli görünüyor (yeni cihaz, not yok), Sam'in oturumu ona ait mi teyit et.\n- Niyeti onayla: Dana'nın onay notu bir bilet numarası gösteriyorsa biletin varlığını doğrula; yoksa bu bir kırmızı bayraktır.\n- Güvenli biçimde geri al: Eski e-postayı geri yükleyen düzeltme olayı oluşturun ve zorunlu bir sebep isteyin: “Şüpheli hesap kötüye kullanımı nedeniyle geri alındı.”\n- Sonucu belgeleyin: Aynı correlation_id ile bir vaka notu ekleyin ki gelecekteki incelemeler tam hikâyeyi görsün.\n\n## Sonraki adımlar: güvenli açılım ve sürdürülebilirlik\n\nBirleşik denetim zaman çizelgesi ancak insanlar ona güvendiğinde faydalıdır. İlk sürümü bir nice-to-have değil, bir güvenlik sistemi olarak ele alın.\n\nSaklama, arama hızı ve maliyet için net hedefler belirleyin. Birçok ekip basit bir yaklaşım kullanır: 90 gün “sıcak” (hızlı), 1-2 yıl “ılık” (daha yavaş) ve daha uzun süreli arşivler.\n\nGöndermeden önce “hızlı”nın ne demek olduğunu tanımlayın. Zaman çizelgesi tipik bir kayıt için 2 saniyenin altında açılmalıysa buna göre plan yapın: (target_type, target_id, occurred_at) ile indeksleyin, yükleri küçük tutun ve eski satırları arşivleyin.\n\nKüçük adımlarla yayınlayın ki görünüm temiz ve veriler tutarlı kalsın:\n\n- Gerçek soruşturmaları kapsayan 5-8 olay türü ile UI prototipi yapın.\n- Daha fazla olay hacmi eklemeden önce saklama ve arşivleme kurallarını belirleyin.\n- Temel arama ve filtreleri (actor, tarih aralığı, olay türü) ekleyin.\n- Gerçek vakalara karşı doğrulayın: “Destek bu değişikliğin neden olduğunu söyleyebiliyor mu?”\n- Ana görünüm güvenilir olduktan sonra olay türlerini genişletin.\n\nDışa aktarma ve raporlama caziptir, ama hataları çoğaltır. Ekran üzerindeki zaman çizelgesi güvenli ve olay isimleri ile bağlam stabil olana kadar dışa aktarmaları erteleyin. Dışa aktarmalar erişim kurallarına uymalı, zaman dilimini ve kullanılan filtreleri içermeli ve değiştirilmeye karşı kanıtlayıcı bir kimlik (export ID) eklemelidir.\n\nRolleri erken planlayın; denetim verileri genellikle hassas detaylar içerir:\n\n- Zaman çizelgesini görüntüleme (kayıtla çalışan çoğu personel)\n- Dışa aktarma (liderler veya uyumluluk yetkilileri ile sınırlı)\n- Ham yükleri görüntüleme (güvenlik, mühendislik veya yalnızca yöneticiler)\n- Saklama politikalarını yönetme (yalnızca yöneticiler)\n\nAppMaster ile inşa ediyorsanız, Data Designer'da şemayı eşleyin, Business Processes’ten olay yayınlayın ve aynı noktada zaten kural uyguladığınız yerde denetim olaylarını tetikleyin. Bu, web ve mobil arasında “kim ne yaptı, ne zaman ve neden” tutarlılığını korur ve iş akışları gelişirken bakımı kolaylaştırır.
SSS
Birleşik denetim zaman çizelgesi, ürününüzün önemli olaylarının tek ve kronolojik bir akışıdır. Auth günlükleri, veritabanı geçmişi ve iş akışı araçları arasında gezmeden kim ne yaptı, ne zaman, nerede ve neden sorularına hızlıca cevap vermeyi sağlar.
Durum değiştiren, erişimi değiştiren veya iş sonucunu tetikleyen eylemleri kaydetmeyi varsayın. Hızlı değer için genellikle oturum/girişler, create-update-delete değişiklikleri, iş akışı geçişleri (onaylar ve durum değişimleri) ve roller veya API anahtarları gibi yönetici/güvenlik değişiklikleri ilk etapta kaydedilmelidir.
Okunabilir bir zaman çizelgesi için tek ve tutarlı bir olay yapısı kullanın: event_id, timestamp, actor, action + target ve outcome. Ardından UI, API ve arka plan işleri arasında uçtan uca izleyebilmek için correlation_id, session_id ve request_id gibi tanımlayıcıları ekleyin.
Niyeti açıklayan, uygulamayı değil amacı tarif eden sabit, tutarlı isimler kullanın. access.login.succeeded veya data.customer.updated gibi küçük ve stabil bir taksonomi insanlarin hızlıca taramasını ve güvenilir filtreleme yapmasını sağlar.
Sıralama ve tutarlılık için zaman damgalarını UTC'de saklayın ve UI'da yerel zamana dönüştürün. Ayrıca gösterim sırasında karışıklık olmasın diye bir timezone alanı (veya actor’un locale bilgisi) saklayın.
“Neden” bilgisini yapılandırılmış verilerle yakalayın: anlamlı değişikliklerde zorunlu bir reason_code ve gerektiğinde kısa bir reason_text. Onaylar veya politikalar varsa approver, karar zamanı ve bir referans ID saklayarak her girdinin kendi başına açıklayıcı olmasını sağlayın.
Varsayılan olarak ekleme-yalnız (append-only) davranışı uygulayın: denetim olaylarını düzenlemeyin veya silmeyin. Yanlış kaydedildiyse, orijinal olaya referans veren yeni bir düzeltme olayı yazın ki okuyucu ne değiştiğini ve nedenini görebilsin.
Basit üç parçalı bir düzenle başlayın: solda filtreler, ortada zaman çizelgesi listesi ve sağda detay çekmecesi. Liste bir bakışta "kim/ne/zaman/neden" sorularını yanıtlamalı; detay görünümü ise IP, cihaz ve alanların önce/sonra değerleri gibi kanıtları göstermelidir.
Aşırı kayıt (over-logging) önemli anları gürültüye gömer; az kayıt (under-logging) ise belirsiz girişlere yol açar. Diğer yaygın hatalar: tutarsız fiiller, eksik correlation ID'ler ve difflerde gizli bilgilerin sızmasıdır.
AppMaster'da Data Designer ile denetim tablolarını modelleyin, İş Süreci Düzenleyicisinden (Business Process Editor) kilit karar noktalarında olaylar yayınlayın ve web/mobil oluşturucularla zaman çizelgesi UI'sini inşa edin. UI aksiyonları, backend mantığı ve entegrasyonlar aynı olay şemasını yazdığında birleşik zaman çizelgesi özellikle faydalı olur.


