Log hệ thống
Cấu trúc Logging trong Linux
Các file log quan trọng
| File | Nội dung | Distro |
|---|---|---|
/var/log/syslog | Log tổng hợp hệ thống | Debian/Ubuntu |
/var/log/messages | Log tổng hợp hệ thống | RHEL/CentOS |
/var/log/auth.log | SSH, sudo, login | Debian/Ubuntu |
/var/log/secure | SSH, sudo, login | RHEL/CentOS |
/var/log/kern.log | Kernel messages | Debian |
/var/log/dmesg | Boot + hardware messages | Tất cả |
/var/log/apt/history.log | Lịch sử cài đặt package | Debian/Ubuntu |
/var/log/cron | Cron job execution | RHEL/CentOS |
/var/log/nginx/access.log | HTTP request logs | — |
/var/log/nginx/error.log | Nginx errors | — |
Đọc log cơ bản
# Xem log real-time
tail -f /var/log/syslog # follow real-time
tail -f /var/log/nginx/access.log # HTTP access log
tail -F /var/log/app.log # follow kể cả khi file bị rotate
# Xem cuối file
tail -n 200 /var/log/auth.log # 200 dòng cuối
tail -n 500 /var/log/syslog | less # scroll qua less
# Tìm trong log
grep "Failed password" /var/log/auth.log # login SSH thất bại
grep -i "error" /var/log/nginx/error.log # nginx errors
grep -E "error|warn|fatal" /var/log/app.log # OR nhiều pattern
grep -n "FATAL" /var/log/app.log # với số dòng
grep -A 5 -B 5 "FATAL" /var/log/app.log # 5 dòng trước/sau match
# Lọc theo thời gian (nếu log có timestamp)
grep "Jan 15 10:" /var/log/syslog # giờ 10h ngày 15 tháng 1
dmesg — Kernel Ring Buffer
dmesg # tất cả kernel message từ boot
dmesg | tail -50 # 50 dòng cuối
dmesg -T # với timestamp dễ đọc (human-readable)
dmesg -w # watch/follow real-time
dmesg | grep -i error # kernel errors
dmesg | grep -i "out of memory" # OOM killer
dmesg | grep -i "i/o error" # disk I/O errors
dmesg | grep -i "eth\|ens\|enp" # network interface messages
journalctl — systemd Journal
Lọc theo service
journalctl -u nginx # log của nginx service
journalctl -u nginx -f # follow real-time
journalctl -u nginx -n 100 # 100 dòng cuối
journalctl -u nginx -u sshd # nhiều service cùng lúc
Lọc theo thời gian
journalctl --since "1 hour ago"
journalctl --since "2024-01-15 10:00"
journalctl --since "2024-01-15 10:00" --until "2024-01-15 11:00"
journalctl --since today
journalctl --since yesterday
journalctl -u nginx --since "30 minutes ago"
Lọc theo mức độ (Priority)
journalctl -p err # error và nghiêm trọng hơn
journalctl -p warning # warning trở lên
journalctl -p 0..3 # emergency (0) đến error (3)
# Mức độ: 0=emerg, 1=alert, 2=crit, 3=err, 4=warning, 5=notice, 6=info, 7=debug
Lệnh journalctl hữu ích khác
journalctl -xe # lỗi gần nhất với context đầy đủ
journalctl -k # kernel log (tương đương dmesg)
journalctl -b # log từ lần boot hiện tại
journalctl -b -1 # log từ lần boot trước
journalctl --list-boots # danh sách các lần boot
journalctl --disk-usage # dung lượng journal đang chiếm
journalctl --vacuum-time=7d # xoá log cũ hơn 7 ngày
journalctl --vacuum-size=500M # giới hạn 500MB
Log Analysis thực tế
Phát hiện brute force SSH
# Đếm số lần login fail theo IP
grep "Failed password" /var/log/auth.log \
| awk '{print $11}' \
| sort | uniq -c | sort -rn \
| head -20
# Tương tự với journalctl
journalctl -u sshd | grep "Failed password" \
| awk '{print $11}' \
| sort | uniq -c | sort -rn
Phân tích nginx access log
# Top 10 IP nhiều request nhất
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# Top 10 URL nhiều request nhất
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# Đếm HTTP status codes
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
# Request 5xx trong 1 giờ qua
grep "$(date +'%d/%b/%Y:%H')" /var/log/nginx/access.log | grep '" 5'
Monitor log real-time với nhiều file
# Theo dõi nhiều file cùng lúc
tail -f /var/log/nginx/error.log /var/log/nginx/access.log
# Với multitail (cần cài)
sudo apt install multitail
multitail /var/log/nginx/error.log /var/log/syslog
Log Rotation
logrotate tự động xoay vòng (rotate), nén, và xoá log cũ.
# Xem cấu hình
cat /etc/logrotate.conf
ls /etc/logrotate.d/ # config cho từng service
# Chạy thủ công (test)
sudo logrotate -d /etc/logrotate.conf # dry run
sudo logrotate -f /etc/logrotate.conf # force rotate ngay
# Ví dụ config logrotate cho ứng dụng tùy chỉnh
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily # rotate hàng ngày
missingok # không lỗi nếu file không tồn tại
rotate 14 # giữ 14 bản cũ
compress # nén bằng gzip
delaycompress # nén bản trước đó (không nén bản hiện tại)
notifempty # không rotate nếu file rỗng
create 640 www-data adm # tạo file mới với permission
postrotate
systemctl reload myapp
endscript
}
Tập trung Log (Centralized Logging)
Từ khoá tìm hiểu thêm
ELK Stack: Elasticsearch + Logstash + Kibana
Loki + Grafana: Giải pháp nhẹ hơn ELK, phổ biến trong Kubernetes
CloudWatch Logs: Giải pháp managed trên AWS
Log levels: DEBUG < INFO < WARNING < ERROR < CRITICAL