Библиотека сайта rus-linux.net
Мониторинг состояния и диагностика Linux-сервера с помощью утилиты sysdig
Оригинал: How to monitor and troubleshoot a Linux server using sysdig
Автор: Gabriel Cánepa
Дата публикации: 13 октября 2014 г.
Перевод: А.Панин
Дата перевода: 8 сентября 2016 г.
Мониторинг состояния и диагностика Linux-сервера с помощью утилиты sysdig
О какой утилите вы в первую очередь подумаете, если столкнетесь с необходимостью отслеживания системных вызовов, использованных процессом? Наверняка это будет утилита strace
, которая отлично подойдет для решения данной задачи. Какой инструмент с интерфейсом командной строки вы используете для исследования сетевого трафика? Если вы выберите tcpdump
, вы точно не ошибетесь. А если вам когда-нибудь понадобится отследить файлы, открытые процессом (напомню, что в соответствии с философией Unix, все является файлом), велика вероятность того, что вы воспользуетесь утилитой lsof
.
Утилиты strace
, tcpdump
и lsof
на самом деле являются отличными инструментами, которые должны использоваться каждым системным администратором и именно по этой причине вам должна понравиться утилита
Отдельные сценарии могут использоваться для анализа захваченных с помощью sysdig потоков событий с задействовнием различных реализованных в их рамках методов анализа.
В данной статье мы постараемся разобраться с установкой и использованием sysdig для мониторинга состояния и диагностики Linux-системы.
Установка sysdig
В данном руководстве будет использоваться автоматическая процедура установки, описанная на официальном веб-сайте проекта ввиду ее простоты, очевидности и независимости от используемого дистрибутива. В ходе автоматического процесса установки запущенный сценарий самостоятельно определит тип используемой операционной системы и установит все необходимые зависимости.
Выполните следующую команду от лица пользователя root для установки sysdig из официального репозитория apt/yum:
# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash
После завершения процесса установки у вас появится возможность запуска утилиты sysdig для ознакомления с ее возможностями с помощью следующей команды:
# sysdig
Сразу же после этого экран вашего монитора должен заполниться информацией о состоянии вашей системы, с которой вы не сможете ничего сделать. По этой причине в первую очередь разумнее воспользоваться командой
# sysdig -cl | less
для ознакомления со списком доступных сценариев.
По умолчанию вам должны быть доступны следующие категории, каждая из которых должна содержать по нескольку сценариев.
- CPU Usage (сценарии, осуществляющие мониторинг нагрузки на центральный процессор)
- Error (сценарии, осуществляющие отслеживание системных ошибок)
- I/O (сценарии, осуществляющие мониторинг операций ввода/вывода)
- Logs (сценарии для работы с системными журналами)
- Misc (дополнительные сценарии)
- Net (сценарии, осуществляющие мониторинг сетевой активности)
- Performance (сценарии, осуществляющие мониторинг показателей производительности системы)
- Security (сценарии, отслеживающие проблемы безопасности)
- System State (сценарии, осуществляющие мониторинг состояния системы)
Для вывода информации об использовании определенного сценария (включая детальное описание параметров командной строки) следует использовать следующую команду:
# sysdig -cl [имя_сценария]
Например, мы можем получить информацию об сценарии spy_port из категории "Net", выполнив следующую команду:
# sysdig -i spy_port
Сценарии могут комбинироваться с фильтрами (которые применяются как к данным, захватываемым в реальном времени, так и к данным из файлов событий) для получения более удобного для чтения вывода.
Имена фильтров соответствуют схеме "класс.столбец"
. Например:
-
fd.cip
: IP-адрес клиента. -
evt.dir
: направление события, либо">"
для входящих событий, либо"<"
для исходящих событий.
Для получения полного списка фильтров следует использовать следующую команду:
# sysdig -l
Далее в статье будет продемонстрировано несколько примеров использования sysdig.
Пример использования sysdig: диагностика проблем с производительностью сервера
Представьте, что в ходе эксплуатации вашего сервера стали наблюдаться проблемы с его производительностью (то есть, сервер периодически перестает отвечать на запросы или наблюдаются значительные задержки при ответах на запросы). В этом случае вы можете воспользоваться сценарием bottlenecks
для получения списка из 10 самых медленных системных вызовов в текущий момент.
Выполните следующую команду для вывода списка 10 самых медленных системных вызовов в реальном времени. Флаг "-c"
перед именем сценария сообщает sysdig о необходимости запуска сценария с указанным именем.
# sysdig -c bottlenecks
Вы также можете выполнить анализ производительности сервера на основании собранных данных в любое удобное время. Для этого достаточно сохранить собранные sysdig данные в файле и использовать сценарий bottlenecks
по отношению к этому файлу.
Во-первых, следует сохранить собранные sysdig данные в файле (используйте сочетание клавиш Ctrl+c для остановки процесса сбора данных):
# sysdig -w trace.scap
После того, как процесс сбора данных завершен, вы можете выявить наиболее медленные системные вызовы, использованные в процессе сбора данных, с помощью следующей команды:
# sysdig -r trace.scap -c bottlenecks
Следует обратить особое внимание на столбцы под номерами 2, 3 и 4, в которых приводятся время исполнения, имя и идентификатор процесса соответственно.
Пример использования sysdig: мониторинг действий пользователей в интерактивном режиме
Представьте, что вы работаете системным администратором и хотите осуществлять интерактивный мониторинг действий пользователей в системе (то есть, отслеживать исполняемые пользователями команды и перемещения пользователей по файловой системе). В этом случае вам будет полезен сценарий spy_user
.
В первую очередь следует собрать данные событий в файл, воспользовавшись несколькими дополнительными параметрами sysdig:
# sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz
-
"-s 4096"
сообщает sysdig о том, что следует сохранять до 4096 байт данных для каждого события. -
"-z"
(используется с"-w"
) позволяет активировать механизм сжатия файла событий. -
"-w <файл-событий>"
сообщает sysdig о необходимости сохранения данных событий в файле с заданным именем.
В примере выше мы используем имя узла при указании имени сжатого файла событий. Помните о том, что вы можете в любой момент завершить работу утилиты sysdig, воспользовавшись комбинацией клавиш "Ctrl + c".
После сбора достаточного объема данных мы можем получить список действий каждого из пользователей системы с помощью следующей команды:
# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users
В первом столбце выводимой таблицы указывается идентификатор процесса, ассоциированный с действием пользователя.
А что делать, если нужно осуществлять мониторинг действий определенного пользователя? Вы можете отфильтровать результаты работы сценария spy_users
по имени пользователя:
# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo"
Пример использования sysdig: мониторинг операций ввода/вывода
Формат вывода утилиты sysdig может быть изменен с помощью флага "-p"
с целью вывода лишь тех столбцов, которые интересуют системного администратора (таких, как имя пользователя, имя процесса или имя сокета), причем обозначения этих столбцов должны быть заключены в двойные кавычки. В данном примере мы будем создавать файл событий, который будет содержать лишь события записи данных в файлы из домашних директорий пользователей (разумеется, они будут доступны для последующего изучения с помощью команды "sysdig -r writetrace.scap.gz"
).
# sysdig -p "%user.name %proc.name %fd.name" "evt.type=write and fd.name contains /home/" -z -w writetrace.scap.gz
Пример использования sysdig: мониторинг сетевой активности
Одной из неотъемлемых частей комплекса мер по диагностике сервера является исследование сетевого трафика, для осуществления которого обычно используется утилита tcpdump
. В случае использования утилиты sysdig процедура мониторинга выполняется так же просто, но при этом позволяет получить информацию в более пригодном для чтения виде.
Например, вы можете исследовать текстовые данные (в формате ASCII), которыми обменивался определенный процесс (например, apache2
) с клиентом на узле с определенным IP-адресом:
# sysdig -s 4096 -A -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2
Если вы хотите осуществлять мониторинг обмена бинарными данными, вам придется заменить параметр "-A"
на "-X"
:
# sysdig -s 4096 -X -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2
Дополнительная информация об утилите с примерами использования и описаниями исследований доступна на официальном