特定のユーザーやプロセスに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.