Đang tải bài học…
Nội dung sẽ hiển thị khi tải xong.
Nội dung sẽ hiển thị khi tải xong.
Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.
Log là evidence đầu tiên trong mọi sự cố. Hai câu hỏi thường gặp nhất khi trực sự cố là "lỗi bắt đầu từ lúc nào?" và "trước lần reboot vừa rồi có gì bất thường?". Không lọc được log thì bạn chìm trong hàng chục nghìn dòng. Log không có giới hạn thì một ngày nào đó ổ đĩa sẽ đầy, như bạn sẽ gặp ở bài Break/Fix ổ đầy.
-p), thời gian (--since), lần boot (-b) và định dạng đầu ra.logger và tìm lại.Trên RHEL hiện đại có hai đường log:
dịch vụ systemd ── stdout/stderr ──▶ systemd-journald ──▶ /var/log/journal (nhị phân)
│
└──▶ rsyslog ──▶ /var/log/messages, /var/log/secure (text)
ứng dụng tự ghi file ─────────────────────────────────────▶ /var/log/<app>/*.log ── logrotate
journald lưu log kèm metadata (unit, PID, mức độ, lần boot) nên lọc rất mạnh. Storage=persistent giữ log sau reboot trong /var/log/journal; SystemMaxUse giới hạn tổng dung lượng.
Mức độ (priority): emerg 0, alert 1, crit 2, err 3, warning 4, notice 5, info 6, debug 7. -p err hiển thị từ err trở lên (0–3).
logrotate chạy định kỳ (timer logrotate.timer), đổi tên app.log thành app.log.1, nén bản cũ, xóa bản quá hạn.
journalctl -b -p warning --no-pager | tail -20
journalctl -u sshd --since "1 hour ago" --no-pager
journalctl --list-boots
journalctl -b -1 -p err --no-pager | tail
journalctl -u kdc-web -o json-pretty -n 1
journalctl -f
Tùy chọn của journalctl | Ý nghĩa |
|---|---|
-b | Chỉ log của lần boot hiện tại. |
-b -1 | Chọn lần boot trước; -1 là giá trị của -b, không phải số dòng. |
-p warning / -p err | Lọc mức severity này và các mức nghiêm trọng hơn. -p ở đây là priority. |
-u sshd | Chỉ log của unit SSH. |
--since "1 hour ago" | Chỉ log từ một giờ trước đến hiện tại; nháy kép giữ chuỗi thời gian thành một đối số. |
--list-boots | Liệt kê các lần boot có log đã lưu. |
-o json-pretty | Chọn đầu ra JSON được căn lề. |
-n 1 | Lấy một bản ghi gần nhất. |
-f | Theo dõi log mới liên tục; Ctrl+C để dừng. |
tail -20 lấy 20 dòng cuối; tail không có số lấy 10 dòng. --no-pager in trực tiếp thay vì mở trình xem phân trang.
-b -1 là lần boot trước. Nếu báo không có dữ liệu, journal của bạn chưa bền vững; bước 3 sẽ sửa điều đó. Nhấn Ctrl+C để thoát -f.
logger -t kdc-lab -p user.warning "Bắt đầu bài thực hành log"
journalctl -t kdc-lab --no-pager
grep kdc-lab /var/log/messages | tail -2
logger gửi một thông điệp vào hệ thống log: -t kdc-lab gắn tag, -p user.warning chọn facility user và mức warning. journalctl -t kdc-lab lọc theo tag đó; cùng chữ -t nhưng ở đây là bộ lọc của journalctl.
Cùng một dòng log đi vào cả journal và /var/log/messages (qua rsyslog). Một số cloud image không cài rsyslog; khi đó chỉ có journal.
sudo install -d /etc/systemd/journald.conf.d
sudo tee /etc/systemd/journald.conf.d/kdc.conf <<'EOF'
[Journal]
Storage=persistent
SystemMaxUse=200M
EOF
sudo systemctl restart systemd-journald
sudo journalctl --flush
journalctl --disk-usage
ls -ld /var/log/journal
journalctl --flush chuyển log runtime sang vùng lưu persistent khi đã cấu hình; --disk-usage báo dung lượng journal đang dùng. Storage=persistent và SystemMaxUse=200M là các giá trị trong file cấu hình, không phải lệnh shell.
Sau khi restart, journald vẫn ghi vào /run/log/journal (mất khi reboot) cho tới khi được yêu cầu chuyển sang đĩa. journalctl --flush làm việc đó ngay; khi boot, systemd-journal-flush.service làm tự động.
sudo dnf install -y logrotate
sudo install -d -m 755 /var/log/kdc-app
for i in $(seq 1 200); do echo "$(date --iso-8601=seconds) INFO request $i"; done | sudo tee /var/log/kdc-app/app.log >/dev/null
sudo tee /etc/logrotate.d/kdc-app <<'EOF'
/var/log/kdc-app/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root root
}
EOF
sudo logrotate -d /etc/logrotate.d/kdc-app
sudo logrotate -f /etc/logrotate.d/kdc-app
ls -l /var/log/kdc-app
seq 1 200 tạo dãy số từ 1 đến 200; for i in $(seq ...); do ...; done chạy một lần cho mỗi số, $i là số đang xét. >/dev/null bỏ phần tee in ra terminal, vẫn giữ phần ghi file. logrotate -d chỉ debug/xem trước, chưa xoay log; -f buộc xoay log thật dù chưa đến lịch. Với journalctl, -f lại là follow: phải đọc tùy chọn theo từng lệnh.
-d chạy thử, chỉ in việc sẽ làm. -f buộc xoay vòng ngay. delaycompress để bản gần nhất (app.log.1) chưa nén, tiện đọc khi điều tra.
cat /etc/systemd/journald.conf.d/kdc.conf
journalctl --disk-usage
cat /etc/logrotate.d/kdc-app
ls -l /var/log/kdc-app
journalctl --disk-usage in dung lượng journal đang chiếm. ls -l xem các file log cùng kích thước; cat đọc cấu hình journald và logrotate.
Chọn server và bấm Kiểm tra kết quả.
/etc/systemd/journald.conf: bản cập nhật package có thể ghi đè hoặc tạo .rpmnew. Dùng drop-in trong journald.conf.d/.systemd-journald sau khi đổi cấu hình, hoặc quên journalctl --flush nên /var/log/journal chưa xuất hiện.app.log.1. Dùng copytruncate hoặc postrotate để báo ứng dụng mở lại file (thường bằng SIGHUP).journalctl --since today dùng giờ của server: kiểm tra múi giờ bằng timedatectl.SystemMaxUse), logrotate, và log của container ở Module 05.chronyd, timedatectl).Giữ journal bền vững để dùng trong các bài Break/Fix. Muốn bỏ phần logrotate:
sudo rm -rf /etc/logrotate.d/kdc-app /var/log/kdc-app
rm -f xóa file và không hỏi xác nhận; -r thêm xóa đệ quy thư mục cùng nội dung, nên -rf gộp hai tùy chọn này.