ELBのログに不明なフィールド

表題の件について。

■ 環境

  • AWS Application Load Balancer

■ ALB

Application Load Balancerを使用しログをS3に出力させているのだが、そのログの解析処理の中で2018/03/02もしくは2018/03/03分のログから一部で解析に失敗している箇所を発見した。なぜだろう?とデバッグしていくと、どうやら今まではなかったフィールドがログに追加されていることが原因であるようであった。

※よくよくログファイルを確認したところ、3/1分からであった。

Application Load Balancer のアクセスログ
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-access-logs.html

上記のマニュアルによると、”アクセスログのエントリ“には20のフィールドが出力されるようになっている。しかし前述の日付あたりから21フィールドが出力されているようであった。21番目のフィールドに『0』、ものによっては『』が出力されている。件の解析処理の中では20フィールドの場合はELBと判別しELB用の処理を、それ以外の時はCloudFrontと判定しCloudFront用の処理を行うようになっていた為、ELBであるのにCloudFront用の処理に入っていた為に失敗しているようであった。判定処理はフィールド数だけではないのだが、CloudFront用の処理に入ってしまっていた。判定処理が甘いようである。ちなみにCloudFrontのログは26フィールドである。

判定処理を20フィールドもしくは21フィールドに変更し正しい結果を得られるようになった。

以上。

ELBのヘルスチェックログを出力しない

表題の通り。AWSのELBからのヘルスチェックのログが邪魔なので非表示にという設定メモ。

■ 環境

  • nginx
  • ELB
  • AWS

■ 削除したいログ

下記のようなログである。

10.0.1.154 - - [16/Nov/2016:19:04:21 +0900] "GET /health.txt HTTP/1.1" 200 3 "-" "ELB-HealthChecker/1.0"
10.0.2.20 - - [16/Nov/2016:19:04:21 +0900] "GET /health.txt HTTP/1.1" 200 3 "-" "ELB-HealthChecker/1.0"

■ nginx.conf

該当の設定ファイル内、”server”ディレクティブの所に下記を追記する。

  location = /health.txt {
    access_log off;
    break;
  }

これでログに出力されなくなった。

※ 2017/04/25 追記
コメントを頂いたので上記を編集した。

以上。

■ 関連

ELBのヘルスチェックをログに記載しない (Apache)