Sysdig — инструмент для диагностики Linux-систем

от автора

Sysdig — инструмент для диагностики Linux-систем

Для сбора и анализа информации о системе в Linux используется целый набор утилит. Для диагностики каждого из компонентов системы используется отдельный диагностический инструмент.

Информация о наиболее распространенных диагностических утилитах наглядно представлена на следующей схеме:

Sysdig — инструмент для диагностики Linux-систем

Недавно мы узнали об утилите Sysdig, разработанной компанией Draios. Она собирает информацию абсолютно обо всем:

  • о входящих сетевых соединениях и связанных с ними процессах;
  • о файлах, работа с которыми сопряжена с наибольшей нагрузкой на систему ввода/вывода;
  • о трафике в привязке к процессам;
  • о файлах и директориях, к которым обращаются пользователи;
  • о системных вызовах, файлах и сетевых соединениях, работа с которыми завершилась ошибкой…

Sysdig позиционируется как инструмент, существенно облегчающий работу системного администратора. Прочитав статью о нем на сайте разработчика, мы решили его протестировать.

DTrace, Systemtap и Sysdig

Sysdig является далеко не первой попыткой создать инструмент с расширенными возможностями для сбора информации о работающей Linux-системе.
В числе близких по функциональности инструментов следует прежде всего назвать, во-первых, DTrace — фреймворк динамической трассировки, разработанный компанией Sun Microsystems. Он используется для наблюдения за количеством потребляемой памяти, процессорным временем, сетевыми ресурсами, которые используются активными процессами на работающей системе.

В DTrace используются скрипты на языке D (Си-подобный язык, включающий также специализированные функции и переменные для трассировки). Скрипты включают список датчиков (probes), которым соответствуют определенные действия. Датчики срабатывают при выполнении заданного условия (например, при открытии файла или запуске процесса), после чего выполняется соответствующее действие. Имеется возможность передачи информации от одного датчика к другому.

DTrace представляет собой мощный, но при этом сложный в работе инструмент. Он требует от пользователя достаточно глубоких технических знаний. Написание и отладка D-скриптов также представляют собой трудоемкий (в особенности для пользователей, не имеющих должных навыков программирования) процесс, занимающий много времени.

Весьма близок к DTrace по принципу работы и набору функций инструмент Systemtap (год с небольшим назад о нем была опубликована небольшая статья на Хабре). Systemtap представляет собой интерфейс командной строки и скриптовый язык. Он осуществляет мониторинг системных событий и в случае наступления какого-либо события назначает для него обработчик.

В качестве событий могут выступать, например, начало или конец сессии Systemtap, срабатывание таймера и т.п.). Обработчиком события называется последовательность скриптовых операторов, которые выполняются, когда событие срабатывает. Обычно обработчики вычленяют информацию из контекста события или выводят ее на консоль.

Существенным минусом SystemTap является очень сложный синтаксис скриптового языка. Написание и отладка скриптов также забирают у пользователя немало времени и сил.

В отличии от упомянутых выше инструментов Sysdig устроен по-другому. По архитектуре он близок к таким продуктам, как libcap, tcpdump, wireshark. Специальный драйвер sysdig probe перехватывает системные события на уровне ядра, после чего запускается функция ядра tracepoints, которая, в свою очередь запускает для этих событий обработчики. Обработчики сохраняют информацию о событии в cовместно используемом буфере. Затем эта информация может быть выведена на экран или сохранена в текстовом файле.

Благодаря такой архитектуре sysdig не влияет на производительность системы. Детальную информацию о системных событиях можно получать при помощи простых команд. Для выполнения некоторых операций используются готовые скрипты на языке Lua (более подробно о них еще пойдет речь ниже).

Установка

В официальные репозитории sysdig пока что не включен. Чтобы запустить автоматическую установку Sysdig, нужно выполнить от имени root-пользователя следующую команду:

 curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash 

О процедурах ручной установки для различных дистрибутивов Linux можно подробно почитать в официальной документации.

Первое знакомство

По завершении установки введем следующую команду:

 # sysdig 

Все события, происходящие в системе, будут записываться в стандартный вывод:

 63889 15:25:12.908695644 3 notify-osd (7209) > poll fds=3:u5 timeout=4294967295  63890 15:25:12.908698249 3 notify-osd (7209)  writev fd=3(<u>) size=4  63893 15:25:12.908704065 2 gnome-terminal (18260) > lseek fd=24(/tmp/vteIVHGFX (deleted)) offset=0 whence=2(SEEK_END)  63894 15:25:12.908704595 2 gnome-terminal (18260)  lseek fd=24(/tmp/vteIVHGFX (deleted)) offset=0 whence=2(SEEK_END)  63896 15:25:12.908709655 2 gnome-terminal (18260)  write fd=24(/tmp/vteIVHGFX (deleted)) size=80  63899 15:25:12.908710722 3 notify-osd (7209) > writev res=4 data=+...  63900 15:25:12.908713828 3 notify-osd (7209) < poll fds=3:u1 timeout=4294967295  63901 15:25:12.908714531 2 gnome-terminal (18260) < write res=80 data=1275 15:25:12.596942000 1 rs:main (941) < open fd=-2(ENOENT) name=/dev/xconsole  

В каждой строке вывода содержится информация об одном событии. Она отображается в следующем формате:

 %evt.num %evt.time %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.args 

Вывод состоит из следующих полей:

  • evt.num — номер события;
  • evt.time — время события;
  • evt.cpu — номер процессора, в котором было перехвачено событие;
  • proc.name — имя процесса;
  • thread.tid — номер потока (у однопотоковых процессов он совпадает c номером процесса);
  • evt.dir — направление события (< — для входящих процессов, > — для исходящих);
  • evt.type — тип события;
  • evt.args — аргументы события.

Сохранение информации в файлах

Информацию о событиях, которую собирает sysdig, можно сохранять в отдельных файлах. Для этого используется команда вида:

 # sysdig -w myfile.scap 

Если нужно записать в файл информацию не обо всех системных событиях, а лишь об ограниченном их количестве (скажем, только о 100 событиях), используется опция -n:

 # sysdig —n 100 —w myfile.scap 

Вывести на консоль информацию, ранее сохраненную в файле, можно с помощью опции -r:

 # sysdig -r myfile.scap 

Sysdig сохраняет в каждом файле полный снимок операционной системы (запущенные процессы, активные файлы, активные пользователи и т.п.).

Фильтры

Как мы уже увидели из приведенных выше примеров, sysdig пишет в стандартный вывод вcю информацию о событиях. Мы можем сделать так, чтобы на консоль выводилась только та информация, которая нужна нам. Для этого используются фильтры.

Они указываются в конце строки (как, например, в tcpdump). Они могут быть применены как при записи событий «на лету», так и при записи в файл. Попытаемся проследить за работой какой-либо команды& — например, cat:

 # sysdig proc.name = cat   21368 13:10:15.384878134 1 cat (8298) < execve res=0 exe=cat args=index.html. tid=8298(cat) pid=8298(cat) ptid=1978(bash) cwd=/root fdlimit=1024 21371 13:10:15.384948635 1 cat (8298) > brk size=0 21372 13:10:15.384949909 1 cat (8298) < brk res=10665984 21373 13:10:15.384976208 1 cat (8298) > mmap 21374 13:10:15.384979452 1 cat (8298) < mmap 21375 13:10:15.384990980 1 cat (8298) > access 21376 13:10:15.384999211 1 cat (8298) < access 21377 13:10:15.385008602 1 cat (8298) > open 21378 13:10:15.385014374 1 cat (8298) < open fd=3(/etc/ld.so.cache) name=/etc/ld.so.cache flags=0(O_NONE) mode=0 21379 13:10:15.385015508 1 cat (8298) > fstat fd=3(/etc/ld.so.cache) 21380 13:10:15.385016588 1 cat (8298) < fstat res=0 21381 13:10:15.385017033 1 cat (8298) > mmap 21382 13:10:15.385019763 1 cat (8298) < mmap 21383 13:10:15.385020047 1 cat (8298) > close fd=3(/etc/ld.so.cache) 21384 13:10:15.385020556 1 cat (8298) < close res=0 

Попробуем применить фильтры. Их можно задавать при помощи стандартных операторов сравнения (=, !=, <, <=, >, >=, contains). Можно также использовать булевы операторы (or, and, not) и скобки.

Введем следующую команду:

 # sysdig proc.name = cat and proc.name = vi 

Она будет отслеживать всю активность программ cat и vi:

 56239 12:14:01.449463618 0 BrowserBlocking (2587) > open  56240 12:14:01.449467018 0 BrowserBlocking (2587) < open fd=142(/proc/16213/statm) name=/proc/16213/statm flags=1(O_RDONLY) mode=0  63158 12:14:01.493237287 3 gnome-terminal (3910) > open  63177 12:14:01.493281181 3 gnome-terminal (3910) < open fd=18(/tmp/vteHGSYFX) name=/tmp/vteHGSYFX flags=39(O_EXCL|O_CREAT|O_RDWR) mode=0  63200 12:14:01.493309748 3 gnome-terminal (3910) > open  63205 12:14:01.493319526 3 gnome-terminal (3910) < open fd=18(/tmp/vteHESYFX) name=/tmp/vteHESYFX flags=39(O_EXCL|O_CREAT|O_RDWR) mode=0  

Команда

 # sysdig proc.name!=cat and evt.type=open 

будет выводить на консоль информацию об открытых событиях для всех процессов, кроме cat:

 2111 12:15:47.656367409 1 rs:main (914) > open  2112 12:15:47.656368926 1 rs:main (914)  open  2114 12:15:47.656371170 1 rs:main (914)  open  2116 12:15:47.656374373 1 rs:main (914)  open  2118 12:15:47.656376563 1 rs:main (914)  open  2120 12:15:47.656378615 1 rs:main (914)  open  

Полный список фильтров можно посмотреть, введя команду

 # sysdig -l 

(подробные разъяснения и комментарии см. здесь).

С помощью фильтров можно легко получать полезную и важную информацию. Например, просмотреть информацию о входящих сетевых соединениях, полученных всеми процессами, кроме apache, можно при помощи простой команды:

 # sysdig evt.type=accept and proc.name!=apache 

Как уже было сказано выше, в выводе sysdig присутствуют поля evt.arg и evt.rawarg. О них следует рассказать отдельно. Каждое событие, регистрируемое sysdig, относится к определенному типу (например, open, read и т.п.), а также обладает определенными параметрами (fd, name и т.п.), которые закодированы по определенным правилам. Не будем разбирать все это подробно (заинтересованных читателей отсылыем к официальной документации) и остановимся на том, как эти аргументы могут быть использованы при создании фильтров.

Рассмотрим следующую команду:

 # sysdig evt.type=execve and evt.arg.ptid=bash 

Она выведет на консоль список процессов, запущенных интерактивными пользователями. Установленный фильтр принимает системные вызовы execve (которые используются для выполнения программ) только в случае, если для них родительским процессом для них является bash.

Различие между evt.arg и evt.rawarg заключается в том, что последний не расшифровывает идентификационные номера процессов, коды ошибок и т.п., оставляя все аргументы в «сырой» цифровой форме.
Например, просмотреть список процессов, вызвавших ошибки, можно с помощью команды:

 # sysdig "evt.rawarg.res<0 or evt.rawarg.fd<0"  257727 15:57:35.398754060 3 chrome (17326) < futex res=-110(ETIMEDOUT)  257737 15:57:35.399218996 0 chrome (2493) < recvfrom res=-11(EAGAIN) data= tuple=NULL  257749 15:57:35.399362914 1 Xorg (1153) < read res=-11(EAGAIN) data=  257834 15:57:35.401067094 0 chrome (2493) < recvfrom res=-11(EAGAIN) data= tuple=NULL  257836 15:57:35.401106092 0 chrome (2493) < recvfrom res=-11(EAGAIN) data= tuple=NULL  257849 15:57:35.402594284 2 chrome (4446) < futex res=-110(ETIMEDOUT)  257882 15:57:35.407348870 0 chrome (2493) < recvfrom res=-11(EAGAIN) data= tuple=NULL  257884 15:57:35.407358705 0 chrome (2493) < recvfrom res=-11(EAGAIN) data= tuple=NULL  257888 15:57:35.407373908 0 chrome (2493) < recvfrom res=-11(EAGAIN) data= tuple=NULL  257922 15:57:35.407757377 1 Xorg (1153) < read res=-11(EAGAIN) data=  

Полный список событий и параметров, которые могут быть использованы в фильтрах, можно посмотреть при помощи команды

 # sysdig -L 

Форматирование выводов

Всю информацию, которую sysdig выводит на консоль, мы также можем представить в нужном нам формате. Для форматирования вывода нужно воспользоваться опцией -p, после которой указываются необходимые поля вывода:

 # sysdig -p"user:%user.name dir:%evt.arg.path" evt.type=chdir  user:ubuntu dir:/root user:ubuntu dir:/root/tmp user:ubuntu dir:/root/Download 

Приведенная выше команда собирает информацию о системных вызовах chdir (они осуществляются каждый раз при выполнении команды cd) и выводят на консоль имена пользователей, выполняющих команду cd и имена директорий, в которые они переходят.

С опцией -p используется следующий синтаксис:

  • перед именами полей ставится знак процента (%);
  • в строки можно добавлять любой текст (как в функции printf на языке С);
  • по умолчанию строка выводится на консоль только в том случае, когда в событии присутствуют все элементы, указанные после опции -p. Если в начале строки указать звездочку (*), то вывод будет представлен в неполном виде; отсутствующие поля будут обозначены как N/A.

Введем команду:

 # sysdig -p"%evt.type %evt.dir %evt.arg.name" evt.type=open 

Она будет выводить только информацию об открытых исходящих событиях, например.

 open < /proc/23533/task/23533/stat open < /proc/23533/task/23535/stat open < /proc/23533/task/23536/stat open < /proc/23533/task/23539/stat open < /proc/23533/task/23540/stat open < /proc/23533/task/23541/stat open < /proc/23533/task/23542/stat open < /proc/23533/task/23543/stat open < /proc/23533/task/23544/stat 

Входящие события не имеют имени, поэтому информация о них в выводе не отображается.

Если же мы введем команду

 # sysdig -p "*%evt.type %evt.dir %evt.arg.name" evt.type=open 

то в вывод будет включена информация и об исходящих событиях:

 open < /proc/22832/task/22838/stat open >  open < /proc/22832/task/22839/stat open >  open < /proc/22832/task/22840/stat open >  open < /proc/22832/task/22841/stat open >  open < /proc/22832/task/22842/stat open >  open < /proc/22832/task/22843/stat open >  open < /dev/urandom 

Чизелы

Для анализа списка событий в Sysdigs используются небольшие скрипты, написанные на языке Lua. Разработчики называют их chisels (в русском переводе слово chisel означает «долото», «стамеска»). Для этого термина вряд ли можно найти адекватный русский эквивалент, поэтому мы решили оставить его без перевода и называть эти скрипты чизелами.
Вывести на консоль список доступных чизелов можно при помощи команды:

 # sysdig -cl 

Просмотреть описание конкретного чизела и список используемых с ним аргументов можно с помощью опции -i:

 # sysdig -i fileslower  Category: Performance --------------------- fileslower Trace slow file I/O Use the -i flag to get detailed information about a specific chisel Trace file I/O slower than a threshold, or all file I/O  Args: [int] min_ms — minimum millisecond threshold for showing file I/O 

Запуск чизелов осуществляется с помощью опции -с. Попробуем запустить чизел topfiles_bytes (он выводит на экран список файлов на локальной машине, к которым осуществляется наибольшее количество обращений):

 # sysdig -c topfiles_bytes  Bytes     Filename   ------------------------------ 3.21KB    /dev/input/event4 2.93KB    /tmp/vte7IZWFX (deleted) 864B      /dev/urandom 800B      /tmp/vteL7ZWFX (deleted) 498B      /dev/ptmx 224B      /dev/dri/card0 219B      /proc/16213/task/16221/stat 217B      /proc/16213/task/16229/stat 217B      /proc/16213/task/16219/stat 215B      /proc/16213/task/16225/sta 

При работе с чизелами также используются фильтры. Если нас, например, не интересует информация о частоте обращений к файлам в директории /dev, мы можем применить соответствующий фильтр:

 # sysdig -c topfiles_bytes "not fd.name contains /dev" Bytes     Filename   ------------------------------ 1.90KB    /tmp/vte7IZWFX (deleted) 438B      /proc/16139/task/16145/stat 438B      /proc/16139/task/16141/stat 434B      /proc/16139/task/16150/stat 430B      /proc/16139/task/16146/stat 430B      /proc/16139/task/16147/stat 430B      /proc/16139/task/16149/stat 430B      /proc/16139/task/16148/stat 428B      /proc/16139/task/16139/stat 420B      /proc/16139/task/16142/stat 

С помощью фильтров можно также просмотреть информацию об обращениях к файлам в конкретной директории:

 # sysdig -c topfiles_bytes "fd.name contains /var/log/"   Bytes     Filename ------------------------------ 596B      /var/log/kern.log 596B      /var/log/syslog 596B      /var/log/messages 

Еще один фильтр позволяет увидеть, к каким файлам обращается указанный процесс:

 # sysdig -c topfiles_bytes "proc.name=vi"  

Можно также посмотреть, к каким файлам обращается пользователь:

 $ sysdig -c topfiles_bytes "user.name=username"   Bytes     Filename   ------------------------------ 1.90KB    /tmp/vte7IZWFX (deleted) 576B      /dev/urandom 384B      /tmp/vteL7ZWFX (deleted) 355B      /dev/ptmx 

Можно запускать несколько чизелов одновременно:

 # sysdig -c stdin -c stdout proc.name=cat 

Как уже было отмечено, все чизелы написаны на языке Lua, поэтому их можно без труда отредактировать или даже написать новые.
С руководством по написанию скриптов можно ознакомиться здесь.

Примеры использования

Рассмотрим примеры типовых диагностических процедур, которые можно проводить с помощью sysdig.

Сеть

Просмотреть список всех подключений, не обслуживаемых Apache:

 # sysdig -p "%proc.name %fd.name" "evt.type=accept and proc.name!=httpd" 

Просмотреть, какими данными сервер обмениваются 192.168.0.1:
в двоичном коде:

 # sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1 

в кодировке ASCII:

 # sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

Просмотреть информацию о процессах, потребляющих больше всего трафика:

 # sysdig -c topprocs_net Bytes     Process    ------------------------------ 885B      avahi daemon 6.44KB    Chrome 

Просмотреть статистику использования серверных портов:
количество установленных соединений:

 # sysdig -c fdcount_by fd.sport "evt.type=accept"; 

объем отправленной информации, байт:

 # sysdig -c fdbytes_by fd.sport 

Просмотреть информацию о клиентских IP:

количество установленных соединений:

 # sysdig -c fdcount_by fd.cip "evt.type=accept" 

объем отправленной информации, байт:

 # sysdig -c fdbytes_by fd.cip  Bytes     fd.cip     ------------------------------ 375B      192.168.40.99 250B      192.168.40.255 226B      192.168.40.101 133B      192.168.30.88 125B      255.255.255.255 

Просмотреть информацию о запросах к внешнему MySQL серверу, осуществляемых через Apache:

 # sysdig -A -c echo_fds fd.sip=192.168.30.5 and proc.name=apache2 and evt.buffer contains SELECT 

Дисковая подсистема

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

 # sysdig -c topprocs_file Bytes     Process    ------------------------------ 12.61KB   BrowserBlocking 3.89KB    Xorg 3.79KB    Chrome_IOThread 3.09KB    gnome-terminal 

Просмотреть информацию о процессах, использующих большое количество файлов:

 # sysdig -c fdcount_by proc.name "fd.type=file"  BrowserBlocking	365 Chrome_IOThread	44 irqbalance	12 upowerd	7 dropbox	5 Xorg	3 alsa-sink	2 rs:main	2 compiz	1 rsyslogd	1 gnome-terminal	1 

Отслеживать операции чтения-записи, осуществляемые процессами:

 # sysdig -c topfiles_bytes  Bytes     Filename   ------------------------------ 5.41KB    /dev/input/event4 1.90KB    /tmp/vteHGSYFX (deleted) 576B      /dev/urandom 554B      /dev/ptmx 384B      /tmp/vteHESYFX (deleted) 219B      /proc/16139/task/16145/stat 219B      /proc/15857/task/15865/stat 219B      /proc/16139/task/16141/sta 

Просмотреть список файлов, с которыми apache осуществляет наибольшее количество операций чтения-записи:

 # sysdig -c topfiles_bytes proc.name=httpd 

Отслеживать открытие файлов в реальном времени:

 # sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open  root         1143   irqbalance   3   f /proc/interrupts root         1143   irqbalance   3   f /proc/stat root         1143   irqbalance   3   f /proc/irq/42/smp_affinity root         1143   irqbalance   3   f /proc/irq/41/smp_affinity root         1143   irqbalance   3   f /proc/irq/16/smp_affinity root         1143   irqbalance   3   f /proc/irq/43/smp_affinity root         1143   irqbalance   3   f /proc/irq/17/smp_affinity root         1143   irqbalance   3   f /proc/irq/23/smp_affinity root         1143   irqbalance   3   f /proc/irq/40/smp_affinity root         1143   irqbalance   3   f /proc/irq/10/smp_affinity root         1143   irqbalance   3   f /proc/irq/18/smp_affinity 

Использование процессора

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

 # sysdig -c topprocs_cpu  CPU%      Process ------------------------------ 0.31%     sysdig 0.09%     sshd 0.03%     mysqld 0.01%     nginx 0.01%     php5-fpm 

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

 # sysdig -c topprocs_cpu evt.cpu=0 

Просмотреть стандартный вывод для процесса:

 # sysdig -s4096 -A -c stdout proc.name=cat 

Производительность и ошибки

Просмотреть информацию об ошибках открытия файлов httpd:

 # sysdig "proc.name=httpd and evt.type=open and evt.failed=true" 

Просмотреть статистику о файлах, на которые затрачивается больше всего времени:

 # sysdig -c topfiles_time   Time      Filename   ------------------------------ 403us     /dev/urandom 267us     /dev/input/event4 84us      /dev/dri/card0 63us      /tmp/vte7IZWFX (deleted) 34us      /tmp/vteL7ZWFX (deleted) 20us      /proc/3467/task/3467/stat 13us      /dev/ptmx 11us      /proc/16010/task/16010/st 

Просмотреть информацию о процессах, на которые apache затрачивает больше всего времени:

 # sysdig -c topfiles_time proc.name=httpd 

Просмотреть информацию о процессах, при выполнении которых возникают ошибки ввода-вывода:

 # sysdig -c topprocs_errors  ------------------------------ 2363      notify-osd 1327      Xorg 688       compiz 349       chrome 82        pulseaudio 76        gtk-window-deco 62        gnome-terminal 50        alsa-sink 30        Chrome_ChildIOT 20        gnome-screensav 20        nautilus 14        Chrome_IOThread 10        syndaemon 10        gnome-settings- 7         soffice.bin 6         nm-applet 6         dbus-daemon 4         AudioThread 3         pidgin 2         NetworkManager 2         mission-control 1         gdbus 

Просмотреть информацию о файлах, при работе с которыми возникают ошибки ввода-вывода:

 # sysdig -c topfiles_errors  #Errors   Filename   ------------------------------ 43        /dev/input/event4 2         /dev/ptmx 

Просмотреть информацию о системных вызовах, возвращающих ошибки:

 # sysdig -c topscalls "evt.failed=true"  # Calls   System Call                                                                                                         ------------------------------ 384       recvfrom 273       futex 169       read 133       sendto 41        select 3         recvmsg 

Отслеживать ошибки при открытии файлов по мере их появления:

 # sysdig -p &quot%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and evt.failed=true  root         1607   upowerd      -1  f /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0e/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_now root         1607   upowerd      -1  f /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0e/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/energy_avg root         1607   upowerd      -1  f /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0e/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/voltage_max_design root         1607   upowerd      -1  f /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0e/PNP0C09:00/PNP0C0A:00/power_supply/BAT0/power_now 

Вывести список операций ввода-вывода, выполнение которых происходит с задержкой более 1 мс:

 # sysdig -c fileslower 1  TIME                    PROCESS      TYPE     LAT(ms) FILE 2014-05-13 12:46:57.190 rsyslogd     read        3524 /proc/kmsg 2014-05-13 12:46:57.197 rsyslogd     read           7 /proc/kmsg 2014-05-13 12:46:57.205 rsyslogd     read           7 /proc/kmsg 2014-05-13 12:46:57.209 rsyslogd     read           4 /proc/kmsg 2014-05-13 12:46:57.221 rsyslogd     read          11 /proc/kmsg 2014-05-13 12:46:57.225 rsyslogd     read           3 /proc/kmsg 2014-05-13 12:46:57.233 rsyslogd     read           7 /proc/kmsg 2014-05-13 12:46:57.241 rsyslogd     read           7 /proc/kmsg 2014-05-13 12:46:58.362 upowerd      read         220 /sys/devices/LNXSYSTM:00/LN 

Безопасность

Просмотреть информацию о директориях, посещаемых root-пользователем:

 # sysdig -p "%evt.arg.path" "evt.type=chdir and user.name=root" 

Отслеживать активность ssh:

 # sysdig -A -c echo_fds fd.name=/dev/ptmx and proc.name=sshd 

Отображать все события при открытии файла из директории /etc:

 # sysdig evt.type=open and fd.name contains /etc 97367 12:50:02.164137993 0 unity-panel-ser (2193) < open fd=13(/etc/timezone) name=/etc/timezone flags=1(O_RDONLY) mode=0  97385 12:50:02.164419642 0 unity-panel-ser (2193) < open fd=13(/etc/localtime) name=/etc/localtime flags=1(O_RDONLY) mode=0  97405 12:50:02.164642935 0 unity-panel-ser (2193) < open fd=13(/etc/localtime) name=/etc/localtime flags=1(O_RDONLY) mode=0  

Заключение

Sysdig — проект еще молодой. В числе его несомненных преимуществ следует назвать простой синтаксис команд. Во многих случаях Sysdig дает более подробную, чем DTrace и Systemtap, информацию о системных событиях, и представляет ее в более понятной человекочитаемой форме. Еще один важный плюс заключается в том, что анализ работы системы может выполняться после сбора всех данных, а не одновременно с возникновением ошибки или проблемной ситуации.

Перспективы у sysdig, несомненно, есть, и весьма неплохие. Надеемся, что продукт будет усовершенствован и займет достойное место в ряду утилит для диагностики Linux-систем.

Читателей, которые не могут оставлять комментарии здесь, приглашаем к нам в блог.

ссылка на оригинал статьи http://habrahabr.ru/company/selectel/blog/222839/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *