1. Vì sao cần phân tích log?
Trong môi trường Linux, log là nơi phản ánh mọi hoạt động của hệ thống và website.
Khi website gặp sự cố (chậm, lỗi, nghi bị tấn công), quản trị viên không đoán mò, mà phải đọc log để tìm nguyên nhân.
Trong bài thực hành này, ta sẽ làm quen với cách:
- Theo dõi log real-time
- Lọc thông tin quan trọng khỏi hàng nghìn dòng log
- Phát hiện lỗi, truy cập bất thường và dấu hiệu tấn công
- Công cụ sử dụng: tail và grep
2. Theo dõi log Real-Time với tail
Log luôn được ghi ở cuối file, vì vậy tail là công cụ phù hợp nhất để quan sát những gì đang xảy ra ngay lúc này.
Các tùy chọn mà lệnh tail thường dùng kèm theo:
| Tùy chọn | Mô tả | Ví dụ |
|---|---|---|
-f |
Theo dõi file real-time | tail -f file.log |
-n [số] |
Hiển thị số dòng cuối | tail -n 50 file.log |
-F |
Theo dõi kể cả khi file bị rotate | tail -F file.log |
-c [bytes] |
Hiển thị số byte cuối | tail -c 500 file.log |
Ví dụ thực tế khi vận hành website:
- Theo dõi access log Apache real-time
sudo tail -f /var/log/apache2/access.log
- Theo dõi lỗi website:
sudo tail -f /var/log/apache2/error.log
- Theo dõi nhiều file cùng lúc
sudo tail -f /var/log/apache2/access.log /var/log/apache2/error.log
→ Lúc này bà chỉ mới thấy dữ liệu thô, rất nhiều dòng không liên quan → chúng ta cần lọc log → gợi ý có thể kết hợp dùng grep cùng.
3. Lọc thông tin quan trọng với grep
grep cho phép chỉ giữ lại những dòng có ý nghĩa, ví dụ:
- Lỗi HTTP
- IP đáng ngờ
- Request POST
- Lỗi PHP
Các tùy chọn quan trọng:
| Tùy chọn | Mô tả | Ví dụ |
|---|---|---|
-i |
Không phân biệt hoa/thường | grep -i "error" file.log |
-E |
Sử dụng extended regex | grep -E "4[0-9]{2}" file.log |
-v |
Hiển thị dòng KHÔNG khớp | grep -v "200" file.log |
-c |
Đếm số dòng khớp | grep -c "404" file.log |
--color=auto |
Tô màu kết quả | grep --color=auto "500" file.log |
4. Kết hợp tail + grep để xử lý tình huống thực tế
- Phát hiện lỗi HTTP ngay lập tức:
sudo tail -f /var/log/apache2/access.log | grep -E " 4[0-9]{2} | 5[0-9]{2} "
- Theo dõi hoạt động của một IP cụ thể
sudo tail -f /var/log/apache2/access.log | grep "192.168.1.100"
- Nhận diện request POST (highlight màu)
sudo tail -f /var/log/apache2/access.log | grep --color=auto "POST"
- Theo dõi lỗi PHP
sudo tail -f /var/log/apache2/error.log | grep -i "php.*error"
- Phát hiện truy cập đáng ngờ
sudo tail -f /var/log/nginx/access.log | grep -E "\.\./|\.env|config\.php"
5. Tình huống thực tế mà chúng ta hay gặp phải:
Tình huống 1: website bị chậm
- Bật theo dõi real-time để xem request nào đang xử lý
sudo tail -f /var/log/nginx/access.log
- Tìm request có thời gian xử lý lâu
sudo tail -n 100 /var/log/nginx/access.log | awk '$NF > 2000 {print}'
Tình huống 2: Nghi ngờ bị DDoS
- Xác định IP nào gửi nhiều request nhất
sudo tail -n 1000 /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
- Theo dõi real-time IP nghi ngờ
sudo tail -f /var/log/apache2/access.log | grep "203.0.113.100"
- Kiểm tra user-agent của IP tấn công
sudo grep "203.0.113.100" /var/log/apache2/access.log | grep -o '"[^"]*"$' | sort | uniq -c


