Руководства

Тепловая карта из журналов IP-адресов

В журнале доступа с IP-адресами скрыта реальная географическая информация, но она становится доступна только после того, как каждый адрес преобразован в координаты, которые картографический инструмент может отобразить.

Извлечение адресов из журнала

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

sort logfile.txt | awk '{print $1}' | sort -u > unique_ips.txt

Пакетное определение

Отправьте список уникальных адресов в /v1/ip массивом в пакетном POST-запросе.

POST /v1/ip
Content-Type: application/json

["203.0.113.10", "198.51.100.25", "192.0.2.44"]
{
  "status": "ok",
  "results": [
    {"ip": "203.0.113.10", "version": 4, "found": true, "country": "Germany", "country_code": "DE", "region": "Berlin", "city": "Berlin", "postcode": "10115", "lat": 52.5300, "lon": 13.3800, "timezone": "Europe/Berlin", "asn": 1111, "org": "Example ISP"},
    {"ip": "198.51.100.25", "version": 4, "found": true, "country": "Spain", "country_code": "ES", "region": "Madrid", "city": "Madrid", "postcode": "28001", "lat": 40.4168, "lon": -3.7038, "timezone": "Europe/Madrid", "asn": 2222, "org": "Example Networks"},
    {"ip": "192.0.2.44", "version": 4, "found": false}
  ]
}

Подготовка данных для тепловой карты

Сопоставьте каждую возвращённую пару lat и lon с частотой появления исходного адреса в журнале, чтобы посетитель, встречающийся в журнале сто раз, имел пропорционально больший вес, чем тот, кто встречается один раз. Передайте получившийся список взвешенных точек с координатами в тот картографический инструмент или инструмент построения графиков, которым вы строите тепловую карту.

Второй пример: разбивка по странам

Если точная поточечная тепловая карта даёт больше деталей, чем вам нужно, агрегирование по country_code вместо исходных координат даёт более простое представление в стиле картограммы: одно значение на страну вместо разбросанного облака точек. Используется точно такое же пакетное определение, только результаты после получения группируются иначе, поэтому построение обоих представлений на основе одних и тех же данных ничего дополнительно не стоит.

Обработка адресов, которые не определяются

Запись с found: false, как в третьем результате выше, следует просто исключить из тепловой карты, а не отображать в местоположении по умолчанию, поскольку иначе нераспознанный трафик вводил бы в заблуждение, скапливаясь в том месте карты, которое не имеет никакого отношения к его реальному источнику.

Распространённая ошибка, которой стоит избегать

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

Пограничный случай: трафик хостингов и дата-центров

Поле org у определённого адреса часто показывает, что трафик идёт из дата-центра или диапазона облачного хостинга, а не из домашнего или мобильного подключения. Это разумный сигнал для отсеивания трафика ботов или парсеров, прежде чем он исказит тепловую карту, которая должна отражать реальное местоположение посетителей.

Сколько это стоит

Доступной по цене эту задачу делает именно определение уникальных адресов, а не каждой строки журнала, поскольку стоимость составляет один запрос на уникальный адрес, а не на строку журнала. Журнал из миллиона строк, но всего с несколькими тысячами уникальных адресов посетителей стоит несколько тысяч запросов, а не миллион. Для крупного сайта это вполне по силам с предоплаченным балансом или пакетом Unlimited, а для небольшого часто укладывается в бесплатный лимит. Отслеживание заголовка X-Quota-Used во время крупного пакетного задания является простым способом убедиться, что расход идёт так, как ожидалось, ещё до завершения задания.

Удаление дубликатов перед определением является главным рычагом, позволяющим сохранить доступную стоимость тепловой карты на основе журналов. Формат пакетного запроса полностью описан в документации по определению IPv4.