Определение местоположения пользователя при помощи GeoIP и ELK

Геолокация по ip-адресу – это процесс определения физического местоположения пользователей по их ip-адресам. Геолокация по ip используется для различных целей, например, для персонализации контента и анализа трафика.

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

При этом Logstash использует БД GeoIP для преобразования IP-адресов в координаты (широту и долготу) и таким образом определить приблизительное физическое местоположение пользователя. Эти координаты Elasticsearch хранит в полях geo_point и преобразовывает их в строку geohash. Затем Kibana читает строку Geohash и выводит их в виде точек на карте.

Требования

Для выполнения этого руководства нужно установить программы стека ELK. Кроме того, нужно подготовить логи access для IP-адресов. Об этом можно прочесть в этой статье.

Загрузка базы данных GeoIP

MaxMind предоставляет платные и бесплатные БД GeoIP (платные БД более точные). Logstash поставляется с БД GeoIP City, или GeoLite City.

В данном руководстве используется последняя доступная БД GeoLite City; при желании используйте любую другую версию базы данных GeoIP.

Итак, загрузите gzip-архив базы GeoLite City в каталог /etc/logstash:

cd /etc/logstash
sudo curl -O "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"

Распакуйте архив:

sudo gunzip GeoLiteCity.dat.gz

Эта команда извлечёт базу GeoLite City в файл /etc/logstash/GeoLiteCity.dat, который позже нужно будет добавить в конфигурацию Logstash.

Примечание: MaxMind обновляет БД GeoLite в первый вторник каждого месяца. Чтобы использовать актуальные данные, настройте cron для автоматического обновления БД GeoLite.

Теперь можно приступать к настройке Logstash для использования GeoIP.

Настройка Logstash для поддержки GeoIP

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

Примечание: Если вы используете другие логи , просто внести необходимые коррективы в код.

В руководстве «Фильтры Logstash как способ улучшения сбора логов» фильтр Nginx хранится в 11-nginx.conf; при необходимости откорректируйте это значение.

Отредактируйте фильтр Nginx:

sudo vi /etc/logstash/conf.d/11-nginx.conf

В раздел grok (блок if [type]…) добавьте следующий код:

geoip {
source => "clientip"
target => "geoip"
database => "/etc/logstash/GeoLiteCity.dat"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ] }
mutate {
convert => [ "[geoip][coordinates]", "float"] }

Этот код настраивает фильтр для преобразования IP-адресов, хранящихся в поле clientip (опция source), при помощи БД GeoLite City.

Примечание: В опции source нужно указать имя поля, в котором хранится IP-адрес пользователя Nginx (в данном случае это clientip); не забудьте изменить это значение, если IP-адреса хранятся в другом поле.

После редактирования фильтр Nginx (файл 11-nginx.conf) выглядит так:

filter {
if [type] == "nginx-access" {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
geoip {
source => "clientip"
target => "geoip"
database => "/etc/logstash/GeoLiteCity.dat"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ] }
mutate {
convert => [ "[geoip][coordinates]", "float"] }
}
}

Сохраните и закройте файл.

Чтобы обновить настройки, перезапустите Logstash:

sudo service logstash restart

Если всё настроено правильно, Logstashтбудет хранить координаты GeoIP и логи доступа Nginx (или другого приложения, в зависимости от конфигурации).

Обратите внимание, что эти изменения настроек не имеют обратной силы, так что ранее собранные логи не будут содержать данных для GeoIP.

Подключение к Kibana

Чтобы убедиться, что конфигурация Logstash выполнено и данные GeoIP добавлены, откройте Kibana в браузере.

Найдите сообщение о том, что приложение сгенерировано после включения модуля GeoIP для Logstash. В Nginx можно сузить поиск логов Kibana, набрав  type: “nginx-access”.

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

Примечание: Если вы не видите никаких логов, сгенерируйте несколько логов, посетив приложение, и убедитесь, что временной фильтр установлен правильно. Если вы не видите никаких данных GeoIP (или же они неправильны), вероятно, следует проверить конфигурацию Logstash.

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

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

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

В главном меню кликните Visualize. В разделе Create a new visualization выберите Tile map.

В разделе Select a search source выберите любую опцию. Можно использовать предварительно сохранённый поиск, который найдёт лог-сообщения для отображения.

В Select buckets type выберите Geo Coordinates.

В выпадающем меню Aggregation выберите Geohash.

В выпадающем меню Field выберите geoip.location.

Нажмите Apply.

На экране появится карта, отображающая местоположения IP-адресов. Если какие-либо из выбранных логов содержат информацию GeoIP, они будут показаны на карте.

Обратите внимание на слайдер Precision и компоненты View Options, чтобы отредактировать внешний вид карты.

Слайдер Precision позволяет отрегулировать длину строки Geohash.

Заключение

Теперь данные GeoIP отображаются на карте Kibana, что даёт общее представление о географическом положении пользователей. Геолокация по ip-адресу может быть более полезной, если добавить в неё логи других приложений.

Tags: , , , , , ,

Добавить комментарий