
Cách đọc log hệ thống trên Almalinux để phát hiện vấn đề
Sơ đồ trang
- 1. Vị trí của các file log chính
- 2. Các công cụ đọc log
- 3. Phân tích log để phát hiện vấn đề
- 4. Giám sát log theo thời gian thực
- 5. Quản lý kích thước và dung lượng log systemd journal
- 6. Log forwarding và centralized logging
- 7. Công cụ phân tích log nâng cao
- 8. Xử lý log
- 9. Các trường hợp thực tế
- 10. Mẹo và thủ thuật nâng cao
- Kết luận
AlmaLinux là một hệ điều hành doanh nghiệp mã nguồn mở tương thích với RHEL (Red Hat Enterprise Linux), và việc đọc log hệ thống là một kỹ năng quan trọng để khắc phục sự cố và giám sát hiệu suất. Dưới đây là hướng dẫn chi tiết về cách đọc, phân tích và quản lý log trên AlmaLinux.
1. Vị trí của các file log chính
Trên AlmaLinux, hầu hết các file log được lưu trữ trong thư mục /var/log
. Một số file log quan trọng bao gồm:
/var/log/messages
: Log chung của hệ thống/var/log/secure
: Log liên quan đến bảo mật và xác thực/var/log/dmesg
: Log khởi động hệ thống/var/log/boot.log
: Log quá trình khởi động/var/log/cron
: Log của các tác vụ cron/var/log/maillog
: Log của dịch vụ mail/var/log/httpd/
: Thư mục chứa log của Apache (nếu được cài đặt)/var/log/audit/audit.log
: Log kiểm tra hệ thống/var/log/journal/
: Thư mục chứa journald logs (định dạng nhị phân)
2. Các công cụ đọc log
a) Lệnh cat
, less
, tail
, grep
# Xem toàn bộ file log
cat /var/log/messages
# Xem file log với khả năng cuộn
less /var/log/messages
# Xem 10 dòng cuối cùng của file log
tail /var/log/messages
# Theo dõi log theo thời gian thực
tail -f /var/log/messages
# Lọc log theo từ khóa
grep "error" /var/log/messages
b) Sử dụng journalctl
AlmaLinux sử dụng systemd, do đó bạn có thể sử dụng journalctl
để đọc log:
# Xem tất cả log
journalctl
# Xem log từ lần khởi động gần nhất
journalctl -b
# Xem log của một dịch vụ cụ thể
journalctl -u httpd.service
# Xem log theo thời gian thực
journalctl -f
# Lọc log theo mức độ nghiêm trọng
journalctl -p err..emerg
# Xem log trong khoảng thời gian cụ thể
journalctl --since "2023-01-01" --until "2023-01-02"
# Xem log theo định dạng JSON
journalctl -o json
3. Phân tích log để phát hiện vấn đề
a) Các mức độ nghiêm trọng trong log
Log hệ thống thường được phân loại theo mức độ nghiêm trọng:
EMERG
: Hệ thống không thể sử dụng đượcALERT
: Cần hành động ngay lập tứcCRIT
: Các điều kiện nguy hiểmERR
: LỗiWARNING
: Cảnh báoNOTICE
: Thông báo bình thường nhưng quan trọngINFO
: Thông tinDEBUG
: Thông tin gỡ lỗi
Để tìm các vấn đề nghiêm trọng:
grep -i "error\|warn\|fail\|crit" /var/log/messages
journalctl -p err..emerg
b) Các vấn đề thường gặp và cách nhận biết
Vấn đề đăng nhập và bảo mật
# Kiểm tra các lần đăng nhập thất bại
grep "Failed password" /var/log/secure
# Kiểm tra các lần đăng nhập thành công
grep "Accepted password" /var/log/secure
# Kiểm tra các nỗ lực đăng nhập SSH bất thường
grep "sshd" /var/log/secure | grep -i "fail\|invalid\|error"
# Thống kê IP đang cố gắng đăng nhập SSH
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
Vấn đề về phần cứng
# Kiểm tra lỗi ổ đĩa
grep -i "error\|fail" /var/log/messages | grep -i "sd[a-z]"
# Kiểm tra vấn đề RAM
grep -i "memory" /var/log/messages
# Kiểm tra lỗi CPU
grep -i "cpu" /var/log/messages | grep -i "error"
# Kiểm tra nhiệt độ quá nóng
journalctl | grep -i "thermal\|temperature\|overheating"
Vấn đề về dịch vụ
# Kiểm tra các dịch vụ bị lỗi
systemctl --failed
# Xem log của dịch vụ Apache
journalctl -u httpd.service | grep -i error
# Xem log của MySQL/MariaDB
journalctl -u mariadb.service | grep -i error
# Kiểm tra các dịch vụ tự động khởi động
systemctl list-unit-files | grep enabled
Vấn đề về mạng
# Kiểm tra vấn đề mạng
grep -i "network\|eth\|ens\|wlan" /var/log/messages | grep -i "error\|fail\|down"
# Kiểm tra FirewallD
journalctl -u firewalld | grep -i "reject\|drop"
# Kiểm tra kết nối DNS
journalctl | grep -i "dns\|resolve\|nameserver" | grep -i "fail\|error"
4. Giám sát log theo thời gian thực
Để theo dõi log theo thời gian thực và phát hiện vấn đề kịp thời:
# Theo dõi nhiều file log cùng lúc
tail -f /var/log/messages /var/log/secure /var/log/httpd/error_log
# Sử dụng multitail (cần cài đặt)
dnf install multitail
multitail /var/log/messages /var/log/secure
# Theo dõi journald theo thời gian thực với bộ lọc
journalctl -f -u httpd.service -u mariadb.service
5. Quản lý kích thước và dung lượng log systemd journal
Journald logs không được quản lý có thể nhanh chóng chiếm dụng dung lượng đĩa, ảnh hưởng đến hiệu suất hệ thống. Dưới đây là cách quản lý dung lượng của systemd journal:
Bài viết liên quan
a) Kiểm tra dung lượng hiện tại của journal
# Xem dung lượng hiện tại của journal
journalctl --disk-usage
# Xem chi tiết các file journal
ls -lh /var/log/journal/
b) Cấu hình giới hạn kích thước journal
Chỉnh sửa file cấu hình journald:
vi /etc/systemd/journald.conf
Thêm hoặc chỉnh sửa các dòng sau để thiết lập giới hạn kích thước:
[Journal]
SystemMaxUse=256M # Kích thước tối đa của journal
RuntimeMaxUse=128M # Kích thước tối đa của journal trong bộ nhớ tạm
MaxFileSec=1month # Thời gian tối đa để lưu giữ file log
MaxRetentionSec=1month # Thời gian tối đa để giữ các mục nhật ký
Các tùy chọn cấu hình quan trọng khác:
Storage=auto # auto, persistent, volatile, or none
Compress=yes # Nén dữ liệu log
ForwardToSyslog=yes # Chuyển tiếp đến syslog
c) Xác minh cấu hình
# Xem cấu hình hiện tại
systemd-analyze cat-config systemd/journald.conf
d) Áp dụng thay đổi
# Khởi động lại dịch vụ journald
systemctl restart systemd-journald
e) Xóa journal cũ theo cách thủ công
# Xóa journal cũ hơn X ngày
journalctl --vacuum-time=7d
# Xóa journal để giới hạn kích thước
journalctl --vacuum-size=100M
# Xóa tất cả journal cũ
journalctl --rotate
journalctl --vacuum-time=1s
f) Kiểm tra lại dung lượng sau khi thay đổi
journalctl --disk-usage
6. Log forwarding và centralized logging
Đối với hệ thống quan trọng, nên chuyển tiếp log đến một máy chủ log tập trung:
a) Cấu hình chuyển tiếp log với rsyslog
# Cài đặt rsyslog nếu chưa có
dnf install rsyslog
# Chỉnh sửa file cấu hình
vi /etc/rsyslog.conf
# Thêm cấu hình chuyển tiếp (thay thế log_server bằng IP máy chủ log)
*.* @log_server:514 # UDP
*.* @@log_server:514 # TCP
# Khởi động lại dịch vụ
systemctl restart rsyslog
b) Sử dụng systemd-journal-remote
# Cài đặt systemd-journal-remote
dnf install systemd-journal-remote
# Cấu hình để gửi log
vi /etc/systemd/journal-upload.conf
# Thêm URL máy chủ đích
[Upload]
URL=https://log-server:19532
# Khởi động dịch vụ
systemctl enable --now systemd-journal-upload
7. Công cụ phân tích log nâng cao
a) LogWatch
LogWatch là công cụ phân tích log tự động và gửi báo cáo:
# Cài đặt LogWatch
dnf install logwatch
# Chạy LogWatch và xem báo cáo
logwatch --output stdout --format text --range today
# Cấu hình LogWatch để gửi báo cáo qua email
vi /etc/logwatch/conf/logwatch.conf
b) Giải pháp log tập trung và phân tích
Đối với môi trường lớn, bạn có thể cân nhắc sử dụng các giải pháp như:
- Graylog: Nền tảng quản lý log tập trung với khả năng tìm kiếm mạnh mẽ
- ELK Stack: Elasticsearch (lưu trữ), Logstash (xử lý), Kibana (hiển thị)
- Prometheus + Grafana: Giám sát và hiển thị dữ liệu log theo thời gian thực
- Loki + Grafana: Giải pháp nhẹ cho việc tập trung log và truy vấn
c) Tự động hóa giám sát log
# Tạo script kiểm tra log định kỳ
vi /etc/cron.hourly/check_critical_logs
# Nội dung script
#!/bin/bash
grep -i "error\|fail\|crit" /var/log/messages | tail -n 20 | mail -s "Critical log alerts" admin@example.com
# Thêm quyền thực thi
chmod +x /etc/cron.hourly/check_critical_logs
8. Xử lý log
a) Xoay vòng log truyền thống với logrotate
AlmaLinux sử dụng logrotate
để quản lý kích thước và lưu trữ log truyền thống (file text):
# Xem cấu hình logrotate
cat /etc/logrotate.conf
# Xem cấu hình log cụ thể
ls -l /etc/logrotate.d/
# Tạo cấu hình xoay vòng tùy chỉnh cho ứng dụng
vi /etc/logrotate.d/myapp
# Ví dụ cấu hình
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 myapp myapp
postrotate
systemctl reload myapp
endscript
}
b) Lưu trữ log lâu dài
# Nén log cũ
gzip /var/log/messages.1
# Lưu trữ log vào vị trí khác
mkdir -p /backup/logs
cp /var/log/messages.* /backup/logs/
# Lưu trữ journal logs
journalctl --since "2023-01-01" --until "2023-01-31" > /backup/logs/journal-jan-2023.log
9. Các trường hợp thực tế
Trường hợp 1: Hệ thống khởi động chậm
# Phân tích thời gian khởi động
systemd-analyze
# Phân tích chi tiết
systemd-analyze blame
# Kiểm tra log khởi động
journalctl -b | grep -i "slow\|timeout\|fail"
# Tìm các dịch vụ chạy lâu nhất khi khởi động
systemd-analyze critical-chain
Trường hợp 2: Máy chủ web gặp sự cố
# Kiểm tra log Apache
tail -n 100 /var/log/httpd/error_log
# Kiểm tra log truy cập
tail -n 100 /var/log/httpd/access_log | grep " 5[0-9][0-9] "
# Kiểm tra tình trạng dịch vụ
systemctl status httpd
# Kiểm tra tài nguyên hệ thống
journalctl -u httpd.service | grep -i "resource\|memory\|cpu"
Trường hợp 3: Vấn đề bảo mật
# Kiểm tra các IP đang cố gắng đăng nhập SSH
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
# Kiểm tra tài khoản đăng nhập bất thường
grep "session opened" /var/log/secure | tail -n 20
# Kiểm tra các thay đổi quyền sudo
journalctl | grep -i "sudo\|su\|root"
# Kiểm tra cảnh báo từ auditd
ausearch -m AVC -ts today
Trường hợp 4: Disk Space đầy
# Kiểm tra dung lượng đĩa
df -h
# Tìm các file lớn
du -h --max-depth=1 /var | sort -hr
# Kiểm tra log cảnh báo không gian đĩa
journalctl | grep -i "disk space\|no space\|filesystem full"
# Kiểm tra inode
df -i
Trường hợp 5: Troubleshooting khi journald gặp sự cố
# Kiểm tra trạng thái journald
systemctl status systemd-journald
# Xóa journal để giải phóng không gian
journalctl --vacuum-time=1d
# Tạo thư mục log persistent nếu chưa tồn tại
mkdir -p /var/log/journal
# Đặt quyền thích hợp
chown root:systemd-journal /var/log/journal
chmod 2755 /var/log/journal
10. Mẹo và thủ thuật nâng cao
a) Tùy chỉnh định dạng đầu ra của journalctl
# Đầu ra ngắn gọn
journalctl --no-pager -o short
# Đầu ra chi tiết hơn
journalctl -o verbose
# Đầu ra định dạng JSON
journalctl -o json
# Chỉ hiển thị thông điệp
journalctl -o cat
b) Theo dõi hiệu suất dịch vụ qua log
# Đếm số lỗi theo giờ
journalctl -u httpd --since today | grep -i error | awk '{print $1, $2, $3}' | uniq -c
# Xem thời gian phản hồi trung bình từ log web
grep -r "request_time" /var/log/nginx/ | awk '{sum+=$10; count++} END {print sum/count}'
c) Tạo dashboard hiển thị log theo thời gian thực
# Sử dụng watch và journalctl
watch -n 1 'journalctl -u httpd.service --since "1 minute ago" | tail -n 10'
Kết luận
Đọc, phân tích và quản lý log hệ thống trên AlmaLinux là một kỹ năng quan trọng giúp phát hiện và khắc phục vấn đề một cách chủ động. Với việc sử dụng systemd journal, bạn có thêm các công cụ mạnh mẽ để quản lý log, nhưng cũng cần chú ý đến việc kiểm soát dung lượng để tránh tình trạng log chiếm quá nhiều không gian đĩa.
Quản lý log hiệu quả không chỉ giúp giải quyết sự cố nhanh chóng mà còn góp phần duy trì hiệu suất hệ thống ổn định theo thời gian. Hãy thiết lập một kế hoạch quản lý log định kỳ, bao gồm cả việc cấu hình giới hạn kích thước, xoay vòng log, và lưu trữ log quan trọng để đảm bảo an toàn dữ liệu và tuân thủ các yêu cầu về lưu trữ.