Sử dụng journalctl để đọc và phân tích Systemd Logs

Chia sẻ

Bài viết này nói về những chức năng cơ bản của công cụ journalctl cùng với những câu lệnh đi kèm nó. Bạn có thể dùng những câu lệnh này trong quá trình sửa lỗi của máy Desktop cũng như server chạy Linux. Sau đây là hướng dẫn dùng journalctl để đọc và phân tích Systemd Logs với những ví dụ khác nhau

Giới thiệu

Nhiều quan điểm cho rằng systemd không thực sự tốt, nó làm cho hệ thống trở nên nặng nề và đây vẫn là một vấn đề còn luôn gây ra sự tranh cãi. Nhưng bạn không thể phủ nhận rằng nó cũng cấp một loạt công cụ để quản lí cũng như gỡ rối trên hệ thống. Lấy ví dụ hệ thống của bạn bị hỏng phần GUI, hay như bạn có thể lẫn lộn giữa boot và GRUB. Nếu kịch bản đó xảy ra, bạn có thể boot từ chế độ LIVE, mount phân vùng Linux và đọc logs của Systemd để tìm cách xử lí vấn đề này
Systemd có ba thành phần chính như sau

  • systemd: Quản lí hệ thống và dịch vụ cho hệ điều hành Linux
  • systemctl: Câu lệnh để kiểm soát tình trạng của systemd và quản lí các dịch vụ
  • systemd-analyze: Cung cấp các thống kê về hiệu năng khởi động của hệ thống cũng như kiểm tra các trạng thái còn lại và thu thập thông tin từ hệ thống và bộ quản lí dịch vụ

Ngoài ba thành phần trên, có các dịch vụ khác mà systemd cung cấp như journald, logind, networkd. Trong bài viết này chúng ta sẽ nói về journald

journald – systemd journal daemon

Lợi ích của việc ghi lại các sự kiện một cách tập trung là, các vấn đề trong hệ thống có rất nhiều. Và chúng được lưu dưới dạng mã nhị phân, túc là bạn có thể phiên dịch nó ra text, JSON objects hoặc rất nhiều dạng khác mà bạn muốn. Vì vậy, cực kì đơn giản để có thể tìm ra một sự kiện nhỏ dựa vào thời gian của Logs
Nhớ rằng các files log mà journald thu thật được có hàng nghìn dòng và nó được cập nhật mỗi khi có một sự kiện nhỏ nào xảy ra, vì vậy nếu bạn có một hệ thống sử dụng đã lâu, kích cỡ của files đó có thể lên tới hàng GB. Vì vậy chúng ta nên biết những câu lệnh cơ bản để có thể dễ dàng tìm hiểu về các vấn đề của hệ thống hơn

File cấu hình của journald

File cấu hình của journald được lưu ở đường dẫn /etc/systemd/journald.conf. Nó rất nhiều tham số để cho chúng ta biết quá trình logging diễn ra như thế nào, bạn không nên chỉnh sửa files này trừ khi bạn biết chắc mình đang làm việc gì

Nơi journald lưu trữ các files log

journald lưu trữ các files log ở dạng mã nhị phân, nó được lưu trữ ở đường dẫn /var/log/journal. Đừng dùng công cụ nano, cat hay vi để xem hay sửa những files này vì nó đang ở dạng nhị phân và sẽ không được hiển thị đúng cách

Sử dụng journalctl để đọc và phân tích Systemd Logs

Câu lệnh journald cơ bản

Câu lệnh cơ bản để đọc logs của journal daemon là

journalctl


Bạn sẽ được cung cấp toàn bộ những mục như lỗi, cảnh báo, vv từ tất cả các ứng dụng và tiến trình. Nó sẽ xuất ra danh sách từ những log cũ nhất phía trên và dòng logs mới nhất ở dưới cuối. bạn có thể bấm Enter hoặc phím PAGE UP và PAGE DOWN để cuộn. Bấm phím q để thoát

Câu lệnh journald theo múi giờ

Mặc định, journalctl hiển thị log time theo múi giờ hiện tại của bạn. Tuy nhiên, bạn có thể dễ dàng yêu cầu chương trình hiển thị theo múi giờ bạn chỉ định, ví dụ để xem ở múi giờ UTC, dùng câu lệnh dưới đây

journalctl --utc

Chỉ xem errors, warnings, vv

The logs that a system generates have different priorities. Some logs may be a warning which can be ignored or some may be critical errors. You might want to look at only errors, not warnings. That is also possible using the below command.
Logs mà hệ thống xuất ra có những mức ưu tiên khác nhau. Nhiều Logs chỉ là cảnh báo bạn có thể không cần quan tâm, nhưng một số logs là mỗi nghiêm trọng. Bạn chỉ cần lọc ra những lỗi, không phải cảnh báo. Điều này hoàn toàn có thể khi sử dụng câu lệnh dưới

journalctl -p 0

Error Code như sau

  • 0: emergency
  • 1: alerts
  • 2: critical
  • 3: errors
  • 4: warning
  • 5: notice
  • 6: info
  • 7: debug

Xem journal logs cho một lần boot cụ thể

Để xem danh sách các lần khởi động kèm thời gian, bạn gõ lệnh sau

journalctl --list-boots

  • Cột đầu tiên hiển thị số thứ tự Boot Track Number của lần Boot
  • Cột thứ hai là Boot ID
  • Cột tiếp theo là về thời gian boot

Để xem journal logs cho một lần boot cụ thể. Bạn thực hiện lệnh sau

journalctl -b -Boot Track Number
journalctl -b Boot ID


Bạn có thê rthêm tham số -x để được giải thích về từng lỗi mà đang gặp phải. Ví dụ

journalctl -xb -p 3

Xem journal logs cho một thời gian, khoảng thời gian cụ thể

Bạn có thể dùng tham số --since với các giá tị như “yesterday”, “today”, “tomorrow”, “now”.
Hoặc với khoảng thời gian cụ thể theo định dạng “YYYY-MM-DD HH:MM:SS”
Một số ví dụ

journalctl --since "2020-12-04 06:00:00"
journalctl --since "2020-12-03" --until "2020-12-05 03:00:00"
journalctl --since yesterday
journalctl --since 09:00 --until "1 hour ago"

Xem journal logs về phần nhân (Kernel)

Các bạn sử dụng câu lệnh với tham số -k

journalctl -k

Xem journal logs của một serivce, PID

Các bạn sử dụng câu lệnh với tham số -u

journalctl -u NetworkManager.service

Nếu bạn chưa nắm được tên service, bạn có thể sử dụng câu lệnh sau để tìm

systemctl list-units --type=service

Xem journal logs của một user,group

Các bạn dùng câu lệnh id -u để tìm ID của user/group đó
id -u debugpoint
Sau đó dùng tham số _UID cho User và _GID cho Group để xem
journalctl _UID=1000 –since today

Xem journal logs của một thực thi

Bạn sử dụng câu lệnh

journalctl /usr/bin/gnome-shell --since today

Chia sẻ