Đọc và phân tích log dùng journalctl trên systemd

Đọc và phân tích log dùng journalctl trên systemd

Bài viết này sẽ hướng dẫn về việc đọc và phân tích log dùng journalctl trên systemd. Thông qua cách sử dụng câu lệnh journalctl này trong quá trình sửa lỗi của máy tính hay vps, server chạy Linux.

systemd và journalctl là gì?

Chúng ta có thể hiểu systemd là chương trình quản lý hệ thống và các service mặc định trên các bản phân phối Linux. Một trong những tính năng chính của systemd là nó thu thập các bản ghi logs, và nó cung cấp các công cụ để phân tích các logs đó. systemd sẽ thực hiện thu thập logs từ tất cả các dịch vụ ở dạng nhị phân và cung cấp cho chúng ta công cụ dòng lệnh để đọc, phân tích và thao tác với logs.

journalctl là công cụ dòng lệnh cho phép bạn tương tác với nhật ký logs. Chúng ta có thể sử dụng journalctl để có thể đọc, theo dõi logs theo thời gian, lọc dựa trên thời gian, service, mức độ nghiêm trọng và các thông số khác.

Cần kiểm tra journalctl

Để sử dụng journalctl chúng ta cần tiến hành kiểm tra xem hệ thống đã được bật journalctl chưa. Vì một số bản phân phối Linux thì journalctl không được bật theo mặc định.

Vị trí mặc định của journald logs là thư mục “/var/log/journal”

Tiếp theo, trong tệp “/etc/systemd/journald.conf”, đảm bảo rằng giá trị Storage được đặt thành “auto” hoặc “persistent”

Sử dụng journalctl

Đọc và tìm kiếm log với journalctl không chứa option

Chúng ta có thể sử dụng lệnh journalctl để tiến hành đọc và tìm kiếm các thông tin log của hệ thống. Khi thực thi lệnh trên thì sẽ hiển thị toàn bộ log, với các mục cũ nhất ở đầu danh sách. Danh sách được hiển thị trong less, cho phép chúng ta đọc và tìm kiếm bằng các tính năng điều hướng thông thường của  less. Cũng có thể sử dụng  phím ⬆️ ⬇️ và ⬅️ ➡️ để đọc và tìm kiếm các log.

Kết quả khi thực thi lệnh journalctl:

-- Logs begin at Thu 2020-05-21 13:54:14 +07, end at Fri 2021-09-24 13:46:34 +07. --
May 21 13:54:14 ubuntu-server kernel: Linux version 5.4.0-31-generic (buildd@lgw01-amd64-059) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #35-Ubuntu SMP Thu May 7 20:20:34 UT>
May 21 13:54:14 ubuntu-server kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-31-generic root=UUID=d85ae6ae-019c-458e-a8d0-520df727e0d5 ro maybe-ubiquity
May 21 13:54:14 ubuntu-server kernel: KERNEL supported cpus:
May 21 13:54:14 ubuntu-server kernel: Intel GenuineIntel
May 21 13:54:14 ubuntu-server kernel: AMD AuthenticAMD
May 21 13:54:14 ubuntu-server kernel: Hygon HygonGenuine
May 21 13:54:14 ubuntu-server kernel: Centaur CentaurHauls
May 21 13:54:14 ubuntu-server kernel: zhaoxin Shanghai
May 21 13:54:14 ubuntu-server kernel: x86/fpu: x87 FPU will use FXSAVE
May 21 13:54:14 ubuntu-server kernel: BIOS-provided physical RAM map:
May 21 13:54:14 ubuntu-server kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
May 21 13:54:14 ubuntu-server kernel: BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved

Sử dụng phím end để có thể đọc và tìm kiếm log ở cuối file:

Sep 24 13:45:59 ubuntu20 systemd-logind[809]: New session 124 of user root.
Sep 24 13:45:59 ubuntu20 systemd[1]: Started Session 124 of user root.
Sep 24 13:46:04 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.LqoeKj.mount: Succeeded.
Sep 24 13:46:04 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.LqoeKj.mount: Succeeded.
Sep 24 13:46:34 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.3Xzf4H.mount: Succeeded.
Sep 24 13:46:34 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.3Xzf4H.mount: Succeeded.
Sep 24 13:47:04 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.IaXnze.mount: Succeeded.
Sep 24 13:47:04 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.IaXnze.mount: Succeeded.
Sep 24 13:47:34 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Mz3jsG.mount: Succeeded.
Sep 24 13:47:34 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Mz3jsG.mount: Succeeded.
lines 26649-26690/26690 (END)

Chúng ta có thể sử dụng phím “q” hoặc “Ctrl+C” để tiến hành thoát khỏi quá trình đọc và tìm kiếm log.

Đọc và tìm kiếm log với journalctl chứa option

Show toàn bộ log sử dụng option “–no-pager”

Nếu chúng ta cần thực hiện show toàn bộ log chúng ta thực hiện sử dụng option –no-pager như sau:

journalctl --no-pager

Show log theo số dòng gần đây nhất sử dụng option “-n”

Khi chúng ta muốn show log theo số dòng gần đây nhất để có thể kiểm tra log dể dàng hơn chúng ta sử dụng option -n như kết quả sau:

journalctl -n 10

Ta thu được kết quả như sau:

-- Logs begin at Thu 2020-05-21 13:54:14 +07, end at Fri 2021-09-24 13:48:04 +07. --
Sep 24 13:46:04 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.LqoeKj.mount: Succeeded.
Sep 24 13:46:04 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.LqoeKj.mount: Succeeded.
Sep 24 13:46:34 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.3Xzf4H.mount: Succeeded.
Sep 24 13:46:34 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.3Xzf4H.mount: Succeeded.
Sep 24 13:47:04 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.IaXnze.mount: Succeeded.
Sep 24 13:47:04 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.IaXnze.mount: Succeeded.
Sep 24 13:47:34 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Mz3jsG.mount: Succeeded.
Sep 24 13:47:34 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Mz3jsG.mount: Succeeded.
Sep 24 13:48:04 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.ap8UmY.mount: Succeeded.
Sep 24 13:48:04 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.ap8UmY.mount: Succeeded.

Hiển thị nhật ký logs trong thời gian thực option “-f”

Nếu bạn muốn xem logs theo thời gian thực, bạn có thể sử dụng tùy chọn “-f” của lệnh journal:

journalctl -f

Giống như tùy chọn -f của lệnh tail , logs sẽ được hiển thị theo thời gian thực ở chế độ theo dõi.

Sử dụng phím “Ctrl + c” để thoát khỏi chế độ xem thời gian thực.

Thay đổi định dạng hiển thị option “-o”

Để đầu ra mặc định là định dạng ngắn, rất giống với định dạng nhật ký hệ thống cổ điển. Để yêu cầu định dạng ngắn một cách rõ ràng, chúng ta cần sử dụng option “-o” với công cụ short-full sửa đổi:

journalctl -n 10 -o short-full

Khi thực thi lệnh trên thu được kết quả:

-- Logs begin at Thu 2020-05-21 13:54:14 +07, end at Fri 2021-09-24 13:49:05 +07. --
Fri 2021-09-24 13:47:04 +07 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.IaXnze.mount: Succeeded.
Fri 2021-09-24 13:47:04 +07 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.IaXnze.mount: Succeede>
Fri 2021-09-24 13:47:34 +07 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Mz3jsG.mount: Succeede>
Fri 2021-09-24 13:47:34 +07 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Mz3jsG.mount: Succeeded.
Fri 2021-09-24 13:48:04 +07 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.ap8UmY.mount: Succeede>
Fri 2021-09-24 13:48:04 +07 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.ap8UmY.mount: Succeeded.
Fri 2021-09-24 13:48:34 +07 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.D5Ukts.mount: Succeede>
Fri 2021-09-24 13:48:34 +07 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.D5Ukts.mount: Succeeded.
Fri 2021-09-24 13:49:05 +07 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.cgFFtK.mount: Succeeded.
Fri 2021-09-24 13:49:05 +07 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.cgFFtK.mount: Succeede>
lines 1-11/11 (END)

Ý nghĩa các trường trái sang phải là:

  • Thời gian log được tạo, theo giờ VPS.
  • Tên máy chủ.
  • Tên tiến trình.
  • Thông báo nhật ký.

Optin “short-full” giúp hiển thị ngày tháng thời gian 1 cách đầy đủ.

Để xem tất cả dữ liệu đi kèm với mỗi thông báo log, chúng ta hãy sử dụng option verbose như sau: “journalctl -n 10 -o verbose”

Kết quả trả về như sau:

-- Logs begin at Thu 2020-05-21 13:54:14 +07, end at Fri 2021-09-24 13:50:05 +07. --
Fri 2021-09-24 13:48:04.744775 +07 [s=fd8e97f207654184801b57b90c900424;i=6840;b=4e68d7cfd66f499da485bfe5bf40e944;m=5360b23865;t=5ccb82116ce6a;x=3a8406b003021fc9]
PRIORITY=6
SYSLOG_FACILITY=3
CODE_FILE=src/core/unit.c
CODE_LINE=5865
CODE_FUNC=unit_log_success
SYSLOG_IDENTIFIER=systemd
MESSAGE_ID=7ad2d189f7e94e70a38c781354912448
_TRANSPORT=journal
_PID=965
_UID=0
_GID=0
_COMM=systemd
_EXE=/usr/lib/systemd/systemd
_CMDLINE=/lib/systemd/systemd --user
_CAP_EFFECTIVE=3fffffffff
_SELINUX_CONTEXT=unconfined
_AUDIT_SESSION=2
_AUDIT_LOGINUID=0
_SYSTEMD_CGROUP=/user.slice/user-0.slice/user@0.service/init.scope
_SYSTEMD_OWNER_UID=0
_SYSTEMD_UNIT=user@0.service
_SYSTEMD_USER_UNIT=init.scope
_SYSTEMD_SLICE=user-0.slice
_SYSTEMD_USER_SLICE=-.slice
_BOOT_ID=4e68d7cfd66f499da485bfe5bf40e944
_MACHINE_ID=47b79e2d10914120ba17d2dc6fec55b1
_HOSTNAME=ubuntu20
USER_UNIT=run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.ap8UmY.mount
USER_INVOCATION_ID=2f6aadb2e61e4c80bde8334e720a6256
MESSAGE=run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.ap8UmY.mount: Succeeded.
_SOURCE_REALTIME_TIMESTAMP=1632466084744775

Ý nghĩa của tuỳ chọn “Priority” là như sau:

  • 0 : Khẩn cấp. Hệ thống không sử dụng được.
  • 1 : Cảnh báo. Một điều kiện đã được gắn cờ cần được sửa chữa ngay lập tức.
  • 2 : Trọng yếu. Điều này bao gồm các sự cố, lỗi coredumps và lỗi nghiêm trọng trong các ứng dụng chính.
  • 3 : Lỗi. Một lỗi đã được báo cáo, nhưng nó không được coi là nghiêm trọng.
  • 4 : Cảnh báo. Đưa ra một điều kiện để chúng ta chú ý rằng, nếu bị bỏ qua, có thể trở thành một lỗi.
  • 5 : Thông báo. Được sử dụng để báo cáo các sự kiện bất thường, nhưng không phải lỗi.
  • 6 : Thông tin. Thông báo hoạt động thường xuyên. Những điều này không yêu cầu hành động.
  • 7 : Gỡ lỗi. Thông báo được đưa vào ứng dụng để giúp chúng ta gỡ lỗi dễ dàng hơn.

Nếu bạn muốn đầu ra được trình bày dưới dạng các JSON được định dạng đúng , hãy sử dụng option json

journalctl -n 10 -o json

Kết quả như bên dưới:

{"__MONOTONIC_TIMESTAMP":"358225189654","_SYSTEMD_USER_SLICE":"-.slice","_AUDIT_SESSION":"2","_MACHINE_ID":"47b79e2d10914120ba17d2dc6fec55b1","_CMDLINE":"/lib/systemd/systemd >
{"SYSLOG_IDENTIFIER":"systemd","_UID":"0","_SOURCE_REALTIME_TIMESTAMP":"1632466205358398","__MONOTONIC_TIMESTAMP":"358225192943","INVOCATION_ID":"09a67061c38c4b6486fbb2fab07a4>
{"CODE_LINE":"5865","USER_UNIT":"run-docker-runtime\\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.E5aHp8.mount","_SELINUX_CONTEXT":"uncon>
{"PRIORITY":"6","INVOCATION_ID":"8c34368c3e264005ac1e454d660300ec","_CMDLINE":"/lib/systemd/systemd --system --deserialize 27","_SYSTEMD_SLICE":"-.slice","CODE_FUNC":"unit_log>
{"_SYSTEMD_UNIT":"user@0.service","SYSLOG_FACILITY":"3","_SELINUX_CONTEXT":"unconfined\n","_HOSTNAME":"ubuntu20","_AUDIT_SESSION":"2","__CURSOR":"s=fd8e97f207654184801b57b90c9>
{"_SYSTEMD_CGROUP":"/init.scope","SYSLOG_FACILITY":"3","CODE_FUNC":"unit_log_success","_SYSTEMD_SLICE":"-.slice","SYSLOG_IDENTIFIER":"systemd","MESSAGE_ID":"7ad2d189f7e94e70a3>
{"_TRANSPORT":"journal","__REALTIME_TIMESTAMP":"1632466295806044","MESSAGE_ID":"7ad2d189f7e94e70a38c781354912448","CODE_FILE":"src/core/unit.c","_CAP_EFFECTIVE":"3fffffffff",">
{"_GID":"0","_AUDIT_LOGINUID":"0","_UID":"0","_PID":"965","SYSLOG_FACILITY":"3","SYSLOG_IDENTIFIER":"systemd","_SYSTEMD_USER_SLICE":"-.slice","_COMM":"systemd","__MONOTONIC_TI>
{"_PID":"965","MESSAGE":"run-docker-runtime\\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.MiNz0A.mount: Succeeded.","_CAP_EFFECTIVE":"3ff>
{"_SOURCE_REALTIME_TIMESTAMP":"1632466325950485","MESSAGE_ID":"7ad2d189f7e94e70a38c781354912448","__MONOTONIC_TIMESTAMP":"358345786398","CODE_FILE":"src/core/unit.c","_PID":"1>
lines 1-10/10 (END)

Để có thể hiển thị định dạng các JSON ở dạng dể đọc chúng ta sử dụng option json-pretty:

journalctl -n 10 -o json-pretty

Ta thu được kết quả dể dàng đọc hơn:

{
"__CURSOR" : "s=fd8e97f207654184801b57b90c900424;i=684e;b=4e68d7cfd66f499da485bfe5bf40e944;m=536d46c257;t=5ccb82dab585c;x=bc94207db5df2754",
"_SELINUX_CONTEXT" : "unconfined\n",
"_EXE" : "/usr/lib/systemd/systemd",
"MESSAGE" : "run-docker-runtime\\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.BDyhMa.mount: Succeeded.",
"SYSLOG_IDENTIFIER" : "systemd",
"CODE_FILE" : "src/core/unit.c",
"_PID" : "1",
"_SYSTEMD_UNIT" : "init.scope",
"_UID" : "0",
"CODE_LINE" : "5870",
"_TRANSPORT" : "journal",
"_CAP_EFFECTIVE" : "3fffffffff",
"_MACHINE_ID" : "47b79e2d10914120ba17d2dc6fec55b1",
"__REALTIME_TIMESTAMP" : "1632466295806044",
"__MONOTONIC_TIMESTAMP" : "358315639383",
"_SYSTEMD_SLICE" : "-.slice",
"_BOOT_ID" : "4e68d7cfd66f499da485bfe5bf40e944",
"UNIT" : "run-docker-runtime\\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.BDyhMa.mount",
"_SOURCE_REALTIME_TIMESTAMP" : "1632466295805815",
"_CMDLINE" : "/lib/systemd/systemd --system --deserialize 27",
"MESSAGE_ID" : "7ad2d189f7e94e70a38c781354912448",
"_SYSTEMD_CGROUP" : "/init.scope",
"SYSLOG_FACILITY" : "3",
"CODE_FUNC" : "unit_log_success",
"PRIORITY" : "6",

Chọn hiển thị log theo khoảng thời gian

Để giới hạn đầu ra trong journalctlmột khoảng thời gian mà chúng ta cần tìm kiếm, hãy sử dụng các  tùy chọn “-S” (kể từ khi) và “-U” (cho đến khi).

Để xem các mục nhập nhật ký kể từ một ngày và giờ cụ thể, hãy sử dụng lệnh này:

journalctl -S "2021-09-24 09:42:23"

-- Logs begin at Thu 2020-05-21 13:54:14 +07, end at Fri 2021-09-24 13:54:06 +07. --
Sep 24 09:42:23 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Eeaeqy.mount: Succeeded.
Sep 24 09:42:23 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Eeaeqy.mount: Succeeded.

Khi chúng ta thực hiện xác định được khoảng thời gian muốn show lof, chúng ta sử dụng cả hai tùy chọn “-S” (kể từ) và “-U” (cho đến khi).

journalctl -S "2021-09-24 09:42:00" -U "2021-09-24 09:43:00"

-- Logs begin at Thu 2020-05-21 13:54:14 +07, end at Fri 2021-09-24 13:54:36 +07. --
Sep 24 09:42:23 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Eeaeqy.mount: Succeeded.
Sep 24 09:42:23 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Eeaeqy.mount: Succeeded.
Sep 24 09:42:53 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Ncmy01.mount: Succeeded.
Sep 24 09:42:53 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.Ncmy01.mount: Succeeded.

Sử dụng khoảng thời gian tương đối

Chúng ta có thể sử dụng thời gian tương đối. Option có ý nghĩa như sau: “D” là viết tắt của “ngày”, và “-1” có nghĩa là một ngày trong quá khứ:

journalctl -S -1d

-- Logs begin at Thu 2020-05-21 13:54:14 +07, end at Fri 2021-09-24 13:54:36 +07. --
Sep 23 13:55:30 ubuntu20 systemd[1]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.9nbpza.mount: Succeeded.
Sep 23 13:55:30 ubuntu20 systemd[965]: run-docker-runtime\x2drunc-moby-de6f4ce7d0cc76f9cd802cc24e6b31a625680d94a604e414f36af2fa90fa53a2-runc.9nbpza.mount: Succeeded.

Nếu chúng ta có thể chỉ định một khoảng thời gian tương đối được tính bằng giờ. Chúng ta có thể sử dụng lệnh sau:

journalctl -S -1h

Chúng ta có thể sử dụng các option phổ biến như thông thường như sau: today, yesterdayvà tomorrow.  Để xem tất cả các sự kiện đã xảy ra ngày hôm qua, hãy sử dụng lệnh này:

journalctl -S yesterday

Để xem tất cả các thông báo log từ hôm nay cho đến nay, hãy sử dụng lệnh sau:

journalctl -S today

Chúng ta có thể kết hợp các công cụ sửa đổi khoảng thời gian khác nhau. Để xem log 2 ngày trước cho đến đầu ngày hôm nay, hãy sử dụng lệnh sau:

journalctl -S -2d -U today

Hiển thị log ID các tiến trình

Nếu bạn chúng ta debug một vấn đề, chúng ta có thể muốn kiểm tra logs cho một process nhất định bằng cách sử dụng PID của nó.

Journal logs cũng có thể lọc được dựa trên ID người dùng (UID), ID nhóm (GID) và ID process (PID). Dưới đây là một ví dụ:

journalctl _PID=5192
-- Logs begin at Thu 2020-05-21 13:54:14 +07, end at Fri 2021-09-24 10:06:30 +07. --
-- No entries --

Chỉ hiển thị message từ kernel

Journal tích lũy logs từ các nguồn khác nhau. Nếu chúng ta chỉ muốn xem logs từ nhân Linux, chúng ta có thể sử dụng tùy chọn “-k”:

journalctl -k

Hiển thị log thông báo khởi động của hệ thống

Nếu chúng ta gặp sự cố liên quan đến khởi động. Để xem các mục nhật ký liên quan đến lần khởi động cuối cùng, hãy sử dụng option “-b”:

journalctl -b

Hiển thị logs theo thứ tự thời gian đảo ngược

Các bản ghi được hiển thị theo thứ tự thời gian. Điều này có nghĩa là các bản ghi lưu trữ cũ nhất được hiển thị đầu tiên.

Nếu bạn muốn xem logs gần đây trước tiên, chúng ta có thể hiển thị journal logs theo thứ tự ngược lại với tùy chọn “-r”:

journalctl -r

Lọc nhật ký logs cho một dịch vụ systemd cụ thể

Lọc là một điểm mạnh của journal logs. Chúng ta có thể lọc logs dựa trên tên các dịch vụ (service) của systemd.

journalctl -u service_name

Ví dụ: nếu chúng ta muốn xem logs được tạo bởi SSH, chúng ta có thể sử dụng nó như thế này:

journalctl -u ssh

Kiểm tra xem bao nhiêu dung lượng đĩa đã được dùng

Journal thu thập logs từ nhiều nguồn khác nhau và nó lưu trữ logs ở nhiều cấp độ khác nhau bao gồm cả những logs debug. Bạn có thể kiểm tra dung lượng đĩa mà journal logs đang sử dụng với lệnh này:

journalctl --disk-usage

Sử dụng man journalctl

Chúng ta có thể sử dụng lệnh man journalctl để có thể tiến hành tìm hiểu công dụng và chúc năng các các option trên journalctl

Vậy là đã hoàn thành quá trình hướng dẫn đọc và phân tích log dùng journalctl trên systemd.

Chúc các bạn thành công!

Tagged:

Rate This Article