Comment mapper l’emplacement de l’utilisateur avec GeoIP et ELK (Elasticsearch, Logstash et Kibana)

introduction

La géolocalisation IP, le processus utilisé pour déterminer l’emplacement physique d’une adresse IP, peut être exploitée à diverses fins, telles que la personnalisation du contenu et l’analyse du trafic. L’analyse du trafic par géolocalisation peut fournir de précieuses informations sur votre base d’utilisateurs, car elle vous permet de voir facilement d’où elles viennent. Cela peut vous aider à prendre des décisions éclairées sur le ou les emplacements géographiques idéaux de vos serveurs d’applications et sur votre public actuel.

Dans ce didacticiel, nous allons vous montrer comment créer une géocartographie visuelle des adresses IP des utilisateurs de votre application, à l’aide de Elasticsearch, Logstash et Kibana.

Voici une brève explication du fonctionnement de tout cela. Logstash utilise une base de données GeoIP pour convertir les adresses IP en une paire de coordonnées latitude et longitude, c.-à-d. l’emplacement physique approximatif d’une adresse IP. Les données de coordonnées sont stockées dans Elasticsearch dans des champs + geo_point + et sont également converties en une chaîne + geohash +. Kibana peut alors lire les chaînes de Geohash et les dessiner sous forme de points sur une carte de la Terre. Dans Kibana 4, ceci est connu sous le nom de visualisation de carte en mosaïque.

Voyons maintenant les conditions préalables.

Conditions préalables

Pour suivre ce didacticiel, vous devez disposer d’une pile ELK opérationnelle. En outre, vous devez disposer de journaux contenant des adresses IP pouvant être filtrées dans un champ, tels que les journaux d’accès au serveur Web. Si vous ne possédez pas déjà ces deux choses, vous pouvez suivre les deux premiers tutoriels de cette série. Le premier tutoriel va configurer une pile ELK, et le second vous montrera comment rassembler et filtrer les journaux d’accès Nginx ou Apache:

Ajouter le mappage geo_point à Filebeat Index

En supposant que vous ayez suivi les tutoriels préalables, vous l’avez déjà fait. Cependant, nous incluons à nouveau cette étape si vous l’avez ignorée, car la visualisation TileMap nécessite que vos coordonnées GeoIP soient stockées dans Elasticsearch sous un type + geo_point +.

Sur le serveur sur lequel Elasticsearch est installé, téléchargez le modèle d’index Filebeat dans votre répertoire personnel:

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

Chargez ensuite le modèle dans Elasticsearch avec cette commande:

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

Configurer Logstash pour utiliser GeoIP

Pour que Logstash stocke les coordonnées GeoIP, vous devez identifier une application générant des journaux contenant une adresse IP publique que vous pouvez filtrer en tant que champ discret. Une application relativement omniprésente qui génère des journaux avec ces informations est un serveur Web, tel que Nginx ou Apache. Nous allons utiliser les journaux d’accès Nginx comme exemple. Si vous utilisez des journaux différents, apportez les modifications nécessaires à l’exemple.

Dans le tutoriel Adding to Logstash, le filtre Nginx est stocké dans un fichier appelé `+ 11- nginx-filter.conf + `. Si votre filtre est situé ailleurs, éditez ce fichier à la place.

Éditons le filtre Nginx maintenant:

sudo vi /etc/logstash/conf.d/

Sous la section + grok +, ajoutez la partie en surbrillance ci-dessous:

11-nginx-filter.conf

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



 }
}

Cela configure le filtre pour convertir une adresse IP stockée dans le champ ++ (spécifié dans * source *). Nous spécifions la * source * comme + clientip + car il s’agit du nom du champ dans lequel l’adresse IP de l’utilisateur Nginx est stockée. Veillez à modifier cette valeur si vous stockez les informations d’adresse IP dans un champ différent.

Sauvegarder et quitter.

Pour que les modifications prennent effet, relançons Logstash:

sudo service logstash restart

Si tout était correctement configuré, Logstash devrait maintenant stocker les coordonnées GeoIP avec vos journaux d’accès Nginx (ou l’application générant les journaux). Notez que cette modification n’est * pas * rétroactive, vos informations collectées précédemment ne seront donc pas complétées par les informations GeoIP. + Vérifions que la fonctionnalité GeoIP fonctionne correctement dans Kibana.

Se connecter à Kibana

Le moyen le plus simple de vérifier si Logstash a été configuré correctement, avec GeoIP activé, consiste à ouvrir Kibana dans un navigateur Web. Faites ça maintenant.

Recherchez un message de journal généré par votre application depuis que vous avez activé le module GeoIP dans Logstash. En suivant l’exemple de Nginx, nous pouvons rechercher dans Kibana le type + type:" "+ pour restreindre la sélection du journal.

Développez ensuite l’un des messages pour consulter le tableau des champs. Vous devriez voir apparaître de nouveaux champs + geoip + contenant des informations sur la manière dont l’adresse IP a été mappée sur un emplacement géographique réel. Par exemple:

image: https: //assets.digitalocean.com/articles/elk/geoip_kibana/geoip_fields.png [Exemple de champs GeoIP]

Si vous voyez les informations GeoIP correctes dans cette vue, vous êtes prêt à créer la visualisation de votre carte.

Créer une visualisation de carte en mosaïque

Pour cartographier les adresses IP dans Kibana, créons une visualisation Tile Map.

Cliquez sur * Visualiser * dans le menu principal.

Sous * Créer une nouvelle visualisation *, sélectionnez * Carte en mosaïque *.

Sous * Sélectionnez une source de recherche *, vous pouvez sélectionner l’une ou l’autre des options. Si vous avez une recherche enregistrée qui trouvera les messages de journal que vous souhaitez mapper, n’hésitez pas à sélectionner cette recherche. Nous allons procéder comme si vous aviez cliqué sur * À partir d’une nouvelle recherche *.

Lorsque vous êtes invité à * Sélectionnez un modèle d’index , choisissez * filebeat - * dans le menu déroulant. Cela vous mènera à une page avec une carte vierge:

image: https: //assets.digitalocean.com/articles/elk/geoip_kibana/kibana-blank-map.png [Interface de création de carte de tuiles par défaut de Kibana]

Dans la barre de recherche, entrez + type: nginx-access + ou un autre terme de recherche correspondant aux journaux contenant des informations géographiques. Assurez-vous que votre période (coin supérieur droit de la page) est suffisante pour correspondre à certaines entrées du journal. Si vous voyez * Aucun résultat * au lieu de la carte, vous devez mettre à jour les termes de votre recherche ou l’heure.

Une fois que vous avez des résultats, cliquez sur * Coordonnées géographiques * sous l’en-tête * Seaux * dans la colonne de gauche. Le bouton vert “play” deviendra actif. Cliquez dessus et vos géolocalisations seront tracées sur la carte:

image: https: //assets.digitalocean.com/articles/elk/geoip_kibana/kibana-map-full.png [Carte de tuiles Kibana avec plusieurs points]

Lorsque vous êtes satisfait de votre visualisation, veillez à la sauvegarder à l’aide du bouton * Enregistrer la visualisation * (icône de la disquette) situé en regard de la barre de recherche.

Conclusion

Maintenant que vos informations GeoIP sont cartographiées à Kibana, vous devez les définir. En soi, cela devrait vous donner une idée approximative de la localisation géographique de vos utilisateurs. Cela peut être encore plus utile si vous le corrélez avec vos autres journaux en l’ajoutant à un tableau de bord.

Bonne chance!