Страница 1 из 1
date now()
Добавлено: 2010-01-13 12:38:25
agat
Забыл как делал и терь всю голову сломал
Как создать поле что бы в него без явного указания в запросе запихивать дату и время
Код: Выделить всё
ALTER TABLE `data` ADD `data_add` DATE NOT NULL DEFAULT 'now()' AFTER `user`
Код: Выделить всё
ALTER TABLE `data` ADD `data_add` DATE NULL DEFAULT 'now()' AFTER `user`
тоже не хочет
Re: date now()
Добавлено: 2010-01-13 12:59:29
hizel
тригером
Re: date now()
Добавлено: 2010-01-13 13:08:46
agat
а SQL запрос есть, как это сделать?
Re: date now()
Добавлено: 2010-01-13 13:12:58
hizel
Re: date now()
Добавлено: 2010-01-13 13:23:00
agat
не как то проще было без тригеров
Пусть MySQL автоматически установит значение столбца с типом TIMESTAMP при создании данной строки. Столбец будет установлен в исходное состояние со значением текущих даты и времени.
При выполнении последующих обновлений других столбцов в данной строке необходимо явно установить столбец TIMESTAMP в его текущее значение.
Однако, с другой стороны, для этих целей, возможно, будет проще использовать столбец DATETIME. При создании строки его следует инициализировать функцией NOW() и оставить в покое при последующих обновлениях.
Как результат выполнения функции, возвращающей величину, приемлемую в контекстах типов данных DATETIME, DATE или TIMESTAMP (например, функции NOW() или CURRENT_DATE).
Недопустимые значения величин DATETIME, DATE или TIMESTAMP преобразуются в значение ``ноль'' соответствующего типа величин ('0000-00-00 00:00:00', '0000-00-00', или 00000000000000).
etc....
ни каких тригеров не нужно
в общем не работает, Хотя я точно помню, что в sql запросе указывал default now() и все работало
память память, все не упомнить,
Re: date now()
Добавлено: 2010-01-13 13:27:00
hizel
Re: date now()
Добавлено: 2010-01-13 13:34:20
agat
Код: Выделить всё
CREATE TABLE `data` (
`doctets` int(11) NOT NULL,
`srcaddr` text NOT NULL,
`dstaddr` text NOT NULL,
`srcport` int(11) NOT NULL,
`dstport` int(11) NOT NULL,
`data_add` timestamp NOT NULL default CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
значения в экспорте
Код: Выделить всё
INSERT INTO `data` (`doctets`, `srcaddr`, `dstaddr`, `srcport`, `dstport`, `data_add`) VALUES
(131, '192.168.2.2', '80.121.89.67', 64525, 16945, '2010-01-13 13:29:07'),
'2010-01-13 13:29:07'
Это то мне и надо было, в общем как то работает

пока потом разберусь что к чему и с какогот TIMESTAMP
приобрел такой формат
Re: date now()
Добавлено: 2010-01-13 15:18:35
Gamerman
Какой формат?
Re: date now()
Добавлено: 2010-01-13 15:25:45
hizel
держать сырые аля нетфлов данные в мускуле - fail!
Re: date now()
Добавлено: 2010-01-13 15:33:06
Gamerman
Э-э-э. А расшифровать можно, что сие значит? Вы о таймстамте или о сети?
Re: date now()
Добавлено: 2010-01-13 17:14:26
zg
Gamerman писал(а):что сие значит?
это значит, что логам не место в базе
Re: date now()
Добавлено: 2010-01-13 18:49:08
agat

Оо!!! с netflow-export знакомы?
логам место в базе на сутки.
сеть небольшая порядка 20 юзерей и логируется только внешний интерфейс
За сутки набегает порядка 5000 записей(5000 строк/сут в общем то вы правы), Затем все это дело прочитывается с базы, суммируется, считается трафик за сутки и по каким портам были обращения, через сутки таблица чистится, обработанные данные вливаются в другую, для истории 1запись в сути не накладно (я не особо хорошо знаком с shell но с PHP дружу плотно поэтому мне так удобнее)
В основном все это затеяно дабы посчитать количество трафика прошедшего не от пользователей а с внешнего интерфейса шлюза и самое главное по каким портам было больше всего обращений, подозреваю что будет http трафик https а что еще?... и в каком процентном отношении, накропаю веб морду для него и ....
Хранить все логи за 3 месяца я не собираюсь, да и не буду делать это ни когда, стоит настроенный нетУп он все хранит в файлах как положено/
Мне просто интересна сама постановка задачи, и информация о том какие порты больше всего используются, когда в руках цифры и статистика можно многое что сделать.
Re: date now()
Добавлено: 2010-01-13 18:51:50
agat
Gamerman писал(а):Какой формат?
2010-01-13 13:29:07 . 0000-00-00 00:00:00
вот такой
_______________________________________________________________________________________________________
Что это мне ефрейтора повесили? я им и в армии ни когда не был, соплю на погоны!!!
Re: date now()
Добавлено: 2010-01-13 22:37:11
Gamerman
Да вроде нормальный формат, а что не так?
Re: date now()
Добавлено: 2010-01-13 22:40:28
hizel
http://dev.mysql.com/doc/refman/5.0/en/datetime.html
просто датетайме до конца времен, а таймштамп поближе будет

Re: date now()
Добавлено: 2010-01-14 16:45:31
Gamerman
На жизнь сервера - хватит

Re: date now()
Добавлено: 2010-01-16 18:38:56
agat
Продолжу, пока написал вот такой запрос
Код: Выделить всё
SELECT (SUM( doctets ))/8192 AS sdoctets, `srcport`
FROM `data`
WHERE `dstaddr` = '192.168.2.2' AND `data_add` > DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY `data`.`srcport`
ORDER BY `sdoctets` DESC
LIMIT 0 , 10
Что он делает, бегает по таблице, выбирает данные за сутки,
складывает значения с поля doctets и выводит рейтинг первых 10 часто используемых портов
Я как увидел значения, сразу побежал ковырять свой фаер, и не безрезультатно.
теперь в рейтенге 80 порт
Код: Выделить всё
2355888.3354 80
11131.6691 56712
8278.0594 18768
7996.6954 23206
7913.1682 64258
7589.6412 48601
6791.8517 20253
5115.1610 16567
4724.0021 20829
3208.8488 48437
Канал нагружали торрентщики, сделал практически полноценный QoS, торрентам зарезал 10 коннектов, ну и подрихтовал напильником чуть, пока на тестах....
C TIMESTAMP тоже разобрался, все правильно такой формат у него и есть
Re: date now()
Добавлено: 2010-01-16 20:33:03
zg
agat писал(а):логам место в базе на сутки.
если в базе лог только за сутки, то зачем это условие?
agat писал(а):AND `data_add` > DATE_SUB(NOW(), INTERVAL 1 DAY)
Re: date now()
Добавлено: 2010-01-17 10:48:33
agat
Ну пока база не чистится, поэтому это условие, за 3е суток набегает 45метров
база чистится руками(автоматом еще не сделал) и не реализован перенос рейтинга портов в новую таблицу за сутки.
Поэтому воть.... занимался конфигурением фаера, и злобными торрентщиками. Провел так сказать разьяснительную беседу путем зарезания коннектов на неугодны порты, врнее наоборот разрешил известные порты без ограничения, все остальные загнал в linit src-port 10
Re: date now()
Добавлено: 2010-01-26 4:47:04
lolwut
agat писал(а):Как создать поле что бы в него без явного указания в запросе запихивать дату и время
ЕМНИП только так:
Код: Выделить всё
ALTER TABLE foo ADD bar timestamp on update CURRENT_TIMESTAMP;
Re: date now()
Добавлено: 2010-03-01 17:01:02
lolwut
я тут подумал ... agat, а что если Вам сделать так:
- создать БД:
Код: Выделить всё
DROP DATABASE IF EXISTS netflow;
CREATE DATABASE netflow DEFAULT CHARACTER SET koi8r COLLATE koi8r_general_ci;
-- --------------------------------------------------------
CREATE TABLE raw (
unix_secs int(10) unsigned NOT NULL default '0',
dpkts int(10) unsigned NOT NULL default '0',
doctets int(10) unsigned NOT NULL default '0',
srcaddr varchar(45) NOT NULL default '0',
dstaddr varchar(45) NOT NULL default '0',
srcport smallint(5) unsigned NOT NULL default '0',
dstport smallint(5) unsigned NOT NULL default '0',
prot tinyint(3) unsigned NOT NULL default '0'
) TYPE=MyISAM;
-- --------------------------------------------------------
CREATE TABLE raw_data (
unix_secs int(10) unsigned NOT NULL default '0',
src_ip int(10) unsigned NOT NULL default '0',
dst_ip int(10) unsigned NOT NULL default '0',
packets int(10) unsigned NOT NULL default '0',
bytes int(10) unsigned NOT NULL default '0',
src_port smallint(5) unsigned NOT NULL default '0',
dst_port smallint(5) unsigned NOT NULL default '0',
proto tinyint(3) unsigned NOT NULL default '0',
KEY scr_idx (src_ip,dst_port),
KEY time_idx (unix_secs)
) TYPE=MyISAM;
- написать скриптец
Код: Выделить всё
#!/bin/sh
flow_base="/path/to/netflow/flows"
flow_dir="$flow_base/`date -v -1m +%Y/%Y-%m`"
#flow_dir="$flow_base/2003/2003-12"
tmp_file="$flow_base/tmp.csv"
flow_export="/usr/local/bin/flow-export"
mysql_user='root'
mysql_pass='root'
mysql="/usr/local/bin/mysql -u $mysql_user -p$mysql_pass "
if [ -d $flow_dir ]; then
for i in `ls -1 $flow_dir | grep ^ft-`; do
if [ -r $flow_file_in ]; then
$flow_export -f 2 -m UNIX_SECS,DFLOWS,DPKTS,DOCTETS,SRCADDR,DSTADDR,SRCPORT,DSTPORT,PROT < $flow_dir/$i > $tmp_file
fi
if [ -r $tmp_file ]; then
$mysql -D netflow -B -e "LOAD DATA INFILE '$tmp_file' INTO TABLE raw FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\n'; DELETE FROM raw WHERE srcaddr = 'srcaddr' AND dstaddr = 'dstaddr'; INSERT INTO raw_data SELECT unix_secs, INET_ATON(srcaddr), INET_ATON(dstaddr), dpkts, doctets, srcport, dstport, prot FROM raw; TRUNCATE TABLE raw;"
rm -f $tmp_file
fi
done
fi
ну и заливать Ваши flow-tools файлы с netflow данными в БД, а т.к. на выхлопе работы скрипта IP адреса будут в виде UNSIGNED INT то оперировать ими будет вполне удобно (GROUP BY будет корректно работать)