| システムタップ | |
|---|---|
| 初回リリース | 2005 (2005年) |
| 安定版リリース | 5.3 / 2025年5月2日 (2025年5月2日) |
| リポジトリ |
|
| 書かれた | C、C++ |
| オペレーティング·システム | リナックス |
| タイプ | プログラミング言語のトレース |
| ライセンス | GNU一般公衆利用許諾契約書 |
| Webサイト | 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]
4年間の開発を経て、SystemTap 1.0は2009年にリリースされました。[3]
2011年現在、SystemTapはRHEL / CentOS 5 [4]アップデート2以降、SLES 10 [5] Fedora、Debian、Ubuntu [アップデート]を含むすべてのLinuxディストリビューションで完全にサポートされています。
CPython VMとJVMのトレースポイントは、2009年にSystemTap 1.2で追加されました。[6]
2019 年 11 月、SystemTap 4.2 にPrometheusエクスポーターが追加されました。
使用法
SystemTapファイルはSystemTap言語[7]で記述され(ファイルとして保存され.stp)、stapコマンドラインで実行されます。[8]
システムはスクリプトの実行を許可する前に、複数の分析パスを実行します。スクリプトは、--runtime=オプションで選択された3つのバックエンドのいずれかを使用して実行できます。デフォルトはロード可能なカーネルモジュールで、システムのあらゆる部分を検査および操作する完全な機能を持っているため、最も多くの権限が必要です。もう1つのバックエンドは、動的プログラム分析ライブラリDynInstに基づいており、ユーザー自身のユーザー空間プログラムのみを計測するもので、必要な権限は最小限です。最新のバックエンド[9]はeBPFバイトコードに基づいており、Linuxカーネルインタープリターの機能に制限されており、中間レベルの権限が必要です。いずれの場合も、スクリプトの実行が終了するとモジュールはアンロードされます。
スクリプトは通常、イベント (スクリプトの開始や終了など)、Linux の「トレースポイント」などのコンパイルされたプローブ ポイント、またはカーネルやユーザー空間での関数やステートメントの実行に重点を置いています。
一部の「Guruモード」スクリプトにはC言語が埋め込まれており、-gコマンドラインオプションで実行できます。ただし、Guruモードの使用は推奨されません。SystemTapの各リリースには、Guruモードスクリプトを必要としないプローブポイントが追加されています。Guruモードは、スクリプトがインストルメントされたソフトウェアの状態を変更できるようにするために必要です。例えば、緊急のセキュリティ修正を適用するなどです。
SystemTapバージョン1.7以降、ソフトウェアは新しいstapsysグループと権限レベルを実装しています。[10]
簡単な例
次のスクリプトは、システム上でTCP ソケットオプションを設定しているすべてのアプリケーション、設定されているオプション、およびオプションが正常に設定されたかどうかを表示します。
# ソケット設定オプションを表示
# optvalの値に基づいて有効または無効を返します。
function getstatus ( optval ) { if ( optval == 1 ) return "enabling" else return "disabling" }
probe begin
{
print ( "\nソケットオプションを設定しているアプリを確認しています\n" ) }
# ソケットオプションを設定する
probe tcp . setsockopt { status = getstatus ( user_int ( $ optval )) printf ( " App '%s' (PID %d) is %s socket option %s... " , execname () , pid () , status , optstr ) } # ソケットオプションの設定が機能したか確認するprobe tcp . setsockopt . return { if ( ret == 0 ) printf ( "success" ) else printf ( "failed" ) printf ( "\n" ) }
プローブ終了
{
print ( "\n終了しています\n" ) }
SystemTapには他にも多くの例が同梱されています。[11]また、War StoriesページにはSystemTapの実際の使用例が掲載されています。[12]
他のトレース技術からのスクリプトのインポート
SystemTap は、ヘッダー ファイルのマクロを使用してアプリケーションにコンパイルされるときに、DTraceマーカーにアタッチできますsys/sdt.h。
参照
参考文献
- ^ 「SystemTap アップデート」LWN.net。
- ^ 「Red Hat Enterprise Linux の製品ドキュメント」Red Hat .
- ^ 「Josh Stone - SystemTap リリース 1.0」。
- ^ 「製品ドキュメント」Red Hat .
- ^ 「SystemTapのオプションアップデート」Novell 2006年10月10日
- ^ "Features/SystemtapStaticProbes - FedoraProject". Fedoraproject.
- ^ 「SystemTap 言語リファレンス」。
- ^ Romans, Robb (2009). "SystemTap Language Reference: A guide to the constructs and syntax used in SystemTap scripts". Red Hat: 4. CiteSeerX 10.1.1.172.5186を参照。SystemTap
[...] は、staprun プログラムに適用された sudo コマンドを使用して構築されたカーネルオブジェクトを実際に実行するために、root 権限を必要とします。[...] staprun は SystemTap パッケージの一部であり、モジュールのロードとアンロード、およびカーネルからユーザーへのデータ転送に特化しています。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - ^ Merey, Aaron (2017-10-18). 「systemtap 3.2 リリース」. 2017-10-18閲覧.
systemtap チームは、リリース 3.2 [...] 初期実験版 eBPF (拡張 Berkeley Packet Filter) バックエンド [...] を発表しました。
[永久リンク切れ] - ^ Eigler, Frank Ch. (2012-02-01). 「systemtap 1.7 リリース」. 2013-03-26閲覧.
systemtap チームがリリース 1.7 を発表しました [...] 新しいグループと権限レベル「stapsys」が追加されました [...]
- ^ 「SystemTap の例」。
- ^ 「WarStories - Systemtap Wiki」.
外部リンク
- 公式サイト
- SystemTap ウィキ
- SystemTap 言語リファレンス (PDF)
- OhlohによるSystemTapプロジェクト分析
- DTraceとSystemTapによる動的トレース
- Systemtap チュートリアル Frank Ch. Eigler
- SystemTap 初心者ガイド ドン・ドミンゴ、ウィリアム・コーエン
- Systemtapによる問題解決、オタワLinuxシンポジウム、2008年9月13日アーカイブ、Wayback Machine 2006
- SystemTap による問題解決 Archived 2012-02-22 at the Wayback Machine、Eugene Teo、Red Hat Summit 2007 で発表 (スクリプト)
- 動的トレースとSystemTapを使用したパフォーマンス分析、Joshua Stone、LinuxWorld Conference 2008で発表
- SystemTap チュートリアル、Jim Keniston、Linux Plumbers Conference 2008 で発表