Linuxはサーバで使われることが多く、サーバではログのチェックが必須項目だ。
このページではログの調査方法についてざっくりとまず知っておきたいところをまとめている。参考にしてほしい。
目次
Linuxでログを調査するには?
Linuxの場合基本的に「/var/log」の下にログが残ることは別途ページで解説したとおりだ。rsyslogの設定にも触れたが「ログの見方」というところをあまり触れていなかったと思う。
「/var/log」の下に残されているログは、大体がテキストデータである。一部では専用のコマンドで閲覧するバイナリとしてログがとられているファイルも存在するが、ログは基本的にテキストデータと考えて問題ない。
テキストデータなので「grep」コマンドなどで絞りこみや「tail」コマンドでのリアルタイムな監視、「less」コマンドなどによる、閲覧が可能となっている。テキストデータのほうが特殊な形式で保存するより、柔軟な場合が多いだろう。
気をつけていただきたいのは、ログは基本的に「root権限でないと閲覧できない」ことと、「決して手動で編集を加えてはならない」というところだ。中身がテキストデータかつroot権限でそれを開くため実質編集は可能だが、手動でなにかかきくわえてしまうとログの整合性が失われてしまうからだ。
必ずリードオンリーなもので閲覧しよう。
実際のログをみてみよう
まずは書式から
日付 時刻 ホスト メッセージ発信元: メッセージ
となっている具体的には次のようになる。/var/log/messagesからの抜粋だ。
Nov 3 14:17:00 localhost su: (to root) ken on /dev/pts/1
- Nov 3 日付
- 14:17:00 時刻
- localhost ホスト
- su メッセージ発信元
- (to root) ken on /dev/pts/1 ログ内容
となっている今回は「/var/log/messages」から一行をとりだしてみた。
suコマンドを実行したときのログである。「/var/log/secure」にはもっとやかましくログがのこっている。rsyslogに管理されているログに関しては、基本的にこの書式で記録される。試しにcronなどものぞいてみてほしい
# less /var/log/cron
などとすると定期実行されているログがみえるはずだ。なおログはワンアクションが一行ごとに記録される。
ログ調査のときに重宝するコマンド
いくつかのコマンドはログを調査するときに役にたつ。
grep
ログが膨大になってゆくと、特定の条件でログ情報を絞りこみたいときがあるはずだ。そういうときはgrepを使用するとよい
# grep ken /var/log/cron
などとすると「ken」という文字列が含まれる行が列挙される。今回は主にユーザでしぼってみたが、任意の関連性のある文字列に置き換えること。例えばホストやネットワークインターフェイスなどだ。
grepについて詳しくは次のページでお伝えしている。
tail -fもしくはtailf
tailはテキストファイルの最後の指定した数行を表示するコマンドだが、ログ監視に関して非常に便利だ。
tailコマンドは「-f」オプションを指定すると更新を随時表示することができるようになる。つまりリアルタイムでログを監視できるのである。試しにmessageファイルを開きながらloggerコマンドなどで意図的にログを残してみるとよい。
アクセス待ちや確認などサーバ管理業務では重宝するコマンドなので覚えておこう。終了するときは「Control+c」とすればよい。
なおtailfコマンドは使い勝手は同じだが、ファイルへの追加書き込みがない時はファイルへアクセスを行わないという点で少々ことなる。どちらを使用しても監視は可能である。
tailコマンドについては下記で詳しい。
less
基本的なビューワ機能をとりそろえてあるコマンドだ。
# less /var/log/cron
などとするとファイルを表示できる。一部viと互換性のあるキーバンドをしており「j」「k」で上下カーソル移動、スクロール「/」で文字列の検索が可能となっている。「-N」オプションを使用すると行番号が表示される。
またファイルを表示している最中に「Shift+f」をおすと「tail -f」と同じ効能がえられる。
特殊なログをもつコマンド
last
バイナリログ「wtmp」に情報が記録されている、ここ最近にログインした履歴がのこされているlastコマンドで確認可能だ。
lastlog
ユーザが最後にログインした履歴を表示する。なにもオプションを設定しない場合は全ユーザの最終ログイン日時が表示される。一度もログインしたことのないユーザについては"**Never logged in**"もしくは**一度もログインしていません**と表示される。
systemdの場合
昨今はsystemdが普及しているので「jounalctl」でログを管理する場合もあるだろう。
現在CentOS7の場合、一応にrsyslogの方をメインで使用している状態である。jounalctlのログは「/var/run/log/journal」に記録されるが、このファイルは再起動するたびに初期化されてしまう。永続的にログを記録したい場合は「/var/log/journal」というディレクトリを作成して再起動する。
以下ザックリとしたログ管理のオプションを紹介する。
ユニットごとにログを見たいときは、
journalctl -u <ユニット名>
とする例えばcronの場合
# journalctl -u crond
# journalctl -f
とするとtailfのような動作をする。
プライオリティごとにログを確認したいときは「-p」オプションを使用する。
journalctl -p <プライオリティ>
# journalctl -p err
プライオリティには以下がある。オプション指定時、番号で指定することも可能になっている。
- 0 emerg
- 1 alert
- 2 crit
- 3 err
- 4 warning
- 5 notice
- 6 debug
日時指定でログを出すことも可能となっている。
journalctl --since=”<日時>”
# journalctl --since=”2016-11-04”
まとめ
このページではログの調査方法について一通りざっくりまとめてご紹介した。
ログの調査はLinuxサーバを扱う上で必須のスキルだ。各種のファイルは一度は見て、コマンドも確認しておこう。
コメント