Подсчёт трафика в nginx: часть 2
Дальнейшие усовершенствования процесса
В статье "Подсчёт трафика в nginx" я приводил один из возможных вариантов живого подсчёта трафика в nginx.
У прошлого решения есть недостатки:
- используется три лишних процесса;
- используется много файловых дескрипторов (зависит от количества виртуальных хостов).
Я на днях нашёл еще один вариант.
Будем использовать немного другую структуру таблицы:
`in` INTEGER UNSIGNED NOT NULL,
`out` INTEGER UNSIGNED NOT NULL,
`host` VARCHAR(64) NOT NULL,
`dt` MEDIUMINT NOT NULL
);
Основное отличие — не используются поля, которые легко вычислить (`sum` = `in` + `out`, `ym` = EXTRACT(YEAR_MONTH FROM `dt`)) и отсутствуют индексы (ибо при высокой посещаемости сжимать таблицу на живую — это самоубийство чистой воды).
Переходим к магии.
Создаём лог:
А далее, если Вы хорошо знакомы с программированием под Linux/Unix, наверное, догадались: во все виртуальные хосты прописываем
Формат trafctr определён следующим образом (извращение):
Фактически, в pipe будет писаться такой запрос:
(
123,
456,
"myserver.com",
UNIX_TIMESTAMP(
STR_TO_DATE(
SUBSTR("18/Feb/2009:17:24:37 -0500", 1, 20),
CONCAT(CHAR(37), "d/", CHAR(37), "b/", CHAR(37), "Y:", CHAR(37), "H:", CHAR(37), "i:", CHAR(37), "s")
)
)
);
SUBSTR() убирает хвост в виде часового пояса, STR_TO_DATE() используется для создания строки с временем, которую поймёт UNIX_TIMESTAMP(), а CONCAT()… Что же, CONCAT() нужен, чтобы nginx не ругался на строки вида %d/%b/%Y:%H:%i:%s. Не любит nginx знак процента.
Как данные попадают в базу? Всё просто:
Следующий этап (часть 3): написание демона, заменяющего mysql (как процесс). Демон будет сжимать данные на лету и передавать их MySQL-серверу. Благодаря этому мы снизим нагрузку на MySQL (запросы будут передаваться в виде extended insert, а сами данные уже будут просуммированы).
Связанные записи
Автор: Vladimir; опубликовано в: Linux, MySQL, Администрирование; метки: Linux, MySQL, nginx, UNIX, лог, трафикФев
2009


Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.






[...] Подсчёт трафика в nginx: часть 2. [...]
С уводольствием пожал бы автору руку, благо, его блог – чудо.
Загуглил, попал на данный блог. Статьи очень инетересные, мне как начинающему веб-разработчику. А метод подсчёта трафика – и вовсе чудо
спасибо автору
а не проще использовать LOAD DATA ,?
Проще, но MySQL автоматом дату не распарсит.