Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
В журнале доступа с 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.