Azure Application Gatewayのログ内容、Log Analytics収集、検索方法(アクセスログ、WAFログ)

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

Azure Application Gateway(アプリケーションゲートウェイ)で取得可能なログの概要、出力内容、診断設定を使った収集方法および検索手順です。

Azure Application Gatewayのログは、診断設定を使用してLog Analyticsワークスペースやストレージアカウントなどのリソースに収集できます。
取得可能なログには、Application Gateway Access Log(アクセスログ)、Application Gateway Firewall Log(ファイアウォールログ)、AllMetrics(メトリック)があります。

今回は、Azure Application Gatewayで取得可能なログの概要、Log Analyticsへのログ収集設定手順、収集されたログの出力内容、KQL(Kusto Query Language)を利用したログ検索方法などを紹介しています。
また、ターゲットテーブル設定による違いについても確認しています。

Azure Application Gatewayのサービス概要からリソースの作成手順は、こちらで紹介しています。

※本記事内では、Azure Web Application FirewallをWAFとして表記しています。

スポンサーリンク

Azure Application Gatewayのログ(概要、取得対象、取得設定手順、ターゲットテーブル)

取得できるログ

Azure Application Gatewayでは、アクセス関連のログやメトリックに関するログを取得できます。
WAFを構成している場合は、ファイアウォールに関するログも取得できます。
また、サブスクリプションで診断設定を行っている場合は、リソース操作に関するアクティビティログも取得できます。

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

ログ取得する場合は診断設定を使う

Azure Application Gatewayのログは、診断設定を使用してログを転送し取得します。
ログの転送先として、Log Analyticsワークスペース、ストレージアカウントやイベントハブなどが指定できます。
クエリを使用してログを検索する場合や、Azure Monitorでアラートを検知したい場合は、転送先としてLog Analyticsワークスペースを指定します。
長期間ログを保管したい場合などは、転送先としてストレージアカウントを指定します。
診断設定では、取得対象のログを選択できます。

今回は、転送先にLog Analyticsワークスペースを使用した場合の例を紹介しています。
なお、Log Analyticsワークスペースは、Azure Application Gatewayと同じリージョンのリソースを使用することが推奨されています。

診断設定を追加
監視にある診断設定を選択します。
診断設定を追加するを選択します。

診断設定の追加(Azure Application Gatewayのログについて)

診断設定の設定画面が表示されます。
転送対象となるログの種類や、転送先のリソースを設定します。
ターゲットテーブルを選択します。

今回は、ログのカテゴリはすべて選択し、転送先としてLog Analyticsワークスペースを指定しています。
ターゲットテーブルはリソース固有を選択しています。

診断設定で取得対象のログを選択(Azure Application Gatewayのログについて)

※設定完了後、ログ転送が開始されるまでに少し時間がかかる場合があります。

ターゲットテーブル設定って何?

診断設定時に指定する、ターゲットテーブルは、 Log Analytics に送るログの格納先テーブル形式を選ぶためのオプションです。

コレクション モード(Azure Monitor のリソース ログ)

    • Azure Diagnostics
      • 従来方式(旧方式)
      • すべてのカテゴリーのリソースログが共通のテーブルに収集されます
      • 多数のサービスが同じテーブル共有するため、クエリ性能、可読性が落ちます
    • リソース固有(Resource-specific)
      • 新方式
      • カテゴリごとに用意された専用のテーブルに保存されます
      • スキーマがわかりやすく、クエリ性能・可読性が向上します

現時点では、リソース固有(Resource-specific)が推奨されており、デフォルトでもこの設定が選択されています。
診断設定を複数作成することで、AzureDiagnosticsとリソース固有(Resource-specific)の両方を併用して利用することも可能です。

Application Gateway Access Log(アクセスログ)およびApplication Gateway Firewall Log(ファイアウォールログ)

アクセスログには、Azure Application Gatewayを経由するアクセス(トラフィック)について、アクセス元のIPアドレス、リクエスト内容(URLやHostなど)、応答結果(HTTPステータスなど)が記録されます。
ファイアウォールログ(WAFログ)には、WAFがリクエストを検知または遮断したイベントが記録されます。
なお、Application Gateway Performance Logはv1 SKUのみでサポートされているため、説明を割愛しています。

また、診断設定でターゲットテーブルをAzureDiagnosticsにするか、リソース固有テーブルにするかによって、Log Analytics上で参照するテーブルが異なります。
そのため、ログの検索方法(クエリ)も変わります。

ターゲットテーブルにリソース固有を指定した場合は、以下の通りとなります。

リソース固有
AGWAccessLogs アプリケーションゲートウェイで処理された各リクエスト単位のトランザクションログです。
アクセス元のIPアドレス、要求されたURL、HTTPステータスコードなどの情報に加え、処理したリスナー、転送先のバックエンド、応答速度などが記録されています。
AGWFirewallLogs WAFがリクエストの検査結果を記録するセキュリティイベントログです。
WAFを検知モードまたは防御モードに設定した際に発生したイベントが記録されます。
例えば、WAFのルールによってブロックされた通信などが記録されます。
WAFを有効化した場合のみ出力されます。

AGWAccessLogsの場合

AGWAccessLogsのログ取得例(Azure Application Gatewayのログについて)

AGWFirewallLogsの場合AGWFirewallLogsのログ取得例(Azure Application Gatewayのログについて)

ターゲットテーブルにAzure Diagnosticsを指定した場合は以下の通りとなります。
出力される列名が、リソース固有の場合と異なります。

AzureDiagnostics テーブルの列

Azure Diagnostics
ApplicationGatewayAccessLog アプリケーションゲートウェイで処理された各リクエスト単位のトランザクションログです。
アクセス元のIPアドレス、要求されたURL、HTTPステータスコードなどの情報に加え、処理したリスナー、転送先のバックエンド、応答速度などが記録されています。
ApplicationGatewayFirewallLog WAFがリクエストの検査結果を記録するセキュリティイベントログです。
WAFを検知モードまたは防御モードに設定した際に発生したイベントが記録されます。
例えば、WAFのルールによってブロックされた通信などが記録されます。
WAFを有効化した場合のみ出力されます。

ApplicationGatewayAccessLogの検索結果

Azure DiagnosticsテーブルでApplicationGatewayAccessLogのログ取得例(Azure Application Gatewayのログについて)

ApplicationGatewayFirewallLogの検索結果Azure DiagnosticsテーブルでApplicationGatewayFirewallLogのログ取得例(Azure Application Gatewayのログについて)

 

AllMetrics(メトリック)

Azure Application Gatewayで時系列に取得される情報が記録されます。
トラフィック状況やリソースの情報などが含まれます。
バックエンドの正常性や応答速度なども記録されるため、Azure Monitorのアラートルールなどにも活用できます。

なお、保管先のテーブル名はAzureMetricsと違う名前となっています。
そのため、クエリでログを検索する際にはAzureMetricsと指定します。

AzureMetrics

All Metrics
AllMetrics 一定間隔で集計された時系列の監視データです。
トラフィック量、失敗リクエスト数、バックエンドの正常性や応答時間などを確認できます。
Capacity Unitsなど、リソース使用率に関する情報も確認できます。

AzureMetricsの検索結果

AzureMetricsのログ取得例(Azure Application Gatewayのログについて)

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

アクティビティログの診断設定を利用することで、Azure Application Gatewayのリソース操作に関するログを確認できます。
アクティビティログには、設定変更などのリソース操作に関する情報が記録されます。

Activity Log(アクティビティログ)
AzureActivity リソース操作などに関するログです。
設定変更内容などが記録されます。

AzureActivityの検索結果

AzureActivityのログ取得例(Azure Application Gatewayのログについて)

—広告—

Application Gateway Access Log(アクセスログ)の出力内容や検索方法

Application Gateway Access Log(アクセスログ)の検索方法

Application Gateway Access Log(アクセスログ)の検索方法です。
ターゲットテーブルをAzureDiagnosticsか、リソース固有どちらを指定するかにより、Log Analytics上で参照するテーブルが異なります。
そのため、ログの検索方法(クエリ)が変わります。

ターゲットテーブルにリソース固有を指定した場合は、以下の通りとなります。

アクセスログの検索方法
監視にあるログを選択します。
AGWAccessLogsで検索を実行します。

※画面例は簡易モードの場合です。

AGWAccessLogsをKQLクエリで検索(Application Gateway Access Logの出力内容や検索方法)
//KQLクエリ内容
AGWAccessLogs
AGWAccessLogsのKQLクエリ検索結果(Application Gateway Access Logの出力内容や検索方法)

ターゲットテーブルにAzure Diagnosticsを指定した場合は以下の通りとなります。

アクセスログの検索方法

監視にあるログを選択します。
KQLモードに切り替えます。
入力欄にKQLクエリを記載してログを検索します。

アクセスログはAzureDiagnosticsテーブルに含まれます。
カテゴリはApplicationGatewayAccessLogです。
where句で"ApplicationGatewayAccessLog"に絞り、ログ検索を行います。

ApplicationGatewayAccessLogをKQLクエリで検索(Application Gateway Access Logの出力内容や検索方法)
//KQLクエリ内容
AzureDiagnostics
| where Category == “ApplicationGatewayAccessLog"
ApplicationGatewayAccessLogのKQLクエリ検索結果(Application Gateway Access Logの出力内容や検索方法)

Application Gateway Access Log(アクセスログ)の出力項目例

Application Gateway Access Log(アクセスログ)の出力項目です。
アクセス元のIPアドレス、要求されたURL、HTTPステータスコードなどの情報に加え、処理したリスナー、転送先のバックエンド、応答速度などが記録されています。

ターゲットテーブルをAzureDiagnosticsにするか、リソース固有にするかによって、出力項目名や出力内容が異なります。

ターゲットテーブルにリソース固有を指定した場合の主な出力項目です。

項目名 取得値(例) 説明
TimeGenerated 2026-01-17T04:55:35Z アクセスログの生成時刻
Host www.tama-negi.com
(203.0.113.XX)
アクセス先のホスト名、もしくはフロントエンドIP アドレス
ListenerName listener-01 受信したリスナー名
ClientIp 203.0.113.1 アクセス元のIPアドレス
ServerRouted 10.1.0.17:80 転送先のバックエンドサーバーとポート番号
ServerStatusの項目で、バックエンドサーバーのHTTPステータスコードも確認できます
RequestUri / 要求 URI(パス)
UserAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 User-Agent 情報
HttpMethod GET HTTP メソッド
HttpStatus 304 応答の HTTP ステータスコード
TimeTaken 0.002 フロントエンド側の処理時間
ServerResponseLatency 0 バックエンド側の応答時間
RuleName rule-01 Application Gatewayのルール名
BackendPoolName backend-pool-01 Application Gatewayのバックエンドプール名
BackendSettingName backend-01 Application Gatewayのバックエンド設定名
AGWAccessLogsの出力結果例(Application Gateway Access Logの出力内容や検索方法)

ターゲットテーブルにAzure Diagnosticsを指定した場合の主な出力項目です。

項目名 取得値(例) 説明
TimeGenerated 202x/7/15 5:17:00.000 アクセスログの生成時刻
Category ApplicationGatewayAccessLog ログ種別
Resource AGW-01 Application Gatewayのリソース名
host_s www.tama-negi.com
(203.0.113.XX)
アクセス先のホスト名、もしくはフロントエンドIP アドレス
listenerName_s listener-01 受信したリスナー名
clientIP_s 203.0.113.1 アクセス元のIPアドレス
serverRouted_s 10.1.0.17:80 転送先のバックエンドサーバーとポート番号
serverStatus_sの項目で、バックエンドサーバーのHTTPステータスコードも確認できます
requestUri_s / 要求 URI(パス)
userAgent_s Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 User-Agent 情報
httpMethod_s GET HTTP メソッド
httpStatus_d 304 応答の HTTP ステータスコード
timeTaken_d 0.002 フロントエンド側の処理時間
serverResponseLatency_s 0 バックエンド側の応答時間
ruleName_s rule-01 Application Gatewayのルール名
backendPoolName_s  backend-pool-01 Application Gatewayのバックエンドプール名
backendSettingName_s backend-01 Application Gatewayのバックエンド設定名
ApplicationGatewayAccessLogの出力結果例(Application Gateway Access Logの出力内容や検索方法)

※project句を利用して表示項目を抜粋しています。

時間範囲を指定して検索する方法

Log Analyticsワークスペースでログ検索する際、デフォルトの検索対象期間は過去24時間となります。
時間範囲を指定する場合は、ago関数を使用します。

クエリサンプルについては、公式サイトでも紹介されています。

Log Analytics を使用して Application Gateway ログを確認する

//ターゲットテーブルにリソース固有を指定した場合
AGWAccessLogs

| where TimeGenerated > ago(24h)

//ターゲットテーブルにAzure Diagnosticsを指定した場合
AzureDiagnostics

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

時間範囲を指定する場合はbetween演算子を使用します。
また、extend関数を利用してタイムゾーンを調整した項目を追加できます。

例では。日本時間(UTC+9時間)を出力するために、localTimestampという項目を追加しています。
出力結果を日本時間(order by localTimestamp)で並び替えています。

//ターゲットテーブルにリソース固有を指定した場合
AGWAccessLogs
| extend localTimestamp = TimeGenerated + 9h
| where localTimestamp between (datetime(2026-01-17 13:00:00) .. datetime(2026-01-17 14:00:00))
| order by localTimestamp asc

//ターゲットテーブルにAzure Diagnosticsを指定した場合
AzureDiagnostics
| where Category == “ApplicationGatewayAccessLog"
| extend localTimestamp = TimeGenerated + 9h
| where localTimestamp between (datetime(2026-01-17 13:00:00) .. datetime(2026-01-17 14:00:00))
| order by localTimestamp asc

※Azure PortalでKQLクエリの実行結果を表示する場合、設定によってはTimeGeneratedの項目が日本時間で表示されることもあります。

アクセス元のIPアドレス単位でアクセス数を集計する方法

アクセス元のIPアドレスは、ClientIpまたはclientIP_sに含まれます。
count関数を使用することで、アクセス元のIPアドレスごとにアクセス数を集計できます。

//ターゲットテーブルにリソース固有を指定した場合
AGWAccessLogs

| summarize total_hits = count() by ClientIp

//ターゲットテーブルにAzure Diagnosticsを指定した場合
AzureDiagnostics

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

※AzureDiagnosticsかリソース固有のテーブルかによって、出力結果の内容が異なることがあります。

IPアドレスからロケーション情報を取得し国別アクセス集計と言った事もできます。
IPアドレスから国を識別する方法については、こちらで紹介しています。

要求URI単位でアクセス数を集計する方法

アクセスURIは、RequestUriまたはrequestUri_sに含まれます。
count関数を使用することで、各アクセスURIごとに集計できます。

//ターゲットテーブルにリソース固有を指定した場合
AGWAccessLogs
| summarize count() by RequestUri

//ターゲットテーブルにAzure Diagnosticsを指定した場合
AzureDiagnostics
| where Category == “ApplicationGatewayAccessLog"
| summarize count() by requestUri_s

ログ検索の実行結果はCSV形式で出力できる

ログ検索の実行結果はCSV形式で出力できます。

エクスポート方法
共有にエクスポートの項目があります。
CSVなどの形式でログ検索結果をエクスポートできます。
KQLクエリ検索結果のエクスポート例(Application Gateway Access Logの出力内容や検索方法)

—広告—

Application Gateway Firewall Log(ファイアウォールログ)の出力内容や検索方法

Azure Application GatewayのWAF設定手順については、こちらで紹介しています。

Application Gateway Firewall Log(ファイアウォールログ)の検索方法

Application Gateway Firewall Log(ファイアウォールログ)の検索方法です。
ターゲットテーブルをAzureDiagnosticsか、リソース固有どちらを指定するかにより、Log Analytics上で参照するテーブルが異なります。
そのため、ログの検索方法(クエリ)が変わります。

ターゲットテーブルにリソース固有を指定した場合です。

ファイアウォールログの検索方法
AGWFirewallLogsで検索を実行します。

※画面例は簡易モードの場合です。

AGWFirewallLogsをKQLクエリで検索(Application Gateway Firewall Logの出力内容や検索方法)
//KQLクエリ内容
AGWFirewallLogs
AGWFirewallLogsのKQLクエリ検索結果例(Application Gateway Firewall Logの出力内容や検索方法)

ターゲットテーブルにAzure Diagnosticsを指定した場合です。

ファイアウォールログの検索方法

KQLモードに切り替えます。
入力欄にKQLクエリを記載してログを検索します。

ファイアウォールログはAzureDiagnosticsテーブルに含まれます。
カテゴリはApplicationGatewayFirewallLogです。
where句で"ApplicationGatewayAccessLog"に絞り、ログ検索を行います。

ApplicationGatewayFirewallLogをKQLクエリで検索(Application Gateway Firewall Logの出力内容や検索方法)
//KQLクエリ内容
AzureDiagnostics
| where Category == “ApplicationGatewayFirewallLog"
ApplicationGatewayFirewallLogのKQLクエリ検索結果例(Application Gateway Firewall Logの出力内容や検索方法)

※表示項目を抜粋しています。

Application Gateway Firewall Log(ファイアウォールログ)の出力項目例

Application Gateway Firewall Log(ファイアウォールログ)の出力項目です。
アクセス元のIPアドレス、要求されたURL、HTTPステータスコードなどの情報に加え、処理したリスナー、転送先のバックエンド、応答速度などが記録されています。

ターゲットテーブルをAzureDiagnosticsにするか、リソース固有にするかによって、出力項目名や出力内容が異なります。

ターゲットテーブルにリソース固有を指定した場合の主な出力項目です。

項目名 取得値(例) 説明
TimeGenerated 2026-01-17T09:04:26Z ファイアウォールログの生成時刻
Hostname www.tama-negi.com
(203.0.113.XX)
アクセス先のホスト名、もしくはフロントエンドIP アドレス
ClientIp 203.0.113.1 アクセス元のIPアドレス
Action Matched WAF ルールに一致した際のアクション(判定結果)
ブロックされた場合は Blocked と表示されます
RuleSetType OWASP CRS ルールセットの種類
カスタム ルールの場合は Custom と表示されます
RuleSetVersion 3.2 適用されているルールセットのバージョン
RuleId 920350 イベントの原因となったWAFルールID
カスタム ルールの場合はルール名が表示されます
Message Host header is a numeric IP address ルールの概要メッセージ
DetailedMessage Pattern match ^[\d.:]+$ at REQUEST_HEADERS:host. ルールの詳細メッセージ
AGWFirewallLogsの出力結果例(Application Gateway Firewall Logの出力内容や検索方法)

ターゲットテーブルにAzure Diagnosticsを指定した場合の主な出力項目です。

項目名 取得値(例) 説明
TimeGenerated 2026-01-17T09:04:57.731326Z アクセスログの生成時刻
Category ApplicationGatewayFirewallLog ログ種別
Resource AGW-01 Application Gatewayのリソース名
hostname_s www.tama-negi.com
(203.0.113.XX)
アクセス先のホスト名、もしくはフロントエンドIP アドレス
clientIp_s 203.0.113.1 アクセス元のIPアドレス
action_s Matched WAF ルールに一致した際のアクション(判定結果)
ブロックされた場合は Blocked と表示されます
ruleSetType_s OWASP CRS ルールセットの種類
カスタム ルールの場合は Custom と表示されます
ruleSetVersion_s 3.2 適用されているルールセットのバージョン
ruleId_s 920350 イベントの原因となったWAFルールID
カスタム ルールの場合はルール名が表示されます
Message Host header is a numeric IP address ルールの概要メッセージ
details_message_s Pattern match ^[\d.:]+$ at REQUEST_HEADERS:host. ルールの詳細メッセージ
ApplicationGatewayFirewallLogの出力結果例(Application Gateway Firewall Logの出力内容や検索方法)

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

—広告—

最後に

今回は、Azure Application Gatewayで取得できるログについて確認しました。

取得できるログの内容や、診断設定を利用してLog Analyticsでログを収集・検索する手順について紹介しています。
Application Gateway Access Log(アクセスログ)、Application Gateway Firewall Log(ファイアウォールログ)、AllMetrics(メトリック)など、取得可能なログの概要や出力項目についても紹介しています。
また、ターゲットテーブル設定によるログ取得内容の違いについても確認しています。

Log Analyticsワークスペースにログを収集することで、定期的にクエリを実行してレポートを送付することができます。
アクセスログには多くの情報が含まれており、収集することでアクセス分析やサイトのパフォーマンスのグラフ化が可能です。

引き続き、いろいろな機能を試していきたいと思います。

Azure Front Doorでのログ確認手順については、こちらで紹介しています。

Logic Appsを使ったLog Analyticsワークスペースのログ検索自動化方法については、こちらで紹介しています。

 

スポンサーリンク