Tail -f dosyasını büyük günlük dosyalarında kullanmak iyi mi


9

Hatalar için büyük bir günlük dosyasını (1 GB'a yakın) izlemek istiyorum. Bunun gerçek zamana yakın olmasını istiyorum (birkaç saniye gecikme iyi). Planım kullanmak tail -f | grep. Böyle bir yöntemi uzun bir süre çalıştırırken, örneğin sıfır bayttan 1 GB'a kadar kullanırken herhangi bir performans sorunu var mı? Böyle bir izleme için kullanılan standart uygulamaları var mı? Bunu Solaris 10'da bulunan standart unix komutlarını kullanarak yapmak istediğimi unutmayın.

Mümkünse, dosyam bile devriliyor ve sıralamak için bir sorun daha var :). tail -F( --follow=name) kullanmak benim için bir seçenek değil çünkü -Fbunu çalıştırmak istediğim sunucuda desteklenmiyor. Benim planım bu kuyruğu başlatacak ve dosyanın devredilip çevrilmediğini bulmak için anket oluşturacak bir komut dosyası kullanmak. Evetse, kuyruğu öldürün ve yeniden başlatın. Daha iyi bir yaklaşım var mı?


"Öldürmek tail" demek istiyorsun, deđil mi?
Stéphane Gimenez

Evet, "kuyruğu öldür", bulamaz. Teşekkürler, soruyu düzenledi
Manoj NV

1
2 GB boyutunda bir dosya yeni bir satır karakteri içermiyorsa, kuyruk nasıl çalışır?

Yanıtlar:


6

Linux sistemimde (GNU coreutils 8.12), ¹ dosyanın çoğunu hızlı bir şekilde atlamak için sistem çağrısını kullandığını (kullanarak strace) kontrol edebildim :tail -flseek

lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_END)                   = 194086
lseek(3, 188416, SEEK_SET)              = 188416

Bu, izlenen dosyanın boyutunun zaten önemli olmaması gerektiği anlamına gelir.

Belki de bunun sisteminizde geçerli olup olmadığını kontrol edebilirsiniz. (Açıkçası, durum böyle olmalıdır.)

-
1. Ayrıca ---disable-inotify, her ihtimale karşı , belgesiz kişilerle inotify desteğini devre dışı bırakmayı denedim .


2
Gerçek Erkekler kaynağı okumak (:
Gilles 'SO- kötü olmak'

2
@Gilles. OP'ye (veya okuyucuya) henüz bilmiyorsa kaynağı nasıl okuyacağını öğretemem. Ona kullanmasını söylemesi çok daha kolay strace;)
Stéphane Gimenez

Aslında, tail -Fdesteklenmeyen bir sistemde , bu stracemümkün değil…
Stéphane Gimenez

trussSolaris'in ilgili yardımcı programıdır.
Gilles 'SO- kötü olmayı bırak'

ve benzer arama çağrıları gösterir. llseek (0, 0, SEEK_CUR) = 0, llseek (0, 0xFFFFFFFFFFF5FFF6, SEEK_END) = 7923269
jlliagre

5

Normal bir dosyada çağrılırsa (bir boru yerine), hem GNU kuyruğu hem de OpenBSD kuyruğu (çağrılmadığı sürece -n +N) dosyanın sonuna bakar, ardından yazdırmaya başlaması gereken satırı bulmak için geriye doğru çalışır. Solaris'in aynısını yapıp yapmadığını bilmiyorum, ama bu makul bir yaklaşım, bu yüzden çoğu birimin aynı şeyi yapmasını bekliyorum. Bu nedenle dosyanın boyutu performansla ilgisizdir.


2

Bunu her gün yaparım. Test ve üretim sunucularımızda genellikle bir düzine kadar günlük tararım tail -f logs/*.{log,err,out}. İlk yükleme biraz fazla (globbed dosya sayısına bağlı olarak), ancak bundan sonra akış gerçek zamanlı.

Grep'e göndermek yerine, genel olarak tüm çıktıları görmek istediğim için execişlevselliği kullanıyorum screen(konuyla ilgili tam izlemeler ve mesajlar için). Örneğin,

!:sed -n s/.*Exception.*/\007/p

İstisna kelimesi bulunduğunda terminalin bip sesi çıkarmasına (veya yanıp sönmesine) neden olmak için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.