特定アクセスをログから除外
こんにちは、技術部のmsです。
今回は、特定のアクセスをログから除外・振り分けをする設定について、備忘も兼ねて書いていこうと思います。
WEBのアクセスログには、通常のWEBページへのアクセスの記録以外にも
ヘルスチェックログやbotアクセス、サーバによっては画像へのアクセスも記録されます。
そんなちょっとお邪魔なログたちを別のログファイルに振り分けたり、記録させないように設定することができます。
ログを眺めていて、余計なログが多いな…通常のアクセスだけ記録したいな… といった時に便利かと思います。
ログの種類によって方法はいくつかありますが、その中から2種類紹介します。
今回はapache2.4で設定していきます。
①特定のIPからのアクセスを記録しない
ログの振り分けにはSetEnvIfディレクティブを使います。
アクセス元IPが決まったものであれば、「Remote_Addr」パラメータを使って設定することが可能です。
例えば、「192.168.0.3」からのアクセスは記録したくない場合は、
単純にIPを指定してあげれば良いです。
SetEnvIf Remote_Addr "192.168.0.3" nolog
「nolog」と不一致なログ(ここでは”192.168.0.3″に該当しないログ)を記録したいので、「env=!nolog」をCustomLogディレクティブに忘れずに追記しておきます。
こんな感じです。
CustomLog /var/log/httpd/access_log combined env=!nolog
完了したら、設定ファイルを保存し、apacheを再起動させて設定を反映させます。
②特定のユーザエージェントからのアクセスログを振り分ける
監視システム”Zabbix”からのアクセスログを、通常のアクセスログに出力するのではなく
別のログファイルに振り分けてみます。
こちら検証サーバですが、外部からのアクセスがほとんどないのに
定期的に接続してくる監視システム”Zabbix”からのアクセスログで埋まってしまっています。
#tail /var/log/httpd/example.ne.jp.access_log 192.168.0.0 - - [14/Jul/2019:08:27:31 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:08:29:33 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:08:29:33 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:08:31:36 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:08:31:36 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:08:33:39 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:08:33:39 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:08:35:46 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:08:35:46 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix"
この場合は、「User-Agent」パラメータを設定します。名前のままですね。
SetEnvIf User-Agent "Zabbix" zabbixlog nolog
上記のように、ここでは「”Zabbix”」のあとに変数「zabbixlog」を入れておきます。
CustomLogディレクティブで下記のように指定します。
CustomLog /var/log/httpd/zabbix.access_log combined env=zabbixlog
加えて、通常のアクセスログの方に「env=!nolog(変数に該当しないログ)」を追記しておきます。
CustomLog /var/log/httpd/access_log combined env=!nolog
完了したら先ほどと同様、ファイルを保存し、apacheを再起動させて設定を反映させます。
これで下記のように振り分けされるようになりました!
#tail /var/log/httpd/access_log 192.168.0.0 - - [14/Jul/2019:09:48:42 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:48:42 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:50:45 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:50:45 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:52:50 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:52:50 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:54:55 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:54:55 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 203.0.113.10 - - [14/Jul/2019:09:58:04 +0900] "GET / HTTP/1.1" 200 9 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" 203.0.113.10 - - [14/Jul/2019:09:58:05 +0900] "GET /favicon.ico HTTP/1.1" 404 209 "http://example.ne.jp/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
#tail /var/log/httpd/zabbix.access_log 192.168.0.0 - - [14/Jul/2019:09:56:58 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:56:58 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:59:03 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix" 192.168.0.0 - - [14/Jul/2019:09:59:03 +0900] "GET / HTTP/1.1" 200 9 "-" "Zabbix"
SetEnvIfディレクティブ、様々な用途に応用が利きそうです。
ちなみに今回はapacheでの設定でしたが、もちろんnginxでもログの振り分け設定は可能です。
それもまたいつか紹介できたら…