Jan 04, 2009

Web共有機能のログをローテーションさせよう

Mac OS X10.5対応


 Mac OS Xに標準で装備されている「Web共有機能」は、簡単にMacを世界標準クラスのWebサーバーにしてくれる便利な機能です。html, cgi, phpへの受け渡しなどはもちろんのこと、サーバーを運営する上で重要な情報である「どんな人がアクセスしてくるのか」、「どんなエラーが発生したのか」もしっかり管理してくれています。

 この「どんな人がアクセスしてくるのか」、「どんなエラーが発生したのか」は、access.logやerror.logとして記録されています。これらのlogファイルは、サーバーへのアクセスが増えれば増えるほど、たくさんの情報が書き込まれていくことになります。アクセスの多いサーバーならあっという間に数MB、数GBというサイズになってしまうかもしれません。ログファイルの肥大化は、パフォーマンスやディスク容量に影響しますので避けたいなぁ、と思うこともあるわけです。Mac OS X10.3(Panther)や10.4(Tiger)では、肥大化が抑えられるよう、自動的にlogファイルの「ローテーションと圧縮」がされるようになっていました。しかし、Mac OS X10.5(Leopard)では、自動的には行われないようです。ここではMac OS X10.5(Leopard)の「Web共有機能」ログが、自動的に「ローテーションと圧縮」されるようにする方法を考えていきます。

 「Web共有機能」のaccess.logやerror.logは、ユーティリティフォルダにある「コンソール」というアプリケーションを使うことで、手軽に確認することができます。access.logはいつ、どこの誰が、どのページにアクセスをしてきたかなどが記録されているものです。error.logはアクセスの際に、どんなエラーが発生したかが記録されているものです。ログは定期的に解析をすることで、サーバー上の問題点や、不正なアクセス、攻撃、パフォーマンス向上などのための大切な情報源として役立ちます。

console_icon

access.logやerror.logはユーティリティフォルダにあるコンソールで確認するのが簡単。

ログ例
左上の「ログリストを表示」アイコンを押すとログリストが表示される。
Web共有機能のログは「ログファイル」の中。/var/log/apache2のところ。

ログの例
誰が、いつ、どういうアクセスを、どのファイルに対して行い、どんな結果になったかが記載されている。

 このログファイル、アクセスが増えれば増えるほど、どんどん記述されていくため、放っておくとどんどんファイルサイズが大きくなってしまいます。これではサーバーへの負担が増えますので、通常、ある程度のサイズや大きさになったら自動的にローテーションするように設定しておくようにします。Mac OS X10.3や10.4では、はじめからこうした設定がされており、ファイルサイズが100KBに到達すると、自動的に切り離され、圧縮され、最大5履歴分まで保存、ローテーションされるようになっています。

肥大化ログ
うっかりすると数GBになっていることも...。

 しかし、Mac OS X10.5(Leopard)では、こうした設定がされていないようで、知らずにうっかり放っておくと、ログファイルが目を疑うほどのファイルサイズに肥大化してしまっていることがあります。ログのローテーションを実現するためにはいくつかの方法がありますが、ここでは、newsyslog.confに記述を加え、ファイルサイズが100KBに到達した時、切り離し、圧縮、最大5履歴分までを保存、ローテーションするようにするように設定をいっていきます。



必要なもの

coteditorアイコン

  • Mac(Mac OS X10.5を搭載しているもの。Mac OS X10.3や10.4ではこの作業は必要ありません。)
  • CotEditor(ANYiMacさん:自作ソフト:CotEditor)
  • やる気
  • オープンソースコミュニティへの感謝 サーバー管理への適当なマメさ
  • インターネットを構築してくれた方々への畏敬の念



ログファイルのバックアップ

 万が一に備えて、ログファイルをバックアップしておきます。特にたいしたログがなかったり、いまあるログがなくなっても困らないような場合は、この作業はとばしてしまってかまいません。

  1. Finderのメニュー「移動」から、「フォルダへ移動...」を実行します。
    フォルダへ移動


  2. フォルダへ移動ウインドウに以下のように入力をして移動を実行します。

    /var/log/apache2/


    フォルダへ移動ウィンドウ


  3. apache2フォルダが開きます。このなかの「access.log」と「error.log」をどこかにバックアップしておきます。
    apache2フォルダ内
    ファイルがあるので、これを...


    ログのバックアップ
    どこかに用意しておいたログバックアップ用のフォルダにドラッグアンドドロップすればコピーされます。アクセス権の関係でドラッグアンドドロップだけでちゃんとコピーされます。


  4. こんな具合にバックアップされたらバックアップ作業は完了です。
    バックアップ完了



ローテーションと圧縮のための設定

 それでは、access.logやerror.logが「ローテーションと圧縮」されるようにするための設定をおこないます。ログのローテションは、Web共有(Apache2)自身に行わせる方法もありますが、ここではMac OS Xのログ管理をしてくれているnewsyslog.confファイルを編集する方法で進みます。

  1. Finderのメニュー「移動」から、「フォルダへ移動...」を実行します。
    フォルダへ移動


  2. フォルダへ移動ウインドウに以下のように入力をして移動を実行します。

    /etc/

    etcに移動


  3. etcフォルダが開きます。
    etcフォルダ


  4. この中から「newsyslog.conf」という名前のファイルを探します。
    syslogfile


  5. 万が一に備え、このファイルをどこかにバックアップしておきましょう。
    syslogbackup
    めんどくさいのですけどやっぱりちゃんとやっておいた方が安心です。
    どこかに適当なバックアップ用の場所を作っておき、そこにドラッグアンドドロップします。



  6. 無事バックアップが完了したら、/etcフォルダの中の「newsyslog.conf」ファイルをCotEditorで開きます。
    coteditorアイコン

    coteditorで開く
    CotEditorにドラッグアンドドロップすれば簡単に開けます。


  7. newsysylog.confファイルが開くと以下のような記述が表示されるはずです。
    newsyslogconfの内容
    ココの一番下の行にWeb共有のログがローテーションされるようにするための記述を追記していきます。


  8. 一番下の行にカーソルを移動させ、以下の記述を追加します。なお、追記の際、CotEditorから警告が出ますが、OKを押して対応します。_logと640の間、640と5の間、5と100の間、100と*の間、*とJの間、Jと/varの間にはスペースを入れます。

    /var/log/apache2/access_log640 5 100* J /var/run/httpd.pid
    /var/log/apache2/error_log640 5 100* J /var/run/httpd.pid


    coteditorからの警告
    追記しようとすると警告が出ますが「編集を許可」を押して、先に進みます。




  9. 以下のように追記されていればオッケーです。
    追記の内容
    一応、一番最後に空白の一行を加えておいた方がよいかもしれません。


  10. 追記ができたら、保存を実行します。実行の際はMacの管理者パスワードを聞かれますので対応します。
    syslogconf保存
    保存を実行すると...


    Macの管理者パスワードを聞かれますので、管理者名とパスワードを入力して対応します。


  11. 無事に保存できれば、すべての作業は完了です。ごくろうさまでした。



動作確認

 実際にログがローテション、圧縮されるかを確認しておきます。ただし、確認するにはアクセスログが100KBに達するまでログを大きくさせないといけないため、実際のところ動作確認は地味にリロードを続けるか、運用しながら動作を確認するしかないと思われます。アクセスの多いサーバーならあっという間なのですが、それほどではない場合は、ゆっくりと構えて待ちましょう。

  1. newsyslog.confに記述を追記した後、ログが十分大きくなった(今回の設定では100KB越え)頃合いにコンソールからログファイルを確認してみます。
    コンソールのみにアイコン


  2. ログが正しくローテーションされていると、以下のようにaccess.logやerror.logが、access_log.0.bz2などのような名前でリストされています。
    ローテション後
    一定のサイズに達すると自動的にローテーション、bzip2形式で圧縮保存されていきます。



おまけ:newsyslogの記述について

 newsyslogの記述についてです。その内訳は以下のようになるそうです。

記述の解説

 PIDファイルの指定はしておかないとローテションがうまくいかないようです。これはログファイルのサイズが100KBに到達し、ログのローテーションが行われても、「Web共有機能」はその作業が終了したことにが気がつかず「あれ?私が記述しないといけないログファイルはどこに行ったの?」な状態になるからのようです。なので間違えないようにPIDファイルの指定のところも入力しておきましょう。もし必要があればPIDファイルの指定の後ろにスペースを入れ、さらに30と追記し、シグナルの指定もしておくとよいかもしれません。

より細かい設定の仕方などはこちらのサイトが参考になりました。
ログ管理:〜syslogとその周辺:応用編syslogについて:ログのローテート



それではお疲れ様でした。




Trackback

No Trackbacks

Track from Your Website

http://earlybirds.ddo.jp/namahage/inegalog/trackback/tb.php?id=64
(言及リンクのないトラックバックは無視されます)

Comments in Forum

1 Comment