Azure Application GatewayのアクセスログをLog Analyticsで確認する

2019-07-15Application Gateway,Azure,Log Analytics

Azure Application Gateway(アプリケーションゲートウェイ)はWebトラフィックを負荷分散を行うAzureサービスです。
アプリケーションゲートウェイのアクセスログは出力して見る事が出来ます。

アクセスログをAzure Monitorログ(Log Analytics)に転送することにより確認することが出来ます。
Azure Monitorログ(Log Analytics)への転送設定はアプリケーションゲートウェイの診断設定で実施します。

今回はアプリケーションゲートウェイのログ概要纏め、診断設定、Azure Monitorログ(Log Analytics)でのログ検索までをやってみました。
アプリケーションゲートウェイに割り当てたAzure Web アプリケーション ファイアウォール(WAF)ログについても確認してみました。

アプリケーションゲートウェイの作成手順はこちらに纏めています。併せて見て頂けると大変有難いです。

※2022年7月にv2を含むように加筆修正を更新しました。

スポンサーリンク

Application Gateway(アプリケーションゲートウェイ)で取得出来るログ

アプリケーションゲートウェイではアクセスログはもちろんですが、それ以外のログも取得する事が出来ます。

Azure Application Gateway データの監視のリファレンス

Activity Log(アクテビティログ)

診断設定した規定でアクテビティログが収集されます。

Activity Log
Activitylog 対象のアプリケーションゲートウェイのリソース操作等に関するアクテビティログがすべて収集されます。

Log Analyticsワークスペース画面サンプル(Cerateを条件に検索)

Azure Diagnostics(アプリケーションゲートウェイのアクセス関連ログ)

アプリケーションゲートウェイのアクセスに関するログが収集されます。
v1ではメトリックに関する情報も収取されます。

Azure Diagnostics
ApplicationGatewayAccessLog アプリケーションゲートウェイへのアクセスログ。
アクセス時間や呼び出し元の IP、要求されたURL、ステータスコード、バックエンド転送先等トラフィック処理に関する内容が記録されます。
ApplicationGatewayPerformanceLog v1のみで利用されます。v2ではAllMetricsに含まれます。
リソースのパフォーマンス状況だけではなく、バックエンドの正常性等の情報も含まれます。
ApplicationGatewayFirewallLog WAFに関するログ。
トラフィックの中でWAFルールにマッチしたやブロックされた内容のログが出力されます。

Log Analyticsワークスペース画面サンプル(ApplicationGatewayAccessLogのサンプル)

AllMetrics(メトリック)

アプリケーションゲートウェイのパフォーマンスに関する情報が取得されます。
WEBサイトの応答速度が遅い場合などに確認するとバックエンドから応答速度やトラフィックサイズ等の切り分けする事が出来ます。

Azure Application Gateway データの監視のリファレンス(Application Gateway V2 のメトリック)

All Metrics
AllMetrics パフォーマンス情報(処理された要求の総数、スループット (バイト単位)、応答速度等)が確認出来ます。
パフォーマンス情報にはバックエンド、フロントエンドそれぞれの通信に関する内容が含まれます。
バックエンド正常性等の情報メトリックに含まれます。

Log Analyticsワークスペース画面サンプル(抜粋)

Application Gateway(アプリケーションゲートウェイ)のアクセスログ出力項目

アクセスログの抜粋です。
詳細内容は公式サイトに記述がありますが、詳細な情報が取得出来る事が分かります。

Application Gateway のバックエンドの正常性および診断ログ(Application Gateway Standard および WAF SKU (v1) の場合)
Application Gateway と WAF v2 SKU の場合

項目名 実際に取得される値 説明
TimeGenerated 2022/7/15 5:17:00.000 ログの時間
Category ApplicationGatewayAccessLog ログ種別
Resource APGW-TEST アプリケーションゲートウェイ名(リソース名)
host_s www.tama-negi.com
XXX.XXX.XXX.XXX(フロントエンドのIP)
アクセスされたホスト名もしくはIPアドレス
listenerName_s APGW-TEST-Listener 受信したリスナー名
clientIP_s XXX.XXX.XXX.XXX(アクセス元のIPアドレス) アクセス元のIPアドレス
serverRouted_s 10.0.2.5:80 トラフィック転送先のIPアドレスとポート番号
requestUri_s / アクセスパス
userAgent_s Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36 ユーザーエージェント情報
httpMethod_s GET HTTPアクセスメソッド
httpStatus_d 200 応答のHTTPステータスコード
timeTaken_d 0.004  フロントエンド側の応答時間
serverResponseLatency_s 0.004 バックエンド側の応答時間
ruleName_s APGW-TEST-Rule アプリケーションゲートウェイのルール名
backendPoolName_s  APGW-TEST-BackendPool アプリケーションゲートウェイのバックエンドプール名
backendSettingName_s APGW-TEST-Backend アプリケーションゲートウェイのバックエンド設定名

※クエリ実行結果はproject句を利用して表示項目を抜粋てしています。

今回利用したアプリケーションゲートウェイはこちらで構築したものを利用しています。

 

Application Gateway(アプリケーションゲートウェイ)の診断設定を使ってログ取得

アプリケーションゲートウェイの診断設定を使ってAzure Monitorログ(Log Analyticsワークスペース)へログ転送設定します。

※Log Analyticsワークスペースはアプリケーションゲートウェイと同じ地域のもの使用します。
※ログ転送先にはストレージアカウント、イベントハブなども利用可能です。

診断設定
アプリケーションゲートウェイのリソースメニューで診断設定を選択します。
診断設定を追加するを選択します。

診断設定では転送先、転送するログの種別を設定します。
今回はログのカテゴリはすべてを選択します。
Log Analyticsワークスペースへの送信にチェックを入れます。
転送先のLog Analyticsワークスペースを選択します。

※転送開始まで5分~10分程度かかります。(メトリックの方が収集開始まで若干時間かかるようです。)

Application Gateway(アプリケーションゲートウェイ)のアクセスログをクエリ(KQLで確認)

アクセスログを確認してみます。

アクセスログを検索

Log Analyticsワークスペースでクエリ(KQL)を使って検索します。

診断設定

アプリケーションゲートウェイのリソースメニューでログをクリックします。

診断設定で指定したLog Analyticsワークスペースが表示されます。
クエリ入力欄に入力する事でログ検索ができます。

アクセスログはAzureDiagnosticsに含まれます。
カテゴリがApplicationGatewayAccessLogのログがアクセスログになります。where句でアクセスログのみに絞ります。
AzureDiagnostics
| where Category == “ApplicationGatewayAccessLog"
実行するとログが出力されます。

クエリ実行結果はCSVとして出力できる

クエリ実行結果はCSV形式で出力出来ます。

診断設定
クエリ実行結果のログはエクスポート使ってCSV等へのエクスポートが出来ます。

アクセスログを時間指定して検索する

時間指定を入れない場合の検索時間は24時間になります。
明示的に指定したい場合はago(時間)を使います。

AzureDiagnostics
| where TimeGenerated > ago(24h)
| where Category == “ApplicationGatewayAccessLog"

この時間帯と言う場合はbetweenを使って時間指定します。
日本時間(UTC+9時間)で指定するようにlocaltimestampという項目を追加した場合のサンプルです。
併せてorder by localTimestampで日本時間順に並び替えています。

AzureDiagnostics
| where Category contains “ApplicationGatewayAccessLog"
| extend localTimestamp = TimeGenerated + 9h
| where localTimestamp between(datetime(“2022-07-15 15:00:00") .. datetime(“2022-07-15 16:00:00"))
| order by localTimestamp

アクセス元IP単位で集計

アクセス元IPで集計する事も可能です。

AzureDiagnostics
| where Category == “ApplicationGatewayAccessLog"
| summarize total_hits = count() by clientIP_s

アクセスパス(URI)で集計

アクセスログからどのURIにどの程度アクセスがあったのかといった事も集計出来ます。

AzureDiagnostics
| where Category == “ApplicationGatewayAccessLog"
| summarize count() by requestUri_s

IPアドレスからロケーション情報を取得し国別アクセス集計と言った事も可能です。
手順についてはこちらに纏めています。

ーーーー

Azure Web アプリケーション ファイアウォール(WAF)ログを確認する

WAFログについても確認してみます。
WAFの設定手順についてはこちらで纏めています。
併せて見て頂けると大変有難いです。

WAFログはカテゴリがApplicationGatewayFirewallLogとなる

アクセスログと同様にAzureDiagnosticsに含まれます。
カテゴリがApplicationGatewayFirewallLogの場合がWAFログとなります。

AzureDiagnostics
| where Category == “ApplicationGatewayFirewallLog"

WAFログの出力項目

ApplicationGatewayFirewallLogとして出力されるWAFログの抜粋です。
各出力項目の詳細は公式サイトを確認願います。

Azure Web アプリケーション ファイアウォールのリソース ログ(ファイアウォール ログ)

項目名 実際に取得される値 説明
TimeGenerated 2022/7/15 5:17:00.000 ログの時間
Category ApplicationGatewayFirewallLog ログ種別
Resource APGW-TEST アプリケーションゲートウェイ名(リソース名)
host_s www.tama-negi.com
XXX.XXX.XXX.XXX(フロントエンドのIP)
アクセスされたホスト名もしくはIPアドレス
clientIP_s XXX.XXX.XXX.XXX(アクセス元のIPアドレス) アクセス元のIPアドレス
action_s Blocked,Detected,Matched,Allowed  WAFルールの処理内容
アクセス拒否された場合はBlockedと表示されます
ruleSetType_s OWASP_CRS,Custom ルール セットの種類
カスタムルールの場合はCustomと表示されます
ruleSetVersion_s 3.1.0 使用されるルール セットのバージョン。
ruleId_s 920350,testapgwwafblock01 イベントの発生起因となっているWAFのルール ID
カスタムルールの場合はルール名が表示されます
Message Host header is a numeric IP address ルールの概要メッセージ
details_message_s Warning. Pattern match \"^[\\d.:]+$\" at REQUEST_HEADERS:Host …. ルールの詳細内容
policyScope_s Listener ポリシーのスコープ
policyScopeName_s APGW-TEST-Listener 適用されているスコープ名

※クエリ実行結果はproject句を利用して表示項目を抜粋てしています。

WAFでどれだけ検知されているのか確認する

検知モードで検知されたアクセスが、どのIPからアクセスがどれだけあったのかと言ったような事も確認できます。
クエリのサンプルは公式サイトで確認出来ます。

Log Analytics を使用して Application Gateway Web アプリケーション ファイアウォール (WAF) のログを調べる

AzureDiagnostics
| where Category == “ApplicationGatewayFirewallLog"
| where action_s contains “Detected"
| summarize count()by clientIp_s

最後に

今回はアプリケーションゲートウェイ関連のログについて纏めてみました。
アクセスログを見る事でサイトのパフォーマンスやアクセス分析をすることも出来ます。
またWAFログでは挙動も確認出来る為不正アクセスのアドレス抽出などと言う事も出来ます。
定期的にクエリを実行させる事でレポートを定期的に送付することなども出来そうです。
今後も色々試してみたいと思います。

Azure Front Doorでのログ確認はこちら。

バックエンド側でのApacheアクセスログについてはこちら。