Linuxのログシステムについて

こんにちは
今回はLinuxログを確認する方法を紹介します。

例えばLinuxがインストールされたPCでアプリを実行したのに効果がなかったり、USBメモリを差し込んでも反応がなかったりすることがあると思います。そんなとき、どこを確認すればいいのかの役に立ててほしいです。

dmesg

dmesgはKernelが出力するログが保持されているリングバッファを確認したり、制御するための仕組みおよびコマンドです。

Kernelが動作したときに出力されるログは一時的に専用のリングバッファに保持され、直前に何か異常が発生した場合はこのリングバッファに異常が発生した時のKernelのログが保持されている可能性が高いです。

USBメモリを差し込んだのに反応がないような場合はこのリングバッファにエラー発生ログが残っているかもしれないので一度確認してもいいかもしれません。
リングバッファに保持されたログは段々と消去されていくのでなるべく早く確認しましょう。

また、dmesgコマンドの実行にはroot権限が必要な場合があるため、注意してください。

筆者のUbuntuで実行した例

syslog

Linuxのシステムが出力するログを保持しておく仕組みです。
一般的な運用では/var/log/syslogにログが保持されていきます。

syslogにはdmesgでも確認できるKernelが出力するログや、出力の仕方によりますが標準出力のログが保存されています。
特にLinuxのバックグラウンドで動作しているdaemon(service)の標準出力はsyslogに保存されている場合が多く、いつもとLinuxの動きが違うといった場合に確認すると何か異常が発生していない確認することができます。

syslogが出力されているファイルはlogrotateというlogrotateというdaemonによってローテーションされるようになっている場合があり、/var/log/にsyslog.1やsyslog.2が存在する場合があります。(番号が若いほうが新しい)

journal log

syslogと同様にLinuxのシステムが出力するログを保持しておく仕組みで、出力される内容はほとんど変わりません。
違いとしてはsyslogはテキスト形式で保存されるのに対し。journal logはバイナリ形式で保存され、journalctlという専用のツールを利用して内容を確認します。

syslogとjournal logにはそれぞれ優れたところがあります。特に筆者がいいと感じたところを掻い摘んで書きます。
syslogの優れているところは互換性とシンプルさです。テキスト形式なので色々な環境で内容を確認することができ、ログがそのまま記載されているので読み取るだけで内容を把握することができます。
journal logの優れているところは(syslogと比較して)高速な検索と改ざん防止です。syslogの場合、grep等のツールを使用してファイル全体から特定の文字列を探索する必要があるため、検索に時間を要すことがありますがjournal logはメタデータを付与してデータベースのように構造化しながら保存するため、条件を指定することで必要な条件にジャンプして内容を確認することができます。また、journal logは特殊なフォーマットで保存されるため、データ改ざんが容易ではなく、外部からの攻撃に強いです。

もちろんsyslogはデータ改ざんのような外部からの攻撃に弱かったり、journal logは特殊なフォーマットで保存されるため、journalctlという専用のツールが必要になったりとデメリットもありますので使用したい条件やシチュエーションに応じて使い分けましょう。

さいごに

最近のLinuxで利用されているログシステムについて説明してきました。それぞれ用途に応じて使い分けて、異常が発生したときの分析効率を上げていきましょう。

コメント