Sed ile günlük filtreleme

0 Ответов 10 Просмотров
Оценившие
Участники
Автор темы #1
Sed ile günlük filtreleme

[giriş]
Günlük dosyalarıyla çalışırken belirli kalıpları hızlıca ayıklamak için sed komutu güç verebilir. Sed, akışkan bir düzenleyici olarak satırları akış içinde işler; çok büyük günlük dosyalarında bile doğrudan belirli desenleri çıkarabilir, değiştirebilir veya yönlendirebilir. Aşağıdaki örnekler, günlükte sık karşılaşılan görevleri güvenli ve tekrarlanabilir bir şekilde yerine getirmek için temel bir yolaçtır.

[ul]
  • Belirli bir tarih içeren satırları seçme
    Bu, günlük dosyalarında belirli günleri ya da tarih aralıklarını filtrelemek için kullanışlıdır. Örnek olarak 2024-07-15 tarihini içeren satırları almak:
    КОД
    1sed -n '/2024-07-15/p' /path/to/gunluk.log


  • Günlükten hata mesajlarını ayıklama
    Error veya hata içeren satırları çıkarmak için:
    КОД
    1sed -n '/error/Ip' /path/to/gunluk.log

    Burada i bayrağı büyük/küçük harfe duyarlılığını azaltır, p satırı yazdırır.

  • Belirli bir süre aralığındaki kayıtları toplama
    Örneğin 12:00 ile 14:59 arasındaki satırları çekmek için düzenli ifade kullanılır:
    КОД
    1sed -n '/2024-07-15 12:/,/2024-07-15 14:59:/p' /path/to/gunluk.log

    (Kodun güvenilirliği için zaman damgası formatını log dosyanızla uyumlu şekilde ayarlayın.)

  • Satırları yeniden biçimlendirme veya temizleme
    Gereksiz boşlukları kaldırma:
    КОД
    1sed -E 's/[[:space:]]+/ /g' /path/to/gunluk.log

    Kullanıcıya göre satır başını/sonunu temizlemek:
    КОД
    1sed -E 's/^\\s+|\\s+$//g' -e 's/\\s+/ /g' /path/to/gunluk.log


  • Günlük üzerinden belirli alanları yeniden yönlendirme
    Örneğin CSV benzeri günlükte ikinci alanı çıkartıp yeni dosyaya yazdırma:
    КОД
    1sed -n 's/^[^,][i],\\([^,][/i]\\).*/\\1/p' /path/to/gunluk.csv > /path/to/second_field.txt

    [/ul]

    Pratik ipuçları
    • Büyük dosyalar için sed sürekli olarak tüm dosyayı değil, akış olarak işlediğinden bellek üzerinde daha az baskı yapar. Ancak çok büyük günlükler için dosyayı parçalara bölüp her parça üzerinde işlemler yapmak daha güvenli olabilir.
    • Desenleri ne kadar hassas belirtirseniz sonuç o kadar güvenilir olur. Özellikle tarih ve saat formatlarında log üreticileri farklı biçimler kullanabildiğinden, kendi günlük formatınıza özel desenler oluşturun.
    • Yerine yazılarla çalışırken -i bayrağını dikkatli kullanın; orijinal dosyayı değiştirir. Geri almak için yedek tutun veya komutu -i'' ile çalışma yapmadan önce bir kopya oluşturarak test edin.


    [paragraf]
    Sed ile günlük filtrelemenin temel mantığını kavradıktan sonra, otomasyona dönüştürmek için bir zamanlayıcı veya basit bir shell script yazmak mantıklı olur. Örneğin günlüklerinizi her saat başı filtrelemek ve sonuçları ayrı bir log dosyasına kaydetmek için bir betik şu şekilde başlayabilir:
    КОД
    1234567#!/bin/sh
    LOG="/var/log/app/gunluk.log"
    OUT_DIR="/var/log/app/filtered"
    mkdir -p "$OUT_DIR"
    DATE=$(date +%Y-%m-%d_%H%M%S)
    sed -n '/error/Ip' "$LOG" > "$OUT_DIR/error_$DATE.log"
    sed -n '/2024-07-15/Ip' "$LOG" > "$OUT_DIR/date_filtered_$DATE.log"
    

    Bu basit örnek, sed’in akış içindeki dönüşümleri nasıl otomatikleştireceğini gösterir ve günlük analizi için güvenilir bir taban oluşturur.
    [/paragraf]

    [closing]
    Sed ile günlük filtreleme konusunda kendi günlük formatınıza uygun desenleri belirleyerek daha sofistike akışlar kurabilirsiniz. Yorumlarınız, benzer senaryolarda hangi desenlerin en çok işe yaradığını paylaşmanızı sağlar.
  • Чтобы ответить, необходимо войти в систему.

    Пользователи, просматривающие эту тему (Всего: 1, Участники: 1, Гости: 0)
    Всего: 1 (участники: 1, гости: 0)
    0 цитат выбрано