airpwn / sams2

Automatically exported from code.google.com/p/sams2
GNU General Public License v2.0
0 stars 0 forks source link

Если logrotate для файла access.log у squid настроен на маленький размер файла и стоит дискретная обработка логов через длительный период времени, то возможна ситуация когда access.log будет ротирован дважды в этот установленный период и часть трафика не будет учтена.

Схожая ситуация Допустим, файл ротируется каждый час, а обработчик логов запускается каждые 40 минут тогда имеем примерно следующее: 00:00 запущена вся система с нуля, файл access.log нулевой обработчик логов обрабатывает информацию за период до 00:00 00:40 обработчик логов обрабатывает информацию за период 00:00-00:40 01:00 файл access.log ротируется 01:20 запускается обработчик логов и должен обрабатывать информацию за период 00:40-01:20, но данные в интервале времени 00:40-01:00 еще не обработаны, но уже в архиве, и не попадают в статистику

частичное решение проблемы: в настройках logrotate для файла access.log вставить строку prerotate /путь/к/файлу/samsparser endscript

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

Во избежание этой проблемы можно добавить опцию --wait-myself при которой обработчик не заканчивает работу если обнаружил уже запущенную копию, а ждет ее завершения и, дождавшись, выполняет порученное задание.


для обнаружения утечек памяти можно использовать valgrind --show-reachable=yes --log-file=samsparser.valgrind --leak-check=full ./samsparser

Таблица reconfig, возможные значения proxy/shutdown - Выполняется команда SHUTDOWNCMD из файла sams2.conf samsdaemon/shutdown - Завершается работа демона samsdaemon samsdaemon/reload - Обновляются настройки и данные из файла sams2.conf и базы данных squid/reconfig - Обновляются настройки и данные из файла sams2.conf и базы данных, обновляется конфигурационный файл squid с последующим его перезапуском. database/export - Содержимое таблицы squidcache записывается во внешний файл. Используется только для тестов(!)

Для того чтобы заработали плагины получения системной информации необходимо: 1) make -f Makefile.cvs 2) mkdir test 3) cd test 4) ../configure 5) make 6) su тут пароль 7) make install 8) mv /usr/local/lib/sams2/libloadavg.1.0.0 /usr/local/lib/sams2/libloadavg.so 9) /usr/local/bin/samsdaemon 10) exit (выход из рута) 11) mysql -u SAMSпользователь -p SAMSбаза_данных тут пароль CREATE TABLE sysinfo ( s_proxy_id INT NOT NULL , s_name VARCHAR( 50 ) NOT NULL , s_version VARCHAR( 10 ) NOT NULL , s_author VARCHAR( 30 ) NULL DEFAULT 'anonymous', s_info VARCHAR( 1024 ) NOT NULL DEFAULT 'not available', s_date DATETIME NOT NULL , s_status INT NOT NULL ); UPDATE websettings SET s_version='2.9.9'; 12) Дождаться когда пройдет время анализа access.log, если все прошло без ошибок, то в таблице sysinfo должна появится запись о подключенном плагине Этот плагин нужно активировать. update sysinfo set s_status=1; 13) Если поле s_date в данной записи меняется, значит плагин загружен и активен. Сам плагин тестовый и на самом деле всегда выдает одну и ту-же информацию. Его можно деактивировать: update sysinfo set s_status=0; 14) Выгрузить плагин пока можно только остановив демон, удалив файл плагина и снова запустив демон. 15) При возникающих проблемах рекомендую устанавливать уровень отладки 5 /usr/local/bin/samsdaemon -v -d5 -l file:/var/log/samsdaemon --fork 6й уровень еще выдержать можно, а выше это уже перебор PS Если не трогать структуру БД и оставить ее версию 1.9.9, но подключить плагин и включить режим verbose, то в сообщениях можно увидеть какой плагин подключен и что он сообщает

Как работает замена (перенаправление) адресов 1) Для начала необходимо убедится что структура БД позволяет это использовать, для этого нужно проверить существование поля s_dest в таблице redirect, и при необходимости добавить: ALTER TABLE redirect ADD s_dest VARCHAR( 128 ) NULL ; 2) Создаем группу перенаправления INSERT INTO redirect ( s_redirect_id , s_name , s_type , s_dest) VALUES ( NULL , 'GroupName', 'replace', 'http://www.ru'); 3) Заполняем группу шаблонами INSERT INTO url ( s_url_id , s_redirect_id , s_url) VALUES ( NULL , '12', '*.mail.ru\b'), ( NULL , '12', 'http://www.pisem.net/'); 12 - это значение s_redirect_id, полученное в п.2 4) Привязываем группу к шаблону INSERT INTO samsdb.sconfig ( s_shablon_id , s_redirect_id) VALUES ( '1', '12'); 12 - это значение s_redirect_id, полученное в п.2 1 - идентификатор шаблона 5) Перечитываем конфигурацию в редиректоре squid -k reconfig 6) Теперь при попытке набрать адрес http://www.pisem.net/ или mail.ru, www.mail.ru и т.д. Редиректор перенаправит на http://www.ru

Изменение шаблона пользователя при блокировке 1) Проверяем структуру БД и при необходимости подправляем ее ALTER TABLE shablon ADD s_shablon_id2 BIGINT( 20 ) UNSIGNED NULL ; 2) В существующем шаблоне в поле s_shablon_id2 прописываем идентификатор СУЩЕСТВУЮЩЕГО шаблона. 3) Пересобираем демонов, останавливаем, обновляем, стартуем. 4) Теперь работать это будет так: Если у шаблона, которому принадлежит пользователь, вторичный шаблон прописан (т.е. не NULL и не -1) То вместо блокировки у пользователя меняется статус на "Временно в другом шаблоне", и все параметры берутся из вторичного шаблона. Если же вдруг пользователь превысил лимиты и вторичного шаблона, то статус становится "Неактивный". Для того чтобы в таких случаях корректно работали ограничения по трафику, необходимо чтобы у самого пользователя стояло ограничение -1 (означающее что лимиты брать из шаблона). По окончанию периода лимита счетчики пользователя очищаются и статус меняется на активный. 5) Какие могут быть проблемы и неувязки: Q1) Разный тип авторизации основного и вторичного шаблона. A1) Сам дурак, думай что делаешь. Q2) Пользователи, временно находящиеся во вторичном шаблоне, так и не вернулись в основной, хотя период ограничения основного шаблона закончился. A2) Значит во вторичном шаблоне установлен другой период, они вернутся когда закончится период вторичного шаблона. Q3) Пользователя переместили в другой шаблон, а он игнорирует настройки нового шаблона. A3) Видимо, его переместили когда у него был статус "Временно в другом шаблоне", и у нового шаблона установлен вторичный. Поменяйте статус пользователя на "Активный".

В web интерфейсе можно выбрать скрипт, который нужно выполнить при отключении пользователей. Этот скрипт должен находится вместе с файлами web интерфейса. Однако демоны могут быть установлены на другой машине и не будут иметь доступа к этому скрипту. В свою очередь, из web интерфейса нет возможности получить список таких скриптов, если они находятся вместе с файлами демонов. Таким образом, единственный вариант получить этот список - это составлять его с помощью демона и складывать в БД. К тому-же на каждом прокси сервере этот список может отличатся. Следующая дополнительная таблица может решить эту проблему. CREATE TABLE udscripts ( s_proxy_id INT NOT NULL , s_name VARCHAR( 50 ) NOT NULL , ); Заполняется таблица при старте демона и при получении команды на перечитывание настроек (или реконфигурировании squid). Так-же возможен вариант заполнения (проверки актуальности) таблицы при парсинге лог файлов squid.

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

Коды в samslog 10 - служебные сообщения от демонов (samsdaemon, samsparser, sams2redir) 04 - сообщения от администраторов (устарело) 03 - сообщения об изменении базы записей squid 02 - сообщения, связанные с изменением групп адресов 01 - сообщения, связанные с изменением состояния пользователей