GeoIPとELK(Elasticsearch、Logstash、Kibana)を使用してユーザーの場所をマッピングする方法
序章
IPアドレスの物理的な場所を特定するために使用されるプロセスであるIPジオロケーションは、コンテンツのパーソナライズやトラフィック分析など、さまざまな目的に利用できます。 ジオロケーションによるトラフィック分析は、ユーザーがどこから来ているかを簡単に確認できるため、ユーザーベースに関する貴重な洞察を提供できます。 これは、アプリケーションサーバーの理想的な地理的位置と現在の対象者について情報に基づいた決定を下すのに役立ちます。
このチュートリアルでは、Elasticsearch、Logstash、およびKibanaを使用して、アプリケーションのユーザーのIPアドレスの視覚的なジオマッピングを作成する方法を示します。
これがすべてがどのように機能するかについての簡単な説明です。 Logstashは、GeoIPデータベースを使用して、IPアドレスを緯度と経度の座標ペアに変換します。 IPアドレスのおおよその物理的な場所。 座標データはElasticsearchに保存されます geo_point
フィールド、およびに変換されます geohash
ストリング。 その後、Kibanaはジオハッシュ文字列を読み取り、地球の地図上にポイントとして描画できます。 Kibana 4では、これはタイルマップの視覚化として知られています。
それでは、前提条件を見てみましょう。
前提条件
このチュートリアルに従うには、ELKスタックが機能している必要があります。 さらに、Webサーバーアクセスログのように、フィールドにフィルターできるIPアドレスを含むログが必要です。 これらの2つをまだ持っていない場合は、このシリーズの最初の2つのチュートリアルに従うことができます。 最初のチュートリアルではELKスタックを設定し、2番目のチュートリアルではNginxまたはApacheのアクセスログを収集してフィルタリングする方法を示します。
geo_pointマッピングをFilebeatIndexに追加します
前提条件のチュートリアルに従っていると仮定すると、すでにこれを実行しています。 ただし、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]
GeoIPを使用するようにLogstashを構成する
LogstashにGeoIP座標を保存させるには、個別のフィールドとしてフィルタリングできるパブリックIPアドレスを含むログを生成するアプリケーションを特定する必要があります。 この情報を使用してログを生成するかなりユビキタスなアプリケーションは、NginxやApacheなどのWebサーバーです。 例としてNginxアクセスログを使用します。 別のログを使用している場合は、例に必要な調整を加えてください。
Logstashへのフィルターの追加チュートリアルでは、Nginxフィルターは次のファイルに保存されます。 11-nginx-filter.conf
. フィルタが他の場所にある場合は、代わりにそのファイルを編集してください。
Nginxフィルターを今すぐ編集しましょう:
- sudo vi /etc/logstash/conf.d/11-nginx-filter.conf
下 grok
セクションで、以下の強調表示された部分を追加します。
filter {
if [type] == "nginx-access" {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
geoip {
source => "clientip"
}
}
}
これにより、に保存されているIPアドレスを変換するようにフィルターが構成されます。 clientip
フィールド( source で指定)。 sourceを次のように指定しています clientip
これは、NginxユーザーのIPアドレスが保存されているフィールドの名前だからです。 IPアドレス情報を別のフィールドに保存する場合は、必ずこの値を変更してください。
保存して終了。
変更を有効にするには、Logstashを再起動しましょう。
- sudo service logstash restart
すべてが正しく構成されていれば、LogstashはGeoIP座標をNginxアクセスログ(またはログを生成しているアプリケーション)とともに保存しているはずです。 この変更はではなく遡及的であるため、以前に収集したログにはGeoIP情報が追加されないことに注意してください。 GeoIP機能がKibanaで正しく機能していることを確認しましょう。
Kibanaに接続する
LogstashがGeoIPを有効にして正しく構成されているかどうかを確認する最も簡単な方法は、WebブラウザーでKibanaを開くことです。 今それをしなさい。
LogstashでGeoIPモジュールを有効にしてからアプリケーションが生成したログメッセージを見つけます。 Nginxの例に従って、Kibanaで検索できます type: "nginx-access"
ログの選択を絞り込みます。
次に、メッセージの1つを展開して、フィールドのテーブルを確認します。 あなたはいくつかの新しいを見る必要があります geoip
IPアドレスが実際の地理的位置にどのようにマッピングされたかに関する情報を含むフィールド。 例えば:
注:ログが表示されない場合は、アプリケーションにアクセスしてログを生成し、時間フィルターが最近の時刻に設定されていることを確認してください。
また、KibanaはすべてのIPアドレスのジオロケーションを解決できない場合があることに注意してください。 1つのアドレスでテストしているだけで、それが機能していないように見える場合は、トラブルシューティングの前に他のアドレスを試してください。
その後、GeoIP情報が表示されない場合(または正しくない場合)は、Logstashが正しく構成されていない可能性があります。
このビューに適切なGeoIP情報が表示されている場合は、マップの視覚化を作成する準備ができています。
タイルマップの視覚化を作成する
注: Kibanaの視覚化をまだ使用していない場合は、Kibanaダッシュボードと視覚化のチュートリアルを確認してください。
KibanaのIPアドレスをマップするために、タイルマップの視覚化を作成しましょう。
メインメニューの[視覚化]をクリックします。
新しいビジュアライゼーションの作成で、タイルマップを選択します。
検索ソースの選択で、どちらのオプションも選択できます。 マップするログメッセージを検索する保存済み検索がある場合は、その検索を自由に選択してください。 新しい検索からをクリックしたかのように進みます。
インデックスパターンの選択のプロンプトが表示されたら、ドロップダウンからfilebeat-*を選択します。 これにより、白地図のあるページに移動します。
検索バーに次のように入力します type: nginx-access
または、geoip情報を含むログに一致する別の検索用語。 期間(ページの右上隅)がいくつかのログエントリと一致するのに十分であることを確認してください。 マップの代わりに結果が見つかりませんが表示された場合は、検索用語または時間を更新する必要があります。
結果が得られたら、左側の列のbucketsヘッダーの下にあるGeoCoordinatesをクリックします。 緑色の「再生」ボタンがアクティブになります。 それをクリックすると、地理的位置が地図上にプロットされます。
視覚化に満足したら、検索バーの横にある視覚化の保存ボタン(フロッピーディスクのアイコン)を使用して保存してください。
結論
これで、GeoIP情報がKibanaにマッピングされたので、設定する必要があります。 それ自体で、ユーザーの地理的な場所の大まかなアイデアが得られるはずです。 ダッシュボードに追加して他のログと関連付けると、さらに便利になります。
幸運を!