CodeGym /Các khóa học /Docker SELF /Ghi log và xem nhật ký hệ thống: lệnh `journalctl`

Ghi log và xem nhật ký hệ thống: lệnh `journalctl`

Docker SELF
Mức độ , Bài học
Có sẵn

1. Tại sao cần làm việc với log?

Nhật ký (hoặc log) chính là "thám tử" riêng của bạn, ghi lại mọi hoạt động quan trọng trong hệ thống. Nó ghi nhận các hành động của kernel, ứng dụng, dịch vụ và các thành phần khác của hệ thống. Log là công cụ quan trọng nhất trong việc chuẩn đoán lỗi và theo dõi hoạt động của hệ thống.

Hãy tưởng tượng, server của bạn tự nhiên không phản hồi. Thay vì đoán mò như Sherlock Holmes, cái gì đã xảy ra, bạn chỉ cần kiểm tra nhật ký — mọi thứ sẽ rõ ràng. Ví dụ: "Dịch vụ ssh đã bị dừng", "Ổ đĩa đã đầy", "Con mèo chạy qua bàn phím và dừng dịch vụ quan trọng". Log sẽ kể lại tất cả.

Làm việc với nhật ký hệ thống giúp bạn:

  1. Chuẩn đoán lỗi. Khi có sự cố xảy ra, log có thể chứa lỗi hoặc cảnh báo.
  2. Theo dõi hoạt động của dịch vụ. Ví dụ, biết tại sao cơ sở dữ liệu PostgreSQL bị dừng hoặc lần gần nhất máy chủ web được cập nhật.
  3. Thu thập phân tích. Theo dõi hiệu suất và các chỉ số của dịch vụ.
  4. Nâng cao bảo mật. Log có thể cho thấy các nỗ lực tấn công qua SSH hoặc truy cập trái phép.

2. Giới thiệu về journalctl

journalctl là một lệnh mạnh mẽ để xem và lọc nhật ký hệ thống trong Linux. Nó hoạt động với systemd-journald - hệ thống thu thập và lưu trữ log, được quản lý bởi systemd.

Những thao tác cơ bản với journalctl

Trước tiên, hãy xem cách sử dụng công cụ này nhé. Mở terminal và nhập:

journalctl

Lệnh này sẽ hiển thị cho bạn tất cả nhật ký hệ thống, được sắp xếp theo thứ tự thời gian. Nếu bạn mong đợi thấy được điều gì đó ngắn gọn, thì chuẩn bị tinh thần nha: thường thì log sẽ chiếm nhiều màn hình. Đừng lo, chúng ta sẽ học cách lọc chúng ngay sau đây.

Bây giờ, để thoát khỏi chế độ xem log, nhấn q (bạn đã nhận ra sự giống nhau giữa lessjournalctl chưa?).


Lọc log theo thời gian

Bây giờ sẽ là lúc làm phép thuật để thu hẹp log xuống một phạm vi tiện lợi hơn nhé.

Xem log trong một giờ gần đây

journalctl --since "1 hour ago"

Xem log của một ngày cụ thể

journalctl --since "2023-10-31"

Chỉ định khoảng thời gian

Bạn muốn xem các sự kiện từ 8 giờ sáng đến 9 giờ sáng? Không vấn đề gì:

journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"

Lọc theo thời gian rất hữu ích, ví dụ nếu bạn biết rằng vấn đề đã bắt đầu từ một thời điểm nhất định. Tương tự như: bạn không đọc cả cuốn sách để hiểu ai là kẻ giết người — bạn chỉ xem các trang cuối.


Làm việc với log của một dịch vụ cụ thể

Thay vì tìm hiểu toàn bộ hệ thống, bạn có thể tập trung vào một dịch vụ cụ thể. Ví dụ, bạn muốn xem web server nginx hoạt động thế nào:

journalctl -u nginx

Nếu bạn muốn chỉ xem các bản ghi trong vòng một giờ gần đây (vì chúng ta luôn yêu thích thông tin mới nhất):

journalctl -u nginx --since "1 hour ago"

Danh sách ví dụ ngắn gọn:

  • -u ssh: Nhật ký của dịch vụ SSH.
  • -u cron: Nhật ký của các tác vụ CRON.
  • -u mysql: Nhật ký của cơ sở dữ liệu MySQL.

Đọc log trong thời gian thực

Khi bạn đang sửa chữa gì đó ngay bây giờ, việc theo dõi log trong thời gian thực có thể rất hữu ích — như xem một trận bóng đá vậy. Để làm điều này sử dụng lệnh:

journalctl -f

Tùy chọn -f hoạt động tương tự như tail -f, hiển thị các bản ghi log mới khi chúng xuất hiện.

Ví dụ, thử chạy lệnh này và song song đó khởi động lại một dịch vụ nào đó:

sudo systemctl restart ssh

Bạn sẽ thấy các thay đổi — bản ghi về việc khởi động lại sẽ xuất hiện trong log.


Tìm kiếm lỗi trong log

Thường thì log rất dài, và tìm thông tin mình cần trong đó chẳng khác nào tìm kim trong đống rơm. Vì vậy, bạn có thể dùng tìm kiếm theo từ khóa.

Sử dụng đơn giản:

journalctl | grep "ERROR"

Ví dụ này sẽ chỉ hiển thị những dòng chứa từ ERROR. Bạn có thể thay ERROR bằng bất kỳ từ nào khác, ví dụ WARNING, failed hoặc panic.


3. Các tùy chọn đặc biệt cho journalctl

Xem log chỉ sau khi khởi động lại

Muốn biết chuyện gì đã xảy ra sau lần khởi động hệ thống gần nhất không? Bí ẩn nhỉ? Chỉ cần gõ:

journalctl -b

Mỗi lần khởi động hệ thống được ghi lại như một "block" riêng biệt. Nếu bạn muốn xem ghi chép sau lần khởi động trước đó (ừ, đôi khi cần thiết đấy):

journalctl -b -1

Lọc theo người dùng hoặc PID

Đôi khi cần theo dõi hành động của một người dùng cụ thể hoặc một process cụ thể. Ví dụ:

journalctl _UID=1000

Thay 1000 bằng ID của người dùng (có thể xem ID bằng lệnh id).

Để lọc theo PID (ID của process):

journalctl _PID=1234

4. Ví dụ thực tế

  1. Tìm lỗi của dịch vụ SSH.

    Bạn muốn biết tại sao SSH từ chối kết nối. Hãy sử dụng:

    journalctl -u ssh | grep "ERROR"
    
  2. Phân tích logs trong 24 giờ qua cho CRON.

    Giả sử bạn đang kiểm tra, tại sao script hàng ngày của bạn không thực thi:

    journalctl -u cron --since "yesterday"
    
  3. Giám sát web server theo thời gian thực.

    Web server đang chịu tải? Kiểm tra logs để tìm lỗi:

    journalctl -u nginx -f
    

Bài tập thực hành tự làm

  1. Tìm logs về lỗi cho dịch vụ SSH trong 24 giờ qua.
  2. Sử dụng journalctl, xuất logs cho CRON chỉ trong buổi sáng. Hãy chắc chắn rằng lệnh này hoạt động với đúng khoảng thời gian.
  3. Thiết lập giám sát logs của systemd theo thời gian thực và khởi động một vài dịch vụ hệ thống để xem trạng thái của chúng trong logs.

Ghi nhật ký không chỉ là về việc tìm lỗi hoặc chẩn đoán vấn đề. Đây là "điệp viên bí mật" của bạn, giúp giám sát toàn bộ hệ điều hành. Một khi bạn thành thạo lệnh journalctl, bạn sẽ có một công cụ mạnh mẽ để phân tích, tối ưu hóa và đảm bảo hệ thống Linux hoạt động ổn định trong mọi điều kiện.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION