• ベストアンサー

Apacheで特定のログだけ抽出したい。

LinuxにてApache2を運用しているのですが、特定の条件のログのみ抽出できないものかと悩んでいます。 特定の条件とは、例えばUser-Agentが"Mozilla"で、 ステータスコードが"206"、尚且つURIに".gif"を含む。 と言う様な複数の条件を全てクリアしたアクセスのみロギングしたいのです。 SetEnvIfを使おうかと思ったのですがアンド条件の場合の方法が 思いつきませんでした。 外部のスクリプト等を使えば簡単だとは思うのですが、 httpd.confの設定のみで行なえないものでしょうか? どうかアドバイスをよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.2

SetEnvIfディレクティブとCustomLogディレクティブで行うとしているわけですよね? しかし、OR条件は作れますが、AND条件を作る事は出来ません。 AND条件を作りたいのでしたら、参考URLにある方のようにSetEnvIfディレクティブを提供しているmod_setenvif.cを修正(hack)し機能拡張する方法もあります。 パッチもありますがApache 1.3.28に対してのものようです。 ソース修正を行える力があるのでしたら、Apache2の方にも有効かどうかしりませんが参考にしてディレクティブの追加を考えてみるのも1つの方法かもしれません。

参考URL:
http://www.nminoru.jp/~nminoru/unix/apache.html#setenvif2
samisan
質問者

お礼

なるほど、直接モジュールを編集しちゃう訳ですね。 紹介していただいたページを参考にモジュールを変更してみようと思います。 ありがとうございました!

その他の回答 (1)

  • mcq
  • ベストアンサー率48% (45/93)
回答No.1

httpd.confのディレクティブには詳しくないのですが、 ご要望の手法はかなり例外的な使い方だと思います。 もし宜しければ、「httpd.confの設定のみで行ないたい」理由を教えていただけませんか? その方が、より適切な回答を得られると思います。

関連するQ&A

  • 【apache】特定のログだけ取りたくない

    こんばんわ。 お世話になっております。 Cent 5.2 Apache 2.2.3 suEXEC環境です。 access_log error_log の事なんですが、 特定の拡張子ではなく、特定のファイルのログを取りたくないのですが、可能でしょうか? 拡張子の場合は、 SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(js)|(swf)|(css)$" nolog SetEnvIf Remote_Addr 192.168.1 no_log こんな感じで色々とaccess_logの方は取得しないようにしてます。 今回は、 Directory index forbidden by Options directive: /var/www/httpdocs/21/ mod_mime_magic: can't read Premature end of script headers: log.cgi 以下略 ↑error_logの一部です。 indexがないですが、cgi(動的ページ)なのでエラーは特に出てません。 mod_mime_magicは使ってません。 Premature end of script headersはsuEXEC環境なので色々と・・・ で、error_log達は表示されてしまうのですが、 このようなエラーログを表示させなくと言うのは出来るのでしょうか? 宜しくお願いします。

  • Apacheが出すログでホスト名を取得したい

    Apacheの出すログでホスト名を取得したいのです。 61.207.000.00 - - [20/Jun/2004:16:07:56 +0900] "GET /web HTTP/1.1" 401 476 アクセスしたらこのようなアクセスログになりますが、このipの部分にホスト名を記録させたいのです。 バージョンは Apache/1.3.27 Linuxで運用しています。 httpd.conf のどの部分を触ればいいのか、 ご存知の方、よろしくお願いします。

  • Apache/2.0.54 (Debian GNU/Linux)でローカルホストからのアクセスを記録しない設定

    お世話になります。当方玄箱でDebian3.1(Sarge)でApache/2.0.54 (Debian GNU/Linux) 使用中です。 特定のローカルホストからのアクセスと画像ファイルへのアクセスを記録しない設定をするべく。 /etc/apache/apache2.conf # The following directives define some format nicknames for use with # a CustomLog directive (see below). 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 /var/log/apache2/access.log combined env=!no_log SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)" no_log SetEnvIf Remote_Addr 127.0.0.1 no_log SetEnvIf Remote_Addr 192.168.1. no_lo ↑の4行を追加し /etc/init.d/apache2 restart してローカルからHP覗きaccess.logを確認するとしっかりlogを取っています。 どうすれば設定が有効になるのでしょうか?

  • Apacheを複数のhttpd.confを用いてる場合の再起動

    Apacheを複数のhttpd.confファイルを用いて運用している場合、 個々のhttpd.confを指定してのApache再起動は可能なのでしょうか? 試しに、httpd_1.confとhttpd_2.confを用いて実施してみましたけど、 エラーになってしまいました。 手順を踏まえての詳細を以下に示します。 1./usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd_1.conf コマンドでApacheを起動。 2./usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd_2.conf コマンドでApacheを起動。 3.その後Apacheを停止したらプロセスが残ってしまいました。

  • Apacheのaccess.logについて

    Windows版のApacheを使ってサーバを立ち上げています。 access.logの情報を利用したいんですが、どうやらうまくログを取れていないようです。 例えば、11月26日のアクセスログを見たいのに、access.logを開いて見たら11月7日のデータしかないんです。 httpd.confでは、次のように設定しています。 LogFormat "%T %h %l %u %t \"%r\" %>s %b \"%{Referer}i\ \"%{User-Agent}i\"" combined LogFormat "%T %h %l %u %t \"%r\" %>s %b" common CustomLog log/access.log common Apacheがログを記録するのは随時ではありませんか? Linuxなら、cronとか使えばいいんですが、Windowsでは、どうすれば、当日のログを取れるんですか? よろしくお願いします。

  • apache2のログの分け方について

    自宅サーバーでBBSのCGIを動かしています。 VineLinux3.2+Apache2 長すぎるリクエストのログを残さないように LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined とhttpd.confに記入してうまく機能しています。 そのほかに不正なアクセス(主に海外から)をドメインやIPアドレスで 制限しているのですが、ログに403エラーがたくさん残ってしまいます。 上記の方法で"414"の部分を"403"に書き換えても機能せず 大量のログが残ってしまいます。 ログを残さないようにするために何か良い方法はないでしょうか?

  • Apacheの起動について・・・

    今回初めてLinuxに挑戦してます。 RedHat Linux 7.2をWebサーバのとしてインストールしました。 Apache_1.3.20も一緒にインストールされました。 今回はApache_1.3.27を使用したいので、HPよりダウンロードして、 インストールを行いました。 インストールはなんとか上手くいき起動も可能なのですが、 /sbin/chkconfig --level 35 httpd on のコマンドで自動起動にする対象のApacheは1.3.27のほうにしたいのです。 ※現状では、1.3.20のほうが上がります。 インストール済みのApache設定は、/etc/httpd/conf/ 後からインストールしたApache設定は、/usr/local/apache/conf/ のhttpd.confになるようです。 Linuxの起動時にApache_1.3.27が自動で起動されるように 設定したいのですが、どうにもわかりません。 ネットで検索して、 「自動起動するために起動スクリプトを /etc/init.d または /etc/rc.d/init.d にコピーします」 とまでは解ったのですが、ファイルをそのままコピーしていいのか、どうすればいいのか検討がつきません。 どなたか教えて下さい。

  • Apache-Tomcatの連携設定

    Apache-Tomcatの連携をしたいと思いhttpd.conf及びhttpd-proxy.conf に 以下設定を行いました。 ただし、画像へのリクエストはApacheで処理したい思い ProxyPass /test/img ! という一文を加えてあります。この設定でWindowsのサービス一覧の画面からApacheを 再起動したところ 「ローカルコンピューターでApache2.2を開始できませんでした。~」と エラーが出てApacheを起動できませんでした。しかし、上記の一文を除去したところ 起動しました。同様の記述をLinuxにインストールしたApacheには 記述しておりますが想定通り画像のリクエスとはApacheで処理されております。 Windowsではなぜエラーになるのかおわかりになりますでしょうか。 【httpd.conf】 Include conf/extra/httpd-proxy.conf 【httpd-proxy.conf】 <Location /test/>   ProxyPass /test/img !   ProxyPass ajp://localhost:8009/test/ </Location>

    • ベストアンサー
    • Java
  • httpdが起動しません (apache)

    はじめまして、yoshiと申します。(LINUX初心者です) apacheをインストールしてhttpdの起動を試みたのですが、[失敗]とでました。 httpd.confも設定しなおしたのですが、ダメでした。 使っているOSはFedora4です。 どなたか知っている人がいましたらご協力お願いします。

  • 特定のパラメータを含む時、出力ログを分けたい

    リクエストに、「id_num」というパラメータが含まれていた時 出力ログを分けたいのですが、うまく出力されません。 #アクセスログ(例) 111.222.333.4449 - - [01/Jul/2009:12:34:56 +0900] "GET /index.php?a=st&t=menu&id_num=dq001&ui=s5650 HTTP/1.1" 200 125 "-" "DoCoMo/2.0 P905i(c100;TB;W24H15)" "xxxxxx" "-" "-" http.confは、以下のように設定を行っています。 #リクエストに「id_num」が含まれているもの抽出 SetEnvIf Request_URI "id_num" idnumlog #標準ログ(PCアクセス) CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.d/pc/pc.%Y%m%d 86400 540" combinedpc #「id_num」が含まれているログのみ(モバイルアクセス) CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/site_id.d/mob/mob.%Y%m%d 86400 540" combinedmobile env=idnumlog SetEnvIf Request_URIの書き方が悪いのでしょうか? よろしくお願い致します。