Сбор данных из nginx и оповещение пользователей об уникальной квоте посетителей - PullRequest
1 голос
/ 13 ноября 2011

У меня есть PoC, который я пытаюсь сделать, в котором я использую nginx в качестве веб-сервера.Меня интересует оповещение пользователей по электронной почте, когда достигнут определенный процент, скажем, 90% назначенной уникальной квоты посетителей, скажем 1000.

Вот что я мог бы подумать:

  • Включите acesslogs в nginx, запустите cron на хосте nginx, который запускается с часовыми интервалами и собирает уникальные IP-адреса из журнала доступа, помещают их в таблицу базы данных (с помощью запроса REPLACE).Другой cron запускается также с почасовым интервалом, немного позже первого cron, проверяет количество записей в этой таблице и отправляет наши оповещения.Каждый новый месяц мы усекаем все записи в таблице unique_hits_ip_username.Журналы чередуются еженедельно.

Что меня беспокоит:

  • Запуск 2 крон в час может повлиять на производительность, если база пользователей растет.Если мы увеличим интервал, мы можем пропустить некоторые ориентиры, такие как, скажем, если при последнем запуске квота пользователя составляла 80%, а затем при следующем запуске она достигает 110%.Таким образом, мы будем отправлять электронную почту с квотой, достигающей 90%, в то время как на самом деле она даже больше назначенной.
  • База данных, содержащая уникальный журнал ip, может вырасти до огромных размеров.

ПервоначальноЯ планировал, что оба крона будут в php, где я буду читать журнал доступа nginx, используя функцию file ().

Есть ли у вас лучшая альтернатива?или какие-то настройки к этому подходу?Пожалуйста, предложите.

1 Ответ

0 голосов
/ 13 ноября 2011

Попробуйте настроить директиву access_log для входа в Unix FIFO-сокет.Создайте FIFO, используя mknod /path/to/access.log, и попытайтесь настроить директиву access_log для этого объекта FIFO.

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

Это удалит ежечасные всплески дискового ввода-вывода и даст вам гораздо более отзывчивые предупреждения.

Недостатком является то, что nginx может блокировать запись этих журналов доступа.(Я сомневаюсь в этом, но это возможно.) Возможно, вы захотите запустить свой сценарий на уровне несколько ниже nice, чем на веб-сервере, просто чтобы убедиться, что вы всегда можете извлечь записи журнала доступа из FIFO быстрее, чем они выполняются.надевать.(Меньшие значения nice имеют более высокие приоритеты. Подробнее см. nice(1).)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...