Saya ingin memonitor file log besar (hampir 1 GB) untuk kesalahan. Saya ingin ini mendekati waktu nyata (penundaan beberapa detik tidak masalah). Rencana saya adalah menggunakan tail -f | grep
. Apakah ada masalah kinerja dengan menggunakan metode seperti itu ketika menjalankannya dalam waktu yang lama, katakanlah dari nol byte menjadi 1 GB? Apakah ada praktik standar yang digunakan untuk pemantauan semacam itu. Perhatikan bahwa saya ingin melakukan ini menggunakan perintah unix standar yang tersedia di Solaris 10.
Jika itu mungkin, file saya bahkan berguling dan saya punya satu masalah lagi untuk menyelesaikan :). menggunakan tail -F
( --follow=name
) bukan pilihan bagi saya karena -F
tidak didukung di server saya ingin menjalankan ini. Rencana saya adalah menggunakan skrip yang akan memulai ekor ini dan polling untuk mengetahui apakah file tersebut terguling. Jika ya, maka bunuh ekornya dan mulai lagi. Adakah pendekatan yang lebih baik?
sumber
tail
", kan?Jawaban:
Pada sistem linux saya (GNU coreutils 8.12), saya dapat memeriksa (menggunakan
strace
) bahwatail -f
¹ menggunakanlseek
panggilan sistem untuk melewatkan sebagian besar file dengan cepat:Ini berarti bahwa ukuran file yang dilacak seharusnya tidak menjadi masalah.
Mungkin Anda dapat memeriksa apakah hal yang sama berlaku pada sistem Anda. (Jelas, seharusnya begitu.)
-
1. Saya juga mencoba menonaktifkan dukungan tidak sah dengan yang tidak berdokumen
---disable-inotify
, untuk berjaga-jaga.sumber
strace
;)tail -F
tidak didukung, kemungkinan itustrace
tidak tersedia ...truss
adalah utilitas yang sesuai pada Solaris.Jika itu dipanggil pada file biasa (tidak seperti pipa), baik GNU tail dan OpenBSD tail (kecuali dipanggil dengan
-n +N
) mencari di akhir file, kemudian bekerja mundur untuk menemukan garis di mana ia harus mulai mencetak. Saya tidak tahu apakah Solaris melakukan hal yang sama, tetapi ini merupakan pendekatan yang masuk akal, jadi saya berharap sebagian besar persatuan melakukan hal yang sama. Oleh karena itu ukuran file tidak relevan untuk kinerja.sumber
Saya melakukan ini setiap hari. Saya biasanya memindai selusin log pada server pengujian dan produksi kami menggunakan
tail -f logs/*.{log,err,out}
. Pemuatan awal agak banyak (tergantung pada jumlah file di-globbed), tetapi setelah itu, streaming real-time.Alih-alih mengirim ke grep, saya menggunakan
exec
fungsionalitas discreen
karena saya ingin umumnya melihat semua output (untuk traceback penuh dan pesan yang terkait dengan masalah ini). Sebagai contoh,Untuk menyebabkan terminal berbunyi bip (atau flash) setiap kali kata Pengecualian ditemukan.
sumber