---
title: 'Günlük Filtreleme ve Döndürme'
source: 'https://academia.sh/tr/kurslar/sistem-yonetimi/gunluk-filtreleme-ve-dondurme'
course: 'Sistem Yönetimi'
language: tr
updated: '2026-08-17T18:10:04+00:00'
license: 'CC BY-SA 4.0'
---

# Günlük Filtreleme ve Döndürme

Düzey, birim ve zaman süzgeçleri ile döndürme politikasının birlikte ölçülmesi: 4000 satırda 86 hata varken 1000 satırlık dosyada 19, 200 satırlık dosyada 5 hata kalıyor ve altı inceleme sorusunun kaçının yanıtsız kaldığı sayılıyor.

Önceki iki ders elinde bütün günlük varken çalıştı: 4000 satır da, 601 satır da eksiksizdi
ve süzgeçler bu bütünün üzerinde koştu. Bu varsayım bir makinede sınırlı bir süre geçerlidir.
Günlük dosyaları sınırsız büyümez; disk sonludur ve dolan bir disk, günlüğün kendisinden
daha büyük bir arızadır.

Bu ders iki mekanizmayı birlikte ele alır. Birincisi **süzme**: elinizdeki satırlardan bir
alt küme seçmek. İkincisi **döndürme (rotation)**: elinizdeki satırların bir kısmını kalıcı
olarak atmak. İkisi yüzeyde benzer görünür — ikisinden sonra da daha az satır kalır — ama
biri geri alınabilir, öteki alınamaz. Ölçülen şey, ikisinin tanıya verdiği zarardır.

## Süzmenin Düşürdüğü Bağlam

Üç süzgeç türü vardır ve üçü farklı bir eksen boyunca keser. **Düzey süzgeci** yalnız
belirli bir önem derecesinin üstündekileri bırakır. **Birim süzgeci** yalnız bir servisin
kayıtlarını bırakır; önceki derste ölçülen şey buydu, komşuluk kaybını üretir. **Zaman
süzgeci** bir aralığın dışını atar.

Düzey süzgeci en sık kullanılan ve en aldatıcı olanıdır. 4000 satırlık bir günlükte hata
sayısı 86'dır; hatalarla sınırlanmış bir görüntü 4000 satırı 86'ya indirir ve okunabilir
hâle getirir. Düşen 3914 satırın içinde ise hatanın **öncesi** vardır. Bir servisin hataya
gitmeden önce yazdığı uyarı, hatanın kendisinden daha çok şey söyleyebilir: yeniden deneme
sayısı, zaman aşımı süresi, kuyruk doluluğu. Düzey süzgeci bunları görünmez yapar.

Zaman süzgecinin tuzağı farklıdır. Bir arıza fark edildiğinde inceleme çoğunlukla fark
edilme anından geriye doğru dar bir pencereyle başlar. Arızanın kendisi o pencerede olabilir,
ama arızayı **başlatan** olay dışarıda kalabilir. Pencereyi genişletmek satır sayısını
artırır ve okumayı zorlaştırır; bu, kursun ikinci iddiasının bir yüzüdür: daha çok satır
daha iyi tanı demek değildir, ama daha az satır da her zaman daha net tanı vermez.

Süzmenin belirleyici özelliği geri alınabilirliğidir. Süzgeç yanlış seçildiyse komut yeniden
çalıştırılır. Kayıp yoktur, yalnız zaman geçmiştir.

Süzgecin nasıl kurulduğu da biçime bağlıdır. Yapılandırılmış kayıtta üç eksen ayrı ayrı
verilebilir; düz metinde metin eşleme ile satır seçilir ve zaman kısıtı metnin kendisinden
ayrıştırılır. Aşağıdaki iki döküm örnektir ve çalıştırılmamıştır.

```text
# ornek dokum , calistirilmis degildir
$ journalctl -u isleme -p warning --since -10min
$ grep -E 'hata|uyari' /var/log/isleme/isleme.log | tail -n 40
```

İki satır aynı işi yapmaz. Birincisi birimi, düzeyi ve zaman aralığını **alan olarak**
kısıtlar; ikincisi ileti metninde iki sözcük arar ve zaman kısıtı yerine son kırk satırı
alır. İkincisi, "uyari" sözcüğünü kullanmayan bir programın satırlarını sessizce atar ve
"son kırk satır" kaç saniyeyi kapsadığını söylemez.

## Döndürme: Geri Alınamayan Kesme

Döndürme bir dosyanın büyümesini sınırlayan mekanizmadır. Dosya belirlenen boyuta ya da yaşa
ulaştığında yeniden adlandırılır, yerine yenisi açılır ve elde tutulan eski kopya sayısı
aşıldığında en eskisi **silinir**. Sıkıştırma, silinme anını geciktirir; kaldırmaz. Bir
**saklama politikası** bu üç parametreden oluşur: eşik, tutulan kopya sayısı ve sıkıştırma.

Sistem günlüğünün kendi sınırı da benzer çalışır: toplam boyut ya da süre sınırı aşıldığında
en eski kayıtlar atılır. Ayrımın adı önemli değildir; sonuç aynıdır. Aşağıdaki döküm
örnektir ve çalıştırılmamıştır.

```text
# ornek dokum , calistirilmis degildir
$ ls -1 /var/log/isleme/
isleme.log
isleme.log.1
isleme.log.2.gz
```

Buradaki soru şudur: dosya sınırı, arızanın süresinden kısaysa ne olur. Yanıt, kursun
üçüncü iddiasıdır: **kanıt kendiliğinden yok olur.** Kimse silmez, kimse karar vermez;
politika çalışır ve kanıt gider.

Bu kaybın en sinsi yanı sessizliğidir. Silinen satırların yerine bir işaret bırakılmaz;
dosyanın başında "buradan öncesi atıldı" diyen bir satır yoktur. Operatör dosyayı açtığında
gördüğü şey, eksik bir kaydın değil, **kısa bir geçmişin** görüntüsüdür. Süzgeçte durum
farklıdır: süzgeci kendisi yazdığı için neyi dışarıda bıraktığını bilir. Döndürmede seçimi
yapan taraf operatör değildir ve seçim, arıza olmadan çok önce, bir yapılandırma dosyasına
yazılmıştır.

## Ölçülen Şey: Kalan Kanıt ve Yanıtsız Soru

Ölçü iki parçalıdır. Birinci parça kalan kanıt oranıdır: dosya boyutu küçüldükçe pencerenin
başındaki hataların kaçı hayatta kalıyor. İkinci parça, bir arıza incelemesinde gerçekten
sorulan **altı soruya** verilen yanıtların kaçının yanlış çıktığıdır: toplam hata sayısı,
ilk hatanın saniyesi, ilk hatanın birimi, son hatanın saniyesi, pencerenin ilk yarısındaki
hata sayısı ve hiç hata yazmayan birim sayısı. Kâhin, tam günlükten okunan yanıtlardır.

Kurgunun varsayımları: döndürülmüş dosya her zaman **son** satırları tutar ve atılan kısım
geri gelmez (**GN9**); sınanan boyutlar 4000, 2000, 1000, 500 ve 200 satırdır (**GN10**);
inceleme soru kümesi yukarıdaki altı sorudur (**GN11**); öncül uyarı penceresi beş saniye
ve öncülün aynı birimden gelmesi gerekir (**GN12**); satır hızı pencere boyunca sabittir
(**GN13**).

```python
TOHUM = 20260218
DONEM = 600                      # gozlem penceresi: 600 saniye


def uretec(tohum):
    d = tohum

    def sonraki(n):
        nonlocal d
        d = (d * 1103515245 + 12345) % 2147483648
        return d % n
    return sonraki


BIRIM = {
    "veri-alma":      {"gerektirir": [], "yeniden": "her zaman"},
    "kuyruk":         {"gerektirir": ["veri-alma"], "yeniden": "her zaman"},
    "isleme":         {"gerektirir": ["kuyruk"], "yeniden": "arizada"},
    "rapor":          {"gerektirir": ["isleme"], "yeniden": "hayir"},
    "olcum":          {"gerektirir": ["veri-alma"], "yeniden": "her zaman"},
    "yedek":          {"gerektirir": [], "yeniden": "hayir"},
}


def gunluk_uret(tohum=TOHUM, satir=4000):
    r = uretec(tohum)
    kayit = []
    for i in range(satir):
        agirlik = r(100)
        duzey = "hata" if agirlik < 3 else ("uyari" if agirlik < 12 else "bilgi")
        kayit.append({"sira": i, "saniye": i * (DONEM / satir),
                      "duzey": duzey, "birim": list(BIRIM)[r(len(BIRIM))]})
    return kayit


def dondur(kayitlar, boyut):
    """GN9: dosya `boyut` satirda dolar ve eskisi silinir. Geriye ne kaldi."""
    return kayitlar[-boyut:] if boyut < len(kayitlar) else list(kayitlar)


def kanit_orani(kayitlar, kalan, duzey="hata"):
    tum = [k for k in kayitlar if k["duzey"] == duzey]
    kalanlar = [k for k in kalan if k["duzey"] == duzey]
    return {"toplam": len(tum), "kalan": len(kalanlar),
            "oran": round(len(kalanlar) / len(tum), 4) if tum else 0.0}


def onculu_hata(kayitlar, aralik=5.0):
    """GN12: kendinden onceki bes saniyede AYNI birimden uyari gelmis hatalar."""
    u = [k for k in kayitlar if k["duzey"] == "uyari"]
    h = [k for k in kayitlar if k["duzey"] == "hata"]
    return sum(1 for a in h
               if any(a["birim"] == b["birim"]
                      and 0 <= a["saniye"] - b["saniye"] <= aralik for b in u))


def yanitlar(kayitlar):
    """GN11: inceleme sorulari , dosyada duran satirlardan yanitlanir."""
    h = [k for k in kayitlar if k["duzey"] == "hata"]
    if not h:
        return {"toplam": 0, "ilk": None, "ilk_birim": None, "son": None,
                "ilk_yari": 0, "sessiz_birim": len(BIRIM)}
    d = {b: sum(1 for k in h if k["birim"] == b) for b in BIRIM}
    return {"toplam": len(h), "ilk": round(h[0]["saniye"], 1),
            "ilk_birim": h[0]["birim"], "son": round(h[-1]["saniye"], 1),
            "ilk_yari": sum(1 for k in h if k["saniye"] < DONEM / 2),
            "sessiz_birim": sum(1 for b in d if d[b] == 0)}


for tohum in (TOHUM, 20260219):
    G = gunluk_uret(tohum)
    K = yanitlar(G)
    print("tohum", tohum, "| satir", len(G), "| uyari",
          sum(1 for k in G if k["duzey"] == "uyari"), "| hata", K["toplam"])
    print("  duzey suzgeci: onculu uyarisi gizlenen hata", onculu_hata(G), "/", K["toplam"])
    print("  kahin:", K)
    print("  boyut  kalan  hata  kanit orani  yanlis yanit  ilk hata")
    for boyut in (4000, 2000, 1000, 500, 200):        # GN10
        kalan = dondur(G, boyut)
        ko = kanit_orani(G, kalan)
        Y = yanitlar(kalan)
        print(f"  {boyut:5d}  {len(kalan):5d}  {ko['kalan']:4d}  {ko['oran']:11.4f}"
              f"  {sum(1 for a in K if Y[a] != K[a]):12d}  {Y['ilk']}")
```

```
tohum 20260218 | satir 4000 | uyari 408 | hata 86
  duzey suzgeci: onculu uyarisi gizlenen hata 63 / 86
  kahin: {'toplam': 86, 'ilk': 6.1, 'ilk_birim': 'isleme', 'son': 598.0, 'ilk_yari': 44, 'sessiz_birim': 3}
  boyut  kalan  hata  kanit orani  yanlis yanit  ilk hata
   4000   4000    86       1.0000             0  6.1
   2000   2000    42       0.4884             3  314.2
   1000   1000    19       0.2209             4  461.2
    500    500    12       0.1395             4  527.5
    200    200     5       0.0581             4  573.4
tohum 20260219 | satir 4000 | uyari 314 | hata 163
  duzey suzgeci: onculu uyarisi gizlenen hata 99 / 163
  kahin: {'toplam': 163, 'ilk': 1.3, 'ilk_birim': 'rapor', 'son': 594.0, 'ilk_yari': 80, 'sessiz_birim': 3}
  boyut  kalan  hata  kanit orani  yanlis yanit  ilk hata
   4000   4000   163       1.0000             0  1.3
   2000   2000    83       0.5092             3  301.8
   1000   1000    35       0.2147             3  451.5
    500    500    12       0.0736             3  528.1
    200    200     3       0.0184             5  578.2
```

## Çıktının Söylediği ile Sistemin Gerçeği

Üç sayı yan yana durur. **Kâhin:** altı yüz saniyelik pencerede **86** hata oldu; ilki
altıncı saniyede, `isleme` biriminde. **Araç çıktısı:** 1000 satırlık dosyada **19** hata
görünüyor, 200 satırlıkta **5**. **Yanlış tanı:** altı sorunun 1000 satırda **4'ü**, 200
satırda yine **4'ü** yanlış yanıtlanıyor.

Kalan kanıt oranı döndürme boyutuyla birlikte düşer: 2000 satırda 0,4884, 1000 satırda
**0,2209**, 500 satırda 0,1395, 200 satırda **0,0581**. Dosyayı yarıya indirmek kanıtın
yarısını değil, yarısından fazlasını götürür; kayıtlar zaman içinde düzgün dağılmadığı için
kayıp doğrusal değildir.

Asıl zarar sayıda değil, sayının **inandırıcılığındadır**. 200 satırlık dosyayı açan operatör
beş hata görür ve beş hatanın hepsi gerçektir; hiçbiri uydurma değildir. Ondan çıkardığı
"bu pencerede beş hata oldu" cümlesi ise yanlıştır. Araç yalan söylemiyor; dosya yalan
söylemiyor. Yanlış olan, **eksik bir dosyadan tam bir sonuç çıkarmaktır.**

Altı sorunun tablosu bunu ayrıntılandırır. Tam dosyada altı yanıtın altısı doğrudur. 2000
satırda üç yanıt bozulur: toplam hata sayısı, ilk hatanın saniyesi ve pencerenin ilk
yarısındaki hata sayısı. 1000 satırdan itibaren ilk hatanın **birimi** de yanlış çıkar:
gerçek ilk hata `isleme` birimindeyken dosyada kalan ilk hata başka bir birime aittir.
İnceleme "arıza nerede başladı" sorusuna yanlış birimi işaret ederek yanıt verir ve bu
yanıtın yanlış olduğunu gösteren hiçbir belirti dosyada yoktur.

Dikkat çeken bir ayrıntı, yanlış yanıt sayısının 1000'den sonra **artmamasıdır**: dörtte
kalır. Bunun nedeni, kalan iki sorunun — son hatanın saniyesi ve sessiz birim sayısı —
pencerenin sonuna yakın kayıtlardan yanıtlanabilmesidir. Döndürme her soruyu eşit ölçüde
vurmaz: **geçmişe bakan sorular önce ölür, şimdiye bakan sorular sağ kalır.**

Bir başka ayrıntı da kanıt oranının **hata sayısını** değil hata **oranını** koruyabilmesidir.
200 satırlık dosyada beş hata vardır ve bu, satır başına düşen hata bakımından tam günlükteki
orana yakındır. Yalnız orana bakan bir tanı hiçbir tuhaflık görmez: dosya sağlıklı bir
sistemin sağlıklı bir kesiti gibi durur. Kaybolan şey oran değil, **süredir**; olayın ne
kadar sürdüğü, ne zaman başladığı ve nasıl yayıldığı yalnız uzun pencereden okunur.

Süzmenin ölçüsü de aynı çıktıdadır. 86 hatanın **63'ünün** kendinden önceki beş saniye
içinde aynı birimden gelmiş bir uyarısı vardır. Yalnız hataları gösteren bir görüntü bu 63
öncülün hepsini gizler; satırlar dosyada durur, ama bakılan yerde durmaz. Süzmenin farkı
şudur: süzgeci gevşetmek 63 satırı geri getirir, döndürmeyi gevşetmek geçmişte silinmiş
satırı geri getirmez.

## Dosya Kaç Saniyelik Geçmiş Tutuyor

Döndürme eşiği satır cinsindendir, oysa incelemenin sorduğu şey zamandır. İkisi arasındaki
çeviri satır hızıyla yapılır ve bu kurguda hız sabit alınmıştır (**GN13**): altı yüz
saniyede 4000 satır, yani satır başına 0,15 saniye. Buradan her eşiğin tuttuğu geçmiş doğrudan çıkar. 2000 satırlık
bir dosya 300 saniyelik, 1000 satırlık dosya 150 saniyelik, 200 satırlık dosya yalnız 30
saniyelik geçmiş tutar.

Çıktının son sütunu bu hesabı doğrular. 1000 satırlık dosyada görülen ilk hata 461,2.
saniyededir; dosyanın kapsadığı pencere 450. saniyede başlar. 200 satırlık dosyada ilk hata
573,4. saniyededir; pencere 570'te başlamıştır. Gerçek ilk hata ise 6,1. saniyededir ve
hiçbir küçük dosyada bulunmaz.

Bu çeviri, eşiği seçerken sorulacak soruyu belirler. "Kaç satır tutalım" sorusunun anlamlı
bir yanıtı yoktur; anlamlı soru "kaç saniyelik geçmiş gerekiyor" sorusudur ve satır hızı
biliniyorsa aradaki dönüşüm bir çarpmadır. Satır hızı sabit de değildir: arıza anında
servisler daha çok yazar, dolayısıyla dosya tam olarak en çok kanıt üretilen anda **daha
hızlı** dolar ve daha hızlı döner. Kanıtın yoğunlaştığı an, kanıtın en hızlı silindiği andır.

## Politikanın Ne Anlama Geldiği

Buradan işletim tarafında iki karar çıkar. Birincisi, döndürme eşiği bir depolama kararı
gibi görünse de aslında bir **inceleme kararıdır**: eşik, arızanın en uzun makul süresinden
kısa olmamalıdır. Kalan kanıt oranı bunun ölçüsüdür ve önceden hesaplanabilir; günlük satır
hızı biliniyorsa, bir eşiğin kaç saniyelik geçmişi tuttuğu bir bölme işlemidir.

İkincisi, "her ihtimale karşı hepsini sakla" bir çözüm değildir. Disk dolarsa yazma
başarısız olur ve o başarısızlık, kaybedilen kanıttan daha ağır bir arızadır. Depolama
konusu bu sınırın iki ayrı biçimde geldiğini gösterecektir. Doğru karar, hangi sorunun
yanıtlanabilir kalması gerektiğine önceden karar vermek ve eşiği o soruya göre seçmektir.

Üçüncü bir karar da döndürmenin **ne zaman** yapıldığıdır. Zamana bağlı döndürme sabit
aralıklarla çalışır ve dosya küçük kalsa bile döndürür; boyuta bağlı döndürme dosya
dolduğunda çalışır ve sessiz bir makinede hiç dönmeyebilir. İkisi bir arada
kullanıldığında, önce hangisi tetiklenirse o kazanır. Sonuç şudur: bir eşiğin tuttuğu
geçmiş, makinenin ne kadar konuşkan olduğuna göre değişir ve yoğun bir günde beklenenden
kısa olur.

Dördüncü karar döndürmenin nasıl yapıldığıdır. Dosya yeniden adlandırılıp yerine yenisi
açılırsa, dosyayı hâlâ açık tutan bir süreç eski dosyaya yazmayı sürdürür ve yeni dosya boş
kalır; bu yüzden döndürme sonrasında yazan tarafa dosyayı yeniden açmasını söyleyen bir
sinyal gönderilir. Süreç yönetimi konusunda kurulan sinyal modeli burada bir günlük
mekanizmasının parçasıdır. Sinyal gönderilmezse arıza sessizdir: dosyalar döner, boyut
sınırı çalışır, ama kayıtlar artık kimsenin bakmadığı bir dosyaya düşer.

## İkinci Tohum

İkinci tohumda günlük daha gürültülüdür: 163 hata ve 314 uyarı çıkar. Kanıt oranı benzer
biçimde düşer — 1000 satırda 0,2147, 200 satırda 0,0184. Yanlış yanıt sayısı 2000, 1000 ve
500 satırda **3**, 200 satırda **5** olur. Kesin değerler **kurguya bağlıdır**; kurguya
bağlı olmayan şey, kalan kanıt oranının döndürme boyutuyla birlikte hızla düşmesi ve
geçmişe bakan soruların önce yanıtsız kalmasıdır.

## Özet

- Süzme geri alınabilir, döndürme alınamaz; ikisi de satır azaltır ama biri kayıp üretmez.
- 4000 satırda 86 hata varken 1000 satırlık dosyada **19** (0,2209), 200 satırlıkta **5**
  (0,0581) hata kalır; kayıp doğrusal değildir.
- Altı inceleme sorusundan 1000 satırda **4'ü** yanlış yanıtlanır ve bunlardan biri "arıza
  nerede başladı" sorusudur; yanlışlığın hiçbir belirtisi dosyada yoktur.
- Döndürme soruları eşit vurmaz: geçmişe bakan sorular önce ölür, şimdiye bakan sorular sağ
  kalır.
- 86 hatanın **63'ünün** aynı birimden gelen bir uyarı öncülü vardır; düzey süzgeci onları
  gizler, ama süzgeci gevşetmek geri getirir.

## Sonraki Adım

Bu derste ölçülen kayıp geçmişe aitti: silinmiş satır geri gelmiyordu. Bir makinenin
durumunu anlatan ikinci veri türü ise satır değil sayıdır — yük, bellek, disk doluluğu — ve
orada kayıp başka bir biçimde ortaya çıkar. Bu sayılar tek bir ana ait değildir; geçmiş bir
pencereyi ortalayarak üretilirler ve ortalama, sıçramayı yumuşatır. Sonraki ders sistem
sağlığı ölçümlerini ele alır ve yük ortalamasının gecikmeli bir gösterge olduğunu sayıyla
gösterir: anlık yük 7,36 iken altmış saniyelik ortalama 6,22'de kalır.
