Sử dụng tail -f trên các tệp nhật ký lớn có ổn không


9

Tôi muốn theo dõi một tệp nhật ký lớn (gần 1 GB) để tìm lỗi. Tôi muốn điều này gần với thời gian thực (chậm vài giây là ổn). Kế hoạch của tôi là sử dụng tail -f | grep. Có bất kỳ vấn đề hiệu suất nào khi sử dụng một phương thức như vậy khi chạy nó trong một thời gian dài, giả sử từ 0 byte đến 1 GB? Có bất kỳ tiêu chuẩn thực hành được sử dụng cho một giám sát như vậy. Lưu ý rằng tôi muốn làm điều này bằng cách sử dụng các lệnh unix tiêu chuẩn có sẵn trên Solaris 10.

Nếu điều đó là có thể, tập tin của tôi thậm chí cuộn lại và tôi có thêm một vấn đề để sắp xếp :). sử dụng tail -F( --follow=name) không phải là một tùy chọn cho tôi vì -Fkhông được hỗ trợ trong máy chủ mà tôi muốn chạy trên này. Kế hoạch của tôi là sử dụng một tập lệnh sẽ bắt đầu phần đuôi này và thăm dò ý kiến ​​để tìm xem tập tin có được cuộn lại không. Nếu có, sau đó giết đuôi và khởi động lại nó. Có cách tiếp cận nào tốt hơn không?


Bạn có nghĩa là "giết tail", phải không?
Stéphane Gimenez

Có, "giết đuôi", không tìm thấy. Cảm ơn, đã chỉnh sửa câu hỏi
Manoj NV

1
Nếu tệp có kích thước 2 GB không chứa ký tự dòng mới, đuôi hoạt động như thế nào?

Câu trả lời:


6

Trên hệ thống linux của tôi (GNU coreutils 8.12), tôi có thể kiểm tra (bằng cách sử dụng strace) tail -f¹ sử dụng lệnh lseekgọi hệ thống để bỏ qua hầu hết các tệp một cách nhanh chóng:

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

Điều này có nghĩa là kích thước của tệp được theo dõi không nên quan trọng trong dù sao đi nữa.

Có lẽ bạn có thể kiểm tra nếu áp dụng tương tự trên hệ thống của bạn. (Rõ ràng, nó nên là trường hợp.)

-
1. Tôi cũng đã thử vô hiệu hóa hỗ trợ inotify với người không có giấy tờ ---disable-inotify, chỉ trong trường hợp.


2
Đàn ông đích thực đọc nguồn (:
Gilles 'SO- ngừng trở nên xấu xa'

2
@Gilles. Tôi không thể dạy cho OP (hoặc người đọc) cách đọc nguồn nếu anh ta chưa biết. Dễ dàng hơn rất nhiều để bảo anh ta sử dụng strace;)
Stéphane Gimenez

Trên thực tế, trên một hệ thống tail -Fkhông được hỗ trợ, rất có thể stracelà không có sẵn
Stéphane Gimenez

trusslà tiện ích tương ứng trên Solaris.
Gilles 'SO- ngừng trở nên xấu xa'

và nó cho thấy các cuộc gọi tìm kiếm tương tự. llseek (0, 0, XEMK_CUR) = 0, llseek (0, 0xFFFFFFFFFFF5FFF6, XEMK_END) = 7923269
jlliagre

5

Nếu nó được gọi trên một tệp thông thường (trái ngược với đường ống), cả đuôi GNU và đuôi OpenBSD (trừ khi được gọi với -n +N) đều tìm đến cuối tệp, sau đó làm việc ngược lại để tìm dòng nơi nó sẽ bắt đầu in. Tôi không biết Solaris có làm như vậy không, nhưng đó là một cách tiếp cận hợp lý, vì vậy tôi hy vọng hầu hết các đơn vị sẽ làm như vậy. Do đó, kích thước của tệp không liên quan đến hiệu suất.


2

Tôi làm điều này mỗi ngày. Tôi thường quét hàng tá nhật ký trên các máy chủ thử nghiệm và sản xuất của chúng tôi bằng cách sử dụng tail -f logs/*.{log,err,out}. Tải ban đầu là một chút (tùy thuộc vào số lượng tệp được toàn cầu hóa), nhưng sau đó, phát trực tuyến là thời gian thực.

Thay vì gửi đến grep, tôi sử dụng execchức năng screenvì tôi thường muốn xem tất cả đầu ra (đối với các tracebacks đầy đủ và các thông báo liên quan đến vấn đề này). Ví dụ,

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

Để làm cho thiết bị đầu cuối phát ra tiếng bíp (hoặc flash) bất cứ khi nào tìm thấy từ Ngoại lệ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.