GeoIPとELK(Elasticsearch、Logstash、Kibana)を使用してユーザーの場所をマップする方法

前書き

IP Geolocationは、IPアドレスの物理的な場所を決定するために使用されるプロセスであり、コンテンツのパーソナライズやトラフィック分析など、さまざまな目的に活用できます。 位置情報によるトラフィック分析は、ユーザーがどこから来たのかを簡単に確認できるため、ユーザーベースに貴重な洞察を提供できます。 これにより、アプリケーションサーバーの理想的な地理的位置と現在の対象者について、十分な情報に基づいた決定を下すことができます。

このチュートリアルでは、Elasticsearch、Logstash、Kibanaを使用して、アプリケーションのユーザーのIPアドレスの視覚的なジオマッピングを作成する方法を示します。

すべての仕組みを簡単に説明します。 LogstashはGeoIPデータベースを使用して、IPアドレスを緯度と経度の座標ペアに変換します。 IPアドレスのおおよその物理的な場所。 座標データはElasticsearchの `+ geo_point `フィールドに保存され、 ` geohash +`文字列にも変換されます。 KibanaはGeohash文字列を読み取り、それらを地球の地図上のポイントとして描画できます。 Kibana 4では、これはタイルマップビジュアライゼーションとして知られています。

前提条件を見てみましょう。

前提条件

このチュートリアルを実行するには、動作しているELKスタックが必要です。 さらに、Webサーバーアクセスログなど、フィールドにフィルターできるIPアドレスを含むログが必要です。 これらの2つのことをまだお持ちでない場合は、このシリーズの最初の2つのチュートリアルに従うことができます。 最初のチュートリアルではELKスタックをセットアップし、2番目のチュートリアルではNginxまたはApacheのアクセスログを収集してフィルタリングする方法を示します。

ファイルビートインデックスへのgeo_pointマッピングの追加

前提条件のチュートリアルに従っていると仮定すると、これはすでに完了しています。 ただし、TileMap視覚化ではGeoIP座標をElasticsearchに「+ geo_point +」型として保存する必要があるため、スキップした場合に備えてこのステップを再度含めます。

Elasticsearchがインストールされているサーバーで、Filebeatインデックステンプレートをホームディレクトリにダウンロードします。

cd ~
curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

次に、次のコマンドでテンプレートをElasticsearchにロードします。

curl -XPUT 'http://localhost:9200/_template/filebeat' [email protected]

Geostを使用するようにLogstashを構成する

LogstashでGeoIP座標を保存するには、個別のフィールドとしてフィルター処理できるパブリックIPアドレスを含むログを生成するアプリケーションを識別する必要があります。 この情報を使用してログを生成するかなり一般的なアプリケーションは、NginxやApacheなどのWebサーバーです。 例としてNginxアクセスログを使用します。 別のログを使用している場合は、例に必要な調整を加えます。

Logstashへのフィルターの追加チュートリアルでは、Nginxフィルターは「+ 11-」というファイルに保存されますnginx-filter.conf + `。 フィルタが他の場所にある場合は、代わりにそのファイルを編集します。

Nginxフィルターを編集してみましょう。

sudo vi /etc/logstash/conf.d/

`+ grok +`セクションの下に、強調表示された部分を下に追加します。

11-nginx-filter.conf

filter {
 if [type] == "nginx-access" {
   grok {
     match => { "message" => "%{NGINXACCESS}" }
   }



 }
}

これにより、 `+`フィールド(* source *で指定)に保存されているIPアドレスを変換するようにフィルターが設定されます。 * source *を ` clientip +`として指定しているのは、それがNginxユーザーのIPアドレスが格納されているフィールドの名前だからです。 IPアドレス情報を別のフィールドに保存する場合は、必ずこの値を変更してください。

保存して終了。

変更を有効にするには、Logstashを再起動しましょう。

sudo service logstash restart

すべてが正しく構成されていれば、Logstashは現在、Nginxアクセスログ(またはログを生成しているアプリケーション)とともにGeoIP座標を保存しているはずです。 この変更は遡及的ではないため、以前に収集したログにはGeoIP情報が追加されないことに注意してください。 + KibanaでGeoIP機能が適切に機能していることを確認しましょう。

Kibanaに接続

GeoIPを有効にしてLogstashが正しく構成されているかどうかを確認する最も簡単な方法は、WebブラウザーでKibanaを開くことです。 今それをしてください。

LogstashでGeoIPモジュールを有効にしたため、アプリケーションが生成したログメッセージを見つけます。 Nginxの例に従って、Kibanaで `+ type:" "+`を検索して、ログの選択を絞り込むことができます。

次に、メッセージの1つを展開して、フィールドのテーブルを確認します。 IPアドレスが実際の地理的位置にどのようにマップされたかに関する情報を含むいくつかの新しい「+ geoip +」フィールドが表示されます。 例えば:

image:https://assets.digitalocean.com/articles/elk/geoip_kibana/geoip_fields.png [GeoIPフィールドの例]

このビューに適切なGeoIP情報が表示されていれば、マップビジュアライゼーションを作成する準備ができています。

タイルマップの視覚化の作成

注: Kibanaビジュアライゼーションをまだ使用していない場合は、https://www.digitalocean.com/community/tutorials/how-to-use-kibana-dashboards-and-visualizations [Kibana Dashboards and Visualizations Tutorial]をご覧ください。 ]。

KibanaでIPアドレスをマッピングするには、タイルマップビジュアライゼーションを作成しましょう。

メインメニューで[視覚化]をクリックします。

[新しい視覚エフェクトの作成]で[タイルマップ]を選択します。

[検索ソースの選択]の下で、いずれかのオプションを選択できます。 マップするログメッセージを見つける保存済みの検索がある場合は、その検索を選択してください。 [新しい検索から]をクリックしたかのように進みます。

インデックスパターンを選択するように求められたら、ドロップダウンから filebeat-**を選択します。 これにより、空白のマップのあるページが表示されます。

image:https://assets.digitalocean.com/articles/elk/geoip_kibana/kibana-blank-map.png [Kibanaデフォルトタイルマップ構築インターフェイス]

検索バーに、「+ type:nginx-access +」またはgeoip情報を含むログに一致する別の検索語を入力します。 期間(ページの右上隅)が一部のログエントリと一致するのに十分であることを確認してください。 マップの代わりに*結果が見つかりません*と表示された場合は、検索用語または時間を更新する必要があります。

結果が表示されたら、左側の列の* buckets ヘッダーの下にある Geo Coordinates *をクリックします。 緑色の「再生」ボタンがアクティブになります。 それをクリックすると、ジオロケーションが地図にプロットされます:

image:https://assets.digitalocean.com/articles/elk/geoip_kibana/kibana-map-full.png [複数のポイントを持つキバナタイルマップ]

視覚化に満足したら、検索バーの横にある[視覚化を保存]ボタン(フロッピーディスクのアイコン)を使用して、視覚化を保存してください。

結論

KibanaでGeoIP情報がマップされたので、設定する必要があります。 それ自体で、ユーザーの地理的な位置の大まかなアイデアを提供する必要があります。 ダッシュボードに追加して他のログと関連付けると、さらに便利になります。

がんばろう!

Related