02:サーバログについて

SVシリーズでは、以下に示す 4 種類のログ ファイルが使われます。
E-mail ログファイル (/var/log/maillog に保存されます)
FTP ログ ファイル (/var/log/messages に保存されます)
Web ログ ファイル (/usr/local/apache/logs に保存されます)
System logs (/var/log に保存されます)

各ログ ファイルに記録される情報は、サーバ動作診断時に役立ちます。ログデータは非常に役に立つものですが、定期的に管理しないと問題の原因になることもあります。
 
■メールのログ ファイル
バーチャル SMTP サーバに届いたメールがダウンロードされると、sendmail によってその処理が /var/log/maillog にログ記録されます。POP や IMAP アカウントに対するアクセスも、このファイルにログ記録されます。

デフォルトの設定では、/var/log/maillog が毎日循環され、8 日分のデータがバックアップとして保存されます。sendmail.st (sendmail 統計ファイル) は、一週間に 1 回循環され、/etc/syslog.conf に設定されています。
/var/log/maillog ファイルの表示
maillog は、メールに関する問題を解決するときに役立ちます。

以下のように入力します。

% tail -f /var/log/maillog
tail コマンドを実行すると、指定したファイルの最後の10行が表示されます。
ファイルに記録される情報をリアル タイムで確認する場合は、-f オプションを指定します。
tail を終了するには、 -c を押します。
ログをリセットする場合は、tar や zip を使ってアーカイブ コピーを作成し、FTPを利用してサーバからローカル コンピュータに転送しておくとよいでしょう。
maillog のデータは、以下に示す 2 つの部分で構成されたメッセージと同じような形式で記録されています。このメッセージは、Sendmail の設定のレベル 9 のサンプルです。

パート 1


Mar 19 18:10:19 envy sm-mta[4247]: h2JIAImx004247: from=, size=978, class=0, nrcpts=1, msgid=<20030319113738.W87363-100000@your_company.com>, proto=ESMTP, daemon=MTA, relay=other_company.com [199.104.125.167]
このメッセージの送信者は bob@your_company.com であり、キュー識別子は h2JIAImx004247 です。メッセージの本文のサイズは 978 バイトです。

優先度は、最上位 (class=0) に設定されています。受信者は 1 名です。
メッセージ ID は 20030319113738.W87363-100000@your_company.com. であり、ESMTP プロトコルを使って送信されています。

メッセージは、メール転送エージェント デーモンが受信しました。また、メッセージを送信したホストは other_company.com であり、IP アドレスは 199.104.125.167 です。

パート 2

Mar 19 18:10:25 envy sm-mta[4283]: h2JIAImx004247: to=, delay=00:00:06, xdelay=00:00:06, mailer=esmtp, pri=30899, relay=personalmailserver.com. [128.121.230.54], dsn=2.0.0, stat=Sent (h2JIAKFq089777 Message accepted for delivery)
メッセージの宛先は bob@your_company.com です。配信するのに 6 秒かかっており、トランザクションの遅れ (このアドレスのみ) も6秒でした。(このメッセージの受信者はひとりしかいないので、どちらも 6 秒というのは当然のことであると言えます。 ログの最初の項目を参照してください。)

virtusertable が入力されていることから、このメッセージはほかのサーバの別のアドレスに宛てられたものであり、配信途中であることがわかります。したがって、このメッセージは ESMTP メーラーで「配信」されます。

配信試行の優先度は 30899 に設定されています。このメールを中継するサーバは personalmailserver.comであり、その IP アドレスは128.121.230.54 です。配信ステータス (DSN=配信ステータス通知) の値 2.0.0 は、配信が成功したことを表しています。

DSN (配信ステータス通知) :
o 2.x.x は配信が成功したことを示します。
o 4.x.x は一時的なエラーが発生したことを示します(メールはキューに入れられ、あとで配信の再試行が行われます)。
o 5.x.x は完全なエラーが発生したことを示します。メールは返送または拒否されます。
メールは正常に送信されました (stat=Sent)。Sent のあとの括弧内に記述された内容は、受信したサーバの応答メッセージを表します。

以下の表で、maillog のエントリ例を詳しく説明します。
アクセスログ部分
記載例 説明
タイムスタンプ(Time stamp) Mar 19 18:10:19 ログエントリが秒単位で記録されています。
Host(Host) envy ドメイン名の最初の部分、つまりホストサーバを表します。
プロセスオーナー/プロセス ID(Process owner/Process ID) sm-mta[4247]: [角かっこ] の外の部分は、プロセス(メール転送エージェント、つまり Sendmail)の所有者を表します。[角かっこ]内の数字は、タスクの実行時に使われたプロセスIDを表します。
メッセージ ID h2JIAImx004247 sendmailによって送信されたメッセージに割り当てられたIDを表します。
配信エージェント(Delivery agent) from weldon@whipple.org メッセージの受信者または送信者を表します。
サイズ (バイト単位) size=978 データフェーズで送信されたメッセージのサイズをバイト単位で表したものです。ヘッダは、サイズには含まれません。
クラス(Class) class=0 (-200から100までの数値が記載されています。-200は一括処理で、100は速達処理を表します)数値によって設定されたメッセージの優先度 を表します。値が大きいほど、メール キュー内でのメッセージの優先度が高くなります。
Nrcpts nrcpts=1 メッセージが配信される受信者数(ccとbccの受信者を含む)を表します。
Msgid msgid=
<20030319113738.W87363100000
@gabriel.whipple.orem.ut.us>
メッセージに割り当てられた識別番号を表します。
デーモン(daemon) daemon=MTA (mail transfer agent) メッセージの配信に使われた送信者のサーバデーモンを表します。
Proto proto=SMTP メッセージの送信に使われたプロトコル(SMTP、ESMTP または内部)を表します。
Relay relay=domain.com[xx.xx.xx.xx] メッセージを送信または承認したサーバを表します。[角かっこ] 内の数字は、サーバの IP アドレスです。
Stat stat=Sent 配信のステータスを表します。通常は「Sent」または「Queued」としてログ記録されます。
/var/log/maillog ファイルのリセット方法
/var/log/maillog ファイルをリセットするには、以下のように入力します。
% cat /dev/null > /var/log/maillog
このコマンドを実行すると、ファイル内のデータが消去されます。
 
■FTP ログ ファイル
FTP のトランザクションとアクセスは /var/log/messages ファイルに記録されます。デフォルトの設定では、メッセージ ファイルは、定期的に循環されます。各エントリは 1 行で記録されます。以下の項目があります。
タイム スタンプ (ログ エントリの日時が記録されます)
送信側プログラムの名前
ログ エントリのテキスト
/var/log/messages ファイルの表示
メッセージ ファイルは、以下の手順で表示します。以下のように入力します。
% tail -f /var/log/messages
tail コマンドを実行すると、指定したファイルの最後の10 行が表示されます。ファイルに記録される情報をリアル タイムで確認する場合は、-f オプションを指定します。tail を終了するには、 -c を押します。
/var/log/message ファイルのリセット
ログをリセット (クリア) する場合は、必要に応じてアーカイブ ファイルを作成してください。具体的には、tar や zip を使ってファイルをアーカイブし、FTP を利用してサーバからローカル コンピュータにファイルをコピーしておくとよいでしょう。
/var/log/messages ファイルをリセットするには、以下のように入力します。
% cat /dev/null > /var/log/messages
このコマンドを実行すると、ファイル内のデータが消去されます。
 
■Web ログ
SVサーバのWeb サービスでは、Web サイトのすべてのトラフィックに関するログ、/usr/local/apache/logs ディレクトリ内のログ ファイルに記録されます。
SVサーバでは、複合ログ フォーマット (Combined Log Format) が使われるように設定されています。このフォーマットは、以下の 2 つのログ ファイルを統合したものです。
access_log
error_log
ほとんどのケースでは、/www/conf/httpd.conf に設定されているデフォルトのディレクティブ定義で問題ありません。ただし、このようなディレクティブを変更する必要がある場合は、127 ページの「Web サーバの高度な設定」で、詳細を確認してください。
access_log ファイルの表示
アクセス ログには、TransferLog、AgentLog、ReferrerLog のデータが記録されています。ログ ファイルが空でない場合に tail コマンドを実行すると、アクセス ログ ファイルの最後のエントリがエコー表示されます。各エントリ行は、リソースの要求です。

/usr/local/apache/logs/access_log ディレクトリに移動します。
tail コマンドを実行して、指定したファイルの最後の 10 行を表示します。ファイルに記録される情報をリアル タイムで確認する場合は、-f オプションを指定します。
% cat /dev/null > /var/log/messages
アクセス ログの各エントリは6 つの部分で構成されています。以下の例を使って説明します。
some.remote.host - user - [19/Aug/1998:13:48:56 -0600] "GET /index.html HTTP/1.0" 200 4817 "http://www.yahoo.com" "Mozilla/4.75 [en] (Windows NT 5.0; U)"
このエントリからわかることは、山岳標準時 (600 タイムゾーン) の 1998 年8 月19 日 13 時48 分56 秒に、some.remote.host というリモート ホストから HTTP/1.0 に準拠したブラウザを使って、index.html という URL が要求されたということです。

サーバは要求されたリソースを発見 (status code 200) して、クライアントに返しました。ドキュメントの長さは、4817 バイトで、要求の送信元は、Yahoo のホームページ (参照元サイト) のリンクです。

また、使われたブラウザは、Netscape Navigator v4.75 であることもわかります (Mozilla は、Web サーバでの Netscape の識別名です)。

以下の表を使って、前述のエントリをさらに詳しく説明します。
アクセスログ部分 記載例 説明
ホスト名(host name) some.IP.address リソースを要求したリモート ホストの IP アドレスを表します。
ユーザ ID (user ID) user 要求対象のリソースにアクセスするときにユーザ ID が必要な場合は、そのユーザ IDを表します。ユーザ認証が不要な場合、このデータ フィールドには何も記載されません。
タイムスタンプ(Time stamp) [19/Aug/1998:13:48:56 -0600] [ ] 内に、ログ エントリが行われた日とその時間 (秒まで) が記載されます。
リソースリクエスト (resource request) "GET /index.html HTTP/1.0" リソースの要求は、以下の 3 つの データ フィールドに分割して表されます。1) 要求の方法 (GET、POST など) 2) 要求されたリソースのローカル URL。3) クライアントで使われている HTTP のバージョン (ほとんどの場合は HTTP/1.0) 要求に対するサーバの応答を表すステータス コード (status code) 200 HTTP ステータス コードを表します。200 から 599 までの値が使われます。この値が200 から 299 までの場合は、応答が正常に行われたことを表します。値が300 から 399 までの場合は、リダイレクトされたことを表します (要求された URL のリソースがほかの場所に移動された場合など)。値が 400 以上の場合は、エラーが発生したことを表します。
サイズ 4817 要求されたリソースの正確なサイズ (バイト数) を表します。
参照元(referrer) "http://www.yahoo.com" リソースの参照元ドキュメントの情報を表します (Yahoo の Web サイトからアクセスされた場合は、その情報が記録されます)。
エージェント(agent) "Mozilla/4.75 [en] (Windows NT 5.0; U)" エージェント ログは、単に Web サイトにアクセスするときに使われたブラウザ (またはスパイダ) の一覧です。Web サーバ対して要求が行われると、ブラウザの種類が記録されます。
access_log ファイルを終了するには、ctrl-c を押します。
■access_log ファイルのテスト
ブラウザを使って、SVサーバのインデックスファイルにアクセスします。ページにアクセスすると、新しいログ エントリがログ ファイルに記録されます。以下に、エントリの例を示します。
some.IP.address - user - [access date and time] "request" status bytes_sent file_sent referrer agent
■error_log ファイルの表示
エラー ログには、ユーザが Web サイトからページをダウンロードしようとしたときに発生したエラーが記録されます。エラー ログは、時々ダウンロードして内容を確認する事をお薦めいたします。エラー ログの内容をチェックすることによって、自社のサイト内のリンク切れやほかのサイトに対するリンクエラーなどを見つけることができます。

/usr/local/apache/logs/error_log に移動します。次に、tail コマンドを実行して、指定したファイルの最後の10 行を表示します。ファイルに記録される情報をリアル タイムで確認する場合は、-f オプションを指定します。

% tail -f error_log
tail を終了するには、ctrl-c を押します。エラー ログの詳細レベルを変更する場合は、/www/conf/httpd.conf ファイルに記述されている LogLevel ディレクティブを使います。
■error_log ファイルのテスト
ブラウザを起動して、http://www.your_company.com/bogus-filename.htmlにアクセスします。bogus-filename.html ファイルが存在しない場合は、エラー ログ ファイルに以下のようなエントリが記録されます。
[date and time] access to /usr/local/etc/httpd/htdocs/bogus-filename.html failed for some.remote.host, reason: File does not exist
■access_log と error_log のリセット
スケジュールの確認は、/etc/syslog.conf ファイルで行います。

ツールを使って手動でログ ファイルをクリアしたい場合は、Savelogs をインストールしてください。rotatelogs は、/usr/local/apache/conf/httpd.conf の Log 定義で設定されているラッパー プログラムです。
■システム ログ
SVサーバ環境でシステム ログを処理するのは、ほかのログを処理する場合よりも複雑さが増します。システム ログとは、プロセスに関する詳細な情報を記録するためにコンピュータ上に作成されるファイルを指します。何を記録して何を記録しないかについては、ユーザが決定します。

このセクションでは、もっと一般的なログやファイルに記録されるデータについて説明します。サービスの大半では、独自のログや各ファイルの内容を設定することもできます。これらのログの一般的な保存場所は /var/log ディレクトリです。

メインとなる設定ファイルは /etc/syslog.conf です。syslog プロセスを使ってログを設定する場合は、FreeBSD ハンドブックに記載されている補足情報を参照してください。/etc/syslog.conf がデフォルトのファイルです。

このファイルに変更を加える場合は、プロセスに HUP を送信して、設定ファイルの再読み込みを行ってください。これは、syslog デーモンを停止することによって行います。具体的には、以下のように入力します。

% kill -HUP pid
このコマンドを実行すると、syslog.conf の記述は以下のようになります。
# $FreeBSD: src/etc/syslog.conf,v 1.13.2.3 2002/04/15 00:44:13 dougb Exp $
#
# Spaces ARE valid field separators in this file. However, other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) man page.
*.notice;lpr.info;mail.crit;news.err /var/log/messages
security.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
mail.info /var/log/mailloglpr.info /var/log/lpd-errs
cron.* /var/log/cron
*.emerg *
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
#*.* /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.* @loghost
# uncomment these if you're running inn
# news.crit /var/log/news/news.crit
# news.err /var/log/news/news.err
# news.notice /var/log/news/news.notice
システムが受信するすべてのメッセージを記録するログ ファイルを有効にしてもかまいませんが、ディスクの空き容量をしっかりと管理しているのでないかぎり、このログ ファイルを有効にすることはお勧めしません。リモート ログも有効にできますが、マシンの負荷が著しく増大する可能性があります。

以下に、syslog.conf に設定されている優先レベルを示します。
LOG_EMERG - パニック状態。通常は、すべてのユーザに送信されます。
LOG_ALERT - 早急に修正する必要がある状態 (システム データベースの破損など)
LOG_CRIT - 深刻な状態 (システム エラーなど)
LOG_ERR - エラー
LOG_WARNING - 警告メッセージ
LOG_NOTICE - エラーではないが、特別な処理を行う必要がある状態
LOG_INFO - 情報メッセージ
LOG_DEBUG - プログラムのデバッグ時の正常な使用に関する情報が記述されたメッセージ
syslog.conf によって、/var/log ディレクトリに以下のファイルが作成されます。それぞれのファイルに記録されている正確な情報を確認する場合はsyslog.conf をチェックします。 緊急メッセージは、アカウントの画面に表示されるメッセージです (マシンの再起動など)。
ファイル名 説明
messages ftp ログインとメールに関する重大な問題が記録されます。
auth.log 認証システムの使用 (login、getty、su) がすべて記録されます。
Lpd-errs ライン プリンタのオプションが記録されます。
maillog メール プログラムで送信されたすべての情報メッセージが記録されます。
cron すべての cron メッセージが記録されます。
console log システムの起動時に、コンソールに出力された内容を表示するためのファイルです。
lastlog 最後に実行されたコマンドのログ ファイルです (バイナリ形式)。
adduser システムのユーザ登録が記録されます。
userlog システムのユーザに加えられた変更が記録されます。
xferlog ftp サーバを使って行われた転送が記録されます。
syslog は、自動的にログの循環を行うことによって、ディスク クォータに悪影響が出ないようにするための強力な機能です。ただし、予期しない問題が発生して、各ログのサイズに大きな影響が与えられることもあります。
 
■ログ ファイルの解析
トラフィックが比較的少ないサイトの場合でも、Web サーバのログ ファイルに実際に記録さるデータの量は膨大なものになります。

記録されたデータの意味を理解するには、ログ ファイル解析プログラムを使ってデータの処理や解析を行い、レポートを作成する必要があります。

Web サーバログ ファイルを解析して、Web サーバのトラフィックに関するレポートをHTML形式やテキスト形式で作成したり、このようなレポートをメールで送信したりする機能が備わったプログラムにはさまざまなものがあります。

ログ解析プログラムによっては、特定のログ フォーマット (複合ログ フォーマットまたはコモン ログ フォーマット) で記録されたデータしか処理できないものもあります。使用するログ解析プログラムが、SVサーバ に設定されているログ フォーマットに対応していることを確認してください(デフォルトの設定では、複合ログ フォーマットが使われます)。

さまざまなツールが存在しますが、例として Urchin と Analog という 2 つのツールを挙げておきます。ソフトウェア パッケージの中には、コマンド プロンプトでしか実行できないため使い方が難しいものもありますが、このようなプログラムには、インストールが簡単な上に無償で利用できるというメリットがあります。
 
■ログ ファイルの循環とデータの消去
以下に説明する各プログラムでは、SVサーバのログが循環されます。

SVサーバのデフォルトの解析プログラムは syslog です。このプログラムに備わった強力な機能を利用すると、ログを自動循環することによって、ディスク クォータを大量に消費しないようにできます。メインとなる設定ファイルは /etc/syslog.conf です。

syslog によって生成されるログ ファイルは /var/log に保存されます。循環させるファイルとその循環スケジュールについては、もう 1 つの設定ファイル (/etc/syslog.conf) を使って設定します。デフォルトの設定では、/var/log/maillog と /var/log/messages が循環しますが、Apache ログは循環しません。

rotatelogs (/usr/local/apache/bin/rotatelogs) は、ログ定義に設定できるラッパー プログラムです。Web ログ ファイルを循環さるには、以下の 2 行を Web サーバ設定ファイル (/www/conf/httpd.conf ) に記述します。
TransferLog "|/usr/local/apache/bin/rotatelogs /path/to logs/access_log 86400"
CustomLog "|/usr/local/apache/bin/rotatelogs /path/to logs/error_log 86400" combined
「path/to/logs」には、SVサーバのアクセス ログとエラー ログへのパスを指定します。最後の引数 (86400) は、ログ ファイルを循環させる頻度を秒単位で表わしたものです。

savelogs は、vinstall を使ってインストールできるアーカイブ プログラムです。このプログラムを利用すると、ログ ファイルの移動 (ファイル名の変更)、ログ ファイルのデータのフィルタリング処理、ログ ファイルのアーカイブ保存 (tar や gtar を利用)、アーカイブの圧縮 (gzip またはcompress を利用) を行うことができます。

ログ ファイルが正しく圧縮できたら、元のファイルは削除します。