Themenersteller
#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:
Günlükten hata mesajlarını ayıklama
Error veya hata içeren satırları çıkarmak için:
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:
(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:
Kullanıcıya göre satır başını/sonunu temizlemek:
Günlük üzerinden belirli alanları yeniden yönlendirme
Örneğin CSV benzeri günlükte ikinci alanı çıkartıp yeni dosyaya yazdırma:
[/ul]
[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:
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.
[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]
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:
CODE
1sed -n '/2024-07-15/p' /path/to/gunluk.logError veya hata içeren satırları çıkarmak için:
CODE
1sed -n '/error/Ip' /path/to/gunluk.logBurada i bayrağı büyük/küçük harfe duyarlılığını azaltır, p satırı yazdırır.
Örneğin 12:00 ile 14:59 arasındaki satırları çekmek için düzenli ifade kullanılır:
CODE
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.)
Gereksiz boşlukları kaldırma:
CODE
1sed -E 's/[[:space:]]+/ /g' /path/to/gunluk.logKullanıcıya göre satır başını/sonunu temizlemek:
CODE
1sed -E 's/^\\s+|\\s+$//g' -e 's/\\s+/ /g' /path/to/gunluk.logÖrneğin CSV benzeri günlükte ikinci alanı çıkartıp yeni dosyaya yazdırma:
CODE
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:
CODE
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.
