FastNetMon

Friday, 27 May 2016

Механические диски must die! SSD рулез!

Некоторое время занимаюсь кастомной базой данных для метрик. Написал, оптимизировал - все равно - медленной, хоть убейся.

Потом провел замеры на своем тест сервере с SATA / 7200 механика и получил 17 минут на обработку где-то 2х гб данных в формате Graphite / whisper:
2016-05-27 10:29:58,170 [INFO] Start max calculation for all elements
2016-05-27 10:46:47,079 [INFO] Finished max calculation for all elements
После двух дней оптимизации кода улучшить этот параметр не удалось.

А вот такой результат удалось получить перенеся данные с SATA на SSD KINGSTON SV300S37A60G:
2016-05-27 18:18:20,877 [INFO] Start max calculation for all elements
2016-05-27 18:18:27,772 [INFO] Finished max calculation for all elements
Да, 7 секунду. Именно так! После 17 минут мы получили 7 секунд на обработку того же объема данных :)

Разумеется, страничный кэш в обоих случаях сбрасывался. Вот так-то. Конечно, оно очевидно, что SSD быстры и хороши во всем, но чтобы НАСТОЛЬКО быстрее, я искреннее удивлен, правда. 

Thursday, 26 May 2016

Реверс трафик инжиниринг

Недавно в процессе обсуждения компаний, чьи маршруты роутинга выглядят как мазня обезьяны родился гениальный термин - реверс трафик инжиниринг. Это либо неграмотный инжиниринг трафика либо его полное отсуствие :)


Thursday, 19 May 2016

Сегодня (19го мая) иду на 2016: Конференцию «Российский день IPv6» в Центральном музее связи им. А.С. Попова

Всем привет!

Всем привет! Сегодня иду на 2016: Конференцию «Российский день IPv6» в Центральном музее связи им. А.С. Попова по адресу: г. Санкт-Петербург, Почтамтский переулок, д. 4. Начало мероприятия в 13.00.
Кто хочет поболтать за кофе - милости прошу ловить меня там :) Кому нужен - пишите контакты в комментах. 

Sunday, 10 April 2016

Какие магистральные провайдеры дают услугу flow spec?

Так как я ярый адепт технологии flow spec, то просто обязан сделать этот пост. В нем буду перечислять магистральных провайдеров выдающих услугу BGP Flow Spec (RFC 5575) конечным пользователям. За что им огромное спасибо :)

Итак, начнем:

  1. RETN, http://retn.net/
  2. Rascom, http://www.rascom.ru/
  3. Комфортел, http://comfortel.pro
Условия предоставления услуги варируются для различных клиентов, поэтому обращайтесь к своим менеджерам по работе с клиентами :)

Кто также предоставляет данную услугу, пишите мне почтой либо в комментарии, добавляю в список :)

Wednesday, 16 March 2016

Возгорание в ДЦ Selectel

Волею судеб у нас на этой площадке находится оборудование: http://www.fontanka.ru/2016/03/16/116/

Да, оно резервировано на другую площадку - поэтому никакой угрозы дорогим клиентам нету :)

Но вот что нас убило, так это то, что было в первую очередь эвакуировано из Дата Центра.

Оставляю фотографию без комментариев:

Да, это Динозавр. 

Monday, 14 March 2016

Активация kernel dump's на Ununtu 14.04

Создаем папку для дампов памяти падающих программ:
mkdir -p /var/log/dumps
chmod -R 755 /var/log/dumps
Указываем путь для сохранения дампов явно:
echo 'kernel.core_pattern = /var/log/dumps/core.%e.%p' > /etc/sysctl.d/10-coredump.conf
sysctl --system
Также если существует файл /etc/default/apport в него нужно вписать:
enabled=0

Иначе при ребуте он пропишет свою программу вместо обычного сбора дампов на диск.

Далее нам нужно для конкретного приложения, которое мы собираемся отлаживать задать актвиацию дампов памяти:

Стандартно дампы отключены:
# ulimit -a|grep core
core file size          (blocks, -c) 0

# ulimit -c unlimited
# ulimit -a|grep core
core file size          (blocks, -c) unlimited

Много советов в сети, что активировать дампы "правильно" нужно через /etc/security/limits.conf, но это не так, это будет работать лишь в случае, если сервис использует PAM, а это очень часто НЕ так.

Так что нужно в блоке start init.d скрипта, который запускает интересующую Вас программу добавить строку: 
ulimit -c unlimited
После того, как прописали это для сервиса, перезапускаем его и убвеждаемся, что дампы включены (18829 - здесь PID процесса, дамп памяти которого Вы хотите в результате получить):
cat /proc/18829/limits |grep core
Max core file size        unlimited            unlimited            bytes  

Отладка Upstart

Довольно просто :)

Открываем конфиг:
vim /etc/default/grub
Там правим:
GRUB_CMDLINE_LINUX_DEFAULT="--verbose"
После этого апаем grub:
update-grub2 
И ребутимся :) После этого логи будут писаться прямо в dmesg, где можно проверить корректность и последовательность запуска сервисов.  

Sunday, 13 March 2016

В gcc 5.3 сломали бинарную совместимость с clang (и всеми прочими компиляторами) :(

В "фиче" виноваты разработчики gcc: https://bugs.launchpad.net/ubuntu/+source/llvm-toolchain-3.6/+bug/1488254

По мотивам бага есть бага в трекере clang, где его авторы пытаются вернуть поддержку совместимости: http://reviews.llvm.org/D12834

А пока же попытка слинковатся силами clang с библиотекой (с поддержкой С++11), собранной силами gcc 5.3 обречена на провал.

Ошибочки будут вот такие:

/root/fastnetmon/src/fastnetmon.pb.cc:(.text+0x16e6): undefined reference to `google::protobuf::internal::empty_string_'

Monday, 7 March 2016

Установка модуля testcookie для Nginx без рекомпиляции Nginx

Мы обсуждаем, что берем Nginx и ставим его на Debian 7 или 8, на котором уже работает nginx из пакетов с сайта nginx.org.

Ставим Nginx из репозитория с офсайта.

Проверяем его версию:
nginx -V 2>&1|grep "nginx version"
nginx version: nginx/1.9.12

Потом там же берем опции компиляции:
nginx -V

Стягиваем модуль:
cd /usr/src
git clone https://github.com/kyprizel/testcookie-nginx-module.git

Ставим зависимости:
apt-get install -y libxml2-dev libxslt-dev libgd2-xpm-dev libgeoip-dev 
Собираем модуль:

cd /usr/src
wget 'http://nginx.org/download/nginx-1.9.12.tar.gz'
tar -xzvf nginx-1.9.12.tar.gz
cd nginx-1.9.12/
# configure параметры берем из выдачи nginx -V выше
./configure --add-dynamic-module=/usr/src/testcookie-nginx-module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/etc/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,--as-needed' --with-ipv6
Собираем:
make

Потом берем бинарик:
mkdir /etc/nginx/modules
cp ./objs/ngx_http_testcookie_access_module.so /etc/nginx/modules

И добавляем в nginx.conf в самом верху:
load_module "modules/ngx_http_testcookie_access_module.so";

Если мы собирали не под ту версию, то в ответ получаем (и идем собирать под нужную):
[....] Restarting nginx: nginxnginx: [emerg] module "/etc/nginx/modules/ngx_http_testcookie_access_module.so" version 1009011 instead of 1009012 in /etc/nginx/nginx.conf:8

Получаем облом, если использованные параметры будут отличаться от тех, с которыми собран наш nginx:
[....] Restarting nginx: nginxnginx: [emerg] module "/etc/nginx/modules/ngx_http_testcookie_access_module.so" is not binary compatible in /etc/nginx/nginx.conf:8


Перезагружаем:
service nginx restart

Убеждаемся, что все загрузилось:
cat  /proc/5731/smaps |grep test
7f18c8441000-7f18c8448000 r-xp 00000000 09:02 6035144                    /usr/lib/nginx/modules/ngx_http_testcookie_access_module.so

Saturday, 5 March 2016

Монтирование папки с удаленного сервера силами SSH на Mac OS X El Capitan

Сначала стягиваем и ставим Fuse For OS X 3ю версию:
https://sourceforge.net/projects/osxfuse/files/osxfuse-3.x/

При установке явно ставим флажок MacFux Compatibility Layer!

Потом стягиваем и ставим актуальную версию файла sshfs-X.pkg отсюда: https://github.com/osxfuse/sshfs/releases 

Монтируем:
mkdir remote
sshfs root@IP: remote
Предыдущий способ был бесконечно медленный, поэтому полез в интернеты за рецептами и нашел, что помогло мне:
sshfs root@IP:/root remote -o auto_cache,reconnect,defer_permissions,noappledouble
Отмонтировать можно как обычный диск через Finder, но у меня этот способ не сработал!

Поэтому для отмонтирования используем:

umount -f remote
Источник: сайт 

Thursday, 25 February 2016

Fake TCP service which accepts any connections

Sometimes for testing purposes (for example, tshark protocol capture) could be useful to run fake tcp service which receive all connections.

This task could be achieve with this code:

while true ;do nc -v -t -l -p 179 > /dev/null;done
Dependencies:
apt-get install -y netcat-traditional

How to filter out only BGP update or open messages with tshark?


Filter our BGP update messages:
tshark -i lo -n  -Y "bgp.type==2"
 Filter out BGP open messages:

tshark -i lo -n  -Y "bgp.type==1"

Tuesday, 9 February 2016

Фильтрация по номеру vlan в tshark - почему не работает?

Итак, Вы изучили все дебри фильтров Wireshark и смогли написать фильтр для отображения только трафика с тегом vlan.

Итак, он выглядит примерно так:

tshark -n -i eth4 -c 1000 -Y "vlan"
Но он упорно не работает, хотя Вы четко уверены - vlan трафика там куча!

Вот решение:

ethtool -K eth4 rxvlan off
Вот так вот :) 

Как отключить относительные номера seq для tshark/wireshark

Всем, кто занимается глубокой работой с TCP, уверен, знакома проблема, что tshark/wireshark вместо реальных номеров seq (длиннющих чисел) отображает относительные (начинающиеся с нуля при старте сессии).

Это далеко не всегда нужно, поэтому будем отключать!

Было вот так:
tshark -r ../raw_packets_data/ip_packet_with_telnet_to_22_port_with_dropbear_from_mac_os_el_capitan.pcap -V |grep Seq    Sequence number: 0    (relative sequence number)


Стало:
tshark -r ../raw_packets_data/ip_packet_with_telnet_to_22_port_with_dropbear_from_mac_os_el_capitan.pcap -V -o "tcp.relative_sequence_numbers: FALSE" |grep seq -iTransmission Control Protocol, Src Port: 52500 (52500), Dst Port: ssh (22), Seq: 1133079759, Len: 0    Sequence number: 1133079759
Как можно видеть, помог нам флаг:  -o "tcp.relative_sequence_numbers: FALSE"