レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

Apacheのログの見方と変更方法

2013年4月4日 2015年5月15日
apache log

今回は、Apacheのログの見方と変更方法についてです。

Apacheのログは、ほとんど何も考えずに common あるいは、それに Referer(参照元URL) ,User-Agent(ユーザエージェント:使っているブラウザ情報など) を追加した combined のフォーマットを使っていませんか?

そのログの見方とフォーマットの変更方法について、簡単に解説してみます。

Apacheのログはどこで設定できるか?

Apacheのログの設定は、VirtualHost ディレクティブで設定できますが、もし、設定しない場合は、(ディレクティブ外の)デフォルトの設定が有効となります。
デフォルトの設定( /etc/httpd/conf/httpd.conf )では、以下のような感じで設定されていると思います。

...
# エラーログへ出力するデフォルトのレベルを指定します。
# --  debug, info, notice, warn, error, crit,alert, emerg が設定できます。
LogLevel warn
...
# エラーログのデフォルトの出力先パスを指定します。
ErrorLog logs/error_log
...
# アクセスログの出力フォーマットを定義します。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
...
# アクセスログのデフォルトの出力先パスと出力フォーマットを指定します。
CustomLog logs/access_log combined
...
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    # エラーログのデフォルトの出力先パスを指定します。
    ErrorLog logs/dummy-host.example.com-error_log
    # アクセスログのデフォルトの出力先パスと出力フォーマットを指定します。
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
...

LogLevel

[フォーマット] : LogLevel level

level には、以下の項目を設定することができます:

  • emerg : 緊急 – システムが利用できない
  • alert : 直ちに対処が必要
  • crit : 致命的な状態
  • error : エラー
  • warn : 警告
  • notice : 普通だが、重要な情報
  • info : 追加情報 “
  • debug : デバッグメッセージ

ErrorLog

[フォーマット] : ErrorLog file-path|syslog[:facility]

file-path には、エラーログの出力先ファイルパスを設定することができます。
また、syslogを指定した場合は、文字通りsyslogへ出力します。 この時、セキュリティ上ユーザ名を指定するために facility を用います。
パイプ’|’を指定した場合、パイプ’|’以降のプログラム(あるいはシェル)へログ情報を引き渡します。

# 以下のように指定すると httpd_errors へエラーログ情報を渡して、自らのエラーログ保存は行いません。
ErrorLog "|/usr/local/bin/httpd_errors" 

LogFormat

[フォーマット] : LogFormat format|nickname [nickname]

format には、カスタムログ書式で決まった形式でフォーマットを指定することができます。
format の代わりに既に設定されているLogFormatnicknameを指定することもできます。これは、Aliasesのような使い方ができます。
最後の[nickname]は、ここでフォーマット定義したものの名前を指定します。


[カスタムログ書式]
フォーマット文字列 説明
%% パーセント記号
%a リモート IP アドレス
%A ローカル IP アドレス
%B レスポンスのバイト数。HTTP ヘッダは除く。
%b レスポンスのバイト数。HTTP ヘッダは除く。CLF 書式。 すなわち、1 バイトも送られなかったときは 0 ではなく、 ‘-‘ になる
%{Foobar}C サーバに送られたリクエスト中のクッキー Foobar の値
%D リクエストを処理するのにかかった時間、マイクロ秒単位
%{FOOBAR}e 環境変数 FOOBAR の内容
%f ファイル名
%h リモートホスト
%H リクエストプロトコル
%{Foobar}i サーバに送られたリクエストの Foobar: ヘッダの内容
%l (identd からもし提供されていれば) リモートログ名。 これは mod_ident がサーバに存在して、 IdentityCheck ディレクティブが On に設定されていない限り、 - になります。
%m リクエストメソッド
%{Foobar}n 他のモジュールからのメモ Foobar の内容
%{Foobar}o 応答の Foobar: ヘッダの内容
%p リクエストを扱っているサーバの正式なポート
%P リクエストを扱った子プロセスのプロセス ID
%{format}P リクエストを扱ったワーカーのプロセス ID かスレッド ID。 format として有効な値は pid, tid, hextid です。hextid を使うには APR 1.2.0 以降が必要です。
%q 問い合せ文字列 (存在する場合は前に ? が追加される。 そうでない場合は空文字列)
%r リクエストの最初の行
%s ステータス。内部でリダイレクトされたリクエストは、元々の リクエストのステータス — 最後のステータスは %>s
%t リクエストを受付けた時刻。 CLF の時刻の書式 (標準の英語の書式)
%{format}t format で与えられた書式による時刻。format は strftime (3) の 書式である必要がある。(地域化されている可能性がある)
%T リクエストを扱うのにかかった時間、秒単位
%u リモートユーザ (認証によるもの。ステータス (%s) が 401 のときは意味がないものである可能性がある)
%U リクエストされた URL パス。クエリ文字列は含まない
%v リクエストを扱っているサーバの正式な ServerName
%V UseCanonicalName の設定によるサーバ名
%X 応答が完了したときの接続ステータス:
X = 応答が完了する前に接続が異常終了
+ = 応答が送られた後に接続を持続することが可能
- = 応答が送られた後に接続が切られる

(このディレクティブは Apache 1.3 の後期のバージョンでは %c に割り当てられて いましたが、これは歴史的に ssl が使用している %{var}c 構文と衝突していました。)

%I リクエストとヘッダを含む、受け取ったバイト数。 0 にはならない。 これを使用するためには mod_logio が必要
%O ヘッダを含む、送信したバイト数。0 にはならない。 これを使用するためには mod_logio が必要

(出典:http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html#formats)


CustomLog

[フォーマット] : CustomLog file|pipe format|nickname [env=[!]environment-variable]

file には、アクセスログの出力先ファイルパスを設定することができます。
パイプ’|’を指定した場合、パイプ’|’以降のプログラム(あるいはシェル)へログ情報を引き渡します。 nickname には、LogFormatで定義したフォーマットの名前を指定します。 もちろん、そのままログフォーマットを指定することもできますが、煩雑になるので、ほとんどの場合は、LogFormatで定義したフォーマットの名前を指定することが多いです。

env は、SetEnvIf ディレクティブで設定した情報を判断してログ情報を振り分けことができます。


# 拡張子gifを持つものを "gif-image" と定義します。
SetEnvIf Request_URI \.gif$ gif-image
# "gif-image" と定義されたアクセスは、"gif-requests.log" へ保存します。
CustomLog gif-requests.log common env=gif-image
# "gif-image" と定義されなかったアクセスは、"nongif-requests.log" へ保存します。
CustomLog nongif-requests.log common env=!gif-image 

よく使うcombinedフォーマットの見方

先のデフォルトの設定例にも出てきたよく使うcombinedフォーマットに見方について簡単に解説してみます。


[定義]

...
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
           |  |  |  |  |      |      |   |                |
           |  |  |  |  |      |      |   |                +-> サーバに送られたリクエストの User-Agent: ヘッダの内容。
           |  |  |  |  |      |      |   +-> サーバに送られたリクエストの Referer: ヘッダの内容。
           |  |  |  |  |      |      +-> レスポンスのバイト数。
           |  |  |  |  |      +-> 最後のステータス。
           |  |  |  |  +-> リクエストの最初の行。
           |  |  |  +-> リクエストを受付けた時刻。
           |  |  +-> 認証された場合のリモートユーザ名。そうでなければ、'-'。
           |  +-> identd が提供されていればリモートログ名。そうでなければ、'-'。
           +-> リモートホスト
...

[解説]

実際のログイメージです。

...
119.241.27.221 - - [04/Apr/2013:04:22:21 +0900] "GET /debian/network-config-debian.html HTTP/1.1" 200 16303 "http://www.google.co.jp/url?sa=..." "Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0"
           |  |  |  |                             |                                                |      |   |                                   |
           |  |  |  |                             |                                                |      |   |                                   +-> サーバに送られたリクエストの User-Agent: ヘッダの内容。
           |  |  |  |                             |                                                |      |   +-> サーバに送られたリクエストの Referer: ヘッダの内容。
           |  |  |  |                             |                                                |      +-> レスポンスのバイト数。
           |  |  |  |                             |                                                +-> 最後のステータス。
           |  |  |  |                             +-> リクエストの最初の行。
           |  |  |  +-> リクエストを受付けた時刻。
           |  |  +-> 認証された場合のリモートユーザ名。そうでなければ、'-'。
           |  +-> identd が提供されていればリモートログ名。そうでなければ、'-'。
           +-> リモートホスト
...

上記のログを解説すると、

  • 119.241.27.221から、日付が 2013-4-4 04:22:21 にアクセスがあった。
  • GET … でアクセスしているので、単純にウェブページ( /debian/network-config-debian.html )を参照している。(こが’POST’になるとフォームからの要求などになります。)
  • 200 で正常に読み込みできた。
  • “http://www.google.co.jp/url?sa=…(省略)” は、Googleの検索結果からページに訪れたことを意味する。
  • “Mozilla/5.0 …(省略)” は、ブラウザはFireFox が使われていることを意味する。

ということになります。

そもそもcombined (直訳:共用)とは、米国立スーパーコンピュータ応用研究所(NCSA)で開発されたウェブサーバー NCSA HTTPd と同じログフォーマットであることに由来します。 その NCSA HTTPd の コードベースが、独立プロジェクトである Apache プロジェクトに引き継がれ、開発が継続された経緯があります。ただし、現在のApacheのソースコードは、 Apache プロジェクトによって全く別物に書き換えられました。

ログフォーマットを変更する

先のデフォルトの設定例にも出てきたよく使うcombinedフォーマットを見やすいように変更してみます。また、ログ情報の追加、削除もやってみます。


[combinedログフォーマットの変更例]

...
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "[%{%Y-%m-%d %H:%M:%S}t]-[%D] %h:%P %u \"%r\" %>s \"%{Referer}i\" \"%{User-Agent}i\"" combined
           |                         |   |  |  |    |     |         |              | 
           |                         |   |  |  |    |     |         |              +-> サーバに送られたリクエストの User-Agent: ヘッダの内容。
           |                         |   |  |  |    |     |         +-> サーバに送られたリクエストの Referer: ヘッダの内容。
           |                         |   |  |  |    |     +-> 最後のステータス。
           |                         |   |  |  |    +-> リクエストの最初の行。
           |                         |   |  |  +-> 認証された場合のリモートユーザ名。そうでなければ、'-'。
           |                         |   |  +-> リクエストを扱っているサーバの正式なポート
           |                         |   +-> リモートホスト
           |                         +-> リクエストを処理するのにかかった時間、マイクロ秒単位
           +-> リクエストを受付けた時刻。
...

[変更したcombinedログフォーマットの出力例]

...
削除情報->     x                                                                                      xxxxx
119.241.27.221 - - [04/Apr/2013:04:22:21 +0900] "GET /debian/network-config-debian.html HTTP/1.1" 200 16303 "http://www.google.co.jp/url?sa=..." "Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0"
           +---- | -- | -------+                     |                                             |          |                                       |
                 | +--+        |                     |                                             +--+       |                                       |
                 + v  -------  v  ---------------v   v                                                v       v                                       v
[2013-04-04 04:22:21]-[3329] 119.241.27.221:1935 - "GET /debian/network-config-debian.html HTTP/1.1" 200 "http://www.google.co.jp/url?sa=..." "Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0"
追加情報->             oooo                 oooo
...

上記の例では、以下の情報が追加、削除されています。
削除された情報 : %l(identd が提供されていればリモートログ名) %b(レスポンスのバイト数)
追加された情報 : %D(リクエストを処理するのにかかった時間) %P(サーバのTCPポート番号)

また日本人にとって見やすい日付フォーマットへ変更し、
何時(どれくらい)、誰が、何を、結果、何処から、何を使って
という順序に変更してみました。


このように順を追っていけば、アクセスログ情報は、それほど難しい情報でもありません。また、アクセスログ情報を変更するのも簡単です。
おそらく必要最小限のログは、何時、誰が、何をアクセスして、結果どうなったか という情報ではないかと思います。 先の良く使う common,combined は、いずれもその情報を網羅していますので、それをあえて変更することは、ほとんどないかと思います。
ただし、先にも書いたようにログフォーマットを変更するのは簡単ですが、ログフォーマットを変更すると Webalyzerなどのアクセスログ解析ツールが使えなくなることがあります。
もし、それらのアクセスログ解析ツールを使用されている場合は、ログフォーマットを大胆に変更するのでなく、ログ情報を最後尾に追加する程度に収めていた方が無難かもしれません。
色々な影響が出てくることも考えられますので、ログフォーマットの変更は慎重に。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

apache でSSLを使ってみた(基本接続編)

Nginx でSSLを使ってみた(追記:SNIを含めてマルチドメインへの対応) では、nginxを使って簡単にSSL接続してみました。 今回は ...

httpd(apache)をインストールする(CentOS,ScientificLinux編)

さあ、ここまでに、phpとMySQLのインストールを行ってきました。 phpとMySQL、そして、httpd(apache(WEBサーバー)) ...

apache でSSLを使ってみた(クライアント認証編)

apache でSSLを使ってみた(基本接続編) では、SSL接続の基本的な設定について解説しました。 今回は、apacheでSSL接続を行い ...

Nginx でgzipを使うには

ここまでで、以下のようにapache からnginx への移行するための環境設定について解説してきました。 Nginx でリダイレクト ...

apacheをインストールする(Debian,Ubuntu編)

今回は、apache(WEBサーバー)をインストールしてみます。 CentOS,ScientificLinux では、httpd という名前の ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2392 [s]