Наши партнеры

UnixForum





Библиотека сайта 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, ведь она является мощным инструментом с открытым исходным кодом для низкоуровнего мониторинга состояния и диагностики систем, представляемым разработчиками как "strace + tcpdump + lsof + отличный соус с небольшой вишенкой в виде Lua сверху". Если говорить серьезно, одно из наиболее важных преимуществ утилиты sysdig заключается в том, что с помощью нее вы можете не только анализировать текущее состояние Linux-системы, но также и сохранять данные ее состояния в файл для последующего анализа. Кроме того, вы можете настроить поведение sysdig или даже расширить ее возможности с помощью поставляемых в комплекте (или созданных собственноручно) небольших сценариев (chisels).

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

В данной статье мы постараемся разобраться с установкой и использованием sysdig для мониторинга состояния и диагностики Linux-системы.

Установка sysdig

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

Выполните следующую команду от лица пользователя root для установки sysdig из официального репозитория apt/yum:

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

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

После завершения процесса установки у вас появится возможность запуска утилиты sysdig для ознакомления с ее возможностями с помощью следующей команды:

# sysdig

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

# sysdig -cl | less

для ознакомления со списком доступных сценариев.

# sysdig -cl | less

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

  • CPU Usage (сценарии, осуществляющие мониторинг нагрузки на центральный процессор)
  • Error (сценарии, осуществляющие отслеживание системных ошибок)
  • I/O (сценарии, осуществляющие мониторинг операций ввода/вывода)
  • Logs (сценарии для работы с системными журналами)
  • Misc (дополнительные сценарии)
  • Net (сценарии, осуществляющие мониторинг сетевой активности)
  • Performance (сценарии, осуществляющие мониторинг показателей производительности системы)
  • Security (сценарии, отслеживающие проблемы безопасности)
  • System State (сценарии, осуществляющие мониторинг состояния системы)

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

# sysdig -cl [имя_сценария]

Например, мы можем получить информацию об сценарии spy_port из категории "Net", выполнив следующую команду:

# sysdig -i spy_port

# 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

# 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

# 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 -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 -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

Дополнительная информация об утилите с примерами использования и описаниями исследований доступна на официальном веб-сайте проекта. Поверьте мне, ее возможности просто безграничны. Но, в любом случае, не стоит пренебрегать практикой. Установите sysdig и попробуйте исследовать свою систему!