#はじめに
ELB(ALB)はターゲットグループに含まれるWebサーバーの死活監視(ヘルスチェッ)をするため、頻繁(デフォルトだと30秒間隔)に対象のWebサーバーへアクセスをすることから、アクセスログにサービスとは関係のないログが大量に残されます。
また、Webサーバーから見た場合、クライアントアクセスは全てELBからのアクセスとなるため、本来のアクセス元の情報が記録されないことになります。
これは、ELBからのヘルスチェックアクセスを記録しないようにすると同時に、本来のアクセス元の情報をログに記録する場合のApache設定方法です。
#具体的な設定(Apache)
*.confファイルに次のログ設定を書きます。
個人的には、ログフォーマット設定はグローバル設定としてhttpd.confに記述し、
ログ出力先の設定は各バーチャルホスト.confに出力先ログファイルを指定するようにしています。
#前略~~~
<IfModule log_config_module>
SetEnvIf User-Agent "ELB-HealthChecker.*" nolog
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
#~~~後略
ログフォーマットに「"%{X-Forwarded-For}i」を記述することで、本来のアクセス元情報を含めます。
※logio_moduleの記述は必須ではありません。I/Oバイト数を記録する場合のみ記述します。
<VirtualHost *:80>
#前略~~~
CustomLog logs/hogehoge/access.log combined env=!nolog
#~~~後略
</VirtualHost>
VirtualHost セクション内で出力先ログファイルを指定します。
「env=!nolog」を指定することで、ユーザーエージェントが「ELB-HealthChecker.*」となっているものはログに出力されなくなります。
#おわりに
適切なログ出力を設定することでログの可読性を確保して利用状況の把握し、トラブルシューティングに備えましょう。