Cách đọc log hệ thống trên Almalinux để phát hiện vấn đề

Sơ đồ trang

  1. 1. Vị trí của các file log chính
  2. 2. Các công cụ đọc log
  3. 3. Phân tích log để phát hiện vấn đề
  4. 4. Giám sát log theo thời gian thực
  5. 5. Quản lý kích thước và dung lượng log systemd journal
  6. 6. Log forwarding và centralized logging
  7. 7. Công cụ phân tích log nâng cao
  8. 8. Xử lý log
  9. 9. Các trường hợp thực tế
  10. 10. Mẹo và thủ thuật nâng cao
  11. 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 được
  • ALERT: Cần hành động ngay lập tức
  • CRIT: Các điều kiện nguy hiểm
  • ERR: Lỗi
  • WARNING: Cảnh báo
  • NOTICE: Thông báo bình thường nhưng quan trọng
  • INFO: Thông tin
  • DEBUG: 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:

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ữ.

Đánh giá

donate Nếu bạn thấy bài viết có ích bạn có thể donate cho team hoặc chia sẻ bài viết này. Ngoài ra bạn có thể yêu cầu thêm bài viết tại đây
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, dịch vụ quảng cáo Google, quảng cáo Facebook, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan