108.2 Bài 2
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
108 Dịch vụ Hệ thống thiết yếu |
Mục tiêu: |
108.2 Ghi nhật ký Hệ thống |
Bài: |
2 trên 2 |
Giới thiệu
Với việc systemd
được sử dụng bởi hầu hết các bản phân phối chính, sổ nhật ký (systemd-journald
) đã trở thành một dịch vụ ghi nhật ký tiêu chuẩn. Trong bài học này, chúng ta sẽ thảo luận về cách hoạt động của chương trình này và cách áp dụng nó để thực hiện một số tác vụ: truy vấn, lọc thông tin theo nhiều tiêu chí, định cấu hình bộ nhớ và kích thước của chương trình, xóa dữ liệu cũ, truy xuất dữ liệu của chương trình từ hệ thống cứu hộ hoặc sao chép hệ thống tệp và — cuối cùng nhưng không kém phần quan trọng — hiểu về tương tác của nó với rsyslogd
.
Khái niệm cơ bản về systemd
Được giới thiệu lần đầu tiên trong Fedora, systemd
đã dần dần thay thế SysV Init để trở thành trình quản lý dịch vụ và hệ thống tiêu chuẩn trong hầu hết các bản phân phối Linux chính. Các điểm mạnh của nó là:
-
Dễ cấu hình: các tệp đơn vị trái ngược với các tệp lệnh SysV Init.
-
Quản lý linh hoạt: ngoài trình nền và các tiến trình, nó còn quản lý các thiết bị, ổ nối và điểm gắn kết.
-
Khả năng tương thích ngược với cả SysV Init và Upstart.
-
Tải song song trong quá trình khởi động: các dịch vụ sẽ được tải song song trái ngược với việc Sysv Init tải chúng một cách tuần tự.
-
Nó có tính năng ghi nhật ký dịch vụ được gọi là sổ nhật ký (journal) với những ưu điểm sau:
-
Nó tập trung tất cả các bản ghi ở một nơi.
-
Nó không yêu cầu xoay vòng nhật ký.
-
Nhật ký có thể bị vô hiệu hóa, được tải vào RAM hoặc được lưu giữ bền vững.
-
Đơn vị và Mục tiêu
systemd
hoạt động trên các đơn vị. Một đơn vị là bất kỳ một tài nguyên nào mà systemd
có thể quản lý (ví dụ như mạng, bluetooth, v.v.). Các đơn vị — lần lượt — sẽ được điều chỉnh bởi các tệp đơn vị. Đây là các tệp văn bản thuần túy nằm trong /lib/systemd/system
và bao gồm các cài đặt cấu hình — dưới dạng các phần (sections) và chỉ thị (directives) — để quản lý một tài nguyên cụ thể. Có một số loại đơn vị: service
, mount
, automount
, swap
, timer
, device
, socket
,path
, timer
, snapshot
, slice
, scope
và target
. Do đó, mọi tên tệp đơn vị đều sẽ tuân theo mẫu <resource_name>.<unit_type>
(ví dụ: reboot.service
).
Mục tiêu là một loại đơn vị đặc biệt tương đồng với các mức chạy cổ điển của SysV Init. Điều này là do một đơn vị mục tiêu sẽ tập hợp nhiều các tài nguyên khác nhau để thể hiện một trạng thái hệ thống cụ thể (ví dụ: graphical.target
cũng sẽ tương tự như runlevel 5
, v.v.). Để kiểm tra mục tiêu hiện tại trong hệ thống, hãy sử dụng lệnh systemctl get-default
:
carol@debian:~$ systemctl get-default graphical.target
Mặt khác, mục tiêu và mức chạy thực thi khác nhau ở chỗ mục tiêu sẽ bao gồm cả mức chạy, trong khi mức chạy thì không. Do đó, một mục tiêu có thể đưa ra các mục tiêu khác — điều mà mức chạy không thể làm được.
Note
|
Lý giải về cách hoạt động của các đơn vị |
Nhật ký hệ thống: systemd-journald
systemd-journald
là một dịch vụ hệ thống đảm nhiệm việc nhận thông tin ghi nhật ký từ nhiều nguồn khác nhau: thông báo từ hạt nhân, thông báo hệ thống đơn giản và có cấu trúc, đầu ra tiêu chuẩn và lỗi tiêu chuẩn của dịch vụ cũng như hồ sơ kiểm tra từ hệ thống kiểm duyệt hạt nhân con (để xem thêm chi tiết, hãy xem trang hướng dẫn của systemd-journald
). Nhiệm vụ của nó là tạo ra và duy trì một sổ nhật ký có cấu trúc và các chỉ mục.
Tệp cấu hình của nó là /etc/systemd/journald.conf
và — như với bất kỳ một dịch vụ nào khác — chúng ta có thể sử dụng lệnh systemctl
để khởi động, tái khởi động, dừng hoặc — đơn giản nhất — kiểm tra trạng thái của nó :
root@debian:~# systemctl status systemd-journald systemd-journald.service - Journal Service Loaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled) Active: active (running) since Sat 2019-10-12 13:43:06 CEST; 5min ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 178 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 4915) CGroup: /system.slice/systemd-journald.service └─178 /lib/systemd/systemd-journald (...)
Chúng ta cũng có thể sử dụng các tệp cấu hình thuộc loại journal.conf.d/*.conf
— có thể bao gồm các cấu hình dành riêng cho gói — (hãy tham khảo trang hướng dẫn của journald.conf
để tìm hiểu thêm).
Nếu được kích hoạt, nhật ký có thể được lưu trữ bền vững trên đĩa hoặc theo một phương thức không ổn định trên hệ thống tệp dựa trên RAM. Nhật ký không phải là một tệp văn bản thuần túy mà một là tệp nhị phân. Vì vậy, chúng ta không thể sử dụng các công cụ phân tích văn bản như less
hoặc more
để đọc nội dung của nó; thay vào đó, chúng ta sẽ sử dụng lệnh journalctl
.
Truy vấn nội dung Sổ Nhật ký
journalctl
là tiện ích mà chúng ta sẽ sử dụng để truy vấn sổ nhật ký systemd
. Chúng ta phải là siêu người dùng hoặc sử dụng sudo
để gọi nó. Nếu được truy vấn mà không có tùy chọn, nó sẽ in toàn bộ sổ nhật ký theo trình tự thời gian (với các mục cũ nhất sẽ được liệt kê đầu tiên):
root@debian:~# journalctl -- Logs begin at Sat 2019-10-12 13:43:06 CEST, end at Sat 2019-10-12 14:19:46 CEST. -- Oct 12 13:43:06 debian kernel: Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (...) Oct 12 13:43:06 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=b6be6117-5226-4a8a-bade-2db35ccf4cf4 ro qu (...)
Chúng ta có thể thực hiện các truy vấn cụ thể hơn bằng cách sử dụng một số khoá chuyển:
-r
-
Các thông báo của sổ nhật ký sẽ được in theo thứ tự ngược:
root@debian:~# journalctl -r -- Logs begin at Sat 2019-10-12 13:43:06 CEST, end at Sat 2019-10-12 14:30:30 CEST. -- Oct 12 14:30:30 debian sudo[1356]: pam_unix(sudo:session): session opened for user root by carol(uid=0) Oct 12 14:30:30 debian sudo[1356]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -r Oct 12 14:19:53 debian sudo[1348]: pam_unix(sudo:session): session closed for user root (...)
-f
-
Nó sẽ in các thông báo nhật ký gần đây nhất và tiếp tục in các mục mới khi chúng được thêm vào nhật ký — giống như
tail -f
:root@debian:~# journalctl -f -- Logs begin at Sat 2019-10-12 13:43:06 CEST. -- (...) Oct 12 14:44:42 debian sudo[1356]: pam_unix(sudo:session): session closed for user root Oct 12 14:44:44 debian sudo[1375]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -f Oct 12 14:44:44 debian sudo[1375]: pam_unix(sudo:session): session opened for user root by carol(uid=0) (...)
-e
-
Nó sẽ nhảy đến cuối sổ nhật ký để hiển thị các mục mới nhất trong từng trang đầu ra:
root@debian:~# journalctl -e (...) Oct 12 14:44:44 debian sudo[1375]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -f Oct 12 14:44:44 debian sudo[1375]: pam_unix(sudo:session): session opened for user root by carol(uid=0) Oct 12 14:45:57 debian sudo[1375]: pam_unix(sudo:session): session closed for user root Oct 12 14:48:39 debian sudo[1378]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -e Oct 12 14:48:39 debian sudo[1378]: pam_unix(sudo:session): session opened for user root by carol(uid=0)
-n <value>, --lines=<value>
-
Nó sẽ in số dòng (value) gần đây nhất (nếu không chỉ định
<value>
, số dòng mặc định sẽ là 10):root@debian:~# journalctl -n 5 (...) Oct 12 14:44:44 debian sudo[1375]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -f Oct 12 14:44:44 debian sudo[1375]: pam_unix(sudo:session): session opened for user root by carol(uid=0) Oct 12 14:45:57 debian sudo[1375]: pam_unix(sudo:session): session closed for user root Oct 12 14:48:39 debian sudo[1378]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -e Oct 12 14:48:39 debian sudo[1378]: pam_unix(sudo:session): session opened for user root by carol(uid=0)
-k
,--dmesg
-
Tương đương với việc sử dụng lệnh
dmesg
:root@debian:~# journalctl -k -- Logs begin at Sat 2019-10-12 13:43:06 CEST, end at Sat 2019-10-12 14:53:20 CEST. -- Oct 12 13:43:06 debian kernel: Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18 Oct 12 13:43:06 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=b6be6117-5226-4a8a-bade-2db35ccf4cf4 ro qu Oct 12 13:43:06 debian kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' Oct 12 13:43:06 debian kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' (...)
Điều hướng và tìm kiếm trong Sổ Nhật ký
Chúng ta có thể điều hướng đầu ra của sổ nhật ký bằng:
-
PageUp, PageDown và các phím mũi tên để di chuyển lên, xuống, trái và phải.
-
> để đi đến cuối đầu ra.
-
< để đi đến phần đầu của đầu ra.
Chúng ta có thể tìm kiếm các chuỗi tiến và lùi từ vị trí hiện tại:
-
Tìm kiếm tiến: Nhấn / và nhập chuỗi cần tìm kiếm, sau đó nhấn Enter.
-
Tìm kiếm lùi: Nhấn ? và nhập chuỗi cần tìm, sau đó nhấn Enter.
Để điều hướng qua các kết quả trùng khớp được tìm thấy, hãy sử dụng N để chuyển đến lần xuất hiện tiếp theo của kết quả khớp và Shift+N để chuyển đến lần xuất hiện trước đó.
Lọc dữ liệu Sổ Nhật ký
Sổ Nhật ký cho phép chúng ta lọc dữ liệu nhật ký theo các tiêu chí khác nhau:
- Số khởi động
-
--list-boots
-
Nó liệt kê tất cả các phiên khởi động có sẵn. Đầu ra sẽ bao gồm ba cột: cột đầu tiên chỉ định số khởi động (
0
là phiên khởi động hiện tại,-1
là phiên trước đó,-2
phiên trước đó nữa, v.v.); cột thứ hai là ID khởi động; cột thứ ba là dấu thời gian:root@debian:~# journalctl --list-boots 0 83df3e8653474ea5aed19b41cdb45b78 Sat 2019-10-12 18:55:41 CEST—Sat 2019-10-12 19:02:24 CEST
-b
,--boot
-
Nó hiển thị tất cả các thông báo từ phiên khởi động hiện tại. Để xem các thông báo nhật ký từ những phiên khởi động trước, chúng ta chỉ cần thêm tham số phần bù như đã được giải thích ở trên. Ví dụ: để in các thông báo từ phiên khởi động trước, chúng ta sẽ gõ
journalctl -b -1
. Tuy nhiên, hãy nhớ rằng, để khôi phục thông tin từ các nhật ký trước đó, tính bền vững của nhật ký phải được kích hoạt (chúng ta sẽ tìm hiểu cách thực hiện việc này trong phần tiếp theo):root@debian:~# journalctl -b -1 Specifying boot ID has no effect, no persistent journal was found
- Mức độ ưu tiên
-
-p
-
Điều thú vị là chúng ta cũng có thể lọc dữ liệu theo mức độ nghiêm trọng/mức độ ưu tiên bằng tùy chọn
-p
:root@debian:~# journalctl -b -0 -p err -- No entries --
Sổ Nhật ký sẽ thông báo cho chúng ta rằng — cho đến nay — chưa có bất kỳ thông báo nào có mức độ ưu tiên là
error
(hoặc cao hơn) từ phiên khởi động hiện tại. Lưu ý:-b -0
có thể được bỏ qua khi đề cập đến phiên khởi động hiện tại.NoteHãy tham khảo bài học trước để biết danh sách đầy đủ của tất cả các mức độ nghiêm trọng của
syslog
(hay còn gọi là mức độ ưu tiên).
- Quãng thời gian
-
Chúng ta có thể yêu cầu
journalctl
chỉ in các thông báo được ghi trong một khung thời gian cụ thể bằng cách sử dụng các khóa chuyển--since
(từ khi) và--until
(cho đến khi). Thông số ngày phải tuân theo định dạngYYYY-MM-DD HH:MM:SS
. Hệ thống sẽ giả định thời điểm là nửa đêm nếu chúng ta bỏ qua yếu tố thời gian. Tương tự, nếu ngày bị bỏ qua, hệ thống sẽ tự giả định là ngày hiện tại. Ví dụ: để xem các thông báo được ghi từ 7:00 tối đến 7:01 tối, chúng ta sẽ gõ:root@debian:~# journalctl --since "19:00:00" --until "19:01:00" -- Logs begin at Sat 2019-10-12 18:55:41 CEST, end at Sat 2019-10-12 20:10:50 CEST. -- Oct 12 19:00:14 debian systemd[1]: Started Run anacron jobs. Oct 12 19:00:14 debian anacron[1057]: Anacron 2.3 started on 2019-10-12 Oct 12 19:00:14 debian anacron[1057]: Normal exit (0 jobs run) Oct 12 19:00:14 debian systemd[1]: anacron.timer: Adding 2min 47.988096s random time.
Tương tự như vậy, chúng ta có thể sử dụng thông số thời gian hơi khác một chút:
"integer time-unit ago"
(đơn vị thời gian số nguyên trước đó). Vì vậy, để xem các thông báo được ghi hai phút trước, chúng ta sẽ gõsudo journalctl --since "2 minutes ago"
. Chúng ta cũng có thể sử dụng+
và-
để chỉ định thời gian liên quan đến thời gian hiện tại (ví dụ:--since "-2 minutes"
cũng sẽ tương đương với--since "2 minutes ago"
).Ngoài các biểu thức số, chúng ta có thể chỉ định một số từ khóa:
yesterday
-
Tính từ nửa đêm của ngày trước ngày hiện tại.
today
-
Tính từ nửa đêm của ngày hiện tại.
tomorrow
-
Tính từ nửa đêm của ngày sau ngày hiện tại.
now
-
Thời điểm hiện tại.
Hãy cùng xem tất cả các thông báo từ nửa đêm qua cho đến 21:00 tối hôm nay:
root@debian:~# journalctl --since "today" --until "21:00:00" -- Logs begin at Sat 2019-10-12 20:45:29 CEST, end at Sat 2019-10-12 21:06:15 CEST. -- Oct 12 20:45:29 debian sudo[1416]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/systemctl r Oct 12 20:45:29 debian sudo[1416]: pam_unix(sudo:session): session opened for user root by carol(uid=0) Oct 12 20:45:29 debian systemd[1]: Stopped Flush Journal to Persistent Storage. (...)
NoteĐể tìm hiểu thêm về các cú pháp khác nhau cho thông số thời gian, hãy tham khảo trang hướng dẫn của
systemd.time
.
- Chương trình
-
Để xem các thông báo nhật ký liên quan đến một tệp thực thi cụ thể, cú pháp sau sẽ được sử dụng:
journalctl_/path/to/executable_
:root@debian:~# journalctl /usr/sbin/sshd -- Logs begin at Sat 2019-10-12 20:45:29 CEST, end at Sat 2019-10-12 21:54:49 CEST. -- Oct 12 21:16:28 debian sshd[1569]: Accepted password for carol from 192.168.1.65 port 34050 ssh2 Oct 12 21:16:28 debian sshd[1569]: pam_unix(sshd:session): session opened for user carol by (uid=0) Oct 12 21:16:54 debian sshd[1590]: Accepted password for carol from 192.168.1.65 port 34052 ssh2 Oct 12 21:16:54 debian sshd[1590]: pam_unix(sshd:session): session opened for user carol by (uid=0)
- Đơn vị
-
Hãy nhớ rằng một đơn vị là bất kỳ một tài nguyên nào được
systemd
xử lý và chúng ta cũng có thể lọc theo chúng.-u
-
Nó hiển thị thông báo về một đơn vị được chỉ định:
root@debian:~# journalctl -u ssh.service -- Logs begin at Sun 2019-10-13 10:50:59 CEST, end at Sun 2019-10-13 12:22:59 CEST. -- Oct 13 10:51:00 debian systemd[1]: Starting OpenBSD Secure Shell server... Oct 13 10:51:00 debian sshd[409]: Server listening on 0.0.0.0 port 22. Oct 13 10:51:00 debian sshd[409]: Server listening on :: port 22. (...)
NoteĐể in tất cả các đơn vị đã tải và đang hoạt động, hãy sử dụng
systemctl list-units
; để xem tất cả các tệp đơn vị đã được cài đặt, hãy sử dụngsystemctl list-unit-files
.
- Trường
-
Sổ Nhật ký cũng có thể được lọc theo các trường (field) cụ thể thông qua bất kỳ cú pháp nào sau đây:
-
<field-name>=<value>
-
_<field-name>=<value>_
-
__<field-name>=<value>
PRIORITY=
-
Một trong tám giá trị ưu tiên
syslog
có thể được định dạng dưới dạng chuỗi thập phân:root@debian:~# journalctl PRIORITY=3 -- Logs begin at Sun 2019-10-13 10:50:59 CEST, end at Sun 2019-10-13 14:30:50 CEST. -- Oct 13 10:51:00 debian avahi-daemon[314]: chroot.c: open() failed: No such file or directory
Hãy lưu ý rằng chúng ta cũng có thể đạt được kết quả tương tự bằng cách sử dụng lệnh
sudo journalctl -p err
đã có ở trên. SYSLOG_FACILITY=
-
Bất kỳ mã tiện ích đại diện nào có thể được định dạng dưới dạng chuỗi thập phân. Ví dụ: để xem tất cả các thông báo ở cấp độ người dùng:
root@debian:~# journalctl SYSLOG_FACILITY=1 -- Logs begin at Sun 2019-10-13 10:50:59 CEST, end at Sun 2019-10-13 14:42:52 CEST. -- Oct 13 10:50:59 debian mtp-probe[227]: checking bus 1, device 2: "/sys/devices/pci0000:00/0000:00:06.0/usb1/1-1" Oct 13 10:50:59 debian mtp-probe[227]: bus: 1, device: 2 was not an MTP device Oct 13 10:50:59 debian mtp-probe[238]: checking bus 1, device 2: "/sys/devices/pci0000:00/0000:00:06.0/usb1/1-1" Oct 13 10:50:59 debian mtp-probe[238]: bus: 1, device: 2 was not an MTP device
_PID=
-
Hiển thị các thông báo được tạo bởi một ID tiến trình cụ thể. Để xem tất cả các thông báo được tạo bởi
systemd
, hãy gõ:root@debian:~# journalctl _PID=1 -- Logs begin at Sun 2019-10-13 10:50:59 CEST, end at Sun 2019-10-13 14:50:15 CEST. -- Oct 13 10:50:59 debian systemd[1]: Mounted Debug File System. Oct 13 10:50:59 debian systemd[1]: Mounted POSIX Message Queue File System. Oct 13 10:50:59 debian systemd[1]: Mounted Huge Pages File System. Oct 13 10:50:59 debian systemd[1]: Started Remount Root and Kernel File Systems. Oct 13 10:50:59 debian systemd[1]: Starting Flush Journal to Persistent Storage... (...)
_BOOT_ID
-
Dựa trên ID khởi động của nó, chúng ta có thể chọn ra các thông báo từ một phiên khởi động cụ thể, ví dụ như
sudo journalctl _BOOT_ID=83df3e8653474ea5aed19b41cdb45b78
. _TRANSPORT
-
Hiển thị các thông báo nhận được từ một phương tiện cụ thể. Các giá trị có thể là:
audit
(hệ thống con kiểm duyệt hạt nhân),driver
(được tạo nội bộ),syslog
(ổ nối syslog),journal
(giao thức sổ nhật ký gốc),stdout
(đầu ra tiêu chuẩn của dịch vụ hoặc lỗi tiêu chuẩn) ,kernel
(bộ đệm vòng hạt nhân — giống nhưdmesg
,journalctl -k
hoặcjournalctl --dmesg
):root@debian:~# journalctl _TRANSPORT=journal -- Logs begin at Sun 2019-10-13 20:19:58 CEST, end at Sun 2019-10-13 20:46:36 CEST. -- Oct 13 20:19:58 debian systemd[1]: Started Create list of required static device nodes for the current kernel. Oct 13 20:19:58 debian systemd[1]: Starting Create Static Device Nodes in /dev... Oct 13 20:19:58 debian systemd[1]: Started Create Static Device Nodes in /dev. Oct 13 20:19:58 debian systemd[1]: Starting udev Kernel Device Manager... (...)
-
Kết hợp các Trường
Các trường sẽ không loại trừ lẫn nhau nên chúng ta có thể sử dụng nhiều trường trong cùng một phiên truy vấn. Tuy nhiên, sẽ chỉ những thông báo đồng thời khớp với giá trị của cả hai trường mới được hiển thị:
root@debian:~# journalctl PRIORITY=3 SYSLOG_FACILITY=0 -- No entries -- root@debian:~# journalctl PRIORITY=4 SYSLOG_FACILITY=0 -- Logs begin at Sun 2019-10-13 20:19:58 CEST, end at Sun 2019-10-13 20:21:55 CEST. -- Oct 13 20:19:58 debian kernel: acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration (...)
Trừ khi chúng ta sử dụng dấu phân cách +
để kết hợp hai biểu thức theo một biểu thức logic OR:
root@debian:~# journalctl PRIORITY=3 + SYSLOG_FACILITY=0 -- Logs begin at Sun 2019-10-13 20:19:58 CEST, end at Sun 2019-10-13 20:24:02 CEST. -- Oct 13 20:19:58 debian kernel: Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (...9 Oct 13 20:19:58 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID= (...) (...)
Mặt khác, chúng ta cũng có thể cung cấp hai giá trị cho cùng một trường và tất cả các mục nhập khớp với một trong hai giá trị sẽ được hiển thị:
root@debian:~# journalctl PRIORITY=1 -- Logs begin at Sun 2019-10-13 17:16:24 CEST, end at Sun 2019-10-13 17:30:14 CEST. -- -- No entries -- root@debian:~# journalctl PRIORITY=1 PRIORITY=3 -- Logs begin at Sun 2019-10-13 17:16:24 CEST, end at Sun 2019-10-13 17:32:12 CEST. -- Oct 13 17:16:27 debian connmand[459]: __connman_inet_get_pnp_nameservers: Cannot read /pro Oct 13 17:16:27 debian connmand[459]: The name net.connman.vpn was not provided by any .se
Note
|
Các trường sổ nhật ký có thể thuộc bất kỳ một danh mục nào sau đây: “Trường sổ nhật ký người dùng”, “Trường sổ nhật ký tin cậy”, “Trường nhật ký hạt nhân”, “Trường thay mặt cho một chương trình khác” và “Trường địa chỉ”. Để biết thêm thông tin về chủ đề này — bao gồm danh sách đầy đủ của các trường — hãy xem trang hướng dẫn của |
Mục nhập thủ công vào Sổ Nhật ký Hệ thống: systemd-cat
Giống như việc lệnh logger
được sử dụng để gửi các thông báo từ dòng lệnh đến nhật ký hệ thống (như chúng ta đã thấy trong bài học trước), lệnh systemd-cat
cũng phục vụ một mục đích tương tự — nhưng hoàn thiện hơn — với sổ nhật ký hệ thống. Nó cho phép chúng ta gửi đầu vào tiêu chuẩn (stdin), đầu ra tiêu chuẩn (stdout) và lỗi (stderr) tới sổ nhật ký.
Nếu được gọi mà không có tham số, lệnh sẽ gửi mọi thứ nó đọc được từ stdin tới sổ nhật ký. Khi đã hoàn tất, hãy nhấn Ctrl+C:.
carol@debian:~$ systemd-cat This line goes into the journal. ^C
Nếu nó được chuyển qua đầu ra của lệnh theo đường dẫn, lệnh này cũng sẽ được gửi đến sổ nhật ký:
carol@debian:~$ echo "And so does this line." | systemd-cat
Nếu theo sau là một lệnh, đầu ra của lệnh đó cũng sẽ được gửi đến nhật ký — cùng với stderr (nếu có):
carol@debian:~$ systemd-cat echo "And so does this line too."
Ngoài ra, chúng ta cũng có thể chỉ định mức độ ưu tiên với tùy chọn -p
:
carol@debian:~$ systemd-cat -p emerg echo "This is not a real emergency."
Hãy tham khảo trang hướng dẫn của systemd-cat
để tìm hiểu về các tùy chọn khác của nó.
Để xem bốn dòng cuối cùng trong sổ nhật ký:
carol@debian:~$ journalctl -n 4 (...) -- Logs begin at Sun 2019-10-20 13:43:54 CEST. -- Nov 13 23:14:39 debian cat[1997]: This line goes into the journal. Nov 13 23:19:16 debian cat[2027]: And so does this line. Nov 13 23:23:21 debian echo[2030]: And so does this line too. Nov 13 23:26:48 debian echo[2034]: This is not a real emergency.
Note
|
Các mục sổ nhật ký có mức độ ưu tiên khẩn cấp (emergency) sẽ được in màu đỏ đậm trên hầu hết các hệ thống. |
Lưu trữ Nhật ký bền vững
Như đã đề cập ở trên, chúng ta có ba tùy chọn khi nói đến vị trí của sổ nhật ký:
-
Có thể vô hiệu hoá hoàn toàn tính năng ghi sổ nhật ký (tuy nhiên, ta vẫn có thể chuyển hướng đến các tiện ích khác như bảng điều khiển).
-
Giữ sổ nhật ký trong bộ nhớ — điều này sẽ làm cho nó linh hoạt hơn — và loại bỏ nhật ký với mỗi phiên tái khởi động hệ thống. Trong trường hợp này, thư mục
/run/log/journal
sẽ được tạo và sử dụng. -
Làm cho sổ nhật ký trở nên bền vững hơn để nó có thể ghi nhật ký vào đĩa. Trong trường hợp này, thông báo nhật ký sẽ đi vào thư mục
/var/log/journal
.
Hành vi mặc định sẽ như sau: nếu /var/log/journal/
không tồn tại, nhật ký sẽ được lưu theo một cách "tạm bợ" vào một thư mục trong /run/log/journal/
và — do đó — sẽ bị mất khi hệ thống khởi động lại. Tên của thư mục — /etc/machine-id
— là một chuỗi chữ thường thập lục phân, kết thúc bởi một dòng mới và có 32 ký tự:
carol@debian:~$ ls /run/log/journal/8821e1fdf176445697223244d1dfbd73/ system.journal
Nếu thử đọc bằng lệnh less
, chúng ta sẽ nhận được một cảnh báo; thay vào đó, hãy sử dụng lệnh journalctl
:
root@debian:~# less /run/log/journal/9a32ba45ce44423a97d6397918de1fa5/system.journal "/run/log/journal/9a32ba45ce44423a97d6397918de1fa5/system.journal" may be a binary file. See it anyway? root@debian:~# journalctl -- Logs begin at Sat 2019-10-05 21:26:38 CEST, end at Sat 2019-10-05 21:31:27 CEST. -- (...) Oct 05 21:26:44 debian systemd-journald[1712]: Runtime journal (/run/log/journal/9a32ba45ce44423a97d6397918de1fa5) is 4.9M, max 39.5M, 34.6M free. Oct 05 21:26:44 debian systemd[1]: Started Journal Service. (...)
Nếu /var/log/journal/
tồn tại, nhật ký sẽ được lưu trữ bền vững ở đó. Nếu thư mục này bị xóa, systemd-journald
sẽ không tạo lại nó mà thay vào đó sẽ ghi vào /run/log/journal
. Ngay sau khi chúng ta tạo lại /var/log/journal/
và khởi động lại trình nền, việc ghi nhật ký bền vững sẽ được thiết lập lại:
root@debian:~# mkdir /var/log/journal/ root@debian:~# systemctl restart systemd-journald root@debian:~# journalctl (...) Oct 05 21:33:49 debian systemd-journald[1712]: Received SIGTERM from PID 1 (systemd). Oct 05 21:33:49 debian systemd[1]: Stopped Journal Service. Oct 05 21:33:49 debian systemd[1]: Starting Journal Service... Oct 05 21:33:49 debian systemd-journald[1768]: Journal started Oct 05 21:33:49 debian systemd-journald[1768]: System journal (/var/log/journal/9a32ba45ce44423a97d6397918de1fa5) is 8.0M, max 1.1G, 1.1G free. Oct 05 21:33:49 debian systemd[1]: Started Journal Service. Oct 05 21:33:49 debian systemd[1]: Starting Flush Journal to Persistent Storage... (...)
Note
|
Theo mặc định, hệ thống sẽ có các tệp nhật ký cụ thể cho mỗi người dùng đã đăng nhập nằm trong |
Ngoài những gì vừa được đề cập, cách trình nền nhật ký xử lý việc lưu trữ nhật ký có thể được thay đổi sau khi cài đặt bằng cách điều chỉnh tệp cấu hình của nó là /etc/systemd/journald.conf
. Tùy chọn chính là Storage=
và nó có thể có các giá trị sau:
Storage=volatile
-
Dữ liệu nhật ký sẽ được lưu trữ riêng trong bộ nhớ — trong
/run/log/journal/
. Nếu không có trong hệ thống, thư mục sẽ được tạo tự động. Storage=persistent
-
Theo mặc định, dữ liệu nhật ký sẽ được lưu trữ trên đĩa — trong
/var/log/journal/
— với một bản dự phòng vào bộ nhớ (/run/log/journal/
) trong giai đoạn tiền khởi động nếu đĩa đó không thể ghi được. Cả hai thư mục sẽ được tạo tự động nếu cần. Storage=auto
-
auto
cũng tương tự nhưpersistent
nhưng thư mục/var/log/journal
sẽ không được tạo tự động nếu cần. Đây là hành vi mặc định. Storage=none
-
Tất cả dữ liệu nhật ký sẽ bị loại bỏ. Tuy nhiên, việc chuyển tiếp đến các mục tiêu khác như bảng điều khiển, bộ đệm nhật ký hạt nhân hoặc ổ nối syslog vẫn có thể thực hiện được.
Ví dụ: để systemd-journald
tạo /var/log/journal/
và chuyển sang bộ lưu trữ bền vững, chúng ta sẽ chỉnh sửa /etc/systemd/journald.conf
và thiết lập Storage=persistent
, lưu tệp và khởi động lại trình nền bằng sudo systemctl restart systemd-journald
. Để đảm bảo quá trình khởi động lại diễn ra suôn sẻ, chúng ta luôn có thể kiểm tra trạng thái của trình nền:
root@debian:~# systemctl status systemd-journald systemd-journald.service - Journal Service Loaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled) Active: active (running) since Wed 2019-10-09 10:03:40 CEST; 2s ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 1872 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 3558) Memory: 1.1M CGroup: /system.slice/systemd-journald.service └─1872 /lib/systemd/systemd-journald Oct 09 10:03:40 debian10 systemd-journald[1872]: Journal started Oct 09 10:03:40 debian10 systemd-journald[1872]: System journal (/var/log/journal/9a32ba45ce44423a97d6397918de1fa5) is 8.0M, max 1.2G, 1.2G free.
Note
|
Các tệp nhật ký trong |
Xóa dữ liệu Sổ Nhật ký cũ: Kích cỡ của Sổ Nhật ký
Nhật ký sẽ được lưu trong các tệp sổ nhật ký có tên tệp được kết thúc bằng .journal
hoặc .journal~
và được đặt trong thư mục thích hợp (/run/log/journal
hoặc /var/log/journal
như được định cấu hình). Để kiểm tra xem các tệp nhật ký đang chiếm bao nhiêu dung lượng đĩa (cả được lưu trữ và đang hoạt động), hãy sử dụng khóa chuyển --disk-usage
:
root@debian:~# journalctl --disk-usage Archived and active journals take up 24.0M in the filesystem.
Nhật ký systemd
mặc định có kích thước tối đa là 10% kích thước của hệ thống tệp nơi chúng được lưu trữ. Chẳng hạn, trên hệ thống tệp 1GB, chúng sẽ không chiếm quá 100 MB. Khi đạt đến giới hạn này, các nhật ký cũ sẽ bắt đầu biến mất để duy trì mức gần giá trị này.
Tuy nhiên, việc tuân thủ giới hạn kích thước trên các tệp sổ nhật ký được lưu trữ có thể được quản lý bằng cách điều chỉnh một loạt các tùy chọn cấu hình trong /etc/systemd/journald.conf
. Các tùy chọn này được chia thành hai loại tùy thuộc vào loại hệ thống tệp được sử dụng: bền vững - pesistent (/var/log/journal
) hoặc trong bộ nhớ - in-memory (/run/log/journal
). Tuỳ chọn bền vững sử dụng các tùy chọn có tiền tố System
và sẽ chỉ được áp dụng nếu tính năng ghi nhật ký bền vững được kích hoạt đúng cách và sau khi hệ thống được khởi động hoàn toàn. Đối với tuỳ chọn trong bộ nhớ, tên tùy chọn sẽ bắt đầu bằng Runtime
và sẽ áp dụng trong các trường hợp sau:
SystemMaxUse=
,RuntimeMaxUse=
-
Chúng kiểm soát dung lượng đĩa mà sổ nhật ký có thể chiếm dụng. Nó mặc định là 10% kích thước hệ thống tệp nhưng có thể được sửa đổi (ví dụ:
SystemMaxUse=500M
), miễn là không vượt quá mức tối đa là 4GiB. SystemKeepFree=
,RuntimeKeepFree=
-
Chúng kiểm soát dung lượng đĩa trống dành cho những người dùng khác. Nó mặc định là 15% kích thước hệ thống tệp nhưng có thể được sửa đổi (ví dụ:
SystemKeepFree=500M
), miễn là không vượt quá mức tối đa là 4GiB.Về quyền ưu tiên của
*MaxUse
và*KeepFree
,systemd-journald
sẽ đáp ứng cả hai bằng cách sử dụng giá trị nhỏ hơn trong hai giá trị. Tương tự như vậy, hãy nhớ rằng chỉ các tệp nhật ký được lưu trữ (trái ngược với đang hoạt động) mới bị xóa. SystemMaxFileSize=
,RuntimeMaxFileSize=
-
Chúng kiểm soát kích thước tối đa mà các tệp sổ nhật ký riêng lẻ có thể đạt tới. Giá trị mặc định sẽ là 1/8 của
*MaxUse
. Việc giảm kích thước được thực hiện một cách đồng bộ và các giá trị có thể được chỉ định theo byte hoặc sử dụngK
,M
,G
,T
,P
,E
tương ứng cho Kibibytes, Mebibytes, Gibibyte, Tebibytes, Pebibytes và Exbibytes. SystemMaxFiles=
,RuntimeMaxFiles=
-
Chúng thiết lập số lượng tối đa các tệp sổ nhật ký riêng lẻ và được lưu trữ để lưu trữ (các tệp sổ nhật ký đang hoạt động sẽ không bị ảnh hưởng). Giá trị mặc định sẽ là 100.
Ngoài việc xóa và xoay vòng các thông báo nhật ký dựa trên kích thước, systemd-journald
còn cho phép các tiêu chí dựa trên thời gian bằng cách sử dụng hai tùy chọn sau: MaxRetentionSec=
và MaxFileSec=
. Hãy tham khảo trang hướng dẫn của journald.conf
để biết thêm thông tin về các tùy chọn này và các tùy chọn khác.
Note
|
Bất cứ khi nào bạn sửa đổi hành vi mặc định của |
Dọn dẹp Sổ Nhật ký
Chúng ta có thể xóa thủ công các tệp sổ nhật ký đã được lưu trữ tại bất kỳ một thời điểm nào bằng bất kỳ tùy chọn nào trong ba tùy chọn sau:
--vacuum-time=
-
Tùy chọn dựa trên thời gian này sẽ loại bỏ tất cả các thông báo trong các tệp sổ nhật ký có dấu thời gian cũ hơn khung thời gian đã chỉ định. Các giá trị phải được viết bằng bất kỳ một hậu tố nào sau đây:
s
,m
,h
,days
(hoặcd
),months
,weeks
(hoặcw
) vàyear
(hoặcy
). Ví dụ: để loại bỏ tất cả các thông báo trong các tệp sổ nhật ký đã lưu trữ lâu hơn 1 tháng:root@debian:~# journalctl --vacuum-time=1months Deleted archived journal /var/log/journal/7203088f20394d9c8b252b64a0171e08/system@27dd08376f71405a91794e632ede97ed-0000000000000001-00059475764d46d6.journal (16.0M). Deleted archived journal /var/log/journal/7203088f20394d9c8b252b64a0171e08/user-1000@e7020d80d3af42f0bc31592b39647e9c-000000000000008e-00059479df9677c8.journal (8.0M).
--vacuum-size=
-
Tùy chọn dựa trên kích thước này sẽ xóa các tệp sổ nhật ký đã lưu trữ cho đến khi chúng chiếm một giá trị dưới mức kích thước đã chỉ định (size). Các giá trị phải được ghi với một trong các hậu tố sau đây:
K
,M
,G
hoặcT
. Ví dụ: để loại bỏ các tệp sổ nhật ký được lưu trữ cho đến khi chúng đạt tới dưới 100 Mebibyte:root@debian:~# journalctl --vacuum-size=100M Vacuuming done, freed 0B of archived journals from /run/log/journal/9a32ba45ce44423a97d6397918de1fa5.
--vacuum-files=
-
Tùy chọn này sẽ đảm bảo số tệp nhật ký được giữ lại không vượt quá số lượng đã chỉ định. Giá trị của nó sẽ là một số nguyên. Ví dụ: để giới hạn số lượng tệp sổ nhật ký được lưu trữ ở mức 10:
root@debian:~# journalctl --vacuum-files=10 Vacuuming done, freed 0B of archived journals from /run/log/journal/9a32ba45ce44423a97d6397918de1fa5.
Việc dọn dẹp sẽ chỉ loại bỏ các tệp sổ nhật ký đã được lưu trữ. Nếu muốn loại bỏ mọi thứ (bao gồm cả các tệp sổ nhật ký đang hoạt động), chúng ta cần sử dụng một tín hiệu (SIGUSR2
) để yêu cầu xoay vòng ngay lập tức các tệp sổ nhật ký bằng tùy chọn --rotate
. Các tín hiệu quan trọng khác có thể được gọi bằng các tùy chọn sau:
--flush
(SIGUSR1)
-
Nó sẽ yêu cầu xóa các tệp sổ nhật ký từ
/run/
sang/var/
để làm cho nhật ký được bền vững, kích hoạt tính năng ghi nhật ký bền vững và/var/
phải được gắn kết. --sync
(SIGRTMIN+1
)-
Tuỳ chọn này được sử dụng để yêu cầu ghi tất cả các dữ liệu nhật ký chưa được ghi vào đĩa.
Note
|
Để kiểm tra tính nhất quán cục bộ của tệp sổ nhật ký hãy sử dụng |
Truy xuất dữ liệu Sổ Nhật ký từ Hệ thống Cứu hộ
Với tư cách là quản trị viên hệ thống, chúng ta có thể bắt gặp tình huống cần phải truy cập các tệp sổ nhật ký trên ổ cứng của một máy bị lỗi thông qua hệ thống cứu hộ (một khóa CD hoặc USB có thể khởi động có chứa một bản phân phối Linux trực tiếp).
journalctl
sẽ tìm kiếm các tệp sổ nhật ký trong /var/log/journal/<machine-id>/
. Vì ID máy trên hệ thống cứu hộ và hệ thống bị lỗi sẽ khác nhau nên chúng ta phải sử dụng tùy chọn sau:
-D </path/to/dir>
,--directory=</path/to/dir>
-
Với tùy chọn này, chúng ta sẽ chỉ định một đường dẫn thư mục mà tại đó,
journalctl
sẽ tìm kiếm các tệp sổ nhật ký thay vì vị trí hệ thống và thời gian chạy mặc định.
Vì vậy, điều cần thiết là phải gắn rootfs
(/dev/sda1
) của hệ thống bị lỗi vào hệ thống tệp của hệ thống cứu hộ và tiến hành đọc các tệp sổ nhật ký như sau:
root@debian:~# journalctl -D /media/carol/faulty.system/var/log/journal/ -- Logs begin at Sun 2019-10-20 12:30:45 CEST, end at Sun 2019-10-20 12:32:57 CEST. -- oct 20 12:30:45 suse-server kernel: Linux version 4.12.14-lp151.28.16-default (geeko@buildhost) (...) oct 20 12:30:45 suse-server kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.12.14-lp151.28.16-default root=UUID=7570f67f-4a08-448e-aa09-168769cb9289 splash=> oct 20 12:30:45 suse-server kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' oct 20 12:30:45 suse-server kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' (...)
Các tùy chọn khác có thể sẽ hữu ích trong trường hợp này là:
-m
,--merge
-
Chúng hợp nhất các mục từ tất cả các sổ nhật ký có sẵn trong
/var/log/journal
, bao gồm cả các sổ nhật ký từ xa. --file
-
Nó sẽ hiển thị các mục trong một tệp cụ thể, ví dụ như
journalctl --file /var/log/journal/64319965bda04dfa81d3bc4e7919814a/user-1000.journal
. --root
-
Một đường dẫn thư mục có nghĩa là thư mục gốc được truyền dưới dạng đối số.
journalctl
sẽ tìm kiếm các tệp sổ nhật ký ở đó (ví dụ:journalctl --root /faulty.system/
).
Hãy xem trang hướng dẫn của journalctl
để biết thêm thông tin.
Chuyển tiếp dữ liệu Nhật ký tới một Trình nền syslog
truyền thống
Dữ liệu nhật ký từ sổ nhật ký có thể được chuyển tiếp tới một trình nền syslog
truyền thống bằng cách:
-
Chuyển tiếp các thông báo đến tệp ổ nối
/run/systemd/journal/syslog
đểsyslogd
đọc. Tiện ích này được kích hoạt với tùy chọnForwardToSyslog=yes
. -
Có một trình nền
syslog
hoạt động giống nhưjournalctl
, từ đó đọc thông báo nhật ký trực tiếp từ các tệp sổ nhật ký. Trong trường hợp này, tùy chọn liên quan làStorage
và nó phải có giá trị khácnone
.
Note
|
Tương tự, chúng ta cũng có thể chuyển tiếp các thông báo nhật ký đến các đích đến khác bằng các tùy chọn sau: |
Bài tập Hướng dẫn
-
Giả sử bạn là
root
, hãy hoàn thành bảng sau với lệnhjournalctl
thích hợp:Mục đích Lệnh In các mục nhập hạt nhân
In các thông báo từ lần khởi động thứ hai bắt đầu từ phần đầu của sổ nhật ký
In thông báo từ lần khởi động thứ hai bắt đầu từ phần cuối của sổ nhật ký
In các thông báo nhật ký gần đây nhất và tiếp tục theo dõi những thông báo mới
Kể từ bây giờ chỉ in các thông báo mới và cập nhật đầu ra liên tục
In các thông báo từ lần khởi động trước với mức độ ưu tiên là
warning
và theo thứ tự ngược -
Hành vi của sổ nhật ký liên quan đến việc lưu trữ hầu hết được kiểm soát bởi giá trị của tùy chọn
Storage
trong/etc/systemd/journald.conf
. Hãy cho biết hành vi nào có liên quan đến giá trị nào trong bảng sau:Hành vi Storage=auto
Storage=none
Storage=persistent
Storage=volatile
Dữ liệu nhật ký bị loại bỏ nhưng có thể chuyển tiếp.
Khi hệ thống đã khởi động xong, dữ liệu nhật ký sẽ được lưu trữ trong
/var/log/journal
. Nếu chưa có thì thư mục sẽ được tạo.Khi hệ thống đã khởi động xong, dữ liệu nhật ký sẽ được lưu trữ trong
/var/log/journal
. Nếu chưa có thì thư mục sẽ không được tạo.Dữ liệu nhật ký sẽ được lưu trữ trong
/var/run/journal
nhưng sẽ không tồn tại khi khởi động lại. -
Như bạn đã biết, sổ nhật ký có thể được dọn dẹp theo cách thủ công dựa trên thời gian, kích thước và số lượng tệp. Hãy hoàn thành các tác vụ sau bằng cách sử dụng
journalctl
và các tùy chọn thích hợp:-
Kiểm tra xem các tệp sổ nhật ký đã chiếm bao nhiêu dung lượng đĩa:
-
Giảm số lượng không gian dành riêng cho các tệp sổ nhật ký được lưu trữ và đặt thành 200MiB:
-
Kiểm tra lại dung lượng đĩa và giải thích kết quả:
-
Bài tập Mở rộng
-
Bạn nên sửa đổi những tùy chọn nào trong
/etc/systemd/journald.conf
để các thông báo được chuyển tiếp đến/dev/tty5
? Các tùy chọn nên có những giá trị gì? -
Hãy cho biết bộ lọc
journalctl
chính xác để in các thông tin sau:Mục đích Bộ lọc + Giá trị In thông báo của một người dùng cụ thể
In thông báo từ máy chủ có tên
debian
In thông báo thuộc một nhóm cụ thể
In thông báo thuộc về
root
Dựa trên đường dẫn thực thi, in thông báo
sudo
Dựa vào tên lệnh, in thông báo
sudo
-
Khi lọc theo mức độ ưu tiên, các nhật ký có mức độ ưu tiên cao hơn mức được chỉ định cũng sẽ được đưa vào danh sách; ví dụ:
journalctl -p err
sẽ in cả các thông báo ở mức error, critical, alert và emergency. Tuy nhiên, bạn có thể yêu cầujournalctl
chỉ hiển thị một phạm vi cụ thể. Bạn sẽ sử dụng lệnh nào để yêu cầujournalctl
chỉ in các thông báo ở mức độ ưu tiên warning, error và critical? -
Mức độ ưu tiên cũng có thể được xác định bằng số. Hãy viết lại lệnh trong bài tập trước bằng cách sử dụng biểu diễn dạng số của mức độ ưu tiên:
Tóm tắt
Trong bài học này, chúng ta đã học về:
-
Ưu điểm của việc sử dụng
systemd
làm trình quản lý hệ thống và dịch vụ. -
Khái niệm cơ bản về các đơn vị và mục tiêu
systemd
. -
Nơi
systemd-journald
lấy dữ liệu ghi nhật ký. -
Các tùy chọn có thể truyền cho
systemctl
để điều khiểnsystemd-journald
:start
,status
,restart
vàstop
. -
Nơi chứa tệp cấu hình của sổ nhật ký —
/etc/systemd/journald.conf
— và các tùy chọn chính của nó. -
Cách truy vấn sổ nhật ký một cách tổng quát và tìm dữ liệu cụ thể bằng cách sử dụng các bộ lọc.
-
Cách điều hướng và tìm kiếm trong sổ nhật ký.
-
Cách xử lý việc lưu trữ tệp sổ nhật ký: trong bộ nhớ và trên đĩa.
-
Làm thế nào để vô hiệu hóa hoàn toàn việc ghi sổ nhật ký.
-
Cách kiểm tra dung lượng đĩa mà sổ nhật ký đã sử dụng, thực thi giới hạn kích thước đối với các tệp sổ nhật ký được lưu trữ và dọn dẹp các tệp sổ nhật ký đã lưu trữ theo cách thủ công (vacumming).
-
Cách lấy dữ liệu sổ nhật ký từ một hệ thống cứu hộ.
-
Cách chuyển tiếp dữ liệu nhật ký sang một trình nền
syslog
truyền thống.
Các lệnh được sử dụng trong bài học này:
systemctl
-
Kiểm soát trình quản lý dịch vụ và hệ thống
systemd
. journalctl
-
Truy vấn sổ nhật ký
systemd
. l
-
Liệt kê nội dung thư mục.
less
-
Xem nội dung tệp
mkdir
-
Tạo thư mục.
Đáp án Bài tập Hướng dẫn
-
Giả sử bạn là
root
, hãy hoàn thành bảng sau với lệnhjournalctl
thích hợp:Mục đích Lệnh In các mục nhập hạt nhân
journalctl -k
hoặcjournalctl --dmesg
In các thông báo từ lần khởi động thứ hai bắt đầu từ phần đầu của sổ nhật ký
journalctl -b 2
In thông báo từ lần khởi động thứ hai bắt đầu từ phần cuối của sổ nhật ký
journalctl -b -2 -r
hoặcjournalctl -r -b -2
In các thông báo nhật ký gần đây nhất và tiếp tục theo dõi những thông báo mới
journalctl -f
Kể từ bây giờ chỉ in các thông báo mới và cập nhật đầu ra liên tục
journalctl --since "now" -f
In các thông báo từ lần khởi động trước với mức độ ưu tiên là
warning
và theo thứ tự ngượcjournalctl -b -1 -p warning -r
-
Hành vi của sổ nhật ký liên quan đến việc lưu trữ hầu hết được kiểm soát bởi giá trị của tùy chọn
Storage
trong/etc/systemd/journald.conf
. Hãy cho biết hành vi nào có liên quan đến giá trị nào trong bảng sau:Hành vi Storage=auto
Storage=none
Storage=persistent
Storage=volatile
Dữ liệu nhật ký bị loại bỏ nhưng có thể chuyển tiếp.
x
Khi hệ thống đã khởi động xong, dữ liệu nhật ký sẽ được lưu trữ trong
/var/log/journal
. Nếu chưa có thì thư mục sẽ được tạo.x
Khi hệ thống đã khởi động xong, dữ liệu nhật ký sẽ được lưu trữ trong
/var/log/journal
. Nếu chưa có thì thư mục sẽ không được tạo.x
Dữ liệu nhật ký sẽ được lưu trữ trong
/var/run/journal
nhưng sẽ không tồn tại khi khởi động lại.x
-
Như bạn đã biết, sổ nhật ký có thể được dọn dẹp theo cách thủ công dựa trên thời gian, kích thước và số lượng tệp. Hãy hoàn thành các tác vụ sau bằng cách sử dụng
journalctl
và các tùy chọn thích hợp:-
Kiểm tra xem các tệp sổ nhật ký đã chiếm bao nhiêu dung lượng đĩa:
journalctl --disk-usage
-
Giảm số lượng không gian dành riêng cho các tệp sổ nhật ký được lưu trữ và đặt thành 200MiB:
journalctl --vacuum-size=200M
-
Kiểm tra lại dung lượng đĩa và giải thích kết quả:
journalctl --disk-usage
Không có mối tương quan ở đây vì
--disk-usage
hiển thị dung lượng bị chiếm bởi cả tệp sổ nhật ký đang hoạt động và được lưu trữ trong khi--vacuum-size
chỉ áp dụng cho các tệp được lưu trữ.
-
Đáp án Bài tập Mở rộng
-
Bạn nên sửa đổi những tùy chọn nào trong
/etc/systemd/journald.conf
để các thông báo được chuyển tiếp đến/dev/tty5
? Các tùy chọn nên có những giá trị gì?ForwardToConsole=yes TTYPath=/dev/tty5
-
Hãy cho biết bộ lọc
journalctl
chính xác để in các thông tin sau:Mục đích Bộ lọc + Giá trị In thông báo của một người dùng cụ thể
_ID=<user-id>
In thông báo từ máy chủ có tên
debian
_HOSTNAME=debian
In thông báo thuộc một nhóm cụ thể
_GID=<group-id>
In thông báo thuộc về
root
_UID=0
Dựa trên đường dẫn thực thi, in thông báo
sudo
_EXE=/usr/bin/sudo
Dựa vào tên lệnh, in thông báo
sudo
_COMM=sudo
-
Khi lọc theo mức độ ưu tiên, các nhật ký có mức độ ưu tiên cao hơn mức được chỉ định cũng sẽ được đưa vào danh sách; ví dụ:
journalctl -p err
sẽ in cả các thông báo ở mức error, critical, alert và emergency. Tuy nhiên, bạn có thể yêu cầujournalctl
chỉ hiển thị một phạm vi cụ thể. Bạn sẽ sử dụng lệnh nào để yêu cầujournalctl
chỉ in các thông báo ở mức độ ưu tiên warning, error và critical?journalctl -p warning..crit
-
Mức độ ưu tiên cũng có thể được xác định bằng số. Hãy viết lại lệnh trong bài tập trước bằng cách sử dụng biểu diễn dạng số của mức độ ưu tiên:
journalctl -p 4..2