11.2 ログの管理
Linux Essentials Online Text | 2021/07/28

Linuxは、さまざまなプログラムが動作することで1つのシステムを構成しています。そして、それぞれのプログラムが自身の動作状況やエラーなどのメッセージを出力します。これを「ログ」と言い、ログが保存されるファイルを「ログファイル」と呼びます。

ログは、システムが正常に動作しているかどうかを確認したり、障害発生時にその原因を解明したりするために非常に重要な役割を持っています。そのため、的確にログを保管しておく必要があります。

syslog

syslogは各種システムやプログラムやサービスが出力するメッセージをログとしてファイル保存する仕組みのことを言います。ネットワークを経由して他のシステムに転送したり、ネットワーク上の機器から転送されてきたメッセージを受信してログとして保存することもできます。このような仕組みのことをSyslogと言います。

Linuxでは、syslogデーモンと呼ばれるプログラムが常時起動することでログが記録されます。主なsyslogデーモンにはsyslogやrsyslog、syslog-ngなどがあります。最近のディストリビューションではjournaldで管理されるものもあります。

dmesg

Linuxカーネルが出力するメッセージです。カーネルが動作を始めた段階では、まだファイルシステムがマウントされておらず、HDD(またはSSD)にログを記録することが出来ません。そのためメッセージを一時的にリングバッファと呼ばれる物理メモリ内に格納します。これらのメッセージは以下のコマンドを実行することで、HDD(またはSSD)に書き出します。

書式:

dmesg

引数やオプションは無く、「dmesg」とすれば実行できます。このコマンドを実行すると、バッファに格納されているメッセージの内容が、/var/log/dmesgに書き出されます。

カーネルが大量にメッセージを出力するイベントは起動時が主なので、dmesgを起動ログとしてチェックするケースがほとんどですが、厳密には「カーネルが出力したログ」であり、起動時のログとは少し意味が異なります。

ちなみに、カーネルがメッセージの出力先であるリングバッファは、循環バッファと呼ばれる構造になっていて、容量の上限に達すると先頭に戻って古いメッセージが上書きされて消えるようになっています。バッファ容量はそれほど大きくなく、殆どの場合、再起動すると前回起動分のログは消えていると考えて良いです。

# cat /var/log/dmesg | head
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=ja_JP.UTF-8
(以下省略)

上記では、catコマンド、headコマンドを用いて、先頭の数行を表示していますが、実際にはログの量が多いため、lessコマンド等で閲覧しましょう。5行目辺りでカーネルが起動し始めていることがわかります。

/var/log/messages

Linuxを管理する上で最もよく使用するログの一つで、カーネルが出力するメッセージが記録されます。

ただし、出力されるのはカーネルからのメッセージだけではなく、各種サービス等システムに関する一般的なメッセージが格納されます。具体的には、ユーザの認証情報や各種アプリケーションに関するメッセージ等です。

そのため、起動時を含め、システムに何らかの不具合がある時には必ず開くファイルです。なお、Redhat系では/var/log/messagesですが、Debian系では/var/log/syslogです。

# cat /var/log/messages | head
Jul 27 03:38:02 lpic-user rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-55.el7" x-pid="1024" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Jul 27 03:39:01 lpic-user systemd: Started Session 1145 of user root.
Jul 27 03:40:01 lpic-user systemd: Started Session 1146 of user root.
Jul 27 03:41:02 lpic-user systemd: Started Session 1147 of user root.
(以下省略)

dmesgファイルと同様、ログの量が多いため、lessコマンド等で閲覧しましょう。

/var/log/boot.log

/var/log/boot.logも、Linuxの起動ログの一つです。

カーネルがバッファに格納するメッセージとは異なり、このファイルには、サービス、ハードウェアの起動チェックした結果が格納されているファイルです。

# cat boot.log-* | head
[  OK  ] Started Show Plymouth Boot Screen.
[  OK  ] Reached target Paths.
[  OK  ] Started Forward Password Requests to Plymouth Directory Watch.
[  OK  ] Reached target Basic System.
(以下省略)

dmesgファイルと同様、ログの量が多いため、lessコマンド等で閲覧しましょう。
状況やタイミングによっては、 /var/log/boot.log の中身が空の場合があります。その場合は過去のファイルを閲覧しましょう。ファイルの指定で「boot.log-*」としてみてください。
lessコマンドで開いた時、ESCという文字が邪魔になる場合があります。その場合は以下のように実施してみてください。

# less -iRMXS boot.log-*

/var/log/secure

/var/log/secureは、認証に関するログが記録されるファイルです。

ログイン認証や、SSHによるアクセス時の認証、sudoコマンドの実行履歴など、セキュリティや認証に関連するメッセージが格納されます。

# cat /var/log/secure | head
Jul 27 13:25:09 lpic-user unix_chkpwd[12952]: password check failed for user (root)
Jul 27 13:25:09 lpic-user su: pam_unix(su-l:auth): authentication failure; logname=lpic-user uid=1000 euid=0 tty=pts/0 ruser=lpic-user rhost=  user=root
Jul 27 13:25:09 lpic-user su: pam_succeed_if(su-l:auth): requirement "uid >= 1000" not met by user "root"
Jul 27 13:25:16 lpic-user unix_chkpwd[12955]: password check failed for user (root)

dmesgファイルと同様、ログの量が多いため、lessコマンド等で閲覧しましょう。

PAGE TOP