Skip to content

PavelVinogradov/sams2

Folders and files

NameName
Last commit message
Last commit date
Jan 16, 2011
Jan 6, 2014
Jan 6, 2014
Oct 10, 2010
Jan 16, 2011
May 11, 2017
Jan 16, 2011
Aug 8, 2010
Dec 14, 2008
Nov 29, 2013
Oct 6, 2014
Aug 8, 2010
Oct 31, 2010
Dec 14, 2008
Jan 6, 2014
Dec 14, 2008
Nov 23, 2010
Dec 14, 2008
Feb 25, 2010
Nov 29, 2013
Nov 13, 2009
Nov 23, 2010
May 4, 2009

Repository files navigation

Если 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 - сообщения, связанные с изменением состояния пользователей

About

Automatically exported from code.google.com/p/sams2

Resources

License

Stars

Watchers

Forks

Packages

No packages published