geo_info_from_ip_address(KQL)を使ってIPアドレスからロケーション情報取得

Application Gateway,Azure,Log Analytics

アクセスログに記録されたクライアントIPからロケーション情報取得して集計など、ロケーション別にデータ加工したい事もあるかと思います。
Azureの場合はLog Analyticsワークスペースに収集したログをKQL使って集計する事が多いかと思います。
KQLではIPアドレスからロケーション情報を取得する関数が提供されています。

geo_info_from_ip_address

今回はアプリケーションゲートウェイ(Azure Application Gateway)のアクセスログを例に、geo_info_from_ip_address使ったIPアドレスからロケーション情報取得手順を確認します。
併せて国別アクセス数集計もやってみます。

スポンサーリンク

geo_info_from_ip_addressについて

geo_info_from_ip_addressについて

geo_info_from_ip_addressはKQL(Kusto Query Language)の関数です。
IPアドレスからロケーション情報を取得します。
IPv6、IPv4に対応しています。

geo_info_from_ip_address

ロケーション情報は国名だけではなく市区町村名や緯度経度も取得出来ます。

戻り値

GeoLite2 Free Geolocation Dataが使われている

geo_info_from_ip_addressにも記載がある通り、MaxMindのGeoLite2 データが使用されています。

GeoLite2 Free Geolocation Data

データの特性上IP位置情報の正確性について保証されません。
この点については注意が必要です。

geo_info_from_ip_addressを使ってロケーション情報取得

アプリケーションゲートウェイのアクセスログを表示

アプリケーションゲートウェイのアクセスログを表示します。
clientIP_s列にアクセス元のIPアドレスが含まれます。

アクセスログ表示

AzureDiagnostics
| where Category contains “ApplicationGatewayAccessLog"
| project TimeGenerated, Category, clientIP_s, requestUri_s
| sort by TimeGenerated

アプリケーションゲートウェイのアクセスログについてはこちらに纏めています。
併せて見て頂けると有難いです。

ロケーション情報の列を追加

IP_Locationと言う列を追加し、ロケーション情報を表示します。
extend演算子を使って列追加します。

extend 演算子

geo_info_from_ip_address関数はパラメータにIPアドレスを指定します。

パラメーター

アクセスログのclientIP_s列をパラメータに指定します。

ロケーション情報取得

AzureDiagnostics
| extend IP_Location = geo_info_from_ip_address(clientIP_s)
| where Category contains “ApplicationGatewayAccessLog"
| project TimeGenerated, Category, clientIP_s, IP_Location, requestUri_s
| sort by TimeGenerated

ロケーション情報から国名だけを表示

ロケーション情報の列には複数の項目が含まれています。
国名だけ表示してみます。
countryが国名に対応します。
IP_Location.countryとして国名だけを表示します。
extend Country = IP_Location.countryとしてContry列を追加して国名を表示する事も出来ます。

国名を表示

AzureDiagnostics
| extend IP_Location = geo_info_from_ip_address(clientIP_s)
| where Category contains “ApplicationGatewayAccessLog"
| project TimeGenerated, Category, clientIP_s, IP_Location.country ,requestUri_s
| sort by TimeGenerated

国別にアクセス数を集計

国別にアクセス数を集計してみます。
summarize演算子を利用して集計します。

summarize 演算子

count() by Countryとして国別に集計します。

count() (集計関数)

列名 = count()として集計列の列名を変更する事も出来ます。

tostring()関数を利用して文字列に変換しています。
※where clientIP_s !contains “127.0.0.1"はループバックアドレスを除外する為に追加しています。

 

AzureDiagnostics
| extend IP_Location = geo_info_from_ip_address(clientIP_s)
| extend Country = tostring(IP_Location.country)
| where Category contains “ApplicationGatewayAccessLog"
| where clientIP_s !contains “127.0.0.1"
| summarize count() by Country

 

IPv6も対応

ドキュメント記載の通りクライアントIPがIPv6の場合もロケーション情報を取得出来ます。

IPv6の場合

最後に

アプリケーションゲートウェイのアクセスログを例にKQLでIPアドレスからロケーション情報を取得してみました。
geo_info_from_ip_address関数を利用して非常に簡単に取得出来ました。
単に集計に利用するだけではなく、Azure Monitorのアラートルールに利用すると日本以外からアクセスがあった場合にアラートを発生されると言った事も出来そうです。
今後も色々試してみたいと思います。

初めてのKQLと言う内容で基本的な内容についてはこちらに纏めています。
併せて見て頂けると有難いです。

スポンサーリンク