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

2019-07-15

Azure Application GatewayのAccess LogをLog Analyticsで確認してみました。
Azure Application GatewayのアクセスログをLog Analyticsに転送することにより確認することが出来ます。
Log Analyticsへの転送設定はApplication Gatewayの診断設定で実施します。
今回はAzure Application Gatewayの診断設定からLog Analyticsでのログ検索まで一連の流れを試してみました。

Application Gateway作成手順はこちら。

スポンサーリンク

Application GatewayのAccess Logで確認できる内容

取得されるログの情報を抜粋してみます。このように一般的なLogで取得されるような値は取得可能です。(V1とV2で若干異なるかもですが。)

項目名 実際に取得される値  
TimeGenerated 2019-07-14T10:36:57Z ログの時間
ResourceId APGWのリソースID APGWのリソースID
ResourceGroup リソースグループ名 APGWのリソースグループ名
clientIP_s 66.XX.XX.XX アクセス元のIPアドレス
httpMethod_s GET HTTPアクセスメソッド
requestUri_s / アクセスURL
userAgent_s Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/75.0.3770.100+Safari/537.36 アクセス元のUser Agent
httpStatus_d 200 HTTP応答ステータスコード
httpVersion_s HTTP/1.1 HTTPバージョン
host_s www.xxxx-xxxx.com アクセスHost名

Application Gateway からLog AnalyticsへのLog転送設定方法

Application Gateway のAccess Log取得設定は診断設定で実施します。

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

診断設定の画面が表示されます。

転送するログを選択します。ApplicationGatewayAccessLogがアクセスログに該当します。なお、ApplicationGatewayFirewallLogはWAF利用時のログになります。

ApplicationGatewayAccessLog

アプリケーションゲートウェイにアクセスされたログ

アクセス時間や呼び出し元の IP、要求された URL、ステータスコード等が対象になります

ApplicationGatewayPerformanceLog

Application Gateway のインスタンスの実行状況を示すログ

処理された要求の総数、スループット (バイト単位)、失敗した要求の数、正常および異常なバックエンド インスタンスの数などを表示

ApplicationGatewayFirewallLog

Web アプリケーション ファイアウォールのログ

WAFでブロックされたのか等の項目を表示

診断設定名を入力、転送先のLogAnalyticsワークスペースを選択し保存します。

保存すれば設定は完了です。診断設定から実際のログ収集開始までは5分~10分程度かかります。

Application GatewayのAccess LogをLog Analyticsで確認してみた

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

Application Gatewayのアクセスログを検索する

アプリケーションゲートウェイのメニューでログという項目をクリックします。

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

実際にAccess Logを検索するにはクエリを記述し実施します。Application Gatewayのログの場合はCategoryに診断設定でチェックした項目名(ApplicationGatewayAccessLog)を指定します。

AzureDiagnostics
| where Category == “ApplicationGatewayAccessLog"

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

時間指定を入れない場合の検索時間は24時間になりますが、明示的に指定した場合はこんな感じになります。1dでも24時間と同じになります。

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

またこの時間というような場合はこんな感じで取得出来ます。日本時間(UTC+9時間)で指定するようにlocaltimestampという項目を追加しています。

AzureDiagnostics
| where Category contains “ApplicationGatewayAccessLog"
| extend localTimestamp = TimeGenerated + 9h
| where localTimestamp between(datetime(“2021-02-15 9:00:00") .. datetime(“2021-02-15 10:00:00"))

Application GatewayのAccess Logをアクセス元IP単位で集計する。

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

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

Application GatewayのAccess LogをアクセスURLで集計してみる

アクセスログからどのURLにどの程度アクセスがあったのかといったような事もできます。

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

Application GatewayのFirewall LogをLog Analyticsで確認してみた

ファイアーウォールログを確認してみましょう。

ApplicationGatewayFirewallLogを確認する

ApplicationGatewayFirewallLogの確認もアクセスログと同様の方法で出来ます。

AzureDiagnostics
| where Category == “ApplicationGatewayFirewallLog"

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

検知モードで検知されたアクセスが、どのIPからアクセスがどれだけあったのかと言ったような事も確認できます。

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

今回は基本的な設定のみですが、色々加工ができそうです。今後色々試してみたい所です。

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

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