ログの取得と管理
【連載コラム:Linuxでサーバーを構築してみよう(8)」
「何かトラブルなどがあったらログを見ろ」と言われるくらい大切なログ。そのログを見やすくしましょう。
サーバー構築の連載コラムの8回目となる今回は、ログの取得と管理に管理について解説していきます。
目次
ログの重要性
サーバー管理を行う際、外すことのできない話題が「ログ」です。ログは、Linuxマシンの中で起きたことを記録しておくファイルです。「何かトラブルなどがあったら必ずログを見ろ」というのはよく言われることですし、何も起きていなくても定期的にログを参照する癖はつけておくことが望ましいと言えます。そして、そのログを見やすいように設定しておくこともまた重要と言えるでしょう。
rsyslog
「rsyslog」はシステムログを記録するためのソフトウェアです。以前広く利用されていた「syslog」の機能強化版でいくつかの機能が強化されていますが、基本的な使い方はほぼ同じです。特徴としては、「複数のマシンのログを1台のマシンに集約する」などといったことが可能である、ログのフィルタリングや主要なデータベースとの連携が可能であるといったことが挙げられます。
rsyslogの設定ファイル
rsyslogの設定ファイルは、「/etc/rsyslog.conf」です。ところで、このファイルの中には次のような記述が見られます。
$IncludeConfig /etc/rsyslog.d/*.conf
この記述は、「/etc/rsyslog.dディレクトリにある、ファイル名が.confで終わるファイルすべてをこのファイルに取り込む」という意味です。設定ファイルが長くなってしまうため、いくつかのファイルに分割し、分割したファイルはすべて同じディレクトリの下に配置しておき、それらをすべて取り込んだ(Include)ものが設定ファイルになる、という形になっています。ここでは、/etc/rsyslog.confと、「/etc/rsyslog.d」配下にある、.confで終わっているファイルのすべてを合わせたものが設定ファイルになるということになります。
rsyslogの設定
/etc/rsyslog.d/配下にあるファイルには、たとえば以下のような記述があります。
mail,cron.info /var/log/mailcron.log
この記述は、「ファシリティmailおよびファシリティcronの、プライオリティinfo以上のメッセージを、/var/log/mailcron.logに出力する」ということを表しています。
ファシリティ
「ファシリティ」は、簡単に言えば「何のサービスのログであるか」を表すものです。rsyslogで利用できるファシリティを次表に示します。
auth | : | 認証サービス(現在はauthprivが推奨される) |
authpriv | : | 認証サービス |
cron | : | cronのメッセージ |
daemon | : | デーモンのメッセージ |
kern | : | カーネルのメッセージ |
lpr | : | プリンタサービスのメッセージ |
: | メールサービスのメッセージ | |
news | : | ニュースサービスのメッセージ |
syslog | : | syslogのメッセージ |
user | : | ユーザープロセスのメッセージ |
uucp | : | uucp転送を行うプログラムのメッセージ |
local0~7 | : | 独自利用のためのファシリティ |
ファシリティは、下の例のように「,」(カンマ)区切りで表すこともできます。
auth,authpriv
プライオリティ
「プライオリティ」は、ログの重要度を表すものです。rsyslogで使われるプライオリティを次表に示します。
emerg | : | システムが停止するレベルのエラーを示すメッセージ |
alert | : | 緊急に対処が必要なエラーを示すメッセージ |
crit | : | ハードウェア障害など致命的なエラーを示すメッセージ |
err | : | 一般的なエラーメッセージ |
warning | : | 警告メッセージ |
notice | : | 通知メッセージ |
info | : | 一般的な情報メッセージ |
debug | : | デバッグメッセージ |
none | : | ログメッセージ出力しない設定 |
* | : | すべてのプライオリティ |
プライオリティには序列があります。「none」と「*」を除いて、この表の上にあるほど重要度が高く、下ほど重要度が低くなります。
先ほど示した
mail,cron.info /var/log/mailcron.log
という記述は、「ファシリティmailおよびファシリティcronの、プライオリティinfo"以上"のメッセージを、/var/mailcron.logに出力する」ということになります。ここで、指定したプライオリティだけでなく、そのプライオリティよりも高い重要度(プライオリティ)のメッセージがすべてログに記録されるという点に注意が必要です。
特定のプライオリティのみ出力したい場合には、「=」記号を利用します。
mail,cron.=info /var/log/mail.log
この場合、プライオリティがinfoのメッセージだけが記録されます。
また、逆に特定のプライオリティ以下のメッセージを記録することもできます。このためには「!」記号を利用します。
mail,cron.!notice /var/log/mail.log
この例では、プライオリティがnotice以下のメッセージが記録されることになります。
ファシリティとプライオリティのセットを複数指定することもできます。この場合、「;」(セミコロン)で区切ります。たとえば、
mail.notice;cron.info /var/log/mailcron.log
とすると、ファシリティ「mail」でプライオリティ「notice」以上のメッセージと、ファシリティ「cron」でプライオリティ「info」以上のメッセージが、/var/log/mailcron.logに記録されることになります。
ディスクアクセス頻度の低減
たとえば
mail.notice -/var/log/mailcron.log
のように、ログファイルの前に「-」(ハイフン)をつけることで、ログをファイルに書き出す前に、ある程度メモリに書き出す内容を保存してからファイルに書き出すようになります。こうすることで、ディスクアクセスの頻度を少なくすることができます。これは、書き出されるログの量が多い場合に、ディスクへの負担を少なくする目的で使われます。ただし、この場合、システムトラブル発生時に、ログファイルにログが記録されないことがあり得るので注意が必要です。
設定の変更の反映
他のサーバソフトウェア同様、設定ファイルを変更したらサービスを再起動し、設定の変更を反映させます。
# systemctl restart rsyslog
Apacheのログをrsyslog経由で出力する
Apacheのログは、デフォルトではrsyslogを経由しません。これでも問題があるわけではありませんが、たとえばログを1台のログサーバに集約するなど、rsyslogのメリットを享受するために、このログをrsyslog経由にすることもできます。この場合は、rsyslogだけではなく、Apacheの設定ファイルに変更を施す必要があります。具体的には、Apacheの設定ファイルであるhttpd.conf(およびこれがIncludeするファイル)の中の、「CustomLog」および「ErrorLog」の設定を書き換えます。
CustomLogの設定をコメントアウトした上で、以下の記述を施します。
CustomLog "|/usr/bin/logger -p local5.info -t http-access" combined
/usr/bin/loggerコマンドは、システムログを記録するためのコマンドです。パイプを通じてこのコマンドを利用して、rsyslogにログを送る形になります。この設定では、ファシリティlocal5のプライオリティinfoとして、Apacheへのアクセスログが記録されます。
エラーログも同じようにrsyslogに送るよう設定します。ErrorLogの設定をコメントアウトした上で、以下の設定を施します。
ErrorLog "|/usr/bin/logger -p local6.notice -t httpd_error"
エラーログなので、ファシリティを1段階上げてあります。
続けてrsyslogの設定を変更します。設定ファイルに以下のように記述すると、それぞれのファイルにログが出力されます。設定を変更した後にrsyslogを再起動すれば、ログがsyslog経由で出力されます。
local5.=info /var/log/httpd-accesslog.log
local6.=notice /var/log/httpd-errorlog.log
ログサーバを構築する
rsyslogでは、TCPもしくはUDPを用いて、ネットワーク越しにログを送信することで、1台のログサーバに集約するといったこともできます。この機能には、複数のサーバを運用する際に、いちいちサーバを見て回る必要がなくなるというメリットがあります。具体的な設定方法については『Linuxシステム管理標準教科書』の6章を参照してみてください。
- 筆者紹介
川原 龍人 氏
1975年生まれ。 著書に「BIND9によるDNSサーバ構築」、「シェルスクリプト ポケットリファレンス Bash編(技術評論社)」など。 予備校講師としても活躍中。Linuxとのつきあいは20年を超える。
バックナンバー
第14回:バックアップ
第13回:異常発生時の対応
第12回:サーバー構築という仕事
第11回:ユーザー教育の重要性
第10回:テスト環境を構築する
第9回:ログローテーションとは
第8回:ログの取得と管理
第7回:アクセス制限
第6回:OpenSSHの活用
第5回:ユーザーアカウントとアクセス制限
第4回:テスト環境を構築する
第1回:Linuxでサーバーを構築しよう