geo_info_from_ip_address(KQL)を使ってIPアドレスからロケーション情報取得
アクセスログに記録されたクライアントIPからロケーション情報取得して集計など、ロケーション別にデータ加工したい事もあるかと思います。
Azureの場合はLog Analyticsワークスペースに収集したログをKQL使って集計する事が多いかと思います。
KQLではIPアドレスからロケーション情報を取得する関数が提供されています。
今回はアプリケーションゲートウェイ(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に対応しています。
ロケーション情報は国名だけではなく市区町村名や緯度経度も取得出来ます。
GeoLite2 Free Geolocation Dataが使われている
geo_info_from_ip_addressにも記載がある通り、MaxMindのGeoLite2 データが使用されています。
GeoLite2 Free Geolocation Data
データの特性上IP位置情報の正確性について保証されません。
この点については注意が必要です。
geo_info_from_ip_addressを使ってロケーション情報取得
アプリケーションゲートウェイのアクセスログを表示
アプリケーションゲートウェイのアクセスログを表示します。
clientIP_s列にアクセス元のIPアドレスが含まれます。
アクセスログ表示 | ||
|
||
アプリケーションゲートウェイのアクセスログについてはこちらに纏めています。
併せて見て頂けると有難いです。
ロケーション情報の列を追加
IP_Locationと言う列を追加し、ロケーション情報を表示します。
extend演算子を使って列追加します。
geo_info_from_ip_address関数はパラメータにIPアドレスを指定します。
アクセスログのclientIP_s列をパラメータに指定します。
ロケーション情報取得 | ||
|
||
ロケーション情報から国名だけを表示
ロケーション情報の列には複数の項目が含まれています。
国名だけ表示してみます。
countryが国名に対応します。
IP_Location.countryとして国名だけを表示します。
extend Country = IP_Location.countryとしてContry列を追加して国名を表示する事も出来ます。
国別にアクセス数を集計
国別にアクセス数を集計してみます。
summarize演算子を利用して集計します。
count() by Countryとして国別に集計します。
列名 = count()として集計列の列名を変更する事も出来ます。
※tostring()関数を利用して文字列に変換しています。
※where clientIP_s !contains “127.0.0.1"はループバックアドレスを除外する為に追加しています。
|
||
|
IPv6も対応
ドキュメント記載の通りクライアントIPがIPv6の場合もロケーション情報を取得出来ます。
IPv6の場合 | |
最後に
アプリケーションゲートウェイのアクセスログを例にKQLでIPアドレスからロケーション情報を取得してみました。
geo_info_from_ip_address関数を利用して非常に簡単に取得出来ました。
単に集計に利用するだけではなく、Azure Monitorのアラートルールに利用すると日本以外からアクセスがあった場合にアラートを発生されると言った事も出来そうです。
今後も色々試してみたいと思います。
初めてのKQLと言う内容で基本的な内容についてはこちらに纏めています。
併せて見て頂けると有難いです。