みなさんこんにちは、おはじきです。
システムの運用保守などの業務をこなしていく上でシステムログを扱う機会は非常に多いですよね。
何か問題が起きたらまずはログを確認するかと思います。
ログはトラブルシューティングの要といっても過言ではありません。
というわけで、今回はLinuxにおけるログの見方、設定ファイルの読み方について解説します。
Linuxにおいてシステムのログを取得、管理するソフトウェアで古くからあるのがsyslogですがこちらはUDPというプロトコルを用いています。
ですがUDPはスピードを重視する性質上パケットが途中で欠落して正常にログが記録されないことがあるという欠点を持っていました。
そこでrsyslogというものが出てきてこちらはTCPもサポートしているのでより安定したログの管理ができるようになりました。
Centos8ではrsyslogを標準で採用しています。
rsyslogの設定は/etc/rsyslog.confファイルや/etc/rsyslog.dディレクトリ以下のファイルで行います。
実際に/etc/rsyslog.confの中身を画像で見てみましょう。
英語ばかりで難解ですがここではどのログをどのファイルに出力するかを設定する内容が記述されています。
この内容を読み解くにはまずはファシリティとプライオリティについて理解する必要がありますね。
ファシリティとプライオリティとは上の画像でいう*.info;mail.none;authpriv.none;cron.noneやauthpriv.*などが書かれている部分で、○○に関する情報を○○(重要度)の部分まで出力するという、ログの出力制限をかける意味合いがあります。
どちらも設定できる項目に限りがありますので一覧で見ていきましょう。
因みにどちらも*で全てのファシリティ、もしくはプライオリティを選択できます。
こちらはファシリティ、「 ○○に関する情報 」の部分ですね。
auth,authpriv | 認証システムに関するメッセージ |
cron | cronに関するメッセージ |
daemon | デーモンの関するメッセージ |
kern | カーネルに関するメッセージ |
lpr | 印刷システムに関するメッセージ |
メールサービスに関するメッセージ | |
user | ユーザープロセスに関するメッセージ |
local0~local7 | ローカルシステムに関するメッセージ |
続いてプライオリティについてです。
こちらは○○(重要度)の部分まで出力するという部分ですね。
メッセージの重要度を示します。
プライオリティを低くすればするほど出力される情報量が多くなります。
上から順に重要度が高くなります。
emerg | システムが落ちるレベルの緊急事態 |
alert | 緊急に対応すべきエラー |
crit | システム自体は動いているが深刻なエラー |
err | 一般的なエラー |
warning | 警告 |
notice | 通知 |
info | 一般的な情報 |
debug | デバッグ情報 |
none | ログを記録しない |
これらのファシリティとプライオリティを用いてログの出力を制御します。
上記の内容を踏まえて上の画像を見ると少しは解読しやすくなるかと思います。
「authpriv.* /var/log/secure」は認証サービスに関する全てのログを /var/log/secure に出力する。
「 *.info;mail.none;authpriv.none;cron.none /var/log/messages」は「全てのinfo以上の重要度のログ、ただしメールと認証サービスとcronに関するログは出力しない」という設定で /var/log/messages に出力するという設定が記述されています。
条件は;で区切ることで追加する事ができより詳しく設定する事ができます。
rsyslogの設定ファイルを変更したら「systemctl restart rsyslog」で再起動するのを忘れないでくださいね。
ここで1つ面白いコマンドを紹介させてください。
logger -p ファシリティ.プライオリティ -t タグ 任意のメッセージ
という書式で任意のメッセージを出力する事ができます。
実際にやってみましょう。
プライオリティをemergで出力してみましたところBroadcast message、つまりログインしている全ユーザーにこんなログ出ちゃってますよ!と通知が行っちゃってますね。
個人のPCだから問題はないですが職場のPCでこれやると怒られそうですね。
そしてこれらのログはデフォルトの設定だと/var/log/messagesファイルに出力されます。
今回のloggerコマンドでどのような形で出力されたか見てみましょう。
sudo cat /var/log/messages と入力してください。
出力した時間、出力ホスト、出力元(今回は-tオプションで任意に設定)プロセスID メッセージ内容という順番で出力されています。
このようにloggerコマンドを使うと任意のログを出力する事ができます。
systemdを採用したシステムではjournalctlコマンドを使ってログを閲覧する事ができます、これらのログを「ジャーナル」といいます。
ジャーナルは/run/log/journalディレクトリに保存されていますがrsyslogと違いバイナリファイルで構成されているのでcatコマンドでの閲覧はできずjournalctlコマンドで閲覧する必要があります。
因みに/runディレクトリ以下にあるファイルは特殊なもので、システムを終了すると失われてしまいます。
主なオプション
-f | ログの末尾を継続的に表示し続ける |
-r | ログを新しい順に表示する(デフォルトは古い順) |
-p(プライオリティ) | 指定したプライオリティより重要なものを表示 |
-x | 説明文付きで表示 |
-u(unit名) | 指定したunitのログを出力 |
-b | ブート時のメッセージを出力 |
-e | 末尾を表示 |
–no-pager | ページャを利用せず一気に表示 |
jounalctlを利用して先ほどloggerで出力したログを見てみましょう。
基本的なフォーマットは同じなのですがこちらは重要度によって色が変わるみたいですねemergに設定したログが赤く表示されます。
設定ファイルは基本的にすべて英語で記述されているので読むのが大変ですよね。
なかなか重い腰が上がらないかと思いますが、読み方を調べて法則を把握すれば意外となんとかなる場面もあり、解読できた時の「あ、エンジニアっぽいことしてる」感もなかなか気持ちのいいものです。
是非今回のような簡単かつ重要な設定ファイルから手を付けてみてはいかがでしょうか?
それでは。