Первоначальный выпуск | 2005 ( 2005 ) |
---|---|
Стабильный релиз | 5.2 / 8 ноября 2024 г. ( 2024-11-08 ) |
Репозиторий |
|
Написано в | С , С++ |
Операционная система | Линукс |
Тип | Трассировка языка программирования |
Лицензия | Стандартная общественная лицензия GNU |
Веб-сайт | sourceware.org/systemtap/ |
В вычислительной технике SystemTap ( stap ) — это язык сценариев и инструмент для динамического инструментирования работающих производственных операционных систем на базе Linux . Системные администраторы могут использовать SystemTap для извлечения, фильтрации и суммирования данных с целью диагностики сложных проблем производительности или функциональности.
SystemTap состоит из бесплатного программного обеспечения с открытым исходным кодом и включает в себя вклады от Red Hat , IBM , Intel , Hitachi , Oracle , Университета Висконсин-Мэдисон и других членов сообщества. [1]
SystemTap дебютировал в 2005 году в Red Hat Enterprise Linux 4 Update 2 в качестве предварительной версии технологии. [2]
После четырех лет разработки SystemTap 1.0 был выпущен в 2009 году. [3]
По состоянию на 2011 год [обновлять]SystemTap полностью поддерживается во всех дистрибутивах Linux, включая RHEL / CentOS 5 [4] начиная с обновления 2, SLES 10 [5] , Fedora, Debian и Ubuntu.
Точки трассировки в CPython VM и JVM были добавлены в SystemTap 1.2 в 2009 году. [6]
В ноябре 2019 года в SystemTap 4.2 был включен экспортер Prometheus .
Файлы SystemTap написаны на языке SystemTap [7] (сохранены как .stp
файлы) и запускаются с помощью stap
командной строки. [8]
Система выполняет ряд проходов анализа скрипта, прежде чем разрешить его запуск. Скрипты могут быть выполнены с одним из трех бэкэндов, выбранных опцией --runtime=
. По умолчанию используется загружаемый модуль ядра , который имеет самые полные возможности для проверки и управления любой частью системы и, следовательно, требует наибольших привилегий. Другой бэкэнд основан на библиотеке динамического анализа программ DynInst для инструментирования только собственных программ пользовательского пространства пользователя и требует наименьших привилегий. Новейший бэкэнд [9] основан на байт-коде eBPF , ограничен возможностями интерпретатора ядра Linux и требует промежуточного уровня привилегий. В каждом случае модуль выгружается после завершения выполнения скрипта.
Скрипты обычно фокусируются на событиях (таких как запуск или завершение скрипта), скомпилированных контрольных точках, таких как «точки трассировки» Linux, или на выполнении функций или операторов в ядре или пользовательском пространстве.
Некоторые скрипты "guru mode" также могут иметь встроенный C, который может запускаться с -g
параметром командной строки. Однако использование guru mode не рекомендуется, и каждый выпуск SystemTap включает больше точек проверки, разработанных для устранения необходимости в скриптах guru-mode. Guru mode требуется для того, чтобы скрипты могли изменять состояние в инструментированном программном обеспечении, например, для применения некоторых типов экстренных исправлений безопасности.
Начиная с версии SystemTap 1.7, программное обеспечение реализует новую группу stapsys и уровень привилегий. [10]
Следующий скрипт показывает все приложения, устанавливающие параметры сокета TCP в системе, какие параметры устанавливаются и успешно ли устанавливается параметр.
# Показать параметры настройки сокетов# Возвращает включено или выключено на основе значения optval function getstatus ( optval ) { if ( optval == 1 ) return "включение" else return "отключение" } probe begin { print ( "\nПроверка приложений, устанавливающих параметры сокета\n" ) } # Задать параметр сокета probe tcp . setsockopt { status = getstatus ( user_int ( $ optval )) printf ( " Приложение '%s' (PID %d) имеет параметр сокета %s... " , execname () , pid () , status , optstr ) } # Проверить, сработала ли настройка параметра сокета probe tcp . setsockopt . return { if ( ret == 0 ) printf ( "success" ) else printf ( "failed" ) printf ( "\n" ) } конец зонда { print ( "\nЗакрытие\n" ) }
Многие другие примеры поставляются с SystemTap. [11] На странице «Военные истории» также есть реальные примеры использования SystemTap. [12]
SystemTap может присоединяться к маркерам DTrace , когда они скомпилированы в приложение с использованием макросов из sys/sdt.h
заголовочного файла.
SystemTap [...] требует привилегий root для фактического запуска объектов ядра, которые он создает с помощью команды sudo, применяемой к программе staprun. [...] staprun является частью пакета SystemTap, предназначенного для загрузки и выгрузки модулей и передачи данных от ядра к пользователю.
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )Команда systemtap объявляет о выпуске 3.2 [...] ранний экспериментальный бэкэнд eBPF (расширенный Berkeley Packet Filter) [...][ постоянная мертвая ссылка ]
Команда systemtap объявляет о выпуске 1.7 [...] Добавлены новая группа и уровень привилегий "stapsys" [...]