6.3. SystemTap

SystemTap は、Linux システム上で実行中のプロセスおよびカーネルアクティビティをプローブするための有用なインストルメンテーションプラットフォームです。プローブを実行するには、以下の手順にしたがいます。
  1. どのシステムイベント (たとえば、仮想ファイルシステムの読み込み、パケット送信) が特定のアクション (たとえば、印刷、解析、またはデータ操作) を開始するかを指定する SystemTap スクリプト を書き込みます。
  2. SystemTap がスクリプトを C プログラミングに翻訳し、さらにカーネルモジュールにコンパイルします。
  3. SystemTap がこのカーネルモジュールを読み込んで、実際のプローブを実行します。
SystemTap スクリプトは、通常のシステム運用に最小限の割り込みでシステム運用を監視しシステム問題を診断する際に便利なものです。インストルメント化されたコードを再コンパイルしたり再インストールすることなく、実行中のシステムテスト仮説をすばやくインストルメント化できます。kernel-space をプローブする SystemTap スクリプトをコンパイルするために、SystemTap は以下の 3 つの異なる カーネル情報パッケージ からの情報を使用します。
  • kernel-variant-devel-version
  • kernel-variant-debuginfo-version
  • kernel-debuginfo-common-arch-version

注記

Red Hat Enterprise Linux 6 のカーネル情報パッケージの名前は kernel-debuginfo-common-arch-version となっています。Red Hat Enterprise Linux 5 では kernel-debuginfo-common-version でした。
これらのカーネル情報パッケージは、プローブ対象のカーネルと一致する必要があります。さらに、複数のカーネル用に SystemTap スクリプトをコンパイルするには、各カーネルのカーネル情報パッケージがインストールされている必要もあります。
Red Hat Enterprise Linux 6.1 からは、--remote オプションという重要な新機能が追加されました。これにより、ユーザーは SystemTap モジュールをローカルでビルドし、SSH 経由でリモートでの実行が可能になります。これを使用する際の構文は、--remote [USER@]HOSTNAME となります。実行ターゲットを特定の SSH ホストに設定し、オプションで異なるユーザー名を使用します。複数の実行ターゲットを対象とするために、このオプションは繰り返すことができます。パス 1-4 はスクリプトを通常通りビルドするようにローカルで完了し、パス 5 がモジュールをターゲットにコピーして実行します。
以下のセクションでは、Red Hat Enterprise Linux 6 リリースで利用可能な SystemTap の他の新機能を説明します。

6.3.1. SystemTap コンパイルサーバー

Red Hat Enterprise Linux 6 の SystemTap は、コンパイルサーバーとクライアント の導入をサポートします。この設定では、ネットワークの すべての クライアントシステムのカーネル情報パッケージが 1 つ (もしくは 2、3) のコンパイルサーバーホストにインストールされます。クライアントシステムが SystemTap スクリプトからカーネルモジュールをコンパイルしようとすると、集約されたコンパイルサーバーホストから必要となるカーネル情報にリモートでアクセスします。
正常に設定/保守されている SystemTap コンパイルサーバーホストは、以下の利点をもたらします。
  • システム管理者は、パッケージをユーザーに利用可能とする前にカーネル情報パッケージの整合性を検証できます。
  • コンパイルサーバーの ID が Secure Socket Layer (SSL) を使って認証できます。SSL は、送信中の盗聴や改ざんを防ぐ暗号化されたネットワーク接続を提供します。
  • 個別のユーザーが独自のサーバーを運用し、それらを信頼できるサーバーとして権限を与えることができます。
  • システム管理者が、ネットワーク上の 1 つ以上のサーバーを全ユーザーの使用において信頼できるサーバーとして権限を付与できます。
  • 明示的に権限が付与されていないサーバーは無視され、サーバーの偽装や同様の攻撃を防ぎます。