Sysdig — инструмент для диагностики Linux-систем - Академия Selectel
В панель

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

Тирекс Тирекс Самый зубастый автор 13 мая 2014

Для сбора и анализа информации о системе в 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, нужно выполнить следующую команду:

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" 

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

nbsp;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-систем.

Читайте также: