<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>we are sorry, we are open &#187; СисАдминство</title>
	<atom:link href="http://test.kg/category/sysadm/feed/" rel="self" type="application/rss+xml" />
	<link>http://test.kg</link>
	<description></description>
	<lastBuildDate>Tue, 01 Nov 2011 12:49:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Нетегированный VLAN в транковом порту свича Cisco</title>
		<link>http://test.kg/cisco_native_vlan/</link>
		<comments>http://test.kg/cisco_native_vlan/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 12:43:44 +0000</pubDate>
		<dc:creator>Админ</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[vlan]]></category>

		<guid isPermaLink="false">http://test.kg/?p=804</guid>
		<description><![CDATA[В свич Cisco 3750 включен клиент, порт на свиче настроен в аксес-режиме, т.е. передаёт нетегированные пакеты. Возникла необходимость добавить клиенту ещё один VLAN, но при этом первый оставить нетегированным. Решается это при помощи &#171;родных&#187; VLAN-ов (native vlan), который и будет передаваться нетегированным при том, что порт будет в режиме транка. Вот простой пример, в котором [...]]]></description>
			<content:encoded><![CDATA[<p>В свич Cisco 3750 включен клиент, порт на свиче настроен в аксес-режиме, т.е. передаёт нетегированные пакеты. Возникла необходимость добавить клиенту ещё один VLAN, но при этом первый оставить нетегированным. Решается это при помощи &laquo;родных&raquo; VLAN-ов (native vlan), который и будет передаваться нетегированным при том, что порт будет в режиме транка. Вот простой пример, в котором VLAN 500 объявлен родным и передаётся нетегированным, а 100-й передаётся тегированным:<br />
<code>interface FastEthernet0/1<br />
 description Test<br />
 switchport trunk encapsulation dot1q<br />
 switchport trunk native vlan 500<br />
 switchport trunk allowed vlan 100,500<br />
 switchport mode trunk<br />
</code><br />
Обратите внимание, что родной VLAN тоже надо указывать в списке разрешённых в транке.</p>
<p>При переключении порта в транк связь прерывается секунд на 5-10, но при этом клиенту для продолжения работы с нетегированными пакетами перенастраивать ничего не нужно (понятно, что для использования второго VLAN-а перенастройка необходима).</p>
<p>Посмотреть эти настройки можно командами &laquo;show int f0/1 switchport&raquo; и &laquo;show int f0/1 trunk&raquo;. Кстати, в выводе первой команды можно увидеть строчку, в которой говорится, что на родном VLAN-е включено тегирование:<br />
<code>cs#sh int f0/1 switchport<br />
...<br />
Administrative Native VLAN tagging: enabled<br />
...</code></p>
<p>Однако, работает всё нормально и в Интернете люди склонны считать, что это просто глюк и ссылаются на вывод другой команды:<br />
<code>cs#sh vlan dot1q tag native<br />
dot1q native vlan tagging is disabled</code></p>
<p>Если на другой стороне тоже свич Cisco, то там также нужно указать родной влан, транк и т.п. Однако, если на той стороне будет стоять, например, компьютер с FreeBSD, то родной VLAN настраивается и работает как обычный, нетегированный линк, например:<br />
<code>ifconfig xl0 10.0.1.2 netmask 255.255.255.0</code><br />
Ну и интерфейс для тегированного VLAN-а настраивается как обычно в таких случаях, например:<br />
<code>ifconfig vlan100 create vlan 100 vlandev xl0<br />
ifconfig vlan100 192.168.1.2 netmask 255.255.255.0</code></p>
<p>Указание родного VLAN-а для создания подинтерфейса на роутере Cisco я не проверял, но вроде должно быть как-то так:<br />
<code>cs(config)# int f0/1.500<br />
cs(config-subif)# encapsulation dot1q 500 <strong>native</strong><br />
cs(config-subif)# ip address 10.0.1.2 255.255.255.0</code></p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/cisco_native_vlan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>И ещё один интересный замер MySQL-запроса &#8211; удаление строк</title>
		<link>http://test.kg/1more-mysql-query/</link>
		<comments>http://test.kg/1more-mysql-query/#comments</comments>
		<pubDate>Sun, 19 Dec 2010 06:35:09 +0000</pubDate>
		<dc:creator>Админ</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://test.kg/?p=785</guid>
		<description><![CDATA[Таблица имеет почти 16 тысяч строк. Надо её почистить от старых записей: mysql&#62; delete from log where id &#60; 188595088; Query OK, 8798074 rows affected (33 min 35.91 sec) При этом база была в работе и в таблицу данные поступали без видимых проблем.]]></description>
			<content:encoded><![CDATA[<p>Таблица имеет почти 16 тысяч строк. Надо её почистить от старых записей:<br />
<code>mysql&gt; delete from log where id &lt; 188595088;<br />
Query OK, 8798074 rows affected (33 min 35.91 sec)</code></p>
<p>При этом база была в работе и в таблицу данные поступали без видимых проблем.</p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/1more-mysql-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ещё один замер работы с таблицами MySQL</title>
		<link>http://test.kg/mysql-optimize/</link>
		<comments>http://test.kg/mysql-optimize/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 17:31:36 +0000</pubDate>
		<dc:creator>Админ</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://test.kg/?p=778</guid>
		<description><![CDATA[Я уже как-то проводил оптимизацию нескольких MySQL-таблиц, для сведения замерял время и объёмы и размещал эти замеры здесь. Похоже понадобилась оптимизация ещё одной таблицы &#8211; стал замечать медленный запрос,  которого раньше даже видно не было. Ничего особенно не менялось, чтобы вызвать какое-либо замедление выполнения запросов. Таблица на момент написания этой заметки содержала 1659783 записей, объём [...]]]></description>
			<content:encoded><![CDATA[<p>Я уже как-то проводил оптимизацию нескольких MySQL-таблиц, для сведения замерял время и объёмы и размещал эти замеры <a href="/mysql-table-update-optimize/">здесь</a>.</p>
<p>Похоже понадобилась оптимизация ещё одной таблицы &#8211; стал замечать медленный запрос,  которого раньше даже видно не было. Ничего особенно не менялось, чтобы вызвать какое-либо замедление выполнения запросов. Таблица на момент написания этой заметки содержала 1659783 записей, объём IBD-файла составлял почти 2 ГБ (2000683008 Б). Таблица содержит тексты личных сообщений пользователей форума, так что записи в ней часто удаляются и добавляются, так что оптимизация не помешает.</p>
<p>Команда &laquo;optimize table&raquo; выполнялась 5 минут 28 секунд и размер файла уменьшился до 1,4 ГБ (1488977920 Б).</p>
<p>Посмотрим, изменит ли это ситуацию с медленным запросом.</p>
<p>Попутно решил оттимизировать и несколько других таблиц.</p>
<p>2060421 строк, файл в 400МБ обработан за 1 минуту 54 секунда, размер файла стал 310 МБ.<br />
434582 строк, файл в 330МБ обработан за 37 секунд, размер файла уменьшился мало &#8211; до 315 МБ.<br />
Показателен файл таблицы с неким кэшем движка &#8211; 1588 строк, объём файла 1,9 ГБ &#8211; оптимизация длилась меньше 1 секунды и размер файла стал 10 МБ.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">﻿</div>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/mysql-optimize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пара замеров работы с таблицами MySQL</title>
		<link>http://test.kg/mysql-table-update-optimize/</link>
		<comments>http://test.kg/mysql-table-update-optimize/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 05:57:21 +0000</pubDate>
		<dc:creator>Админ</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://test.kg/?p=728</guid>
		<description><![CDATA[Я не такой уж и большой специалист по MySQL, так что приведённые далее наблюдения прошу не считать показательными &#8211; это просто мои эксперименты на моём сервере и с моей БД ) Озаботился проблемой разрастания таблиц в БД. Надо их дефрагментировать. Таблицы в InnoDB. Провёл пару замеров с одной из самых больших таблицей под рукой &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Я не такой уж и большой специалист по MySQL, так что приведённые далее наблюдения прошу не считать показательными &#8211; это просто мои эксперименты на моём сервере и с моей БД )</p>
<p>Озаботился проблемой разрастания таблиц в БД. Надо их дефрагментировать. Таблицы в InnoDB. Провёл пару замеров с одной из самых больших таблицей под рукой &#8211; log:<br />
- больше 3 миллионов записей;<br />
- размер файла log.ibd &#8211; 3,5ГБ;</p>
<p>Для начала мне нужно было заменить значение одного из полей таблицы:<br />
<code>mysql> update log set tip='no data';</code><br />
До замены в этом поле была довольно длинная строка с информацией user-agent, полученной от браузеров, посетителей, т.е. новая строка в несколько раз короче старой.<br />
Результаты:<br />
<code>Query OK, 3033596 rows affected (57 min 56.91 sec)<br />
Rows matched: 3239214  Changed: 3033596  Warnings: 0</code><br />
Размер файла заметно увеличился &#8211; 4ГБ. Очевидно надо дефрагментировать таблицу (это был плавный переход к следующему тесту)))</p>
<p>Второй тест &#8211; оптимизация таблицы:<br />
<code>mysql> optimize table log;</code><br />
Результаты:<br />
<code>mydb.log | optimize | note     | Table does not support optimize, doing recreate + analyze instead<br />
mydb.log | optimize | status   | OK<br />
2 rows in set (38 min 47.55 sec)</code><br />
Размер файла существенно уменьшился &#8211; 2,7ГБ, а было ведь 4ГБ!<br />
Напрашивается вывод о том, что оптимизацию надо проводить почаще, но тут надо учитывать, что во время оптимизации таблица будет заблокирована и недоступна для ваших скриптов.</p>
<p>Для полноты картины конечно не обойтись без информации о сервере &#8211; старенькая рабочая станция:<br />
- софт &#8211; FreeBSD 7.2, apache 2, php, MySQL;<br />
- Intel Pentium4 3.40GHz;<br />
- RAM 3GB;<br />
- система и БД лежат на двух разных винтах;<br />
- сервер, фактически, выделенный;</p>
<p>Следующим будет оптимизация боевого, сильнонагруженного сервера, с кучей больших таблиц, общим размеров гигов под 10. Результаты сообщу дополнительно. Вот только надо выбрать время и заявить ТО на пару часов )</p>
<p>Дополнение от 03-08-2010</p>
<p>Добавление индекса к база размером более 4ГБ и с более 4 с половиной мульёна строк заняло 18 минут полного отказа СУБД от обслуживания:<br />
mysql> alter table log add index (id_site);<br />
Query OK, 4784444 rows affected (18 min 49.74 sec)<br />
Records: 4784444  Duplicates: 0  Warnings: 0</p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/mysql-table-update-optimize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Постустановка Zend Optimizer</title>
		<link>http://test.kg/zend_optimizer/</link>
		<comments>http://test.kg/zend_optimizer/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 14:47:52 +0000</pubDate>
		<dc:creator>Админ</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.net.kg/?p=524</guid>
		<description><![CDATA[Каждый раз при установке Zend Optimizer почему-то возникает проблема с копированием нужных файлов инсталлятором из дистрибутива Zend Optimizer. Может я что-то не так делаю при установке, которая, к слову, заключается всего лишь в запуске инсталлятора и ответах на пару простых вопросов. Вероятно проблема возникает из-за того, что я, чаще всего, ставлю PHP не как модуль [...]]]></description>
			<content:encoded><![CDATA[<p>Каждый раз при установке Zend Optimizer почему-то возникает проблема с копированием нужных файлов инсталлятором из дистрибутива Zend Optimizer. Может я что-то не так делаю при установке, которая, к слову, заключается всего лишь в запуске инсталлятора и ответах на пару простых вопросов.<br />
Вероятно проблема возникает из-за того, что я, чаще всего, ставлю PHP не как модуль Апача, а как CGI и, кроме того, зачастую ставлю несколько версий и вариантов PHP для нескольких версий MySQL )<br />
<span id="more-524"></span></p>
<p>Проблема довольно чётко выявляется по логам PHP:<br />
<code>[Tue Oct 27 08:24:36 2009] [error] [client 10.0.0.13] PHP Warning:  Zend Optimizer for PHP 4.4.x cannot be found (expected at '/usr/local/Zend/lib/Optimizer-3.3.0/php-4.4.x/ZendOptimizer.so') - try reinstalling the Zend Optimizer in Unknown on line 0<br />
</code></p>
<p>И действительно папки &laquo;/usr/local/Zend/lib/Optimizer-3.3.0/php-4.4.x&raquo; нет, ну и, соответственно, файла &laquo;ZendOptimizer.so&raquo; тоже нет.<br />
Зато в дистрибутиве Zend Optimizer, в директории &laquo;data&raquo;, есть вот такие папки:<br />
<code>4_2_0_comp<br />
4_2_x_comp<br />
4_3_x_comp<br />
4_4_x_comp<br />
5_0_x_comp<br />
5_1_x_comp<br />
5_2_x_comp</code></p>
<p>По-моему, весьма показательные названия )<br />
Проверяем &#8211; копируем папку с названием, соответствующим версии нашего PHP, в папку, упоминаемую в логах:<br />
<code>cp -r data/4_4_x_comp /usr/local/Zend/lib/Optimizer-3.3.0/php-4.4.x</code></p>
<p>Проверяем и убеждаемся, что ошибки более не появляются в логах.</p>
<p>В общем-то уже ура, но я предпочитаю устанавливать Zend Optimizer сразу для всех версий PHP, которые есть в дистрибутиве, ну-у-у&#8230; например, для того, чтобы не думать об этом при обновлении PHP. Поэтому для автоматизации процесса сделал небольшой shell-скрипт, который привожу здесь не тщеславия ради, а токмо чтобы не потерять его )</p>
<p>Собственно скриптик:<br />
<code>#!/bin/sh</p>
<p>[ $1 ] || { echo "`basename $0` dir_with_dist"; exit 1; }</p>
<p>dist="$1"<br />
dir="/usr/local/Zend"</p>
<p>########### Do standart install:<br />
$dist/install-tty</p>
<p>########### Do post install:</p>
<p>mkdir -p $dir/lib/Optimizer-3.3.0</p>
<p>cp $dist/data/ZendExtensionManager.so $dir/lib<br />
cp $dist/data/ZendExtensionManager_TS.so $dir/lib</p>
<p>for i in `ls -d $dist/data/*_comp`<br />
do<br />
 i=`basename $i`<br />
 echo -n "$i -> "<br />
 pdir=`echo ${i%*_comp} | tr '_' '.'`<br />
 echo "$pdir"<br />
 cp -r $dist/data/$i $dir/lib/Optimizer-3.3.0/php-$pdir<br />
done</p>
<p>#eof<br />
</code></p>
<h3>Дополнение от 29-10-2009</h3>
<p>Тут ещё выяснилась проблема с Zend Optimizer под PHP5 под FreeBSD 7.2 amd64 &#8211; не работает с конфигурацией, которую генерит инсталлятор Zend Optimizer. Надо добавить ещё строчку &laquo;zend_optimizer.optimization_level=14&#8243;:<br />
<code>[Zend]<br />
zend_optimizer.optimization_level=14<br />
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.0<br />
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.0<br />
zend_optimizer.version=3.3.0a<br />
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so<br />
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/zend_optimizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Простой пример с flowtools</title>
		<link>http://test.kg/simple-flowtools/</link>
		<comments>http://test.kg/simple-flowtools/#comments</comments>
		<pubDate>Wed, 13 May 2009 07:22:32 +0000</pubDate>
		<dc:creator>Админ</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[сети]]></category>

		<guid isPermaLink="false">http://www.net.kg/?p=336</guid>
		<description><![CDATA[Понадобилось собирать и обрабатывать netflow-статистику с циски на машине с FreeBSD. Задачи довольно простые &#8211; иметь возможность анализа сетевого трафика внутри корпоративной сети, например, с целью выявления адресов, генерирующих аномальный трафик, а также выявление других проблем, влияющих на пропускную способность каналов. Каналы связи в моём случае &#8211; это VLAN L2 с подключениями по ADSL, на [...]]]></description>
			<content:encoded><![CDATA[<p>Понадобилось собирать и обрабатывать netflow-статистику с циски на машине с FreeBSD. Задачи довольно простые &#8211; иметь возможность анализа сетевого трафика внутри корпоративной сети, например, с целью выявления адресов, генерирующих аномальный трафик, а также выявление других проблем, влияющих на пропускную способность каналов.<br />
<span id="more-336"></span><br />
Каналы связи в моём случае &#8211; это VLAN L2 с подключениями по ADSL, на скоростях 64 и 256 Кбит/с, с вероятностью расширения до 512 Кбит/с, т.е. трафика будет немного.</p>
<p>В качестве сборщика выбран пакет <a href="http://www.splintered.net/sw/flow-tools">flow-tools</a>, последней на данный момент версии &#8211; 0.68, который был установлен из портов: &laquo;/usr/ports/net-mgmt/flow-tools&raquo;.<br />
В качестве хранилища взят <a href="http://www.mysql.org/">MySQL</a> версии 5.1.34.</p>
<p>Установка указанных пакетов не вызвала никаких проблем и описывать её я не буду )</p>
<p>На первом этапе надо наладить сбор данных и их экспорт в таблицу MySQL.</p>
<p>Мои знания о netflow вообще и о flow-tools в частности весьма поверхностны, так что просьба не пинать за не самые лучшие решения, а помочь советом в случае чего )</p>
<h4>Запуск сборщика данных</h4>
<p>Запускаем коллектор, который будет получать данные от циски и сохранять их в файлах:</p>
<pre>/usr/local/bin/flow-capture
 -n48
 -N0
 -w /data/flow
 -E1G
 0/10.0.1.13/2055</pre>
<p>Опишу использованные мной параметры:</p>
<ul>
<li>-n48 &#8211; количество ротаций файлов за сутки, 48 раз &#8211; это каждые полчаса;
<li>-N0 &#8211; формат имён файлов со статистикой, 0 &#8211; просто файл в указанной папке;
<li>-w /data/flow &#8211; папка для хранения файлов;
<li>-E1G &#8211; размер файла, по достижении которого, файл со статистикой ротейтится &#8211; 1ГБ, если размер файла не достигает указанного, то файл ротейтится согласно параметра -n48;
<li>10.0.1.5/10.0.1.13/2055 &#8211; принимать данные, отправленные на адрес 10.0.1.5/принимать данные только от экпортёра 10.0.1.13/порт для ожидания данных;
</ul>
<p>Сборщик будет висеть на указанных айпишнике и порту, принимать данные от указанного адреса и складывать их во временный файл в папке /data/flow, например с таким именем:</p>
<pre>tmp-v05.2009-05-11.183644+0600</pre>
<p>Через промежуток времени, согласно параметра -n48, а в нашем случае это полчаса, временный файл будет переименован в окончательный, например вот такой:</p>
<pre>ft-v05.2009-05-11.183644+0600</pre>
<p>И затем будет создан новый временный файл:</p>
<pre>tmp-v05.2009-05-11.190609+0600</pre>
<p>Пишем скриптик для запуска коллектора и помещаем его в &laquo;/usr/local/etc/rc.d&raquo;, в простом случае он может быть вот такой:</p>
<pre>#!/bin/sh

CMD="/usr/local/bin/flow-capture
 -n48
 -N0
 -w /data/flow
 -E5G
 10.0.1.5/10.0.1.13/2055"

PID="/var/run/flow-capture.pid.2055"

case "$1" in
 start)
  echo "Start flow-capture"
  $CMD
 ;;
 stop)
  echo "Stop flow-capture"
  kill -TERM `cat $PID`
 ;;
 *)
  echo " Usage: `basename $0` { start | stop }"
  exit 1
 ;;
esac

exit 0</pre>
<p>Ну и конечно надо разрешить в нашем файрволе входящие пакеты с адреса экспортёра на адрес коллектора по протоколу udp и на порт 2055.</p>
<h4>Настройка экспорта данных с циски</h4>
<p>Настраиваем циску для экспорта данных с нужного нам интерфейса:</p>
<pre>cs#conf t
cs(config)#ip flow-export version 5
cs(config)#ip flow-export destination 10.0.1.5 2055
cs(config)#int bvi1
cs(config-if)#ip flow egress
cs(config-if)#ip flow ingress
cs(config-if)#^Z</pre>
<p>Посмотреть что получилось на циске можно вот так:</p>
<pre>cs#show ip flow interface
BVI1
  ip flow ingress
  ip flow egress
cs#show ip flow export
Flow export v5 is enabled for main cache
  Export source and destination details :
  VRF ID : Default
    Destination(1)  10.0.1.5 (2055)
  Version 5 flow records
  4084394 flows exported in 150001 udp datagrams
  0 flows failed due to lack of export packet
  0 export packets were sent up to process level
  0 export packets were dropped due to no fib
  0 export packets were dropped due to adjacency issues
  0 export packets were dropped due to fragmentation failures
  0 export packets were dropped due to encapsulation fixup failures</pre>
<h4>Экспорт данных из файла в текстовый вид</h4>
<p>Для проверки наличия нужных нам данных в файлах, которые нам создал коллектор, можно экпортировать их в текстовый формат:</p>
<pre>flow-export -f2 -mDPKTS,DOCTETS,SRCADDR,DSTADDR < raw_file</pre>
<p>Ключ -f2 задаёт формат вывода - ASCII с полями, разделёнными запятой. Поля, которые вы хотите увидеть задаются параметром -m, список всех полей есть в мане к flow-export. При указании полей, насколько я понял, нужно перечислять их в порядке следования в списке в мане, например, указать поле DPKTS после поля DSTADD нельзя - это приведёт к ошибке:</p>
<pre># flow-export -f2 -mDOCTETS,SRCADDR,DSTADDR,DPKTS < raw_file
flow-export: Out of order field: DPKTS
flow-export: ftxfield_parse(): failed</pre>
<p>Список полей для экспорта можно задать и при помощи масок, что будет короче в написании, но  сложнее в восприятии )</p>
<h4>Подготовка MySQL для сохранения данных</h4>
<p>Понятно, что прежде чем записывать данные в MySQL, нужно создать пользователя, базу данных и таблицу с нужными нам полями.<br />
Описывать создание пользователя и базы я не буду в виду тривиальности задачи )<br />
Остановлюсь на создании таблицы, в моём случае это было примерно так:</p>
<pre>create table export (
 unix_secs int(11) unsigned null,
 exaddr varchar(16) null,
 dpkts int(10) unsigned null,
 doctets int(10) unsigned null,
 first int(11) unsigned null,
 last int(11) unsigned null,
 srcaddr varchar(16) null,
 dstaddr varchar(16) null,
 srcport smallint(5) unsigned null,
 dstport smallint(5) unsigned null,
 prot tinyint(3) unsigned null,
 key (srcaddr)
);</pre>
<p>Возможно, из-за отсутствия опыта работы с netflow, я мог собрать ненужные мне поля, а какие-то интересные, наоборот, пропустить. Это можно легко поправить в рабочем порядке )</p>
<h4>Экспорт данных из файла в MySQL</h4>
<p>Теперь, когда СУБД готова к приёму наших данных, можно их экспортировать:</p>
<pre>/usr/local/bin/flow-export -f3
 -mUNIX_SECS,EXADDR,DPKTS,DOCTETS,FIRST,
 LAST,SRCADDR,DSTADDR,SRCPORT,DSTPORT,PROT
 -u "flow:DBPassword:localhost:/tmp/mysql.sock:flow:export" < raw_file</pre>
<p>Параметр -f3 задаёт формат экспорта - MySQL, параметр -u задаёт данные для доступа к базе данных - "пользователь:пароль:хост:порт:база:таблица".</p>
<p>Так же не забываем о необходимости соблюдения соответствия очерёдности полей, экпортируемых из файлов, с очерёдности полей, созданных в таблице.</p>
<p>Периодичность запуска этой процедуры определите сами с учётом своих нужд. В моём случае довольно и одного раза в час.</p>
<p>Также, в зависимости от ваших потребностей и возможностей, решайте экспортировать ли все данные в одну таблицу или в разные таблицы, например по дате. В последнем случае, конечно, одной указанной выше командой не обойтись - нужно, как минимум, ещё и создавать таблицы по мере необходимости.<br />
Так же нужно подумать об удалении уже обработанных файлов с netflow-данными, чтобы не занимали место на диске почём зря )</p>
<p>Я решил, что мне удобнее хранить данные посуточно в отдельных таблицах с названиями типа "export_0512". Для это я написал небольшой скрипт на perl, который проверяет наличие таблицы для данного дня, при необходимости создаёт её и экспортирует в неё данные указанной выше командой, а также удаляет таблицу за этот день, но прошлого месяца.</p>
<h4>Выборки из MySQL</h4>
<p>Как извлекать нужные данные из БД учить не буду, т.к. и сам не очень хорошо в этом разбираюсь. Приведу лишь несколько запросов, которые я использую.</p>
<p>Найти десятку самых активных хостов из сети "10.255.0" по количеству исходящих байт:</p>
<pre>select srcaddr,sum(doctets) as traf_out from export_0511
 WHERE srcaddr like '10.255.0.%' group by srcaddr order by traf_out desc limit 10;</pre>
<p>Найти десятку портов получателей с самым большим исходящим трафиком для указанного айпишника:</p>
<pre>select srcaddr,sum(doctets) as traf_int,dstport,prot from export_0512
 WHERE srcaddr like '10.255.0.3' group by dstport  order by traf_int desc limit 10;</pre>
<p>Найти десятку удалённых хостов, на которые был наибольший исходящий трафик с указанного айпишника:</p>
<pre>select srcaddr,dstaddr,sum(doctets) as traf_int from export_0511
 WHERE srcaddr like '10.255.0.3' group by dstaddr  order by traf_int desc limit 10;</pre>
<h4>Заключение</h4>
<p>Данный пример позволяет только лишь быстро запустить сбор данных и сделать какие-либо запросы из базы данных. Различные проверки ошибок, удобства и т.п. каждый реализует сам в меру своих требований и фантазии )<br />
Кому-то, наверняка, потребуется и веб-интерфейс для запросов в базу, но лично для меня и данного случая такой необходимости пока нет.</p>
<p>Буду благодарен за конструктивную критику и советы )</p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/simple-flowtools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Монтирование и работа с устройствами от имени пользователя</title>
		<link>http://test.kg/mount_flash_by_users/</link>
		<comments>http://test.kg/mount_flash_by_users/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 07:54:18 +0000</pubDate>
		<dc:creator>Zed</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[freebsd]]></category>

		<guid isPermaLink="false">http://www.net.kg/?p=199</guid>
		<description><![CDATA[Как-то вдруг надоело монтировать флешку и работать с файлами на ней от имени рута. Я использую sudo. Кроме того, я вхожу в группу wheel, на случай если надо сделать su. Поменял переменную ядра: ~> sudo sysctl vfs.usermount=1 Прописал то же самое в /etc/sysctl.conf: vfs.usermount=1 В файле /etc/rc.conf дописал: devfs_system_ruleset="localrules" Создал файл /etc/devfs.rules: [localrules=10] add path [...]]]></description>
			<content:encoded><![CDATA[<p>Как-то вдруг надоело монтировать флешку и работать с файлами на ней от имени рута.<br />
Я использую sudo. Кроме того, я вхожу в группу wheel, на случай если надо сделать su.</p>
<p>Поменял переменную ядра:<br />
<code>~> sudo sysctl vfs.usermount=1</code></p>
<p>Прописал то же самое в /etc/sysctl.conf:<br />
<code>vfs.usermount=1</code></p>
<p>В файле /etc/rc.conf дописал:<br />
<code>devfs_system_ruleset="localrules"</code></p>
<p>Создал файл /etc/devfs.rules:<br />
<code>[localrules=10]<br />
add path 'da*' mode 0660 group wheel</code><br />
Таким образом поменял для всех устройств, начинающихся с &laquo;da&raquo;, группу на wheel и дал права на чтение и запись для владельца и группы. По-умолчанию указана группа operator, в которую я не вхожу.</p>
<p>Посмотрел какие права на устройстве в данный момент:<br />
<code>~> ls -l /dev/da0*<br />
crw-r-----  1 root  operator    0, 138 Mar 31 16:15 /dev/da0<br />
crw-r-----  1 root  operator    0, 139 Mar 31 16:15 /dev/da0s1</code></p>
<p>Переконфигурировал устройства:<br />
<code>~> sudo /etc/rc.d/devfs restart</code></p>
<p>Убедился, что права и группа изменились в нужную сторону:<br />
<code>~> ls -l /dev/da0*<br />
crw-rw----  1 root  wheel    0, 138 Mar 31 16:15 /dev/da0<br />
crw-rw----  1 root  wheel    0, 139 Mar 31 16:15 /dev/da0s1</code></p>
<p>Теперь надо назначить себя владельцем точки монтирования:<br />
<code>~> sudo chown malik:wheel /mnt/flash</code><br />
Ну или, если угодно, создать свою точку монтирования:<br />
<code>~> mkdir ~/flash</code></p>
<p>Кстати, для монтирования CD-ROM от имени пользователя достаточно чтобы точка монтирования принадлежала этому самому пользователю, т.к. писать на CD-ROM стандартным средствами системы мы не собираемся )</p>
<p>И, наконец, монтирую флешку:<br />
<code>~> mount_msdosfs /dev/da0s1 /mnt/flash</code></p>
<p>Всё нормально &#8211; флешка подмонтирована и можно нормально работать с файлам и папками от имени пользователя, не прибегаю к правам рута.</p>
<p>Замечание:<br />
Монтирование флешки с указание локальной кодировки от имени обычного пользователя возможно только после хотя бы одного монтирования из-под суперпользователя:<br />
<code>~> mount_msdosfs -L ru_RU.KOI8-R /dev/da0s1 /mnt/flash<br />
mount_msdosfs: cannot find or load "msdosfs_iconv" kernel module<br />
mount_msdosfs: msdosfs_iconv: Operation not permitted<br />
~> sudo mount_msdosfs -L ru_RU.KOI8-R /dev/da0s1 /mnt/flash<br />
Password:<br />
~> sudo umount /mnt/flash<br />
~> mount_msdosfs -L ru_RU.KOI8-R /dev/da0s1 /mnt/flash<br />
~><br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/mount_flash_by_users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Падения Squid-а под Линуксом</title>
		<link>http://test.kg/squid_signal_25/</link>
		<comments>http://test.kg/squid_signal_25/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 11:41:16 +0000</pubDate>
		<dc:creator>Zed</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[сети]]></category>

		<guid isPermaLink="false">http://www.net.kg/?p=68</guid>
		<description><![CDATA[Постоянно падал Squid на сервер под Линуксом, в логах только вот это: Jun 20 17:18:18 mail squid[6690]: Squid Parent: child process 6711 exited due to signal 25 Как оказалось проблема была из-за какой-то ошибки файловой системы, fsck помог: fsck /dev/sda4 За столько лет работы под ФриБСД ни разу с такой хренью не сталкивался )]]></description>
			<content:encoded><![CDATA[<p>Постоянно падал Squid на сервер под Линуксом, в логах только вот это:<br />
Jun 20 17:18:18 mail squid[6690]: Squid Parent: child process 6711 exited due to signal 25</p>
<p>Как оказалось проблема была из-за какой-то ошибки файловой системы, fsck помог:<br />
fsck /dev/sda4</p>
<p>За столько лет работы под ФриБСД ни разу с такой хренью не сталкивался )</p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/squid_signal_25/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Смена забытого пароля пользователя root на Sun</title>
		<link>http://test.kg/sun-password-recovery/</link>
		<comments>http://test.kg/sun-password-recovery/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 05:39:02 +0000</pubDate>
		<dc:creator>Zed</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://zed.web.kg/archives/20</guid>
		<description><![CDATA[Хотя с продукцией компании Sun периодически сталкивался восстанавливать забытый пароль пользователя root не доводилось, так же как и загружать систему в однопользовательском режиме. Процедура простая, но требует наличия установочного диска. Железка: Sun Blade 100. Система: SunOS 5.8. Установочный DVD-диск. 1. Нажимаем комбинацию клавиш STOP + A, чтобы остановить систему. Я делал это в процессе загрузки [...]]]></description>
			<content:encoded><![CDATA[<p>Хотя с продукцией компании Sun периодически сталкивался восстанавливать забытый пароль пользователя root не доводилось, так же как и загружать систему в однопользовательском режиме.</p>
<p>Процедура простая, но требует наличия установочного диска.<br />
<span id="more-20"></span></p>
<p>Железка: Sun Blade 100.<br />
Система: SunOS 5.8.<br />
Установочный DVD-диск.</p>
<p>1. Нажимаем комбинацию клавиш STOP + A, чтобы остановить систему. Я делал это в процессе загрузки системы. Должно появиться приглашение:</p>
<pre>ok</pre>
<p>2. Загружаем систему с диска в однопользовательский режим:</p>
<pre>boot cdrom -s</pre>
<p>3. проверяем, если нужно, корневой раздел диска:</p>
<pre>fsck /dev/dsk/c0t0d0s0</pre>
<p>4. монтируем корневой раздел:</p>
<pre>mount /dev/dsk/c0t0d0s0 /a</pre>
<p>5. Удаляем зашифрованный пароль пользователя root:</p>
<pre>vi /a/etc/shadow</pre>
<p>По идее нужно будет ещё и поменять права на файл:</p>
<pre>chmod u+w /a/etc/shadow</pre>
<p>6. Перегружаемся, но уже с жёсткого диска:</p>
<pre>reboot</pre>
<p>7. Заходим под пользователем root без пароля и задаём ему новый пароль:</p>
<pre>passwd</pre>
<p>Всё.</p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/sun-password-recovery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Опять флудят Дизель</title>
		<link>http://test.kg/diesel_flood_070819/</link>
		<comments>http://test.kg/diesel_flood_070819/#comments</comments>
		<pubDate>Sun, 19 Aug 2007 10:56:56 +0000</pubDate>
		<dc:creator>Админ</dc:creator>
				<category><![CDATA[СисАдминство]]></category>
		<category><![CDATA[diesel]]></category>

		<guid isPermaLink="false">http://www.net.kg/?p=272</guid>
		<description><![CDATA[Сегодня примерно в 18:00 опять начали флудить форум Дизель, вот график загрузки канала во внешний мир: Один раз измерил количество пакетов приходящих на адрес форума за минуту &#8211; получилось 29347. Вот мне интересно кому это нужно? Смысл не совсем понятен. Ну приходится мне закрывать все обращения из внешнего мира, но ведь ясно, что подавляющее большинство [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня примерно в 18:00 опять начали флудить форум Дизель, вот график загрузки канала во внешний мир:<br />
<img src="/wp-content/uploads/2009/04/diesel_day_flood070819.png" alt="diesel_day_flood070819" title="diesel_day_flood070819" width="700" height="135" class="aligncenter size-full wp-image-273" /> </p>
<p>Один раз измерил количество пакетов приходящих на адрес форума за минуту &#8211; получилось 29347.</p>
<p>Вот мне интересно кому это нужно? Смысл не совсем понятен. Ну приходится мне закрывать все обращения из внешнего мира, но ведь ясно, что подавляющее большинство посетителей приходит из местных сетей.</p>
]]></content:encoded>
			<wfw:commentRss>http://test.kg/diesel_flood_070819/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

