So kartieren Sie den Benutzerstandort mit GeoIP und ELK (Elasticsearch, Logstash und Kibana)

Einführung

IP-Geolocation, der Prozess zur Bestimmung des physischen Standorts einer IP-Adresse, kann für eine Vielzahl von Zwecken eingesetzt werden, z. B. für die Personalisierung von Inhalten und die Analyse des Datenverkehrs. Eine Verkehrsanalyse nach Standort kann wertvolle Einblicke in Ihre Nutzerbasis liefern, da Sie leicht sehen können, woher sie kommen. Auf diese Weise können Sie fundierte Entscheidungen über den idealen geografischen Standort (die idealen geografischen Standorte) Ihrer Anwendungsserver und die aktuelle Zielgruppe treffen.

In diesem Tutorial zeigen wir Ihnen, wie Sie mithilfe von Elasticsearch, Logstash und Kibana eine visuelle geografische Zuordnung der IP-Adressen der Benutzer Ihrer Anwendung erstellen.

Hier finden Sie eine kurze Erläuterung der Funktionsweise. Logstash verwendet eine GeoIP-Datenbank, um IP-Adressen in ein Längen- und Breitengrad-Koordinatenpaar zu konvertieren, d. H. Der ungefähre physische Standort einer IP-Adresse. Die Koordinatendaten werden in Elasticsearch in "+ geo_point " - Feldern gespeichert und auch in eine " geohash +" - Zeichenfolge konvertiert. Kibana kann dann die Geohash-Zeichenfolgen lesen und sie als Punkte auf eine Karte der Erde zeichnen. In Kibana 4 wird dies als Kachelkartenvisualisierung bezeichnet.

Werfen wir jetzt einen Blick auf die Voraussetzungen.

Voraussetzungen

Um diesem Tutorial folgen zu können, benötigen Sie einen funktionierenden ELK-Stack. Darüber hinaus müssen Protokolle vorhanden sein, die IP-Adressen enthalten, die in ein Feld gefiltert werden können, z. B. Zugriffsprotokolle für Webserver. Wenn Sie diese beiden Dinge noch nicht haben, können Sie den ersten beiden Tutorials in dieser Reihe folgen. Das erste Tutorial richtet einen ELK-Stack ein und das zweite zeigt Ihnen, wie Sie Nginx- oder Apache-Zugriffsprotokolle sammeln und filtern:

Hinzufügen der geo_point-Zuordnung zum Filebeat-Index

Vorausgesetzt, Sie haben die vorausgesetzten Lernprogramme befolgt, haben Sie dies bereits getan. Wir führen diesen Schritt jedoch erneut aus, falls Sie ihn übersprungen haben, da die TileMap-Visualisierung erfordert, dass Ihre GeoIP-Koordinaten in Elasticsearch als Typ "+ geo_point +" gespeichert sind.

Laden Sie auf dem Server, auf dem Elasticsearch installiert ist, die Filebeat-Indexvorlage in Ihr Ausgangsverzeichnis herunter:

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

Laden Sie dann die Vorlage mit dem folgenden Befehl in Elasticsearch:

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

Konfigurieren Sie Logstash für die Verwendung von GeoIP

Damit Logstash GeoIP-Koordinaten speichert, müssen Sie eine Anwendung identifizieren, die Protokolle generiert, die eine öffentliche IP-Adresse enthalten, die Sie als diskretes Feld filtern können. Eine ziemlich allgegenwärtige Anwendung, die Protokolle mit diesen Informationen erstellt, ist ein Webserver wie Nginx oder Apache. Wir werden Nginx-Zugriffsprotokolle als Beispiel verwenden. Wenn Sie andere Protokolle verwenden, nehmen Sie die erforderlichen Anpassungen am Beispiel vor.

Im Tutorial Adding Filters to Logstash wird der Nginx-Filter in einer Datei mit dem Namen `+ 11- gespeichert. nginx-filter.conf + `. Wenn sich Ihr Filter an einer anderen Stelle befindet, bearbeiten Sie stattdessen diese Datei.

Bearbeiten wir jetzt den Nginx-Filter:

sudo vi /etc/logstash/conf.d/

Fügen Sie unter dem Abschnitt "+ grok +" den hervorgehobenen Teil hinzu:

11-nginx-filter.conf

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



 }
}

Hiermit wird der Filter so konfiguriert, dass eine im Feld "+" gespeicherte IP-Adresse konvertiert wird (angegeben in "* source *"). Wir geben die * Quelle * als ` clientip +` an, da dies der Name des Feldes ist, in dem die IP-Adresse des Nginx-Benutzers gespeichert wird. Stellen Sie sicher, dass Sie diesen Wert ändern, wenn Sie die IP-Adressinformationen in einem anderen Feld speichern.

Speichern und schließen.

Starten Sie Logstash neu, damit die Änderungen wirksam werden:

sudo service logstash restart

Wenn alles richtig konfiguriert wurde, sollte Logstash jetzt die GeoIP-Koordinaten mit Ihren Nginx-Zugriffsprotokollen speichern (oder mit welcher Anwendung auch immer). Beachten Sie, dass diese Änderung * nicht * rückwirkend ist, sodass Ihren zuvor gesammelten Protokollen keine GeoIP-Informationen hinzugefügt werden. + Vergewissern Sie sich, dass die GeoIP-Funktionalität in Kibana ordnungsgemäß funktioniert.

Stellen Sie eine Verbindung zu Kibana her

Der einfachste Weg zu überprüfen, ob Logstash bei aktiviertem GeoIP korrekt konfiguriert wurde, besteht darin, Kibana in einem Webbrowser zu öffnen. Mach das jetzt.

Suchen Sie eine Protokollnachricht, die Ihre Anwendung generiert hat, seit Sie das GeoIP-Modul in Logstash aktiviert haben. Nach dem Nginx-Beispiel können wir Kibana nach "+" durchsuchen, um die Protokollauswahl einzugrenzen.

Erweitern Sie dann eine der Nachrichten, um die Tabelle der Felder anzuzeigen. Sie sollten einige neue "+ geoip +" - Felder sehen, die Informationen darüber enthalten, wie die IP-Adresse einem realen geografischen Ort zugeordnet wurde. Zum Beispiel:

Wenn in dieser Ansicht die richtigen GeoIP-Informationen angezeigt werden, können Sie Ihre Kartenvisualisierung erstellen.

Kachelkarten-Visualisierung erstellen

Um die IP-Adressen in Kibana zuzuordnen, erstellen wir eine Kachelkarten-Visualisierung.

Klicken Sie im Hauptmenü auf * Visualisieren *.

Wählen Sie unter * Neue Visualisierung erstellen * die Option * Karte kacheln *.

Unter * Suchquelle auswählen * können Sie eine der beiden Optionen auswählen. Wenn Sie über eine gespeicherte Suche verfügen, die die zuzuordnenden Protokollnachrichten findet, können Sie diese Suche auswählen. Wir werden so fortfahren, als ob Sie auf * Aus einer neuen Suche * geklickt hätten.

Wenn Sie aufgefordert werden, * ein Indexmuster auszuwählen , wählen Sie * filebeat - * aus der Dropdown-Liste. Hiermit gelangen Sie zu einer Seite mit einer leeren Karte:

image: https://assets.digitalocean.com/articles/elk/geoip_kibana/kibana-blank-map.png [Kibana-Standardschnittstelle zum Erstellen von Kachelkarten]

Geben Sie in der Suchleiste "+" ein: nginx-access + "oder einen anderen Suchbegriff, der mit Protokollen übereinstimmt, die Geoip-Informationen enthalten. Stellen Sie sicher, dass Ihr Zeitraum (obere rechte Ecke der Seite) ausreicht, um mit einigen Protokolleinträgen übereinzustimmen. Wenn anstelle der Karte * Keine Ergebnisse gefunden * angezeigt wird, müssen Sie Ihre Suchbegriffe oder die Uhrzeit aktualisieren.

Wenn Sie einige Ergebnisse erhalten haben, klicken Sie auf * Geo-Koordinaten * unter der Überschrift * Buckets * in der linken Spalte. Die grüne "Play" -Taste wird aktiv. Klicken Sie darauf und Ihre Geolokalisierung wird auf der Karte angezeigt:

image: https: //assets.digitalocean.com/articles/elk/geoip_kibana/kibana-map-full.png [Kibana-Kachelkarte mit mehreren Punkten]

Wenn Sie mit Ihrer Visualisierung zufrieden sind, müssen Sie sie mit der Schaltfläche * Save Visualization * (Diskettensymbol) neben der Suchleiste speichern.

Fazit

Nachdem Sie Ihre GeoIP-Informationen in Kibana kartiert haben, sollten Sie eingestellt sein. An sich sollte es Ihnen eine ungefähre Vorstellung vom geografischen Standort Ihrer Benutzer geben. Es kann noch nützlicher sein, wenn Sie es mit Ihren anderen Protokollen in Beziehung setzen, indem Sie es einem Dashboard hinzufügen.

Viel Glück!