воскресенье, 27 апреля 2014 г.

PS: sysdig и chisels

Еще пара слов про sysdig
Как я уже упоминал, для sysdig можно писать скрипты на Lua, называемые Chisels. (подобные механизмы есть и у SystemTap и у Dtrace). Но в прошлый раз я забыл упомянуть что некоторое количество chisels уже идет в комплекте к sysdig. Чтобы просмотреть список chisels вызовите sysdig с флагом -cl:
root@ubuntu:~# sysdig -cl

Category: CPU Usage
-------------------
topprocs_cpu    Top processes by CPU usage

Category: I/O
-------------
echo_fds        Print the data read and written by processes.
fdbytes_by      I/O bytes, aggregated by an arbitrary filter field
fdcount_by      FD count, aggregated by an arbitrary filter field
iobytes         Sum of I/O bytes on any type of FD
iobytes_file    Sum of file I/O bytes
stderr          Print stderr of processes
stdin           Print stdin of processes
stdout          Print stdout of processes
topfiles_bytes  Top files by R+W bytes
topfiles_time   Top files by time
topprocs_file   Top processes by R+W disk bytes

Category: Net
-------------
iobytes_net     Show total network I/O bytes
spy_ip          Show the data exchanged with the given IP address
spy_port        Show the data exchanged using the given IP port number
topconns        top network connections by total bytes
topports_server Top TCP/UDP server ports by R+W bytes
topprocs_net    Top processes by network I/O

Category: Performance
---------------------
bottlenecks     Slowest system calls
topscalls       Top system calls by number of calls
topscalls_time  Top system calls by time

Category: Security
------------------
spy_users       Display interactive user activity

Category: errors
----------------
topfiles_errors top files by number of errors
topprocs_errors top processes by number of errors

Use the -i flag to get detailed information about a specific chisel

Если интересно узнать о каком то определенном chisel - используйте флаг -i.
root@ubuntu:~# sysdig -i topprocs_cpu

Category: CPU Usage
-------------------
topprocs_cpu    Top processes by CPU usage

Use the -i flag to get detailed information about a specific chisel

Given two filter fields, a key and a value, this chisel creat
es and renders to the screen a table.

Args:
(None)

Запуск chisel производится флагом -c:
root@ubuntu:~# sysdig -i topprocs_cpu

Category: CPU Usage
-------------------
topprocs_cpu    Top processes by CPU usage

Use the -i flag to get detailed information about a specific chisel

Given two filter fields, a key and a value, this chisel creat
es and renders to the screen a table.

Args:
(None)

Можно использовать фильтры:
root@ubuntu:~# sysdig -A -c echo_fds proc.name=sshd
------ Write 4.05KB to 192.168.152.1:7588->192.168.152.133:22

i>g}q
x<r&xOGel-=b@KMBPz4G)0NxV
){m> Ayl
(g'`.{@Hp?;4VSFV|1=O?
m?1S
R [L^xzcX~ aqn*5o+#e |>KemR'4a\";,?$UgLco
K7bip8lANHLIC2M,6<[u<?z@Nz<];
{=J[YnH{\"Qp-2%rFEVZI?aD?}1\"x%9L}}CVLe]>o?\":QY%%q
K/MVpy^BTT/WR[]d`)^ '$Td2p63;x2;T3:n,%iOLFDP4>V SM!vK[Rcs$|pk]xKn[!e{4mft%)J:lH]W[
d]2}B!@zS?q\"YgljYYyR~8|u^

Также можно ознакомиться с интересной статьей в блоге sysdig - Using sysdig to explore I/O with the “fdbytes_by” chisel
Например вот как можно увидеть файловую активность по директориям -
root@ubuntu:~# sysdig -c fdbytes_by fd.directory "fd.type=file"
Bytes     fd.directory
------------------------------
Bytes     fd.directory
------------------------------
1.14KB    /var/log/
76B       /dev/
Bytes     fd.directory
------------------------------
104B      /dev/
Bytes     fd.directory
------------------------------
83B       /dev/
Bytes     fd.directory
------------------------------
83B       /dev/



воскресенье, 6 апреля 2014 г.

Sysdig - новый системный трассировщик для Linux

На прошлой неделе компания Draios сделала смелый шаг - открыла код нового трассировщика для Linux - Sysdig. Что такое Sysdig? Как говорит его вебсайт - "strace + tcpdump + lsof + классный соус". И имхо весьма занятный инструмент у них получился.
Установка для смелых духом проста -
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
Для бОльших параноиков есть внятная инструкция - если вкратце, то подключить репозиторий и установить sysdig оттуда (потребуется заголовки ядра и DKMS для автоматической сборки и установки модуля ядра).
По возможностям sysdig - лучше всего расскажут простые примеры:
  • Показать топ процессов по использованию сети:
  • sysdig -c topprocs_net
  • Топ серверных портов
  • sysdig -c fdbytes_by fd.sport
  • Топ клиентских IP по установленным соединениям
  • sysdig -c fdcount_by fd.cip "evt.type=accept"
  • Топ процессов по использованию диска
  • sysdig -c topprocs_file
  • Топ файлов из/в которые читает/пишет определенный процесс, например apache
  • sysdig -c topfiles_bytes proc.name=httpd
  • Топ процессов по открытым файлам
  • sysdig -c fdcount_by proc.name "fd.type=file"
  • Топ файлов по времени (io wait time)
  • sysdig -c topfiles_time
Также можно как в tcpdump - записать все события в файл на сервере (отфильтровав например про процессу)
sysdig -w out.scap proc.name=httpd
а проанализировать потом, в том числе на Windows или MAC.
Также есть целый фреймворк на Lua - Chisel - можно писать простенькие скрипты и выполнять их сразу при запуске sysdig.
Однако еще остается открытый вопрос - насколько столь мощный инструмент нагружает сервер.
Сделаем простенькую проверку. Имеем простую виртуальную машинку на Ubuntu 12.04, 1 Гб памяти, Percona Mysql 5.6.

  1. Устанавливаем sysbench:
  2. sudo apt-get install sysbench
  3. Создаем в БД базу sbtest, наполныем ее данными
  4. sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp prepare
    
  5. Запускаем сам тест
  6. root@ubuntu:~# sysbench --num-threads=8 --max-requests=5000 --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp run
    
  7. Результаты
  8. sysbench 0.4.12:  multi-threaded system evaluation benchmark
    
    Running the test with following options:
    Number of threads: 8
    
    Doing OLTP test.
    Running mixed OLTP test
    Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
    Using "BEGIN" for starting transactions
    Using auto_inc on the id column
    Maximum number of requests for OLTP test is limited to 5000
    Threads started!
    Done.
    
    OLTP test statistics:
        queries performed:
            read:                            70014
            write:                           25003
            other:                           10001
            total:                           105018
        transactions:                        5000   (123.58 per sec.)
        deadlocks:                           1      (0.02 per sec.)
        read/write requests:                 95017  (2348.49 per sec.)
        other operations:                    10001  (247.19 per sec.)
    
    Test execution summary:
        total time:                          40.4587s
        total number of events:              5000
        total time taken by event execution: 323.5886
        per-request statistics:
             min:                                  5.83ms
             avg:                                 64.72ms
             max:                               8020.75ms
             approx.  95 percentile:             168.71ms
    
    Threads fairness:
        events (avg/stddev):           625.0000/24.51
        execution time (avg/stddev):   40.4486/0.01
    
Удаляем БД sbtest, перегружаем виртуалку, повторяем п.1 и 2
  1. Запускаем в отдельном терминале sysdig:
  2. root@ubuntu:~# sysdig -w /root/mysqld.scap proc.name=mysqld
  3. Повторяем тест
  4. root@ubuntu:~# sysbench --num-threads=8 --max-requests=5000 --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp run
    
  5. Результаты
  6. sysbench 0.4.12:  multi-threaded system evaluation benchmark
    
    Running the test with following options:
    Number of threads: 8
    
    Doing OLTP test.
    Running mixed OLTP test
    Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
    Using "BEGIN" for starting transactions
    Using auto_inc on the id column
    Maximum number of requests for OLTP test is limited to 5000
    Threads started!
    Done.
    
    OLTP test statistics:
        queries performed:
            read:                            70014
            write:                           25002
            other:                           10001
            total:                           105017
        transactions:                        5000   (71.62 per sec.)
        deadlocks:                           1      (0.01 per sec.)
        read/write requests:                 95016  (1360.97 per sec.)
        other operations:                    10001  (143.25 per sec.)
    
    Test execution summary:
        total time:                          69.8150s
        total number of events:              5000
        total time taken by event execution: 558.1830
        per-request statistics:
             min:                                  9.35ms
             avg:                                111.64ms
             max:                               1590.65ms
             approx.  95 percentile:             304.89ms
    
    Threads fairness:
        events (avg/stddev):           625.0000/39.17
        execution time (avg/stddev):   69.7729/0.02
    
    
Итого - среднее время запроса выросло почти вдвое - 111 мс вместо 65 мс. Не очень впечатляет. Хотя по правде говоря, тест довольно исскусственный и не факт что верный в методологическом мысле.

воскресенье, 9 февраля 2014 г.

Как НЕ нужно издавать журналы

На дворе 2013 год. Айпады, андроиды всякие. Некие товарищи собираются издавать журнал посвященный FreeBSD - FreeBSD Journal. Ну собираются - и хорошо - начинание то благое.
Наступил год 2014, журнал наконец вышел. И что же мы видим? В Apple Appstore и Amazon Appstore (НЕ в Google Play, хотя говорят что версия для Play на подходе) продается бесплатное (free) приложение (!). Скачиваем, его запускаем, и видим -

Какой логин? Какой пароль? Почему все повторяется по два раза? Не много ли 7 уе за номер журнала даже не в PDF?
И все это при том что и на Амазоне, и в Аппсторе и в Play есть возможность продавать журнал "в один клик" - без дополнительной регистрации, без ввода своей платежной информации непонятно где... Да, это стоит денег, пусть те же 30% от цены (хотя я не узнавал, может для журналов расценки другие, конечно) - но неужели FreeBSD стала настолько нишевой ОС, что уменьшение цены на 30% не окупит увеличение аудитории В РАЗЫ?