Как сопоставить местоположение пользователя с помощью GeoIP и ELK (Elasticsearch, Logstash и Kibana)

Вступление

IP Geolocation, процесс, используемый для определения физического местоположения IP-адреса, может использоваться для различных целей, таких как персонализация контента и анализ трафика. Анализ трафика с помощью геолокации может предоставить ценную информацию о вашей пользовательской базе, поскольку он позволяет вам легко увидеть, откуда они приходят. Это может помочь вам принимать обоснованные решения об идеальном географическом (-ых) местоположении (-ях) серверов приложений и о том, кто является вашей текущей аудиторией.

В этом руководстве мы покажем вам, как создать визуальное географическое отображение IP-адресов пользователей вашего приложения с помощью Elasticsearch, Logstash и Kibana.

Вот краткое объяснение того, как все это работает. Logstash использует базу данных GeoIP для преобразования IP-адресов в пару координат широты и долготы, т.е. приблизительное физическое местоположение IP-адреса. Данные координат хранятся в Elasticsearch в полях + geo_point +, а также преобразуются в строку + geohash +. Затем Кибана может прочитать строки геохаш и нарисовать их в виде точек на карте Земли. В Kibana 4 это называется визуализацией Tile Map.

Давайте посмотрим на предпосылки сейчас.

Предпосылки

Чтобы следовать этому руководству, у вас должен быть рабочий стек ELK. Кроме того, у вас должны быть журналы, содержащие IP-адреса, которые можно отфильтровать в поле, например журналы доступа веб-сервера. Если у вас еще нет этих двух вещей, вы можете следовать первым двум учебникам в этой серии. В первом руководстве будет настроен стек ELK, а во втором будет показано, как собирать и фильтровать журналы доступа Nginx или Apache:

Добавить привязку geo_point к индексу Filebeat

Предполагая, что вы выполнили обязательные уроки, вы уже сделали это. Однако мы включаем этот шаг снова, если вы его пропустили, поскольку для визуализации 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]

Настройте Logstash для использования GeoIP

Чтобы Logstash мог хранить координаты GeoIP, вам нужно определить приложение, которое генерирует журналы, содержащие публичный IP-адрес, который вы можете отфильтровать как дискретное поле. Довольно распространенным приложением, которое генерирует журналы с этой информацией, является веб-сервер, такой как Nginx или Apache. Мы будем использовать журналы доступа Nginx в качестве примера. Если вы используете разные журналы, внесите необходимые изменения в пример.

В учебнике Adding Filters to 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}" }
   }



 }
}

Это настраивает фильтр для преобразования IP-адреса, хранящегося в поле ++ (указано в * source *). Мы указываем * source * как + clientip +, потому что это имя поля, в котором хранится IP-адрес пользователя Nginx. Обязательно измените это значение, если вы храните информацию об IP-адресе в другом поле.

Сохранить и выйти.

Чтобы изменения вступили в силу, давайте перезапустим Logstash:

sudo service logstash restart

Если все настроено правильно, Logstash теперь должен сохранять координаты GeoIP вместе с вашими журналами доступа Nginx (или любым приложением, генерирующим журналы). Обратите внимание, что это изменение * не * имеет обратную силу, поэтому в ранее собранных вами журналах не будет добавлена ​​информация о GeoIP. + Давайте проверим, что функциональность GeoIP работает в Kibana.

Подключиться к Кибане

Самый простой способ проверить правильность настройки Logstash при включенном GeoIP - это открыть Kibana в веб-браузере. Сделай это сейчас.

Найдите сообщение журнала, сгенерированное вашим приложением, так как вы включили модуль GeoIP в Logstash. Следуя примеру Nginx, мы можем найти в Kibana + type:" "+, чтобы сузить выбор журнала.

Затем разверните одно из сообщений, чтобы посмотреть на таблицу полей. Вы должны увидеть несколько новых полей + geoip +, которые содержат информацию о том, как IP-адрес был сопоставлен с реальным географическим местоположением. Например:

изображение: https: //assets.digitalocean.com/articles/elk/geoip_kibana/geoip_fields.png [Примеры полей GeoIP]

Если вы видите правильную информацию GeoIP в этом представлении, вы готовы создать визуализацию своей карты.

Визуализация карты плиток

Чтобы отобразить IP-адреса в Kibana, давайте создадим визуализацию Tile Map.

Нажмите * Визуализировать * в главном меню.

В разделе * Создать новую визуализацию * выберите * Карта листов *.

В разделе * Выберите источник поиска * вы можете выбрать любой вариант. Если у вас есть сохраненный поиск, который найдет сообщения журнала, которые вы хотите отобразить, не стесняйтесь выбирать этот поиск. Мы будем действовать так, как будто вы нажали * Из нового поиска *.

При появлении запроса * Выберите шаблон индекса * выберите * filebeat - ** из выпадающего списка. Это приведет вас к странице с пустой картой:

изображение: https: //assets.digitalocean.com/articles/elk/geoip_kibana/kibana-blank-map.png [Интерфейс построения плитки по умолчанию в Кибане]

В строке поиска введите + type: nginx-access + или другое условие поиска, которое будет соответствовать журналам, которые содержат информацию о геоипах. Убедитесь, что ваш период времени (верхний правый угол страницы) достаточен для соответствия некоторым записям журнала. Если вы видите * Результаты не найдены * вместо карты, вам необходимо обновить условия поиска или время.

Как только у вас появятся результаты, нажмите * Geo Coordinates * под заголовком * buckets * в левом столбце. Зеленая кнопка «play» станет активной. Нажмите на нее, и ваши геолокации будут нанесены на карту:

изображение: https: //assets.digitalocean.com/articles/elk/geoip_kibana/kibana-map-full.png [Карта плиток Кибана с несколькими точками]

Если вы довольны своей визуализацией, обязательно сохраните ее с помощью кнопки * Сохранить визуализацию * (значок дискеты) рядом с панелью поиска.

Заключение

Теперь, когда у вас есть информация о GeoIP, отображаемая в Кибане, вы должны быть настроены. Само по себе это должно дать вам приблизительное представление о географическом положении ваших пользователей. Это может быть еще более полезно, если вы сопоставите его с другими журналами, добавив его на панель инструментов.

Удачи!

Related