カーネル挙動を追尾する「DTrace」の実力OS選択の新常識(2/8 ページ)

» 2005年04月22日 13時53分 公開
[大澤文孝,ITmedia]

 特定のユーザーやプロセスにDTraceを利用できるよう設定することもできるが、セキュリティ上の問題があるので、有効にする場合には十分な注意が必要だ。

手始めとなるdtraceコマンドのプローブ活性化

 それでは実際に、DTraceがどのようなものか、簡単に体験してみよう。dtraceコマンドに「-l」オプションを指定すると、提供されているプローブ一覧を得ることができる。


# dtrace -l
   ID   PROVIDER      MODULE       FUNCTION NAME
    1     dtrace                       BEGIN
    2     dtrace                       END
    3     dtrace                       ERROR
    4   fasttrap                  fasttrap fasttrap
    5    syscall                  nosys entry
        :

 結果を見ると分かるように、それぞれのプローブには、ID番号が付けられている。そしてプローブは、「PROVIDER」「MODULE」「FUNCTION」「NAME」で階層化されている仕組みを持つ。

 具体的に、どのプローブがどのような時にイベントを発生し、どのような情報が得られるのかといった情報は、「Solaris Dynamic Tracing Guide」(関連リンク)に記述されているので、これを読んで調べることになる。

 例えば、「Chapter 28 mib Provider」を見ると、mibプロバイダには、ICMPメッセージ(pingコマンドやtracerouteコマンドなどで送受信されるデータ)が到来すると、イベント発生する「icmpInMsgs」というプローブが存在することが分かる。ここでは、例として、このicmpInMsgプローブを捕らえる方法を見ていこう。

 まずは、次のようにして、PROVIDERやMODULE、FUNCTION、NAMEを調べる。

# dtrace -l | grep icmp_inbound icmpInMsgs

19971 mib ip icmp_inbound icmpInMsgs


 この結果、ID番号は「19971」、PROVIDERは「mib」、MODULEは「ip」、FUNCTIONは「icmp_inbound」、NAMEは「icmpInMsgs」であることが分かる。

 特定のプローブを活性化するには、dtraceコマンドで「-n」オプションを使い、「PROVIDER:MODULE:FUNCTION:NAME」のように「:(コロン)」で区切った文字列を指定する。

# dtrace -n mib:ip:icmp_inbound:icmpInMsgs

dtrace: description 'mib:ip:icmp_inbound:icmpInMsgs' matched 1 probe


 これによってicmpInMsgsプローブが活性化する。

 この時、ほかの端末からpingを投げてみよう。するとpingコマンドによるICMPメッセージが届くたびに、画面には、次のように表示される。


CPU     ID                    FUNCTION:NAME
  0  19971          icmp_inbound:icmpInMsgs
  0  19971          icmp_inbound:icmpInMsgs
        :

 icmpInMsgプローブを通過したという旨のメッセージが表示されるのだ。

 ここでは、単一のプローブを活性化したが、-nオプションをたくさん指定すれば、複数のプローブを活性化することもできる。

 また「*」を使ってワイルドカード指定することも可能だ。例えば、「-n 'mib:ip:icmp_inbound:icmpIn*'」と指定すれば、mib:ip:icmp_inboundモジュールにある、「icmpIn」から始まるすべてのプローブを指定するという意味になる。

 なお、dtraceコマンドは自動的には終了しない。終了するには、「Ctrl」+「C」キーを押す。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ