Как проверять и решать проблемы Linux сервера с использованием sysdig

Сразу замечу, что 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

15334678580_8673d072a4_o

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

# sysdig

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

# sysdig -cl | less

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

15334678610_92acc0cc94_o

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

  • CPU Usage (использование процессора)
  • Errors (Ошибки)
  • I/O (Ввод/вывод)
  • Logs (Логи)
  • Misc (Разное)
  • Net (Сеть)
  • Performance (Производительность)
  • Security (Безопасность)
  • System State (Состояние системы)

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

# sysdig -cl [имя_чизеля]

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

# sysdig -i spy_port

15521424095_118d54de7e_o

Чизели могут быть совмещены с фильтрами (которые могут быть применены как к живым данным, так и трассировке файла) для получения более полезного вывода.

Фильтры следуют структуре «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

15334678670_931b92e525_o

Вам нужно обратить внимание на столбцы #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

15518254291_bbe71aa31e_o

Первая колонка выше выводит индикатор PID процесса, ассоциированного с заданной пользовательской активностью.

А что если вы хотите нацелиться на специфичного пользователя и мониторить только его пользовательскую активность? Вы можете отфильтровать результаты чизеля spy_users по юзернейму:

# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo"

15498248556_bc9459534f_o

Пример 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

15498248586_c1b9c9c470_o

Пример 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 и начинайте рыть уже сегодня!

Оставить ответ

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