Linux で自宅サーバ [ Home Server Techncial ]

>>トップページに戻る

BBS 過去ログ No.0006に戻る

タイトル: Apacheの設定に付いて教えて下さい。
記事No: 1810
投稿日: 2004/04/12(Mon) 18:37
投稿者: tama
Apacheの「access_log」についての質問ですが、どうかよろしくお願いします。

現在、WWWサーバーを、http://aaa.netと、http://ユーザー名.aaa.netと言う感じで、バーチャルドメインでの構築に挑戦しています。
そこで「access_log」を各ドメイン(ユーザー)ごとに「ユーザー名.access_log」と言う感じに取得したいのですが、どうすればいいのでしょうか?
「access_log」のデフォルト場所は「/var/log/httpd/access_log」となってます。

またその場合、「httpd.conf」の「CustomLog」の記述はどのようになるのでしょうか?
<VirtualHost *>〜</VirtualHost>と言うところに、「CustomLog」の記述しなくてないけないのでしょうか?

現在は、<VirtualHost *>〜</VirtualHost>じゃないところで、「CustomLog /var/log/httpd/access_log combined env=!no_log」となってます。

「access_log」を各ドメイン(ユーザー)ごとに「ユーザー名.access_log」と言う感じに取得した場合、ログローテーションの設定で、「/etc/logrotate.d/apache」への記載はどのようにすればいいでしょうか?

お手数ですが、分かる方がいらしたら、御指導をどうかよろしくお願いします。

タイトル: やればすぐわかることでは?
記事No: 1811
投稿日: 2004/04/12(Mon) 20:42
投稿者: sg URL: http://tsuttayo.sytes.net/
NameVirtualHost 999.999.999.999

<VirtualHost 999.999.999.999:80>
ServerName VirtualDomainName
CustomLog /var/log/httpd/VirtualDomain_log combined
</VirtualHost>

たぶん、こんな感じでは?
http://www.hayagui.com/virtualhost.html
上記に書いてあるものと同じです。

また、ログローテーションは
http://www.atmarkit.co.jp/flinux/rensai/apache14/apache14a.html
上記にしっかり書いてあります。

どちらもgoogleで簡単に見つけられました。
(たとえば「apache VirtualHost log」「apache ログ ローテーション」など)

まず、ご自身で調べる努力をされることをお勧めします。

タイトル: どこかのサイトで下記の内容があったのですが…
記事No: 1837
投稿日: 2004/04/13(Tue) 23:19
投稿者: tama
sgさん、どうも御指導ありがとうございました。
一応、僕なりには調べて読んでみてるのですが、Linux初心者の僕には、意味の分からない事や、言葉や、内容がたくさんありまして、苦戦を強いられているしだいです。

初心者過ぎて、御迷惑や、お手数をお掛けしますが、どうかよろしくお願いします。

バーチャルホストの設定は
<VirtualHost*>
ServerAdmin ユーザー名@aaa.net
DocumentRoot /home/ユーザー名/public_html
ServerName zzzz.xxxx.ne.jp
ErrorLog /var/log/httpd/ユーザー名/error_log
CustomLog /var/log/httpd/ユーザー名/access_log combined env=!nolog
</VirtualHost>

と言う感じにしたのですが、
ログローテーションについて色々調べてみたんですが、下記の内容を「/etc/logrotate.d/apache」へ追記するようとだけ記載してましたが、追記することの意味も分からずに、書いてあるまま実行するのは、駄目かと思いまして、お手数ですが、もうひとつ質問させて下さい。

下記の追記の意味ってどういう意味なんでしょうか?

つづいてログローテーションの設定をする
設定ファイルは「/etc/logrotate.d/apache」
このファイルに以下を追記する

/var/log/httpd/ユーザー名/access_log {
missingok
postrotate
/usr/bin/killall -HUP httpd
endscript
}

/var/log/httpd/ユーザー名/error_log {
missingok
postrotate
/usr/bin/killall -HUP httpd
endscript
}

上記だと、「 postrotate」の後は、
/usr/bin/killall -HUP httpd
endscript
となってますが、
「/etc/logrotate.d/apache」に記載されてる、他のものは
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
となっていました。

これの違いについてもお手数ですが教えてもらえないでしょうか?

本当にお手数をお掛けしますが、御指導よろしくお願いします。

タイトル: Re: どこかのサイトで以下の内容が
記事No: 1839
投稿日: 2004/04/13(Tue) 23:47
投稿者: sg   <sg@tsuttayo.sytes.net>
URL: http://tsuttayo.sytes.net/
> バーチャルホストの設定は
> <VirtualHost*>
> ServerAdmin ユーザー名@aaa.net
> DocumentRoot /home/ユーザー名/public_html
> ServerName zzzz.xxxx.ne.jp
> ErrorLog /var/log/httpd/ユーザー名/error_log
> CustomLog /var/log/httpd/ユーザー名/access_log combined
> </VirtualHost>

私もこんな感じです。
設定後、アクセスしてみればログが生成されるのでわかりますよね。


> 下記の追記の意味ってどういう意味なんでしょうか?

これは言われてみれば...私も気にはしていませんでした。
それで自分のためにも詳しく調べてみました。

1./var/log/httpd/ユーザー名/access_log {
2. missingok
3. postrotate
4. /usr/bin/killall -HUP httpd
5. endscript
6.}

1行目と6行目でログを指定しているのはわかりますよね。
2行目のmissingokは「ログファイルが無い場合でも正常終了する」ことらしいです。
3,5行目はローテーション後に実行するスクリプトの開始と終了を表すようですね。

そして、問題の4行目なのですが、これがローテーション後に実行されるようです。
そして、
/usr/bin/killall -HUP httpd
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null`
実質的に上記2つは同じなのではないでしょうか?
(rootでコマンド入力してみるとわかりますよ)

上は、httpdデーモンを再起動する指定ですよね。
下は「cat /var/run/httpd.pid」を実行して、親プロセスのプロセスIDを取得し、その実行結果で「kill -HUP」しているので、やはりデーモンの再起動です。

なお、ローテーション後にデーモン再起動をしている理由は、ローテーション後にログ・ファイルが物理的に変わるので、それを認識させるため再起動しているのではないでしょうか。

タイトル: 早速のお返事ありとうございます
記事No: 1847
投稿日: 2004/04/14(Wed) 13:35
投稿者: tama
sgさん色々と詳しく説明していただきまして、本当に感謝してます。
なんとなくですが、理解できました。

> /usr/bin/killall -HUP httpd
> /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null`
> 実質的に上記2つは同じなのではないでしょうか?

どちらも同じ内容ということなので、/usr/bin/killall -HUP httpdの方を追記してみたいと思います。

ログファイルについてもう一つ質問させてください。
Apacheのログファイルは「/ver/log/httpd/」にあり、一週間単位で、ローテートされ、一週間単位でファイル名に1.2.3.4.…(access_log.1 access_log.2)と番号が付け加えられたログが保存され一ヶ月以上のものは削除される仕組みになっているとこの前購入したApacheの本に記載されていました。

僕の場合バーチャルホストのログは/var/log/httpd/ユーザー名/access_log になるのですが、この場合でも、ログは一ヶ月で削除されるのでしょうか?

それにログを毎日午前5時にローテートされ、一ヶ月じゃなく2週間で削除するような設定は出来るのでしょうか?

お手数ですがどうか宜しくお願いします。

タイトル: ここまで来ると私も...
記事No: 1852
投稿日: 2004/04/14(Wed) 16:01
投稿者: sg URL: http://tsuttayo.sytes.net/
私もログ設定はしてますがローテートの細かい設定をしていなかったので、勉強のため調べて見ました。以下はVine2.6r4で調査した内容なので、デストリの違いによっては違うかもしれません。

まず、以下の情報をもう一度確認してみました。
http://www.atmarkit.co.jp/flinux/rensai/apache14/apache14a.html
ローテートさせるソフトは2種類あると書いてあります。
そして、httpd.confに「TransferLog」の指定がないのでlogrotateでローテートしていることがわかります。
次にlogrotateは /etc/logrotate.conf で設定するようで、
---------------
weekly
rotate 4
include /etc/logrotate.d
(一部省略)
---------------
上記の記述があることから、やはり毎週ローテートされ、履歴は4世代まで残るようですね。

そして、各サービスの細かい設定は /etc/logrotate.d の中にあるファイルで管理しているようです。
今回の場合、/etc/logrotate.d/apacheですよね。
そして、その中にある設定値が実際のローテートで使われることになります。

そして、設定方法としては、/etc/logrotate.d/apacheほ次のような編集をしていくようです。
ここではデフォルト設定値の一部を抜粋して書きます。

/var/log/httpd/access_log {
missingok
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}

このままだと、指定していないパラメータは/etc/logrotate.confの値を利用するようです。
つまり、
/var/log/httpd/access_log {
# daily, weekly, monthlyのいずれかを指定
# rotate xx これで履歴の数を指定
missingok
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}

上記のように、/etc/logrotate.confへローテートのスケジュールと履歴回数を指定しておけば、/etc/logrotate.confの設定値を上書きするようです。

> それにログを毎日午前5時にローテートされ、一ヶ月じゃなく2週間で
> 削除するような設定は出来るのでしょうか?

/var/log/httpd/access_log {
daily
rotate 14
missingok
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}

こんな感じになるのではないだろうか?

タイトル: こちらの質問がまだでしたね
記事No: 1853
投稿日: 2004/04/14(Wed) 16:08
投稿者: sg URL: http://tsuttayo.sytes.net/
> 僕の場合バーチャルホストのログは/var/log/httpd/ユーザー
> 名/access_log になるのですが、この場合でも、ログは一ヶ月で
> 削除されるのでしょうか?

これは、apacheのログローテートを利用しているわけではないのですから
/etc/logrotate.d/apache
上記に記述をしなければ、ローテートはいっさいしないということだと思います。

今回の場合、バーチャル別にログをわけるので、
そのバーチャルの数だけ/etc/logrotate.d/apacheに記述しなくてはダメでしょうね。
したがって、たとえば「tamaさんのログは1ヶ月保存」「奥さんのログは2週間保存」といった設定も可能だということになりますね。

タイトル: ご丁寧な御指導、有り難うございました
記事No: 1854
投稿日: 2004/04/14(Wed) 18:00
投稿者: tama
sgさん色々と丁寧に御指導していただき、本当に有り難うございます。

> /etc/logrotate.d/apache
> 上記に記述をしなければ、ローテートはいっさいしないということだと思います。
> > 今回の場合、バーチャル別にログをわけるので、
> そのバーチャルの数だけ/etc/logrotate.d/apacheに記述しなくてはダメでしょうね。

とのことなので、早速 /etc/logrotate.d/apache へ

/var/log/httpd/ユーザー名/access_log {
daily
rotate 14
missingok
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}

/var/log/httpd/ユーザー名/error_log {
daily
rotate 14
missingok
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}

と付け加えてみました。

sgさんのおかげで、最近ずっと悩んでいた事の、1つ分かってスッキリしました。
本当に有り難うございました。

ここまで来たら、次は Analogか、Webalizerを使ったログ解析に挑戦してみたいと思います。
多分(必ず)また壁にブチ当り、色々と質問することがあるかと思いますが、お手数ですがどうか、御指導をよろしくお願いします。

本当に親切でご丁寧な御指導、有り難うございました。

▲ページの最上部に戻る

Copyright© Home Server Technical. All Right Reserved.
webmaster@miloweb.net