首頁 > 軟體

如何更好地使用Linux紀錄檔

2020-06-16 16:43:44

Linux上的紀錄檔檔案可以提供有關系統上發生的事情的大量有用資訊。 以下命令可以幫助您對資料進行排序並查明問題。

Linux系統維護相當多的紀錄檔檔案,其中許多您可能很少想要檢視。不過,其中一些紀錄檔檔案非常有價值,探索它們的選項可能比您想象的更有趣、更多樣化。讓我們看看一些系統紀錄檔,並了解一些更容易探測紀錄檔資料的方法。

紀錄檔檔案輪換

首先,存在紀錄檔輪換的問題。一些Linux紀錄檔檔案是“rotated”。換句話說,系統儲存這些檔案的多個“generation”,主要是為了防止它們使用太多的磁碟空間。然後壓縮較舊的紀錄檔,但保留一段時間。最終,一系列旋轉紀錄檔檔案中最早的紀錄檔檔案將在紀錄檔輪換過程中自動刪除,但您仍然可以存取許多較舊的紀錄檔,以便您可以檢查過去幾天新增的紀錄檔條目或幾週,如果您需要進一步回顧一些您正在追蹤的問題。

要了解要儲存的系統資訊型別,只需轉到 /var/log目錄並列出其內容即可。

[linuxidc@localhost ~]$ cd /var/log
[linuxidc@localhost log]$ ls
anaconda  dmesg.old          mariadb  secure                  wtmp
audit    firewalld          messages  speech-dispatcher      Xorg.0.log
boot.log  gdm                pluto    spooler                Xorg.0.log.old
btmp      glusterfs          ppp      tallylog                Xorg.9.log
chrony    grubby_prune_debug  qemu-ga  tuned                  yum.log
cron      lastlog            rhsm      vmware-vgauthsvc.log.0
cups      libvirt            sa        vmware-vmsvc.log
dmesg    maillog            samba    wpa_supplicant.log
[linuxidc@localhost log]$

這是相當大的紀錄檔和紀錄檔目錄集合 - 在這種情況下是/var/log中的37個檔案和目錄,但是當您在這些目錄中包含檔案時有44個檔案。

[linuxidc@localhost ~]$ su -
密碼:
上一次登入:三 10月 17 22:25:40 CST 2018pts/1 上
[root@localhost ~]# cd /var/log
[root@localhost log]# ls | wc -l
37
[root@localhost log]# find . -type f -print | wc -l
44
[root@localhost log]#

檢查紀錄檔檔案時,您將清楚地看到哪些是同一基本紀錄檔的生成。 例如,其中一個主紀錄檔檔案(syslog檔案)分為九個單獨的檔案。 這些代表了基本上一周的歷史資料以及當前檔案。 大多數舊檔案都是壓縮檔案以保留空間。

$ ls -l syslog*
-rw-r----- 1 syslog adm 558528 Oct 16 21:12 syslog
-rw-r----- 1 syslog adm 512815 Oct 16 00:09 syslog.1
-rw-r----- 1 syslog adm  31205 Oct 15 00:06 syslog.2.gz
-rw-r----- 1 syslog adm  33797 Oct 12 00:22 syslog.3.gz
-rw-r----- 1 syslog adm  61107 Oct 12 00:18 syslog.4.gz
-rw-r----- 1 syslog adm  35682 Oct 12 00:16 syslog.5.gz
-rw-r----- 1 syslog adm  32003 Oct 11 00:07 syslog.6.gz
-rw-r----- 1 syslog adm  32319 Oct  9 00:15 syslog.7.gz

syslog檔案包含來自許多不同系統服務的訊息--cron,sendmail和核心本身就是例子。 您還將看到使用者對談和cron(計劃任務)的證據。

多年來,大多數Linux系統不再使用舊訊息和dmesg檔案作為大部分系統訊息的登陸位置。 相反,可以使用各種各樣的檔案和一些特殊命令來幫助顯示可能與您要查詢的內容最相關的紀錄檔資訊。

根據所討論的檔案,您可能只使用more或tail命令,或者您可能使用特定於檔案的命令,例如使用who命令從wtmp紀錄檔中提取使用者登入資料。

[linuxidc@localhost ~]$ cd /var/log
[linuxidc@localhost log]$ who wtmp
linuxidc :0          2018-10-17 18:44 (:0)
linuxidc :0          2018-10-17 19:00 (:0)
linuxidc pts/0        2018-10-17 19:10 (:0)
linuxidc pts/0        2018-10-17 19:20 (:0)
linuxidc pts/1        2018-10-17 19:22 (:0)
linuxidc pts/0        2018-10-17 19:25 (:0)
linuxidc pts/0        2018-10-17 19:25 (:0)
linuxidc pts/1        2018-10-17 19:27 (:0)
linuxidc pts/2        2018-10-17 19:27 (:0)
linuxidc pts/0        2018-10-17 19:33 (:0)
linuxidc pts/0        2018-10-17 19:53 (:0)
linuxidc pts/0        2018-10-17 19:56 (:0)
linuxidc pts/0        2018-10-17 19:56 (:0)
linuxidc pts/0        2018-10-17 22:15 (:0)
linuxidc pts/1        2018-10-17 22:18 (:0)
linuxidc pts/1        2018-10-17 22:19 (:0)
linuxidc pts/1        2018-10-17 22:24 (:0)
linuxidc pts/2        2018-10-17 22:24 (:0)
linuxidc pts/1        2018-10-17 22:24 (:0)
linuxidc pts/0        2018-10-17 22:38 (:0)
linuxidc pts/0        2018-10-17 22:39 (:0)
linuxidc pts/0        2018-10-17 22:45 (:0)
linuxidc pts/1        2018-10-17 22:46 (:0)
[linuxidc@localhost log]$

類似地,當你執行tail faillog命令時,你可能什麼也看不見,但是這樣的命令顯示它只是滿是0:

# od -bc faillog
0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
                                     
*
0076600

當您試圖對lastlog進行跟蹤時,卻發現需要使用lastlog命令來檢視紀錄檔資料時,您可能看不到什麼。

下面是/var/log中的紀錄檔檔案列表,以及關於它們包含什麼以及如何檢視它們的內容的一些描述。

  • alternatives.log - 來自update-alternatives的“執行”建議
  • apport.log - 截獲的崩潰資訊
  • auth.log - 使用的使用者登入和身份驗證機制
  • boot.log - 啟動時間訊息
  • btmp - 登入嘗試失敗
  • dpkg.log - 有關安裝或刪除軟體包的資訊
  • lastlog - 最近登入(使用lastlog命令檢視
  • faillog - 登入嘗試失敗的資訊 - 如果沒有發生則全部為零(使用faillog命令檢視)
  • kern.log - 核心紀錄檔訊息
  • mail.err - 有關郵件伺服器檢測到的錯誤的資訊
  • mail.log - 來自郵件伺服器的資訊
  • syslog - 系統服務紀錄檔
  • ufw - 防火牆紀錄檔
  • wtmp - 登入記錄

journalctl

除了在/var/log中維護的紀錄檔檔案之外,還有systemd紀錄檔。 雖然不是通常意義上的單個紀錄檔檔案的簡單“紀錄檔檔案”,但該紀錄檔代表了有關使用者和核心活動的重要資訊集合。 從系統上的各種源檢索資訊。

要檢視已收集的資訊,請使用journalctl命令。

您將看到多少資訊取決於您是否是adm組的成員。 非adm使用者將看到相對較少的資訊,但adm組的成員將可以存取大量資料 - 如此範例所示,這僅僅向我們顯示該adm組成員可以使用多少行資訊。

[linuxidc@localhost log]$ journalctl | wc -l
3225
[linuxidc@localhost log]$

這超過3000行文字! 為了減少這種希望更容易消化的顯示,你可能會想要使用適合你所看到的顯示的引數。 journalctl提供的一些選項包括:

--utc(將時間格式更改為UTC)
-b(僅顯示自上次啟動後新增的記錄)
-b -1(僅顯示自上次啟動以來新增的記錄)
--since和--until(僅顯示在指定時間範圍內新增的記錄,例如--since“2018-10-15”--until“2018-10-11 06:00”

這是一個例子:

[linuxidc@localhost log]$ journalctl --since "2018-10-17 19:28"
-- Logs begin at 三 2018-10-17 18:58:40 CST, end at 三 2018-10-17 22:57:06 CST.
10月 17 19:28:00 localhost.localdomain fprintd[54748]: No devices in use, exit
10月 17 19:28:02 localhost.localdomain dbus[696]: [system] Activating via system
10月 17 19:28:02 localhost.localdomain systemd[1]: Starting Fingerprint Authenti
10月 17 19:28:02 localhost.localdomain dbus[696]: [system] Successfully activate
10月 17 19:28:02 localhost.localdomain systemd[1]: Started Fingerprint Authentic
10月 17 19:28:02 localhost.localdomain fprintd[54906]: D-Bus service launched wi
10月 17 19:28:02 localhost.localdomain fprintd[54906]: Launching FprintObject
10月 17 19:28:02 localhost.localdomain fprintd[54906]: entering main loop
10月 17 19:28:03 localhost.localdomain su[54905]: (to root) linuxidc on pts/2
10月 17 19:28:03 localhost.localdomain su[54905]: pam_unix(su-l:session): sessio
10月 17 19:28:23 localhost.localdomain su[54747]: pam_unix(su-l:session): sessio
10月 17 19:28:32 localhost.localdomain org.gnome.Shell.desktop[2251]: Window man
10月 17 19:28:32 localhost.localdomain kde4-ksnapshot.desktop[54711]: last windo
10月 17 19:28:32 localhost.localdomain fprintd[54906]: No devices in use, exit
10月 17 19:28:40 localhost.localdomain org.gnome.Shell.desktop[2251]: Window man
10月 17 19:28:40 localhost.localdomain kde4-ksnapshot.desktop[54711]: last windo
10月 17 19:28:43 localhost.localdomain org.gnome.Shell.desktop[2251]: Window man
10月 17 19:28:43 localhost.localdomain kde4-ksnapshot.desktop[54711]: last windo
10月 17 19:28:51 localhost.localdomain org.gnome.Shell.desktop[2251]: Window man
10月 17 19:28:51 localhost.localdomain kde4-ksnapshot.desktop[54711]: last windo
10月 17 19:30:01 localhost.localdomain systemd[1]: Started Session 6 of user roo
10月 17 19:30:01 localhost.localdomain systemd[1]: Starting Session 6 of user ro
10月 17 19:30:01 localhost.localdomain CROND[54998]: (root) CMD (/usr/lib64/sa/s
lines 2-24

 

您還可以檢查某些特定???務的紀錄檔條目。 這可能是journalctl命令可以為您做的更有用的事情之一:

$ journalctl -u networking.service
-- Logs begin at Mon 2018-08-14 16:16:31 EDT, end at Tue 2018-10-17 19:16:51 EDT
July 14 16:16:32 shs-Inspiron-530s systemd[1]: Starting Raise network interfaces.
July 14 16:16:42 shs-Inspiron-530s systemd[1]: Started Raise network interfaces.
July 14 16:49:38 butterfly systemd[1]: Stopping Raise network interfaces...
July 14 16:49:38 butterfly systemd[1]: Stopped Raise network interfaces.
-- Reboot --
July 14 16:49:50 butterfly systemd[1]: Starting Raise network interfaces...
July 14 16:49:51 butterfly systemd[1]: Started Raise network interfaces.
-- Reboot --

請注意系統重新啟動如何顯示在此輸出中。

要獲取服務列表,請嘗試以下命令:

$ service --status-all | column
 [ + ]  acpid                    [ + ]  network-manager
 [ - ]  alsa-utils              [ - ]  networking
 [ - ]  anacron                  [ - ]  plymouth
 [ + ]  apparmor                [ - ]  plymouth-log
 [ + ]  apport                  [ - ]  pppd-dns
 [ + ]  atd                      [ + ]  procps
 [ + ]  atop                    [ - ]  quota
 [ + ]  atopacct                [ - ]  quotarpc
 [ + ]  avahi-daemon            [ - ]  rsync
 [ - ]  bluetooth                [ + ]  rsyslog
 [ - ]  console-setup.sh        [ - ]  saned
 [ + ]  cron                    [ + ]  sendmail
 [ + ]  cups                    [ + ]  speech-dispatcher
 [ + ]  cups-browsed            [ - ]  spice-vdagent
 [ + ]  dbus                    [ + ]  ssh
 [ - ]  dns-clean                [ + ]  sysstat
 [ + ]  gdm3                    [ - ]  thermald
 [ + ]  grub-common              [ + ]  udev
 [ - ]  hwclock.sh              [ + ]  ufw
 [ + ]  irqbalance              [ + ]  unattended-upgrades
 [ + ]  kerneloops              [ - ]  uuidd
 [ - ]  keyboard-setup.sh        [ + ]  whoopsie
 [ + ]  kmod                    [ - ]  x11-common

在上面的顯示中:

+ = 有效
- = 無效
? = 沒有可用的狀態選項

這是一個有用的命令,用於快速報告磁碟空間使用情況:

[linuxidc@localhost ~]$ journalctl --disk-usage
Archived and active journals take up 8.0M on disk.
[linuxidc@localhost ~]$

如果您想關注特定進程,可以通過提供PID(截斷)來實現,如下例所示。

[linuxidc@localhost ~]$ journalctl _PID=787
-- Logs begin at 三 2018-10-17 18:58:40 CST, end at 三 2018-10-17 23:07:16 CST.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.
10月 17 18:58:49 localhost.localdomain NetworkManager[787]: <info>  [1539773929.

注意:systemd紀錄檔的組態檔是/etc/systemd/journald.conf。

總結

Linux系統上的各種紀錄檔檔案有點壓倒性,但發現一些可以幫助查明問題的命令可以為您節省大量的時間和壓力。


IT145.com E-mail:sddin#qq.com