Список форумов netup.ru netup.ru
Форум компании NetUP
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Еще один get_nf_direct

 
Начать новую тему   Ответить на тему    Список форумов netup.ru -> UTM 5.0
Регистрация провайдеро-независимых IP-адресов и автономных систем в RIPE
Компания NetUP приглашает на работу технических специалистов
Решения для IPTV. Биллинг, Middleware, VoD, CAS/DRM, DVB IP стример
Предыдущая тема :: Следующая тема  
Автор Сообщение
littlesavage



Зарегистрирован: 22.11.2009
Сообщения: 133
Откуда: Чебоксары

СообщениеДобавлено: Чт Сен 23, 2010 00:31    Заголовок сообщения: Еще один get_nf_direct Ответить с цитатой

Представляю ya_get_nf_direct - еще один вариант утилиты выдирания детальной статистики UTM.


Cовместима по параметрам с имеющимя в UTM get_nf_direct'ом. Основные улучшения:

  • Прозрачная распаковка gz/bzip2/lzma/xz архивов
  • Возможность экспорт результатов в SQlite3 базу данных.
  • Расширенные правила фильтрации с использованием полей БД, операторов =,!=,<,>, скобок и логических операторов И/ИЛИ/НЕ
  • Возможность чтения данных с stdin (для этого и переписывалось).
  • В качестве времени (-from, -to) можно указывать время в формате ГГГГ-ММ-ДД[TЧЧ:ММ:СС]
  • По SIGINFO/SIGUSR1 показывает текущий статус
  • Open source Smile


Из зависимостей - libarchive >= 1.8. На большинстве систем придется его обновлять/доустанавливать.

Код на github: https://github.com/littlesavage/ya_get_nf_direct

Код:

$ ./ya_get_nf_direct --help
ya_get_nf_direct - UTM ya_get_nf_direct module.
$Revision: 0.1, 23-sep-2010 $
Usage: ya_get_nf_direct [-h] [options]
Options:
    -D, --directory             Directory, default: /netup/utm5/db/
    -b, --database              Database name, (- - stdin), default: /netup/utm5/db/iptraffic_raw.dbs
    -a, --account_id            Account ID, default: none
    -s, --src_ip=<addr>[/mask]  Source Address, default: none
    -d, --dst_ip=<addr>[/mask]  Destination Address, default: none
    -p, --src_port              Source port, default: none
    -P, --dst_port              Destination port, default: none
    -c, --tclass                Traffic class, default: none
    -f, --from=timestamp        From timestamp/datetime, default: 0
    -t, --to=timestamp          To timestamp/datetime, default: current timestamp
    -l, --limit                 Max count of rows, default: unlim
    -e, --extended              Print stats in extended format
    -F, --filter=<filter>       Apply extended filter
    -S, --sqlite=<db>           Dump to Sqlite database db
    -h, --help                  Help
    -v, --version               Show version

Extended filters:
    Logical operators:                  ||, &&, !, ()
    Comprarsion operators:              ==, !=, >, >=, <, <=
    Supported expressions:
        fw_id      [==]    addr[/mask]  Netup Firewall ID
        src_addr   [==]    addr[/mask]  Source IP/Network
        dst_addr   [==]    addr[/mask]  Destination IP/Network
        next_hop   [==]    addr[/mask]  Next Hop IP/Network
        i_ifx      [compr] num          Source interface index
        o_ifx      [compr] num          Destination interface index
        packets    [compr] num          Number of packets in a flow
        octets     [compr] num          Number of octets in a flow
        s_port     [compr] num          Source port
        d_port     [compr] num          Destination port
        flags      [==]    num          TCP flags
        prot       [compr] num          IP Protocol
        tos        [compr] num          IP TOS
        src_as     [compr] num          Source AS
        dst_as     [compr] num          Destination AS
        slink_id   [compr] num          UTM service link ID
        account_id [compr] num          UTM account ID
        account_ip [==]    addr[/mask]  UTM accounted IP
        tclass     [compr] num          UTM traffic class
        timestamp  [compr] num|datetime UTM timestamp
        router_ip  [==]    addr[/mask]  Netflow Router IP

Example: '(timestamp >= 2010-01-01T12:00 && src_addr 192.168.1.0/24) || (dst_addr 192.168.2.0/24 && ! account_id 5)'


Последний раз редактировалось: littlesavage (Пн Ноя 05, 2012 15:34), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль
Rav



Зарегистрирован: 29.06.2007
Сообщения: 65

СообщениеДобавлено: Вс Окт 28, 2012 19:19    Заголовок сообщения: Ответить с цитатой

Я так понимаю, что эта утилита только для старого формата хранения статистики?
Вернуться к началу
Посмотреть профиль
JAO



Зарегистрирован: 11.12.2007
Сообщения: 1131
Откуда: Таксимо

СообщениеДобавлено: Пн Окт 29, 2012 07:18    Заголовок сообщения: Ответить с цитатой

А фильтрация содержимого там многопоточная?
Вернуться к началу
Посмотреть профиль Отправить e-mail
littlesavage



Зарегистрирован: 22.11.2009
Сообщения: 133
Откуда: Чебоксары

СообщениеДобавлено: Пн Ноя 05, 2012 15:34    Заголовок сообщения: Ответить с цитатой

Утилита только для нового формата.
Распаковка и фильтрация там однопоточная.
Вернуться к началу
Посмотреть профиль
JAO



Зарегистрирован: 11.12.2007
Сообщения: 1131
Откуда: Таксимо

СообщениеДобавлено: Пн Ноя 05, 2012 19:04    Заголовок сообщения: Ответить с цитатой

Вот фильтрацию не мешало бы разделить на число ядер в системе.

Для четырех тредов

1) читаем из потока кратное 4 число записей (или что осталось, если близко к концу файла) и складываем во входной массив
2) стартуем треды со следующими параметрами: первый тред стартует с нулевой записи, второй - с первой, третий - со второй, четвертый - с третьей, и идут до конца массива с шагом 4, каждому треду передается указатель на свой выходной массив, в который складываются номера отфильтрованных записей
3) когда все треды отрабатывают, главный тред выбирает из входного массива записи согласно номерам из четырех выходных массивов и так собирает урожай

Главное преимущество такого решения - скорость за счет работы только с оперативной памятью и полного отсутствия синхронизации тредов. Да, все блоки динамической памяти создавайте до запуска тредов и ни в коем случае не внутри них - это будет ударом по производительности. К примеру, если будете использовать std::vector<int> в качестве выходного массива, установите ему размер до запуска треда, чтобы во время работы треда он не делал движений по изменению своего размера (а они неявные).

Кроме того, текстовое выражение фильтра лучше скомпилировать в некий байткод, быстрее будет отрабатывать. Разбор текстового выражения применительно к каждой записи - операция довольно тяжелая, и на миллионах записей это будет заметно.
Вернуться к началу
Посмотреть профиль Отправить e-mail
littlesavage



Зарегистрирован: 22.11.2009
Сообщения: 133
Откуда: Чебоксары

СообщениеДобавлено: Вт Ноя 06, 2012 09:20    Заголовок сообщения: Ответить с цитатой

Фильтрация выполняется значительно быстрее распаковки, она там вообще незаметна. Разбора текста там нет, выражение вначале преобразуется во внутреннее представление.
Вот распаковку можно распаралеллить. Хотя сейчас оно уже особо никому не надо Smile За 2 года мне самому понадобилось воспользоваться этим фильтрм всего 1-2 раза.
Вернуться к началу
Посмотреть профиль
JAO



Зарегистрирован: 11.12.2007
Сообщения: 1131
Откуда: Таксимо

СообщениеДобавлено: Вт Ноя 06, 2012 10:28    Заголовок сообщения: Ответить с цитатой

Тогда и распаковку в треды. Операция ведется над группой файлов, или списком. Точно так же обработать список с шагом, равным количеству тредов. На выходе, правда, каша получится, но можно отсортировать как надо.
Вернуться к началу
Посмотреть профиль Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов netup.ru -> UTM 5.0 Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group