2011-11-17 36 views
13

Tôi cần phải phân tích cú pháp tệp nhật ký Apache để tìm kiếm các mẫu đáng ngờ cụ thể (như chèn SQL).Tệp nhật ký Apache grep lớn

Ví dụ tôi đang tìm id='%20or%201=1;

Tôi đang sử dụng grep để kiểm tra các log file cho mô hình này (và những người khác) và bởi vì các bản ghi này là rất lớn phải mất một khoảng thời gian dài

đây lệnh của tôi:

grep 'id=' Apache.log | egrep "' or|'%20" 

Có phương pháp hay lệnh nhanh hơn hoặc tôi cần sử dụng để thực hiện tìm kiếm nhanh hơn không?

Trả lời

22

Để bắt đầu, bạn không cần phải khai thác đầu ra grep của mình thành egrep. egrep cung cấp một superset của biểu thức chính quy grep 's phân tích cú pháp, vì vậy bạn chỉ có thể làm điều này:

egrep "id='(or|%20)'" apache.log 

Calling egrep là giống hệt nhau để gọi grep -E.

Điều đó có thể giúp bạn tăng hiệu suất một chút. Nếu bạn có thể tìm kiếm các chuỗi cố định thay vì các cụm từ thông dụng, điều đó cũng có thể hữu ích. Bạn có thể nói grep để tìm một chuỗi cố định với các tùy chọn -F:

grep -F "id='%20or" apache.log 

Nhưng sử dụng chuỗi cố định bạn mất rất nhiều tính linh hoạt.

+0

hãy để tôi thử số này – aki

+0

cảm ơn bạn mất ít hơn 21 phút so với mã của tôi – aki

0

Tôi cho rằng phần lớn thời gian của bạn được chi tiêu trong khi nhận dữ liệu từ đĩa (sử dụng CPU không được tối đa). Sau đó, bạn không thể tối ưu hóa một truy vấn. Bạn chỉ có thể thử ghi lại các dòng thú vị trong một tệp riêng biệt ...

0

Bạn đang tìm kiếm grep -E "id=(' or|'%20)" apache.log?

Các vấn đề liên quan