API Trafik Loglarını Yönetmek: Ne Kadar, Nerede, Ne Kadar Süre
"Logları kaç yıl saklamalıyız?" sorusuna tek başına bir sayı yetmiyor. Konuşulması gereken dört şey var: ne duracak, neden duracak, ne kadar süre ve nerede. Bunlar netleşmeden uzun süre durması beklenen kayıt, aynı süreyle sıcak veri sanılabiliyor.
Disk dolunca log konuşması başlıyor. Yanında iki cümle duruyor: bir yanda "2, 5, 8 yıl tutulması istenen durumlar oluyor", diğer yanda "zaten her isteği yanıtıyla birlikte logluyoruz." İkisi aynı cümlede durunca iş disk büyütmeye geliyor. Oysa uzun süre duracak kayıt ile teşhis için tuttuğunuz kayıt çoğu zaman aynı şey değil.
Kaç yıl, hangi alanlar — bunu teknik ekip tek başına kesmez. Süreyi ve kapsamı hukuk veya uyum biriminden alın; bu yazı o cevabı aldıktan sonra veriyi nereye ve hangi ayrıntıda koyacağınızla ilgilenir.
Önce dört soru
"Neyi" saklıyoruz?
"Log" deyince herkes aynı şeyi anlamıyor. Pratikte üç ayrıntı seviyesi var; boyutları da kat kat farklı:
| Ne | İçeriği | Kabaca kayıt boyutu |
|---|---|---|
| Erişim kaydı | Kim, ne zaman, hangi IP'den, hangi API'ye, hangi metotla erişti; sonuç ne oldu (durum kodu, hata tipi, süre) | 1–2 KB |
| İstek detayı | Erişim kaydı + istek başlıkları, parametreler ve istek gövdesi | 3–15 KB |
| Tam trafik kaydı | Yukarıdakilerin tamamı + yanıt başlıkları ve yanıt gövdesi, dört mesaj bölgesi için ayrı ayrı | 10–50 KB, gövdeye göre çok daha fazlası |
Üçü de meşru tercih. Hangisinin nerede duracağı maliyeti 10–50 kat değiştirebilir. Uzun süre saklanacak katmanda çoğu kurum erişim kaydıyla idare eder; tam gövdeyi yıllarca tutmak bilinçli bir tercih olsun. Ne duracağına teknik ekip tek başına karar vermesin; kapsamı ilgili ekipten alın.
Kayıtta hangi alanın durduğunu görmek için API Trafiği Log Kaydı Veri Yapısı sayfasına bakabilirsiniz.
"Niçin" saklıyoruz?
Gerekçe değişince hem süre hem kapsam değişiyor:
Süre ve kapsam ilgili ekipten gelir. Teknik taraf katmanı ona göre kurar.
Süre kısa, kapsam geniş. Gövdesiz log çoğu zaman işe yaramaz.
Süre uzun, kapsam dar. Sayılar yeter, kaydın içeriği gerekmez.
Üç yıl önceki bir kayda kim bakıyor, onu sorun. İlgili ekip bakıyorsa istediği çoğu zaman erişim kaydıdır. Geliştirici bakıyorsa istediği tam mesajdır; ama üç yıl öncesini değil, dünü sorar. İş birimi bakıyorsa istediği sayıdır. Üçünü tek depoda karşılamaya çalışmak işi pahalı yapan şeydir.
"Ne kadar süre" ve "nerede"?
Süreyi ortam belirler. Erişim kaydını yıllarca saklamak ile dört bölgenin gövdesini aynı süre saklamak aynı iş değildir. Yazının geri kalanı şu tabloyu merkeze alıyor:
| Katman | Ne durur | Tipik süre | Nerede |
|---|---|---|---|
| Sıcak | Tam trafik kaydı | 1–6 ay | Apinizer'ın Elasticsearch'ü, sıcak düğümler |
| Ilık / soğuk | Tam veya kısaltılmış kayıt | 6 ay – 1+ yıl | Aynı küme, soğuk katman düğümleri |
| Arşiv | Erişim kaydı | 2–10 yıl | SIEM veya arşiv veritabanı |
| Özet | Sayılar, oranlar, trendler | Süresiz | Analitik raporları |
Elasticsearch'ü baştan kapatmayın
Disk konuşulunca ilk refleks bazen "o zaman logu kapatalım" oluyor. Bunu biraz bekletin.
Apinizer'da Elasticsearch zorunlu değildir; logları veritabanına, Graylog'a, Syslog üzerinden bir SIEM ürününe veya Kafka'ya da yazabilirsiniz. Ama API Trafiği ekranındaki arama, Analitik raporları ve izlemenin büyük kısmı Elasticsearch'ten gelir. Orayı kapatınca platform çalışmaya devam eder; bir sorunu ekranı açıp göstermek yerine telefonda anlatmak zorunda kalırsınız.
Diskiniz rahatsa Elasticsearch'te 1 yıllık geçmiş tutmak iyi bir başlangıçtır. Bir yıl, mevsimselliği gösterir: geçen yılın aynı haftası, bayram öncesi, yıl sonu kapanışı. Altı aylık pencerede bunları göremezsiniz.
Tutulur. Sıcak, ılık, soğuk ve dondurulmuş katmanlar tam olarak bunun için vardır: eski veriyi daha ucuz, daha büyük diskli sunuculara indirir, erişimi yavaşlatır ama korur. Sorun Elasticsearch'ün uzun süre saklayamaması değil; her şeyi sıcak katmanda tutmaktır.
Yine de sıra şöyle olsun: önce üretmeniz gerekmeyen veriyi üretmeyin, sonra katmanlayın, en son donanım ekleyin. Tersine çevirince aynı konuşma birkaç ay sonra daha büyük bir faturayla geri gelir.
Belirli bir noktadan sonra ayar yetmez. Küme 20 TB'ı aşıyorsa yeni veri düğümü eklemek daha doğrudur. Var olan düğümün diskini büyütmek kısa vadede kolay görünür; sorgu yükü, kurtarma süresi ve yeniden dengeleme tek yerde birikir.
Büyük kümelerde görülen tablo aynıdır: soğuk düğümleri büyük diskli ama daha zayıf işlemcili sunucularla kurmak maliyeti ciddi düşürür; aynı veriyi sıcak ve pahalı diskte tutmak tek başına faturayı şişirir. "Her şeyi sıcak tut" teknik bir zorunluluk değildir.
Aksiyon almadan önce ölçün
Log ayarlarına dokunmadan önce üç sayıyı bilin: son 1 günde, son 1 ayda ve son 1 yılda kaç kayıt ve kaç GB üretildi?
Bunları Apinizer arayüzünden çıkarabilirsiniz:
Zaman aralığı seçerek belirli bir dönemde kaç kayıt oluştuğunu görürsünüz. API Proxy ve metot ile daraltınca hacmi kimin ürettiği çıkar. Bkz.
Aylık toplamları yan yana konunca büyümenin düz mü, sıçramalı mı olduğu görünür. Bkz.
Küme sağlığı, indeks boyutları ve disk kullanımı burada durur. Kayıt sayısını buradaki boyuta bölünce ortalama kayıt boyutu çıkar; planlamanın dayandığı sayı budur. Bkz.
İki şeyi ayrıca not edin. Biri dönemsel sıçramalar: ay sonu mutabakatı, maaş günü, kampanya haftası. Yıllık ortalamaya göre kurulan disk, tepede yarı yolda bırakır. Öteki hacmin dağılımı: neredeyse her kurulumda toplamın büyük kısmını birkaç uç nokta üretir. Onları bulunca tüm sistemi kısmak zorunda kalmazsınız.
Gövdesiz log bile bedava değil
Gövde loglamayı tamamen kapatsanız bile kayıt yok olmaz. Metrikler, HTTP istek detayları, durum bilgisi ve başlıklar kayıt başına yaklaşık 2 KB tutar. Aylık 50 milyon istekte bu, taban maliyet olarak ayda yaklaşık 100 GB eder. Bir replika ile 200 GB, yılda 2,4 TB.
Replika: yedek kopya diski ikiye katlar. "1 TB veri" pratikte 2 TB disk demektir.
Doluluk tavanı: Elasticsearch disk %85'i geçince yeni parça yerleştirmeyi durdurur, %95'i geçince indeksleri salt-okunur duruma alabilir. 1 TB'lık disk gerçekte ~800 GB kullanılabilir alandır. Kalan %20 kapasite değil, emniyet payıdır.
Hacmi kaynağında azaltmak
Ölçümü yaptıysanız nereye dokunacağınızı biliyorsunuz. Aşağıdaki ayarların çoğu Log Ayarları sekmesinden yönetilir. Gizlilik kuralları da aynı sekmede, seçilen konnektör için tanımlanır; ortam konnektörü eklenirken de aynı ayarlar vardır.
1. Gereksiz bölgeleri kapatın
Bir API Proxy'de dört mesaj bölgesi loglanabilir: istemciden gelen istek (Request from Client), backend'e giden istek (Request to Target), backend'den gelen yanıt (Response from Target) ve istemciye giden yanıt (Response to Client).
Prod'da 2. ve 3. bölgeyi kapatmak iyi bir varsayılandır. Bu iki bölge geliştirme ve dönüşüm hatalarını ayıklarken işe yarar; aylardır aynı şekilde çalışan bir prod proxy'sinde nadiren açılıp okunur. İkisini kapatmak çoğu kurulumda hacmi yarıya yakın düşürür.
Uç noktaya göre 4. bölge de kapatılabilir. Asgari anlamlı yapılandırma 1. bölgedir; erişim kaydının kaynağı orasıdır.
Bu iki protokolde trafik, Apinizer'a gelen ve Apinizer'dan çıkan veri olarak tutulduğu için dört değil iki bölge vardır. Kapatma kararını buna göre verirsiniz.