Sysdig: что это такое и как его использовать

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

В следующих разделах вы будете:

  • Установить Sysdig
  • Ускорьте установку Wordpress, используя docker-compose
  • Используйте Sysdig, чтобы собирать события и анализировать их позднее
  • Используйте Sysdig для анализа данных в режиме реального времени

Предпосылки

  • Docker установлен в вашей системе. Подробнее об установке Docker см. На странице «Установка Docker».
  • Docker Compose установлен в вашей системе. Обратитесь к странице Установить Docker Compose для получения инструкций о том, как установить Docker Compose.
  • Заголовки ядра установлены в хост-системе.

Установить Sysdig

Выполните следующие шаги для установки Sysdig внутри контейнера Docker:

  1. В окне терминала выполните следующую команду, чтобы получить образ Sysdig Docker:
докер тянуть sysdig / sysdig
Использование тега по умолчанию: последний последний: извлечение из sysdig / sysdig 2967486b0658: полное извлечение 78101b780c72: полное завершение 7e78b657334d: полное завершение 650327159ca8: полное завершение 47ebf73ab754: полное завершение bf51ac76a6d9: полное завершение Pull complete 6de86c8ed6e9: Pull complete 8d1825f8be4b: Pull complete Дайджест: sha256: bbfe6953fd2b3221a8974eb13024dd33c7e78aebef8fee3d7a0d9ecdeed84ce0 Статус: Загруженные новые изображения для sysdig / sysd

2. Запустите Sysdig в контейнере, введя:

docker run -i -t --name sysdig --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v / dev: / host / dev -v / proc: / host / proc: ro -v / boot: / host / boot: ro -v / lib / modules: / host / lib / modules: ro -v / usr: / host / usr: ro sysdig / sysdig
* Настройка / usr / src ссылок с хоста * Выгрузка sysdig-probe, если он есть * Запуск dkms для установки sysdig Ошибка! echo Ваши заголовки ядра для ядра 3.10.0-957.12.2.el7.x86_64 не могут быть найдены в /lib/modules/3.10.0-957.12.2.el7.x86_64/build или /lib/modules/3.10.0-957.12 .2.el7.x86_64 / источник. * Не удалось запустить сборку dkms, не удалось найти /var/lib/dkms/sysdig/0.26.4/build/make.log * Попытка загрузить системный sysdig-probe, если имеется * Попытка найти предварительно скомпилированный sysdig-probe для 3.10 .0-957.12.2.el7.x86_64 Найден конфигурационный файл ядра в /host/boot/config-3.10.0-957.12.2.el7.x86_64 * Попытка загрузить предварительно скомпилированный модуль с https://s3.amazonaws.com/download .draios.com / stable / sysdig-probe-binaries / sysdig-probe-0.26.4-x86_64-3.10.0-957.12.2.el7.x86_64-82e2ae1fb159132636f7b50a762f20ef.ko Загрузка успешно выполнена, загрузка корневого модуля @ 7b14a23f22eb: / #

Несколько замечаний по поводу приведенной выше команды:

  • Флаг -i сохраняет STDIN открытым.
  • Параметр --privileged обеспечивает доступ ко всем устройствам на хосте. Также он устанавливает SELinux, чтобы процессы, работающие внутри контейнера, имели такой же доступ к хосту, как и процесс, запущенный на хосте.
  • Флаг -v указывает список файлов (на хосте), к которым Sysdig может получить доступ.

Ускорьте установку Wordpress

В этом разделе вы установите Wordpress с помощью команды docker-compose.

  1. В новом окне терминала перейдите в каталог проектов и введите следующие команды:
mkdir wordpress-sysdig && cd wordpress-sysdig

2. Создайте файл с именем docker-compose со следующим содержимым:

версия: '3.3' сервисы: db: изображение: mysql: 5.7 тома: - db_data: / var / lib / mysql перезапуск: всегда среда: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: зависимость_on: - wordpress: последние порты: - "8000: 80" перезапуск: всегда среда: WORDPRESS_DB_HOST: db: 3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: тома wordpress: db_data: {}

3. Запустите команду docker-compose up в отдельном режиме с помощью:

docker-compose up -d
Создание сети "wordpress-sysdig_default" с драйвером по умолчанию. Создание тома "wordpress-sysdig_db_data" с драйвером по умолчанию. Извлечение wordpress (wordpress: последний) ... последний: извлечение из библиотеки / wordpress 8ec398bc0356: извлечение завершено 85cf4fc86478: извлечение завершено 970dadf4ccb6: 8c04561117a4: Прицепные полный d6b7434b63a2: Прицепные полный 83d8859e9744: Прицепные полный 9c3d824d0ad5: Прицепные полный 9e316fd5b3b3: Прицепные полный 578b40496c37: Прицепные полный 814ae7711d3c: Прицепные полный 4896fed78b6b: Прицепные полный e74d71e9611d: Прицепные полный 46017765526c: Прицепные полный 280386098458: Прицепные полный f32eb0d8c540: Вытяните полностью 5c47b9ea747a: Вытяните полный ecda5b7aad12: Выдвинуть полный 84256a6b6b44: Выдвинуть полный 35d4f385efb7: Выдвинуть полный bf697c2ae701: Прицепные полный d054b015f084: Выдвинуть полный дайджест: sha256: 73e8d8adf491c7a358ff94c74c8ebe35cb5f8857e249eb8ce6062b8576a01465 Статус: Загружен новее изображение для WordPress: последняя Создание WordPress-sysdig_db_1 ... сделано Создание WordPress-sysdig_word нажмите_1 ... сделано

4. Вы можете проверить состояние ваших контейнеров с помощью:

докер PS

Если все идет хорошо, вы должны увидеть что-то похожее на следующий результат:

ИД КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ СОЗДАНИЕ ИМЕНИ СОСТОЯНИЯ СОСТОЯНИЯ ПОРТОВ ИМЯ f390eec29f52 wordpress: последняя «docker-entrypoint.s…» около минуты назад вверх около минуты 0.0.0.0:8000->80/tcp wordpress-sysdig_wordpress_1 a844840626d8 mysql: 5.7 "docker-entrypoint. s… "около минуты назад вверх около минуты 3306 / tcp, 33060 / tcp wordpress-sysdig_db_1 7b14a23f22eb sysdig / sysdig" /docker-entrypoint.… "13 минут назад вверх 13 минут sysdig

5. Теперь Wordpress запущен и работает. Укажите в браузере http: // localhost: 8000, чтобы запустить мастер установки:

6. После завершения работы мастера установки давайте создадим пример сообщения:

Сбор данных в файл

В этом разделе мы покажем, как вы можете использовать Sysdig для сбора событий и их анализа позже.

  1. Чтобы выгрузить все захваченные события в файл, перейдите в контейнер Sysdig и введите следующую команду:
sysdig -w monitor-wordpress.scap

2. В новом окне терминала используйте ab, чтобы сделать 10000 запросов с одновременным выполнением максимум 100 запросов:

ab -n 1000 -c 100 http: // localhost: 8000 /? p = 7
Это ApacheBench, версия 2.3 <$ Редакция: 1430300 $> Авторские права 1996 Адам Твисс, Zeus Technology Ltd, http://www.zeustech.net/ Лицензия зарегистрирована на Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (будьте терпеливы) Выполнено 100 запросов Выполнено 200 запросов Выполнено 300 запросов Выполнено 400 запросов Выполнено 500 запросов Выполнено 600 запросов Выполнено 700 запросов Выполнено 800 запросов Выполнено 900 запросов Выполнено 1000 запросов Выполнено 1000 запросов

Обратите внимание, что приведенный выше вывод был усечен для краткости.

3. Вернитесь в контейнер Sysdig и остановите сбор данных, нажав «CTRL + C».

Анализ данных

Теперь, если вы посмотрите на размер файла monitor-wordpress.scap, вы заметите, что Sysdig захватил не менее 80M данных:

ls -lh monitor-wordpress.scap
-rw-р - r--. 1 корень корень 80M 7 января 16:28 мониторинг-wordpress.scap

Чтобы пройти через эту гору данных, вы будете использовать то, что называется долотом.

Долото - это в основном скрипт Lua, который анализирует поток событий и выполняет полезные действия.

Вы можете запустить следующую команду для отображения списка долот:

sysdig -cl
Категория: Приложение --------------------- httplog Журнал HTTP-запросов httptop Топ HTTP-запросов memcachelog memcached журнал запросов Категория: Загрузка процессора ---------- --------- спектрограмма Визуализация времени ожидания ОС в реальном времени. subsecoffset Визуализировать время выполнения субсекундного смещения. topcontainers_cpu Топ-контейнеры по загрузке процессора topprocs_cpu Топ-процессы по загрузке процессора Категория: Ошибки ---------------- topcontainers_error Топ-контейнеры по количеству ошибок topfiles_errors Топ-файлы по количеству ошибок topprocs_errors топ-процессы по количеству ошибок

Обратите внимание, что приведенный выше вывод был усечен для краткости.

Чтобы получить подробную информацию о долоте, выполните команду sysdig, а затем флаг -i и имя долота, как в следующем примере:

sysdig -i httptop
Категория: Приложение --------------------- httptop Самые популярные HTTP-запросы Показывают лучшие HTTP-запросы по: ncalls, времени или в байтах Args: [string] by - Показать лучшие HTTP-транзакции по: ncalls, время или по умолчанию, по умолчанию ncalls

Продолжая наш пример, вот как вы можете использовать долото httptop для отображения самых популярных HTTP-запросов:

sysdig -r monitor-wordpress.scap -c httptop
URL метода ncalls ----------------------------------------------- --------------------------------- 2001 GET localhost: 8000 /? P = 7 14 ОПЦИИ * 2 GET localhost: 8000 / favicon.ico 1 GET /wp-content/themes/twentytwenty/assets/fonts/inter/Inter-upright-var.woff2 1 GET localhost / v1.24 / Containers / 6bd8418eb03f / json 1 GET localhost / v1.24 / контейнеры / 06def7875617 / 1 GET JSON /v1.24/images/1b1624b63467ec61fab209b6be6e79707ae786df86607b9474b246acd31600 1 GET /v1.24/images/db39680b63ac47a1d989da7b742f7b382af34d85a68214f8977bad59c05901 1 GET локальный: 8000 /

Вы можете увидеть ту же информацию в удобном для контейнера формате с флагом -pcontainer:

sysdig -r monitor-wordpress.scap -c httptop -pcontainer
URL-адрес метода контейнера ncalls ---------------------------------------------- ---------------------------------- 1000 wordpress-sysdig_wo GET localhost: 8000 /? P = 7 1000 host GET локальный: 8000 / р = 7 43-sysdig_wo WordPress ВАРИАНТЫ * 1 sysdig GET /v1.24/images/1b1624b63467ec61fab209b6be6e79707ae786df86607b9474b246acd31600 1 sysdig GET LocalHost / v1.24 / контейнеры / 06def7875617 / 1 sysdig JSON GET LocalHost / v1.24 / контейнеров / cd06093b141b / json 1 sysdig GET /v1.24/images/00e230fe24da9067f9b6e65cfbe9935a5affac1ae8e44edb6a5b0ccc26374d 1 sysdig GET /v1.24/images/db39680b63d85901001b7f7f4107109104107371771981771772982772982772984772984772984772984772984772984772984982779982779982104109108

Копать глубже

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

  1. Перечислите контейнеры, которые были активны в течение периода, в который вы захватили события:
sysdig -r monitor-wordpress.scap -c lscontainers

2. Вы можете идентифицировать контейнер, который потребляет наибольшее количество ресурсов процессора:

sysdig -r monitor-wordpress.scap -c topcontainers_cpu
CPU% container.name --------------------------------------------- ----------------------------------- 5.37% wordpress-sysdig_wordpress_1 1,35% wordpress-sysdig_db_1 0,84% хост 0,51% sysdig

3. Вы можете копать еще глубже и идентифицировать наиболее ресурсоемкий процесс с помощью долота topprocs_cpu:

sysdig -r monitor-wordpress.scap -c topprocs_cpu container.name содержит wordpress_1
CPU% Process PID ---------------------------------------------- ---------------------------------- 0,12% apache2 8383 0,11% apache2 9413 0,11% apache2 9300 0,11% apache2 9242 0,11% apache2 8897 0,11% apache2 8422 0,10% apache2 9372 0,10% apache2 9241 0,10% apache2 8424 0,09% apache2 9429

Если вы хотите увидеть больше деталей, ps chisel предлагает более подробную альтернативу:

sysdig -r monitor-wordpress.scap -c ps container.name = wordpress-sysdig_wordpress_1
TID PID ПОЛЬЗОВАТЕЛЬ VIRT RES FDLIMIT CMD 5896 5896 root 232,82M 22,32M 429496729 apache2 8383 8383 www-данные 307.44M 25.46M 429496729 apache2 8422 8422 www-data 235.44M 22.90M 429496729 apache2 8424 8424 4249M 497 497 297 497 307,467 307,47 307,47 307,47 307,47 307,47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 данные 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 307.47 287 8897 www-data 235.44M 22.89M 429496729 apache2 9154 9154 www-data 235.44M 22.91M 429496729 apache2 9241 9241 www-data 307.44M 25.66M 429496729 apache2 9242 9242 www-data 307.44M 25.67M 4249 9330 233.449 22.89M 429496729 apache2 9372 9372 www-data 235.44M 22.89M 429496729 apache2 9413 9413 www-data 233.44M 20.77M 429496729 apache2

Полезные советы

Если вы запустите Sysdig для захвата событий, как в примере выше (sysdig -w мониторинг-wordpress.scap), файл событий будет непрерывно расти до тех пор, пока не будет занимать все доступное пространство. Есть несколько методов, которые могут помочь предотвратить это:

  • Укажите количество событий, которые Sysdig должен перехватить, передав ему флаг -n. Как только Sysdig захватит указанное количество событий, он автоматически завершит работу:
sysdig -n 5000 -w monitor-wordpress.scap
  • Используйте флаг -C, чтобы сконфигурировать Sysdig так, чтобы он разбивал захват на файлы меньшего размера указанного размера. В следующем примере события непрерывно сохраняются в файлы <10 МБ:
sysdig -C 10 -w monitor-wordpress.scap

Это создаст кучу файлов размером не более 10 МБ:

ls -lh monitor-wordpress *
-rw-р - r--. 1 корень корень 9.6M 7 января 17:13 мониторинг-wordpress.scap0 -rw-r - r--. 1 корень корень 9.6M 7 января 17:14 мониторинг-wordpress.scap1 -rw-r - r--. 1 корень корень 9.6M 7 января 17:14 мониторинг-wordpress.scap2 -rw-r - r--. 1 корень корень 9.6M 7 января 17:14 мониторинг-wordpress.scap3 -rw-r - r--. 1 корень корень 9.6M 7 января 17:14 мониторинг-wordpress.scap4 -rw-r - r--. 1 корень корень 9.6M 7 января 17:14 мониторинг-wordpress.scap5 -rw-r - r--. 1 корень корень 9.6M 7 января 17:14 мониторинг-wordpress.scap6 -rw-r - r--. 1 корень корень 9.6M 7 января 17:14 мониторинг-wordpress.scap7 -rw-r - r--. 1 корень корень 6.4M 7 января 17:14 мониторинг-wordpress.scap8
  • Укажите максимальное количество файлов, которые Sysdig должен хранить с флагом -W. Например, вы можете комбинировать флаги -C и -W следующим образом:
sysdig -C 10 -W 4 -w monitor-wordpress.scap

Приведенная выше команда сохранит только последние четыре файла захвата:

ls -lh monitor-wordpress *
-rw-р - r--. 1 корень корень 7,2M 7 января 17:21 мониторинг-wordpress.scap0 -rw-r - r--. 1 корень корень 9.6M 7 января 17:21 мониторинг-wordpress.scap1 -rw-r - r--. 1 корень корень 9.6M 7 января 17:21 мониторинг-wordpress.scap2 -rw-r - r--. 1 root root 9.6M 7 января 17:21 мониторинг-wordpress.scap3 root @ cd06093b141b: / # sysdig -C 10 -W 4 -w мониторинг-wordpress.scap

Мониторинг в реальном времени

С Sysdig вы также можете анализировать данные в режиме реального времени. На первый взгляд, это может показаться сложной задачей, поскольку по умолчанию все события постоянно выводятся на консоль. К счастью, зубила здесь, чтобы помочь.

Давайте возьмем пример.

Анализируйте ваши процессы на основе контейнера

  1. Выполните следующую команду, чтобы получить список ваших контейнеров:
докер PS
ID КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ СОЗДАННЫЕ ИМЯ ПОРТОВ СОСТОЯНИЯ 5b253e74e8e7 sysdig / sysdig "/docker-entrypoint.…" 9 минут назад Up 9 минут sysdig 06def7875617 wordpress: последний "docker-entrypoint.s…" 3 часа назад Up 3 часа 0.0.0.0:8000 -> 80 / tcp wordpress-sysdig_wordpress_1 6bd8418eb03f mysql: 5,7 "docker-entrypoint.s…" 3 часа назад Up 3 часа 3306 / tcp, 33060 / tcp wordpress-sysdig_db_1

2. Вы можете анализировать процессы, запущенные в контейнере WordPress:

sysdig -pc -c topprocs_cpu container.name = wordpress-sysdig_wordpress_1

3. Точно так же вы можете анализировать процессы, запущенные в контейнере MySQL:

sysdig -pc -c topprocs_cpu container.name = wordpress-sysdig_db_1

Обратите внимание, что Sysdig не сильно отличается от этого примера и может отслеживать сетевой трафик, использование диска и т. Д.

В этом руководстве вы ознакомились с основами использования Sysdig, чтобы получить четкое представление об активности, создаваемой вашими контейнерами. Примеры из этого поста в блоге помогли вам начать работу, и в следующих уроках мы покажем вам, как использовать Csysdig и Sysdig Inspect.