Chốt ý nhanh
| Chủ đề | Điểm cần nhớ |
|---|---|
| Log | Là dấu vết quan trọng nhất để hiểu chuyện gì đã xảy ra. |
| Đọc log đúng cách | Luôn gắn với mốc thời gian, service và bối cảnh sự cố. |
| Mục tiêu | Không chỉ nhìn thấy lỗi, mà phải lần ra chuỗi sự kiện dẫn tới lỗi. |
Bài 08: Log hệ thống và cách đọc lỗi
Bài này giúp anh đọc log Linux có phương pháp: biết log nằm ở đâu, lọc theo thời gian, theo service và tìm nguyên nhân lỗi.
- Log hệ thống thường nằm ở đâu.
- Dùng
journalctl,tail,grep. - Đọc log theo thời gian và theo service.
- Xử lý sự cố theo log thay vì đoán mò.
1. Log là gì?
Log là nhật ký sự kiện của hệ thống hoặc ứng dụng. Khi service lỗi, log thường là nơi cho biết chuyện gì đã xảy ra.
2. Nơi thường đọc log
| Nơi | Ý nghĩa |
|---|---|
journalctl |
Log từ systemd journal |
/var/log/syslog |
Log hệ thống Ubuntu/Debian |
/var/log/messages |
Log hệ thống RHEL/Rocky |
/var/log/auth.log |
Login/SSH trên Ubuntu |
/var/log/nginx/error.log |
Lỗi Nginx |
3. Lab: đọc log bằng journalctl
journalctl -p err --since "1 hour ago" journalctl -u ssh --since "today" || journalctl -u sshd --since "today" journalctl -u nginx -f
--since giúp giới hạn thời gian. -u lọc theo service. -f theo dõi realtime.
4. Lab: đọc file log bằng tail/grep
sudo tail -n 100 /var/log/syslog sudo grep -i "error" /var/log/syslog | tail sudo tail -f /var/log/nginx/error.log
tail -n 100 xem 100 dòng cuối. grep -i tìm không phân biệt hoa thường.
5. Tình huống thực tế: web trả 502
- Kiểm tra Nginx:
systemctl status nginx. - Đọc Nginx error log:
tail -n 100 /var/log/nginx/error.log. - Kiểm tra backend app còn chạy không.
- Kiểm tra port backend:
ss -tulpn. - Đọc log backend.
6. Cách đọc log không bị rối
- Luôn xác định thời điểm lỗi xảy ra.
- Lọc log quanh thời điểm đó.
- Tìm dòng error đầu tiên, không chỉ dòng cuối.
- So sánh trước/sau deploy hoặc restart.
- Ghi lại keyword lỗi để tra cứu.
7. Lỗi thường gặp
- Chỉ đọc 5 dòng cuối nên bỏ qua nguyên nhân thật.
- Thấy warning là tưởng lỗi chính.
- Không biết timezone log.
- Restart service làm mất dấu vết tạm thời.
8. Checklist đọc log
- Xác định service liên quan.
- Xác định thời điểm lỗi.
- Lọc log theo service và thời gian.
- Tìm error đầu tiên.
- Đối chiếu với thay đổi gần nhất.
- Ghi lại nguyên nhân và cách xử lý.
9. Bài tập
- Chạy
journalctl -p err --since today. - Đọc log SSH trong ngày hôm nay.
- Tìm một file log trong
/var/logvà xem 50 dòng cuối. - Viết quy trình xử lý lỗi 502 bằng log.
Kết bài
Kết thúc bài này, anh đã chạm vào một kỹ năng rất quan trọng của người vận hành: nghe hệ thống kể chuyện qua log. Biết đọc log tốt sẽ giúp anh xử lý sự cố nhanh hơn, ít đoán mò hơn và tự tin hơn khi đi vào các nhóm bài phase 2 như SSH, firewall, DNS, web server và monitoring. Phase 1 đến đây đã đủ nền để anh bước sang lớp hạ tầng mạng và dịch vụ hệ thống một cách chắc tay hơn.
Phần thực hành mở rộng: đọc log có mục tiêu, không chỉ “mở file lên xem”
Muốn đọc log tốt, người mới phải có tình huống và câu hỏi cụ thể: service nào lỗi, lỗi xảy ra lúc nào, chuỗi sự kiện trước-sau ra sao, và lỗi đó liên quan user, network hay application.
Lab 1: Xem log gần nhất của hệ thống
sudo journalctl -n 50 --no-pager
sudo journalctl -p warning --since "1 hour ago" --no-pager
Điểm cần luyện là không đọc toàn bộ vô định, mà lọc theo mức độ và thời gian.
Lab 2: Theo dõi log real-time
sudo journalctl -f
Nếu có service nginx hoặc ssh, mở thêm một terminal khác để tạo hoạt động rồi quan sát log thay đổi theo thời gian thực. Đây là cách học rất nhanh.
Lab 3: Đọc log SSH thất bại
sudo grep "Failed password" /var/log/auth.log | tail -20
sudo grep "Accepted password\|Accepted publickey" /var/log/auth.log | tail -20
Nếu máy dùng journal thay vì auth.log, thử:
sudo journalctl -u ssh --since today --no-pager
Hãy tự phân biệt được:
- failed login
- successful login
- invalid user
Lab 4: Lọc log theo service
sudo journalctl -u cron -n 50 --no-pager
sudo journalctl -u ssh -n 50 --no-pager
Nếu có nginx:
sudo journalctl -u nginx -n 50 --no-pager
sudo tail -50 /var/log/nginx/error.log
Lab 5: Tạo lỗi giả để luyện đọc log
Tạo một script lỗi đơn giản:
cat <<'EOF' > /tmp/log-demo.sh
#!/usr/bin/env bash
ls /path/khong-ton-tai
EOF
chmod +x /tmp/log-demo.sh
/tmp/log-demo.sh
Sau đó xem terminal báo lỗi gì, và nếu chạy script này qua cron hoặc service, log sẽ xuất hiện ở đâu. Mục tiêu là hiểu mối liên hệ giữa hành động và dấu vết để lại.
Lab 6: Ghi log của riêng mình
logger "demo log from phase1 lesson"
sudo journalctl --since "5 minutes ago" | grep "demo log from phase1 lesson"
logger là cách đơn giản để tự tạo một dòng log và học cách truy vết nó.
Tình huống thực tế
Một service bị down lúc 02:15. Cách đọc log tốt không phải là lướt hàng nghìn dòng, mà là:
- xác định mốc thời gian
- lọc đúng service
- xem warning/error quanh thời điểm đó
- đối chiếu với hành động quản trị, cron, deploy hoặc reboot
Lỗi phổ biến
- Đọc log mà không có khung thời gian cụ thể.
- Không phân biệt access log và error log.
- Chỉ nhìn dòng cuối mà bỏ qua chuỗi sự kiện trước đó.
- Restart service trước khi kịp chụp log lỗi.
Bài tập thêm
- Dùng
loggertạo 3 dòng log khác nhau. - Lọc chúng theo thời gian và từ khóa.
- Tạo 1 lỗi lệnh sai đường dẫn và mô tả lỗi xuất hiện thế nào.
- Viết runbook 5 bước khi cần đọc log để xử lý sự cố.
Phần đào sâu thêm: đọc log theo dòng thời gian sự cố
Log chỉ thật sự có giá trị khi anh đặt nó vào mốc thời gian. Một dòng lỗi đứng riêng lẻ thường chưa nói nhiều bằng chuỗi sự kiện 5 phút trước và sau thời điểm sự cố xảy ra.
Lab bổ sung: lọc theo khoảng thời gian
sudo journalctl --since "2026-05-20 10:00:00" --until "2026-05-20 10:15:00" --no-pager
sudo journalctl -u ssh --since "30 minutes ago" --no-pager
Đây là kỹ năng rất quan trọng khi anh nhận được thông báo kiểu “web lỗi lúc 10:12”.
Lab bổ sung: đếm và gom lỗi theo mẫu
sudo grep -i "error" /var/log/syslog | tail -50
sudo grep -i "failed" /var/log/auth.log | tail -50
Sau khi đọc, hãy tự nhóm lỗi thành các loại: xác thực, permission, network, service crash, config sai.
Checklist đọc log hiệu quả
- Xác định thời gian sự cố
- Xác định đúng service hoặc file log liên quan
- Lọc warning/error trước khi đọc toàn bộ
- Đối chiếu với hành động deploy, restart, cron, login
- Ghi lại phát hiện chính thay vì chỉ chụp màn hình log
