From: Осипов Станислав <demofly at mail ru>
Newsgroups: email
Date: Mon, 16 Jan 2004 14:31:37 +0000 (UTC)
Subject: Подсчет трафика проходящего через Squid используя MySQL
Как сделать подсчет трафика Squid через MySQL в Linux
-------------------
Мой механизм был мной создан для организации, в которой я работаю. У нас
стоит сервер-шлюз Linux 2.6.0 через который по гигабитным интерфейсам
люди выходят в инернет через NAT.
Пару лет назад я мечтал разработать такой механизм для другой
организации, и вот сейчас вам представляю простейшую и наглядную схему.
Общая схема состоит из пяти составляющих:
1. Squid сервер, ведущий логи в native squid формате (родной формат,
несовместимый с форматом apache-логов)
2. MySQL сервер
3. iptables, которая на шлюзе весь HTTP трафик заворачивает на проксю Squid ()
4. Два сделанных мной скрипта. Один squid-to-mysql, для перегонки лога в
БД, второй - index.php для отображения статистики.
5. Apache+PHP - нужен для работы php-скрипта, отвечающего за отображение
трафика по WWW.
Для тех, у кого Squid используется не как прозрачный прокси, третья
составляющая системы (iptables) не обязательна и на остальное, здесь
описанное не влияет.
Сделаю сразу западло: отошлю вас на поиск короткой статьи о создании
прозрачной прокси, которую я когда-то давно здесь нашел и потерял. Она
может вам понадобиться, если вы пожелаете сделать себе прозрачный
прокси. Себе такую я сделал исключительно из соображений удобства
обслуживания парка компьютеров - не нужно бегать к каждому компу и
прописывать настройки прокси.
У меня это работает на: squid 2.5, MySQL 4.0.14, iptables 1.27a, Apache
1.3.27, PHP 4.3.2.
Итак, чтобы приступить к самому созданию всего, что может понадобиться,
я полагаю, что у вас уже установлен mysql, squid и все настроено.
Далее я буду полагать, что лог посещений squid лежит в
/var/log/squid/access.log
Делаем скрипт squid-to-mysql следующего содержания:
и размещаем его, например, в папке с нашими скриптами /scripts/
После того, как мы подготовим MySQL-структуры, не забудьте его повесить
в расписание crontab с частотой выполнения на ваше усмотрение
(оптимально - раз в сутки в 2-3 часа ночи).
Первая строка скрипта забирает лог на обработку в отдельный файл, ибо
сразу во второй строке мы опустошаем содержимое лога.
Третья строка - собственно перегон лога в mysql запросы, и немедленная
передача сгенерированных запросов самой БД.
Четвертая - собссно, уборка за собой. Как видите, все проще простого.
Прежде чем запускать файл с таким содержимым, нам надо создать структуры
для хранения данных о трафике.
Заходите:
mysql -u root -p
введите пароль доступа к БД (в вышеприведенном скрипте я полагал и буду
далее полагать, что он my_sql_passwd) далее в mysql консоли вводим такие
команды:
mysql>create database traffics;
mysql>use traffics;
mysql>create table squid(ip varchar(16), bytes bigint unsigned, link text, trans varchar(65), time datetime);
все, с БД мы справились. Выходим из mysql.
Теперь надо сделать скрипт для чтения статистики в HTML. Я полагаю, что
когда вы набирали в поиске squid+mysql, это значит, что вы стремитесь
использовать mysql для упрощения работы с данными, и, следовательно,
используете PHP для работы с MySQL в скриптах веб-сервера. Исходя из
предположения, что у вас с Apache+PHP все ок (а если нет, ищите тут
доки, их тут много), я напишу свой скрипт отображения ежемесячной
статистики на PHP.
Пусть у нас корень документов веб-сервера apache в /www/htdocs/.
создадим в нем папку reports:
#mkdir /www/htdocs/reports
в папке /www/htdocs/reports создаем файл index.php следующего содержания
(если просто скопировать, ничего не пострадает, так как скрипт делает
только самое необходимое - соединияется с БД, запрашивает отчет,
конструирует HTML, и отдает клиенту):
Это сделано для полноценной работы скрипта php. Механизм несовершенен с
точки зрения безопасности, можете искать обходные пути для правильного
(полностью безопасного) рефрешинга логов из native squid в mysql по той
причине, что последней командой мы открыли на запись файл логов прокси
группе "others".
Далее, если я хочу, чтобы только нужные мне IP-адреса могли иметь доступ
к этому скрипту, я делаю в httpd.conf (конфиг веб-сервера Apache, эта
настройка необязательна):
<Location /reports/>
order allow,deny
allow from 192.168.3.0/24 127.0.0.0/8
</Location>
Где 192.168.3.0/24 - моя локальная сеть. 24 - это маска, она заменяет
маску 255.255.255.0
580 Прочтений • [Подсчет трафика проходящего через Squid используя MySQL (squid traffic mysql isp billing linux)] [08.05.2012] [Комментариев: 0]