Сразу замечу, что sysdig доступен и для других платформ (например, для Windows), но не все версии обладают полной функциональностью. В данном уроке рассмотрено применение на Linux, на других ОС может быть своя специфика.
Что первое, приходящее на ум, когда вам нужно проследить системные запросы, сделанные и полученные процессом? Возможно вы подумаете о strace, и вы правы. Какой инструмент вы бы стали использовать для мониторинга сырого сетевого трафика из командной строки? Если вы подумали о tcpdump, вы снова сделали превосходный выбор. А если вы когда-либо столкнётесь с необходимостью отслеживать все открытые файлы (в Unix смысле этого слова: все является файлами), скорее всего, вы будете использовать lsof.
strace, tcpdump и lsof действительно отличные утилиты, которые должны быть частью набора инструментов каждого сисадмина, и это именно та причина, по которой вы полюбите sysdig, мощный инструмент с открытым кодом для исследования и решения проблем на уровне системы, представлен его создателями как «strace + tcpdump + lsof + потрясающие соус с маленькой Луа вишенкой наверху.» Юмор в сторону, одноа из великолепных функций sysdig заключается в возможности не только анализировать «живое» состояние системы Linux, но и также сохранять состояние в дамп файле для автономного контроля. А ещё вы можете настраивать поведение sysdig или даже усовершенствовать её возможности, используя встроенные (или написанные вами) маленькие скрипты, называемые чизелзы (chisels — долото, зубило). Индивидуальные чизелзы используются для анализа захваченных sysdig’ом потоков событий в различных специфичных для скрипта ситуациях.
В этом уроке мы раскроем установку и базовое использование sysdig для выполнения системного мониторинга и решения проблем на Linux.
Установка Sysdig
В целях простоты и краткости для этого урока мы выберем использование автоматического установочного процесса, описанного на официальном веб-сайте. В автоматическом процессе, установочный скрипт автоматически определяет операционную систему и устанавливает все необходимые зависимости.
Выполните следующую команду под рутом для установки sysdig из официального репозитория apt/yum:
# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash
После завершения установки, мы можем вызвать sysdig как показано ниже для того, чтобы почувствовать его присутствие.
# sysdig
Наш экран будет немедленно заполнен тем, что происходит в нашей системе, не давая нам сделать что-то большее с этой информацией. По этой причине мы выполним:
# sysdig -cl | less
для просмотра списка доступных чизелей.
Следующие категории доступны по умолчанию, каждая из них наполнена многими чизелзами.
- CPU Usage (использование процессора)
- Errors (Ошибки)
- I/O (Ввод/вывод)
- Logs (Логи)
- Misc (Разное)
- Net (Сеть)
- Performance (Производительность)
- Security (Безопасность)
- System State (Состояние системы)
Для отображения информации (включая детальное использование в командной строке) по конкретному чизелю, выполните:
# sysdig -cl [имя_чизеля]
Например, мы можем проверить информацию по чизелю spy_port в категории «Net» запустив:
# sysdig -i spy_port
Чизели могут быть совмещены с фильтрами (которые могут быть применены как к живым данным, так и трассировке файла) для получения более полезного вывода.
Фильтры следуют структуре «class.field» (класс.поле). Например:
- fd.cip: клиентский IP адрес.
- evt.dir: направление события может быть как ‘>’ для ввода событий или ‘<‘ для выхода событий.
Полный список фильтров может быть отображён с:
# sysdig -l
В оставшейся части урока я продемонстрирую несколько случаев использования sysdig.
Примеры Sysdig: Решение проблем с производительностью сервера
Предположим ваш сервер испытывает проблемы с производительностью (например, отсутствие реакции или заметные задержки в ответах). Вы можете использовать чизел bottlenecks для отображения списка из десяти самых медленных системных вызовов в данный момент.
Используйте следующую команду для проверки живого сервера в реальном времени. Флаг «-c», за которым следует название чизеля, говорит sysdig’у выполнить специфичный чизел.
# sysdig -c bottlenecks
Как вариант, вы можете осуществить оффлайн анализ производительности сервера. В этом случае вы можете сохранить полный след sysdig’а в файл, и запустить чизел bottlenecks на этот след как показано:
Во-первых, сохраните след sysdig (используйте Ctrl+c для остановки сбора):
# sysdig -w trace.scap
После сбора следа, вы можете проверить самые медленные системные запросы, которые были выполнены во время захваченного интервала, выполнив:
# sysdig -r trace.scap -c bottlenecks
Вам нужно обратить внимание на столбцы #2, #3 и #4 ,которые показывают, соответственно, время исполнения, имя процесса и PID.
Пример 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
Первая колонка выше выводит индикатор PID процесса, ассоциированного с заданной пользовательской активностью.
А что если вы хотите нацелиться на специфичного пользователя и мониторить только его пользовательскую активность? Вы можете отфильтровать результаты чизеля 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), которые были обменены с определённым IP адресом, выполненным определённым процессом (например apache2):
# 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 и начинайте рыть уже сегодня!