Thứ ba, 20/02/2018 | 00:00 GMT+7

Cách sử dụng Journalctl để xem và thao tác trên log Systemd

Một số ưu điểm hấp dẫn nhất của systemd là những ưu điểm liên quan đến quá trình và ghi log hệ thống. Khi sử dụng các công cụ khác, log thường được phân tán trong toàn hệ thống, được xử lý bởi các daemon và quy trình khác nhau và có thể khá khó hiểu khi chúng trải dài trên nhiều ứng dụng. Systemd cố gắng giải quyết những vấn đề này bằng cách cung cấp giải pháp quản lý tập trung để ghi log tất cả các quy trình kernel và userland. Hệ thống thu thập và quản lý các log này được gọi là log .

Tạp chí được triển khai bằng daemon journald , xử lý tất cả các thông báo được tạo bởi kernel , initrd, dịch vụ, v.v. Trong hướng dẫn này, ta sẽ thảo luận về cách sử dụng trình journalctl , được dùng để truy cập và thao tác dữ liệu được tổ chức trong tạp chí.

Ý tưởng chung

Một trong những động lực đằng sau tạp chí systemd là tập trung hóa việc quản lý log dù thông điệp được kế thừa từ đâu. Vì phần lớn quy trình khởi động và quản lý dịch vụ được xử lý bởi quy trình systemd , nên việc chuẩn hóa cách thu thập và truy cập log là rất hợp lý. Daemon journald thu thập dữ liệu từ tất cả các nguồn có sẵn và lưu trữ chúng ở định dạng binary để thao tác dễ dàng và năng động.

Điều này mang lại cho ta một số lợi thế đáng kể. Bằng cách tương tác với dữ liệu bằng một tiện ích duy nhất, administrator có thể hiển thị động dữ liệu log theo nhu cầu của họ. Điều này có thể đơn giản như xem dữ liệu khởi động từ ba lần khởi động trước hoặc kết hợp tuần tự các mục log từ hai dịch vụ liên quan để gỡ lỗi sự cố giao tiếp.

Lưu trữ dữ liệu log ở định dạng binary cũng nghĩa là dữ liệu có thể được hiển thị ở các định dạng kết quả tùy ý tùy thuộc vào những gì bạn cần vào lúc này. Ví dụ: để quản lý log hàng ngày, bạn có thể quen với việc xem log ở định dạng syslog tiêu chuẩn, nhưng nếu bạn quyết định vẽ biểu đồ gián đoạn dịch vụ sau này, bạn có thể xuất từng mục nhập dưới dạng đối tượng JSON để làm cho nó có thể sử dụng được cho dịch vụ vẽ đồ thị của bạn. Vì dữ liệu không được ghi vào đĩa ở dạng văn bản thuần túy, không cần chuyển đổi khi bạn cần một định dạng theo yêu cầu khác.

Tạp chí systemd được dùng với triển khai syslog hiện có hoặc nó có thể thay thế chức năng syslog , tùy thuộc vào nhu cầu của bạn. Trong khi tạp chí systemd sẽ bao gồm hầu hết các nhu cầu ghi log của administrator , nó cũng có thể bổ sung cho các cơ chế ghi log hiện có. Ví dụ: bạn có thể có một server syslog tập trung mà bạn sử dụng để biên dịch dữ liệu từ nhiều server , nhưng bạn cũng có thể cần xen kẽ các log từ nhiều dịch vụ trên một hệ thống với tạp chí systemd . Bạn có thể làm cả hai điều này bằng cách kết hợp các công nghệ này.

Đặt thời gian hệ thống

Một trong những lợi ích của việc sử dụng log binary để ghi log là khả năng xem các bản ghi log theo UTC hoặc giờ local tùy ý. Theo mặc định, systemd sẽ hiển thị kết quả theo giờ local .

Do đó, trước khi bắt đầu với log , ta sẽ đảm bảo múi giờ được cài đặt chính xác. Bộ systemd thực sự đi kèm với một công cụ có tên là timedatectl có thể trợ giúp việc này.

Đầu tiên, hãy xem múi giờ nào khả dụng với tùy chọn list-timezones :

timedatectl list-timezones 

Điều này sẽ liệt kê các múi giờ có sẵn trên hệ thống. Khi bạn tìm thấy vị trí phù hợp với vị trí server của bạn , bạn có thể đặt nó bằng cách sử dụng tùy chọn set-timezone :

sudo timedatectl set-timezone zone 

Để đảm bảo máy tính của bạn đang sử dụng thời gian chính xác bây giờ, sử dụng timedatectl lệnh một mình, hoặc với status lựa chọn. Màn hình sẽ giống nhau:

timedatectl status 
      Local time: Thu 2015-02-05 14:08:06 EST   Universal time: Thu 2015-02-05 19:08:06 UTC         RTC time: Thu 2015-02-05 19:08:06        Time zone: America/New_York (EST, -0500)      NTP enabled: no NTP synchronized: no  RTC in local TZ: no       DST active: n/a 

Dòng đầu tiên sẽ hiển thị thời gian chính xác.

Xem log cơ bản

Để xem log mà daemon journald đã thu thập, hãy sử dụng lệnh journalctl .

Khi được sử dụng một mình, mọi mục nhập log trong hệ thống sẽ được hiển thị trong một máy nhắn tin (thường là less ) để bạn duyệt. Các mục cũ nhất sẽ được lên đầu trang:

journalctl 
-- Logs begin at Tue 2015-02-03 21:48:52 UTC, end at Tue 2015-02-03 22:29:38 UTC. -- Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49. Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49. Feb 03 21:48:52 localhost.localdomain systemd-journald[139]: Received SIGTERM from PID 1 (systemd). Feb 03 21:48:52 localhost.localdomain kernel: audit: type=1404 audit(1423000132.274:2): enforcing=1 old_en Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules. Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules. Feb 03 21:48:52 localhost.localdomain kernel: input: ImExPS/2 Generic Explorer Mouse as /devices/platform/ Feb 03 21:48:52 localhost.localdomain kernel: SELinux:  8 users, 102 roles, 4976 types, 294 bools, 1 sens, Feb 03 21:48:52 localhost.localdomain kernel: SELinux:  83 classes, 104131 rules  . . . 

Bạn có thể sẽ có các trang và trang dữ liệu để cuộn qua, có thể dài hàng chục hoặc hàng trăm nghìn dòng nếu systemd đã ở trên hệ thống của bạn trong một thời gian dài. Điều này cho thấy có bao nhiêu dữ liệu có sẵn trong database tạp chí.

Định dạng này sẽ quen thuộc với những ai đã quen với việc ghi syslog chuẩn. Tuy nhiên, điều này thực sự thu thập dữ liệu từ nhiều nguồn hơn khả năng triển khai syslog thống truyền thống. Nó bao gồm các bản ghi từ quá trình khởi động sớm, kernel , initrd và lỗi chuẩn ứng dụng và lỗi. Tất cả đều có trong tạp chí.

Bạn có thể nhận thấy rằng tất cả các dấu thời gian đang được hiển thị đều là giờ local . Điều này có sẵn cho mọi mục nhập log hiện tại ta đã đặt giờ local chính xác trên hệ thống của bạn . Tất cả các bản ghi được hiển thị bằng cách sử dụng thông tin mới này.

Nếu bạn muốn hiển thị dấu thời gian trong UTC, bạn có thể sử dụng cờ --utc :

journalctl --utc 

Lọc tạp chí theo thời gian

Mặc dù việc truy cập vào một bộ sưu tập dữ liệu lớn như vậy chắc chắn là hữu ích, nhưng một lượng lớn thông tin như vậy có thể khó hoặc không thể kiểm tra và xử lý về mặt tinh thần. Do đó, một trong những tính năng quan trọng nhất của journalctl là các tùy chọn lọc của nó.

Hiển thị Nhật ký từ Khởi động Hiện tại

Cơ bản nhất trong số này mà bạn có thể sử dụng hàng ngày, là cờ -b . Điều này sẽ hiển thị cho bạn tất cả các mục log đã được thu thập kể từ lần khởi động lại mới nhất .

journalctl -b 

Điều này sẽ giúp bạn xác định và quản lý thông tin phù hợp với môi trường hiện tại của bạn.

Trong trường hợp bạn không sử dụng tính năng này và đang hiển thị hơn một ngày khởi động, bạn sẽ thấy rằng journalctl đã chèn một dòng giống như thế này khi nào hệ thống gặp sự cố:

. . .  -- Reboot --  . . . 

Điều này được dùng để giúp bạn tách thông tin một cách hợp lý thành các phiên khởi động.

Boots trước đây

Mặc dù bạn thường muốn hiển thị thông tin từ lần khởi động hiện tại, nhưng chắc chắn có những lần khởi động trước đây cũng sẽ hữu ích. Các tạp chí có thể lưu thông tin từ nhiều khởi động trước đó, vì vậy journalctl có thể được thực hiện để hiển thị thông tin một cách dễ dàng.

Một số bản phân phối cho phép lưu thông tin khởi động trước đó theo mặc định, trong khi những bản khác lại tắt tính năng này. Để kích hoạt thông tin khởi động liên tục, bạn có thể tạo folder để lưu trữ tạp chí bằng lệnh :

  • sudo mkdir -p /var/log/journal

Hoặc bạn có thể chỉnh sửa file cấu hình tạp chí:

  • sudo nano /etc/systemd/journald.conf

Trong phần [Journal] , hãy đặt tùy chọn Storage= thành “liên tục” để cho phép ghi log liên tục:

/etc/systemd/journald.conf
. . . [Journal] Storage=persistent 

Khi bật tính năng lưu khởi động trước đó trên server của bạn, journalctl cung cấp một số lệnh để giúp bạn làm việc với khởi động như một đơn vị phân chia. Để xem những đôi bốt mà journald biết, hãy sử dụng tùy chọn --list-boots với journalctl :

journalctl --list-boots 
-2 caf0524a1d394ce0bdbcff75b94444fe Tue 2015-02-03 21:48:52 UTC—Tue 2015-02-03 22:17:00 UTC -1 13883d180dc0420db0abcb5fa26d6198 Tue 2015-02-03 22:17:03 UTC—Tue 2015-02-03 22:19:08 UTC  0 bed718b17a73415fade0e4e7f4bea609 Tue 2015-02-03 22:19:12 UTC—Tue 2015-02-03 23:01:01 UTC 

Điều này sẽ hiển thị một dòng cho mỗi lần khởi động. Cột đầu tiên là phần bù cho phần khởi động được dùng để dễ dàng tham chiếu phần khởi động với journalctl . Nếu bạn cần tham chiếu tuyệt đối, ID khởi động nằm trong cột thứ hai. Bạn có thể cho biết thời gian mà phiên khởi động đề cập đến với hai thông số kỹ thuật thời gian được liệt kê ở cuối.

Để hiển thị thông tin từ những chiếc ủng này, bạn có thể sử dụng thông tin từ cột đầu tiên hoặc cột thứ hai.

Ví dụ, để xem log từ lần khởi động trước, hãy sử dụng con trỏ tương đối -1 với cờ -b :

journalctl -b -1 

Bạn cũng có thể sử dụng ID khởi động để gọi lại dữ liệu từ khởi động:

journalctl -b caf0524a1d394ce0bdbcff75b94444fe 

Thời gian Windows

Mặc dù việc xem các mục nhập log bằng cách khởi động là vô cùng hữu ích, nhưng thường thì bạn có thể cần yêu cầu cửa sổ thời gian không phù hợp với khởi động hệ thống. Điều này có thể đặc biệt đúng khi xử lý các server chạy lâu với thời gian hoạt động đáng kể.

Bạn có thể lọc theo các giới hạn thời gian tùy ý bằng cách sử dụng các tùy chọn --since--until , các tùy chọn này hạn chế các mục được hiển thị tương ứng với những mục sau hoặc trước thời gian nhất định.

Các giá trị thời gian có thể có nhiều định dạng. Đối với giá trị thời gian tuyệt đối, bạn nên sử dụng định dạng sau:

YYYY-MM-DD HH:MM:SS 

Ví dụ: ta có thể xem tất cả các mục nhập kể từ ngày 10 tháng 1 năm 2015 lúc 5:15 chiều bằng lệnh :

journalctl --since "2015-01-10 17:15:00" 

Nếu các thành phần của định dạng trên bị tắt, một số giá trị mặc định sẽ được áp dụng. Ví dụ: nếu ngày bị bỏ qua, ngày hiện tại sẽ được giả định. Nếu thành phần thời gian bị thiếu, “00:00:00” (nửa đêm) sẽ được thay thế. Trường giây cũng có thể được tắt để mặc định thành “00”:

journalctl --since "2015-01-10" --until "2015-01-11 03:00" 

Tạp chí cũng hiểu một số giá trị tương đối và các phím tắt được đặt tên. Ví dụ: bạn có thể sử dụng các từ “hôm qua”, “hôm nay”, “ngày mai” hoặc “bây giờ”. Bạn thực hiện thời gian tương đối bằng cách viết trước “-” hoặc “+” thành một giá trị được đánh số hoặc sử dụng các từ như “trước” trong cấu trúc câu.

Để lấy dữ liệu từ ngày hôm qua, có thể chạy lệnh:

journalctl --since yesterday 

Nếu bạn nhận được báo cáo về việc gián đoạn dịch vụ bắt đầu từ 9:00 sáng và tiếp tục cho đến một giờ trước, có thể chạy lệnh:

journalctl --since 09:00 --until "1 hour ago" 

Như bạn thấy, tương đối dễ dàng xác định các khoảng thời gian linh hoạt để lọc các mục bạn muốn xem.

Lọc theo sở thích tin nhắn

Ở trên, ta đã tìm hiểu một số cách mà bạn có thể lọc dữ liệu tạp chí bằng cách sử dụng các giới hạn thời gian. Trong phần này, ta sẽ thảo luận về cách lọc dựa trên dịch vụ hoặc thành phần mà bạn quan tâm. Tạp chí systemd cung cấp nhiều cách khác nhau để thực hiện việc này.

Theo đơn vị

Có lẽ cách lọc hữu ích nhất là theo đơn vị bạn quan tâm. Ta có thể sử dụng tùy chọn -u để lọc theo cách này.

Ví dụ: để xem tất cả log từ một đơn vị Nginx trên hệ thống của ta , ta có thể nhập:

journalctl -u nginx.service 

Thông thường, bạn có thể cũng muốn lọc theo thời gian để hiển thị các dòng bạn quan tâm. Ví dụ: để kiểm tra xem dịch vụ đang hoạt động như thế nào hôm nay, có thể chạy lệnh:

journalctl -u nginx.service --since today 

Loại tiêu điểm này trở nên cực kỳ hữu ích khi bạn tận dụng khả năng của tạp chí để xen kẽ các bản ghi từ các đơn vị khác nhau. Ví dụ: nếu tiến trình Nginx của bạn được kết nối với một đơn vị PHP-FPM để xử lý nội dung động, bạn có thể hợp nhất các mục từ cả hai theo thứ tự thời gian bằng cách chỉ định cả hai đơn vị:

journalctl -u nginx.service -u php-fpm.service --since today 

Điều này có thể giúp dễ dàng phát hiện ra các tương tác giữa các chương trình khác nhau và hệ thống gỡ lỗi thay vì các quy trình riêng lẻ.

Theo quy trình, user hoặc ID group

Một số dịch vụ sinh ra nhiều quy trình con để thực hiện công việc. Nếu bạn đã tìm ra PID chính xác của quy trình mà bạn quan tâm, bạn cũng có thể lọc theo đó.

Để làm điều này, ta có thể lọc bằng cách chỉ định trường _PID . Ví dụ: nếu PID mà ta quan tâm là 8088, ta có thể nhập:

journalctl _PID=8088 

Vào những lúc khác, bạn có thể cần hiển thị tất cả các mục nhập được ghi lại từ một user hoặc group cụ thể. Điều này có thể được thực hiện với sự _UID hoặc _GID bộ lọc. Ví dụ: nếu web server của bạn chạy dưới user www-data , bạn có thể tìm thấy ID user bằng lệnh :

id -u www-data 
33 

Sau đó, bạn có thể sử dụng ID được trả về để lọc kết quả tạp chí:

journalctl _UID=33 --since today 

Tạp chí systemd có nhiều trường được dùng để lọc. Một số trong số đó được thông qua từ quá trình ghi log và một số được áp dụng bởi journald bằng cách sử dụng thông tin mà nó thu thập từ hệ thống tại thời điểm ghi log .

Dấu gạch dưới hàng đầu cho biết trường _PID thuộc loại sau. Tạp chí tự động ghi lại và lập index PID của quá trình đang ghi log để lọc sau. Bạn có thể tìm hiểu về tất cả các trường tạp chí có sẵn bằng lệnh :

man systemd.journal-fields 

Ta sẽ thảo luận về một số điều này trong hướng dẫn này. Tuy nhiên, bây giờ ta sẽ xem xét một tùy chọn hữu ích hơn liên quan đến việc lọc theo các trường này. Tùy chọn -F được dùng để hiển thị tất cả các giá trị có sẵn cho một trường tạp chí nhất định.

Ví dụ, để xem ID group mà tạp chí systemd có mục nhập, có thể chạy lệnh:

journalctl -F _GID 
32 99 102 133 81 84 100 0 124 87 

Điều này sẽ hiển thị cho bạn tất cả các giá trị mà tạp chí đã lưu trữ cho trường ID group . Điều này có thể giúp bạn xây dựng các bộ lọc của bạn .

Theo đường dẫn thành phần

Ta cũng có thể lọc bằng cách cung cấp vị trí đường dẫn.

Nếu đường dẫn đến một file thực thi, journalctl sẽ hiển thị tất cả các mục liên quan đến file thực thi được đề cập. Ví dụ, để tìm các mục liên quan đến file thực thi bash , có thể chạy lệnh:

journalctl /usr/bin/bash 

Thông thường, nếu một đơn vị có sẵn cho file thực thi, thì phương thức đó sạch hơn và cung cấp thông tin tốt hơn (các mục nhập từ các quy trình con được liên kết, v.v.). Tuy nhiên, đôi khi điều này là không thể.

Hiển thị thông báo kernel

Thông báo kernel , những thông báo thường được tìm thấy trong kết quả dmesg , cũng có thể được truy xuất từ tạp chí.

Để chỉ hiển thị những thông báo này, ta có thể thêm cờ -k hoặc --dmesg vào lệnh của ta :

journalctl -k 

Theo mặc định, điều này sẽ hiển thị thông báo kernel từ khởi động hiện tại. Bạn có thể chỉ định một khởi động thay thế bằng cách sử dụng các cờ lựa chọn khởi động bình thường đã thảo luận trước đó. Ví dụ, để nhận các tin nhắn từ năm lần khởi động trước, có thể chạy lệnh:

journalctl -k -b -5 

Theo mức độ ưu tiên

Một bộ lọc mà các administrator hệ thống thường quan tâm là ưu tiên thư. Mặc dù việc ghi log thông tin ở mức rất dài thường rất hữu ích, nhưng khi thực sự tiêu hóa thông tin có sẵn, các log có mức độ ưu tiên thấp có thể gây mất tập trung và khó hiểu.

Bạn có thể sử dụng journalctl để chỉ hiển thị các thông báo có mức độ ưu tiên cụ thể hoặc cao hơn bằng cách sử dụng tùy chọn -p . Điều này cho phép bạn lọc ra các thư có mức độ ưu tiên thấp hơn.

Ví dụ: để chỉ hiển thị các mục nhập được ghi ở mức lỗi trở lên, có thể chạy lệnh:

journalctl -p err -b 

Điều này sẽ hiển thị cho bạn tất cả các thông báo được đánh dấu là lỗi, nghiêm trọng, cảnh báo hoặc khẩn cấp. Tạp chí thực hiện các mức thông báo syslog tiêu chuẩn. Bạn có thể sử dụng tên ưu tiên hoặc giá trị số tương ứng của nó. Theo thứ tự ưu tiên cao nhất đến thấp nhất, đây là:

  • 0: khẩn cấp
  • 1: cảnh báo
  • 2: crit
  • 3: sai lầm
  • 4: cảnh báo
  • 5: thông báo
  • 6: thông tin
  • 7: gỡ lỗi

Các số hoặc tên trên được dùng thay thế cho nhau với tùy chọn -p . Việc chọn mức độ ưu tiên sẽ hiển thị các thông báo được đánh dấu ở cấp độ đã chỉ định và những thông báo ở trên nó.

Sửa đổi Hiển thị Nhật ký

Ở trên, ta đã trình bày lựa chọn mục nhập thông qua lọc. Tuy nhiên, có những cách khác ta có thể sửa đổi kết quả . Ta có thể điều chỉnh màn hình journalctl để phù hợp với nhiều nhu cầu khác nhau.

Cắt bớt hoặc mở rộng kết quả

Ta có thể điều chỉnh cách journalctl hiển thị dữ liệu bằng cách yêu cầu nó thu nhỏ hoặc mở rộng kết quả .

Theo mặc định, journalctl sẽ hiển thị toàn bộ mục nhập trong máy nhắn tin, cho phép các mục nhập chuyển sang bên phải màn hình. Thông tin này có thể được truy cập bằng cách nhấn phím mũi tên phải.

Nếu bạn muốn kết quả bị cắt ngắn, chèn một dấu chấm lửng nơi thông tin đã bị xóa, bạn có thể sử dụng tùy chọn --no-full :

journalctl --no-full 
. . .  Feb 04 20:54:13 journalme sshd[937]: Failed password for root from 83.234.207.60...h2 Feb 04 20:54:13 journalme sshd[937]: Connection closed by 83.234.207.60 [preauth] Feb 04 20:54:13 journalme sshd[937]: PAM 2 more authentication failures; logname...ot 

Bạn cũng có thể đi theo hướng ngược lại với điều này và journalctl hiển thị tất cả thông tin của nó, dù nó có bao gồm các ký tự không in được hay không. Ta có thể làm điều này với cờ -a :

journalctl -a 

Đầu ra tiêu chuẩn

Theo mặc định, journalctl hiển thị kết quả kết quả trong máy nhắn tin để dễ tiêu thụ hơn. Tuy nhiên, nếu bạn đang lên kế hoạch xử lý dữ liệu bằng các công cụ thao tác văn bản, bạn có thể cần xuất ra kết quả chuẩn.

Bạn có thể làm điều này với tùy chọn --no-pager :

journalctl --no-pager 

Điều này có thể được chuyển ngay lập tức vào một tiện ích xử lý hoặc được chuyển hướng thành một file trên đĩa, tùy thuộc vào nhu cầu của bạn.

Định dạng kết quả

Nếu bạn đang xử lý các mục nhập log , như đã đề cập ở trên, rất có thể bạn sẽ có thời gian phân tích dữ liệu dễ dàng hơn nếu dữ liệu đó ở định dạng dễ sử dụng hơn. May mắn là tạp chí có thể được hiển thị ở nhiều định dạng khác nhau khi cần thiết. Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn -o với công cụ định dạng.

Ví dụ: bạn có thể xuất các mục log trong JSON bằng lệnh :

journalctl -b -u nginx -o json 
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" }  . . . 

Điều này rất hữu ích cho việc phân tích cú pháp với các tiện ích. Bạn có thể sử dụng định dạng json-pretty để xử lý tốt hơn cấu trúc dữ liệu trước khi chuyển nó cho user JSON:

journalctl -b -u nginx -o json-pretty 
{     "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635",     "__REALTIME_TIMESTAMP" : "1422990364739502",     "__MONOTONIC_TIMESTAMP" : "27200938",     "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d",     "PRIORITY" : "6",     "_UID" : "0",     "_GID" : "0",     "_CAP_EFFECTIVE" : "3fffffffff",     "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee",     "_HOSTNAME" : "desktop",     "SYSLOG_FACILITY" : "3",     "CODE_FILE" : "src/core/unit.c",     "CODE_LINE" : "1402",     "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading",     "SYSLOG_IDENTIFIER" : "systemd",     "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5",     "_TRANSPORT" : "journal",     "_PID" : "1",     "_COMM" : "systemd",     "_EXE" : "/usr/lib/systemd/systemd",     "_CMDLINE" : "/usr/lib/systemd/systemd",     "_SYSTEMD_CGROUP" : "/",     "UNIT" : "nginx.service",     "MESSAGE" : "Starting A high performance web server and a reverse proxy server...",     "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" }  . . . 

Các định dạng sau được dùng để hiển thị:

  • cat : Chỉ hiển thị trường tin nhắn.
  • export : Một định dạng binary thích hợp để truyền hoặc backup .
  • json : JSON chuẩn với một mục nhập trên mỗi dòng.
  • json-pretty : JSON được định dạng để con người dễ đọc hơn
  • json-sse : Đầu ra được định dạng JSON được bao bọc để tương thích với sự kiện do server gửi thêm
  • short : Đầu ra kiểu syslog mặc định
  • short-iso : Định dạng mặc định được tăng cường để hiển thị dấu thời gian đồng hồ treo tường ISO 8601.
  • short-monotonic : Định dạng mặc định với dấu thời gian monotonic.
  • chính xác ngắn : Định dạng mặc định với độ chính xác micro giây
  • verbose : Hiển thị mọi trường tạp chí có sẵn cho mục nhập, bao gồm cả những trường thường được ẩn bên trong.

Các tùy chọn này cho phép bạn hiển thị các mục log ở bất kỳ định dạng nào phù hợp nhất với nhu cầu hiện tại của bạn.

Giám sát quy trình hoạt động

Lệnh journalctl bắt chước số lượng administrator sử dụng tail để theo dõi hoạt động đang hoạt động hoặc gần đây. Chức năng này được tích hợp sẵn trong journalctl , cho phép bạn truy cập các tính năng này mà không cần phải chuyển sang một công cụ khác.

Hiển thị Nhật ký Gần đây

Để hiển thị một lượng bản ghi đã đặt, bạn có thể sử dụng tùy chọn -n , tùy chọn này hoạt động chính xác như tail -n .

Theo mặc định, nó sẽ hiển thị 10 mục nhập mới nhất :

journalctl -n 

Bạn có thể chỉ định số lượng mục nhập bạn muốn xem với một số sau -n :

journalctl -n 20 

Theo dõi Nhật ký

Để chủ động theo dõi log khi chúng đang được viết, bạn có thể sử dụng cờ -f . , điều này hoạt động như bạn có thể mong đợi nếu bạn có kinh nghiệm sử dụng tail -f :

journalctl -f 

Bảo trì Tạp chí

Bạn có thể tự hỏi về chi phí lưu trữ tất cả dữ liệu mà ta đã thấy cho đến nay. Hơn nữa, bạn có thể thấy thú vị trong việc dọn dẹp một số log cũ và giải phóng dung lượng.

Tìm mức sử dụng đĩa hiện tại

Bạn có thể tìm ra dung lượng tạp chí hiện đang chiếm trên đĩa bằng cách --disk-usage cờ --disk-usage :

journalctl --disk-usage 
Journals take up 8.0M on disk. 

Xóa log cũ

Nếu bạn muốn thu nhỏ log của bạn , bạn có thể làm điều đó theo hai cách khác nhau (khả dụng với version systemd 218 trở lên).

Nếu bạn sử dụng tùy chọn --vacuum-size , bạn có thể thu nhỏ log của bạn bằng cách chỉ ra kích thước. Thao tác này sẽ xóa các mục nhập cũ cho đến khi tổng dung lượng tạp chí chiếm trên đĩa ở kích thước được yêu cầu:

sudo journalctl --vacuum-size=1G 

Một cách khác mà bạn có thể thu nhỏ log là cung cấp thời gian cắt với tùy chọn --vacuum-time . Bất kỳ mục nhập nào quá thời gian đó sẽ bị xóa. Điều này cho phép bạn giữ lại các mục đã được tạo sau một thời gian cụ thể.

Ví dụ, để giữ các mục nhập từ năm trước, có thể chạy lệnh:

sudo journalctl --vacuum-time=1years 

Giới hạn Mở rộng Tạp chí

Bạn có thể cấu hình server của bạn để đặt giới hạn về dung lượng mà tạp chí có thể chiếm. Điều này có thể được thực hiện bằng cách chỉnh sửa file /etc/systemd/journald.conf .

Các mục sau được dùng để hạn chế sự phát triển của tạp chí:

  • SystemMaxUse= : Chỉ định dung lượng ổ đĩa tối đa mà tạp chí có thể sử dụng trong lưu trữ liên tục.
  • SystemKeepFree= : Chỉ định dung lượng mà tạp chí nên để trống khi thêm các mục log vào lưu trữ liên tục.
  • SystemMaxFileSize= : Kiểm soát kích thước các file tạp chí riêng lẻ có thể phát triển đến mức nào trong bộ nhớ liên tục trước khi được xoay.
  • RuntimeMaxUse= : Chỉ định dung lượng ổ đĩa tối đa được dùng trong lưu trữ dễ bay hơi (trong hệ thống file /run ).
  • RuntimeKeepFree= : Chỉ định lượng không gian được dành cho các mục đích sử dụng khác khi ghi dữ liệu vào bộ nhớ dễ bay hơi (trong hệ thống file /run ).
  • RuntimeMaxFileSize= : Chỉ định dung lượng mà một file tạp chí riêng lẻ có thể chiếm trong bộ nhớ dễ bay hơi (trong hệ thống file /run ) trước khi được xoay.

Bằng cách cài đặt các giá trị này, bạn có thể kiểm soát mức journald sử dụng và duy trì không gian của tạp chí này trên server của bạn . Lưu ý SystemMaxFileSizeRuntimeMaxFileSize sẽ nhắm đến các file đã lưu trữ để đạt đến các giới hạn đã nêu. Điều quan trọng cần nhớ khi diễn giải số lượng file sau hoạt động hút bụi.

Kết luận

Như bạn thấy , tạp chí systemd cực kỳ hữu ích để thu thập và quản lý dữ liệu hệ thống và ứng dụng của bạn. Hầu hết sự linh hoạt đến từ metadata mở rộng được ghi lại tự động và tính chất tập trung của log . Lệnh journalctl giúp bạn dễ dàng tận dụng các tính năng nâng cao của tạp chí và thực hiện phân tích mở rộng và gỡ lỗi quan hệ của các thành phần ứng dụng khác nhau.


Tags:

Các tin liên quan