NDW

アプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング eap/wildfly トラブルシューティング 基盤技術

Wildflyでリクエストをダンプする

投稿日:

Webアプリのデバッグや障害対応等で、Webアプリに対するリクエストやレスポンスのHTTPヘッダや内容を確認したい場合がある。
次のような場面ではクライアント側での確認ができないため、今回のようにAPサーバ側でキャプチャを行う。

  • ブラウザからのアクセスを想定したWebアプリの場合、ブラウザの開発ツール(F12)で通信内容をキャプチャできるが、REST API等のブラウザを介さないようなWebアプリへのアクセスについては、別の方法が必要である。
  • Windowsの場合はnetshやWireshark、Linuxの場合はtcpdump等のツールを利用できるが、開発環境のようにWebサーバがローカルにある場合はループバックアダプタの通信内容をキャプチャする必要があるが、これは一般的に難しい。
  • SSL/TLSが使用されている場合は、暗号化を解除するためにキャプチャツールに秘密鍵を設定する必要があり難易度が高い。
  • 本番や検証環境の場合、APサーバのフロントにロードバランサやリバースプロキシが配置されてる多段構成になることが多い。ブラウザとロードバランサやリバースプロキシとの通信は、ブラウザの開発ツールでは確認できるが、ロードバランサやリバースプロキシとAPサーバ間の通信はキャプチャできない。

RequestDumper

Wildfly(undertow)には既定で、リクエストとレスポンスをダンプする機能が含まれている。
次のように設定を追加して、Wildflyを再起動すれば利用可能である。
※下記はWildfly13の例

...
        <subsystem xmlns="urn:jboss:domain:undertow:6.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
            <buffer-cache name="default"/>
            <server name="default-server">
...
                <host name="default-host" alias="localhost">
...
                    <filter-ref name="request-dumper"/>
...
                </host>
            </server>
...
            <filters>
                <filter name="request-dumper" module="io.undertow.core"
                  class-name="io.undertow.server.handlers.RequestDumpingHandler"/>
            </filters>
...
        </subsystem>

ダンプの例

Webアプリにアクセスすると、次のようにリクエストとレスポンスのヘッダがログに出力されます。

20:48:06,415 INFO  [io.undertow.request.dump] (default task-1) 
----------------------------REQUEST---------------------------
               URI=/xxx/xxx.xhtml
 characterEncoding=null
     contentLength=-1
       contentType=null
            cookie=_ga=GA1.1.xxx.xxx
            header=Connection=keep-alive
            header=Accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
            header=Accept-Language=ja,en-US;q=0.9,en;q=0.8
            header=Accept-Encoding=gzip, deflate, br
            header=Cookie=_ga=GA1.1.xxx.xxx
            header=User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
            header=Upgrade-Insecure-Requests=1
            header=Host=xxx:1234
            locale=[ja, en_US, en]
            method=GET
          protocol=HTTP/1.1
       queryString=
        remoteAddr=/xxx:9876
        remoteHost=host1
            scheme=http
              host=xxx:1234
        serverPort=8080
          isSecure=false
--------------------------RESPONSE--------------------------
     contentLength=8244
       contentType=text/html;charset=UTF-8
            cookie=JSESSIONID=xxxxxx; domain=null; path=/xxx
            header=Connection=keep-alive
            header=Set-Cookie=JSESSIONID=xxxxxx; path=/xxx
            header=Content-Type=text/html;charset=UTF-8
            header=Content-Length=8244
            header=Date=Wed, 29 May 2019 11:48:06 GMT
            status=200

==============================================================


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, eap/wildfly, トラブルシューティング, 基盤技術


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ASP.NET Core: IHttpClientFactoryの単純サンプル

IHttpClientの使い方やサンプルの記事を書きましたが、後から見るとちょっと量が多いと感じました。 とりあえず動かしてみたい、概略を知りたい、急いでいる等の人向けに、もっと単純なサンプルを用意し …

OfficeアプリのコントロールはPowerShellかVBAか?

Windowsサーバの監視のお仕事での話です。 月次で各サーバのパフォーマンスモニタのログファイル(.blg)が送られてきます。このデータ群から、各種のグラフや表を作成して、PowerPointでそれ …

デジタル証明書のエンコードと拡張子の違い

デジタル証明書の種類と拡張子の理解が曖昧だったので整理してみました。 証明書や鍵そのものは基本的にはバイナリデータです。 これらのデータは、X.509やPKCSで仕様化されています。 X.509: 公 …

VULTR: SSH鍵の作成とVPSの構築

VULTRでVPSを作成し、Tera Term(SSH)で管理する方法について説明します。 概要 VULTRにおいて、次の前提でVPSを構築する手順を説明します。 “New York(NJ …

AzureAD B2Cユーザアカウントの操作方法(PowerShell)

Microsoft Graph APIを使ってAzureAD B2Cユーザアカウントを操作するようなアプリケーションを開発しています。 テストエビデンスの取得のために、Microsoft Graph …