サイトアイコン 協栄情報ブログ

JbossのアクセスログにALBヘルスチェック記録を除外する


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

困っていた内容

先日、AWS環境でRHEL8.7にJBoss EAP7.2をインストールしてみる より、Jboss環境を構築完了しましたが、
高可用性のために、AWSのApplication Load Balancer(ALB)を使ってWeb-App-DBの3層構成を設定しました。
ALBからヘルスチェック処理でJbossのアクセスログに大量のヘルスチェックのログを記録されてしまいました。

解決策

今回はJbossのアクセスログにALBヘルスチェック記録を除外する方法を説明します。

Jbossアクセスログ出力有効化

以下のコマンドを実行して、アクセスログの出力を有効化する

[ec2-user@ip-172-31-47-152 ~]$ sudo /opt/EAP-7.2.0/bin/jboss-cli.sh --connect
[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=record-request-start-time,value=true)
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}

送信元IPアドレス表示

ALBを経由した場合、JbossアクセスログデフォルトALBのIPアドレスを表示します。
以下のコマンドを実行して、送信元IPアドレス取得できることに設定します。

[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/host=default-host/setting=access-log:add(pattern="%{i,X-Forwarded-For} %h %l %u %t \"%r\" %s %b \"%{i,Referer}\" \"%{i,User-Agent}\" Cookie: \"%{i,COOKIE}\" Set-Cookie: \"%{o,SET-COOKIE}\" SessionID: %S Thread: \"%I\" TimeTaken: %T" )
{
    "outcome" => "success",
    "response-headers" => {"process-state" => "reload-required"}
}

関係ないログが大量に残っている

下記のように、アクセスログに大量なヘルスチェックのログを記録されてしまいました。

[ec2-user@ip-172-31-47-152 /]$ cat /opt/EAP-7.2.0/standalone/log/access_log.log
- 172.31.41.120 - - [12/Oct/2023:08:53:15 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0" ...
- 172.31.18.19 - - [12/Oct/2023:08:53:19 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0" ...
- 172.31.41.120 - - [12/Oct/2023:08:53:45 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0"...
- 172.31.18.19 - - [12/Oct/2023:08:53:49 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0" ...
- 172.31.41.120 - - [12/Oct/2023:08:54:15 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0"...
- 172.31.18.19 - - [12/Oct/2023:08:54:19 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0"...
- 172.31.41.120 - - [12/Oct/2023:08:54:45 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0"...
- 172.31.18.19 - - [12/Oct/2023:08:54:49 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0" ...
- 172.31.41.120 - - [12/Oct/2023:08:55:15 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0"...
- 172.31.18.19 - - [12/Oct/2023:08:55:19 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0" ...
- 172.31.41.120 - - [12/Oct/2023:08:55:45 +0000] "GET / HTTP/1.1" 200 1517 "-" "ELB-HealthChecker/2.0"...

ヘルスチェックログを除外

下記の判断条件を追加して、ELBのヘルスチェックのログを出力させないように設定します
not equals(%{i,User-Agent}, ELB-HealthChecker/2.0)

具体的は以下のコマンドを実行して、

[standalone@localhost:9990 /] /subsystem=undertow/server=default-server/host=default-host/setting=access-log:write-attribute(name=predicate, value="not equals(%{i,User-Agent}, ELB-HealthChecker/2.0)")
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}

最後に

以上
参考になれば幸いです。

モバイルバージョンを終了