【Hinemos】カーネルモードのプロセス数を監視する
投稿日: / 更新日:
Hinemosで、SNMPを利用してプロセス監視を行う場合、マネージャは監視対象ノードの以下のOIDの値をSNMPポーリングで取得し、プロセス数の判定に使用します。
1 2 3 |
.1.3.6.1.2.1.25.4.2.1.2 (HOST-RESOURCES-MIB::hrSWRunName) .1.3.6.1.2.1.25.4.2.1.4 (HOST-RESOURCES-MIB::hrSWRunPath) .1.3.6.1.2.1.25.4.2.1.5 (HOST-RESOURCES-MIB::hrSWRunParameters) |
監視対象ノードのOSがLinuxの場合、実際には上記のうち”HOST-RESOURCES-MIB::hrSWRunPath”の値が、プロセス監視の「コマンド」と比較されます。
ここで、実際に”HOST-RESOURCES-MIB::hrSWRunPath”の値を取得してみると、”<exited>”という値が返されるプロセスがあることに気付きます。
1 2 3 4 5 |
# snmpwalk -v2c -cpublic localhost .1.3.6.1.2.1.25.4.2.1.4 HOST-RESOURCES-MIB::hrSWRunPath.1 = STRING: "/sbin/init" HOST-RESOURCES-MIB::hrSWRunPath.2 = STRING: "" HOST-RESOURCES-MIB::hrSWRunPath.3 = STRING: "" : |
プロセス名を調べてみると、いずれも角カッコで囲まれており、これはプロセスがカーネルモードで動作していることを示しています。
1 2 3 4 5 6 7 8 9 |
# snmpwalk -v2c -cpublic localhost .1.3.6.1.2.1.25.4.2.1.2 HOST-RESOURCES-MIB::hrSWRunName.1 = STRING: "init" HOST-RESOURCES-MIB::hrSWRunName.2 = STRING: "kthreadd" HOST-RESOURCES-MIB::hrSWRunName.3 = STRING: "migration/0" : # ps -ef | egrep "kthreadd|migration/0" | grep -v grep root 2 0 0 19:53 ? 00:00:00 [kthreadd] root 3 2 0 19:53 ? 00:00:00 [migration/0] root 5 2 0 19:53 ? 00:00:00 [migration/0] |
監視対象ノードのOSがLinuxの場合、前述のとおり”HOST-RESOURCES-MIB::hrSWRunPath”の値がプロセス監視の”コマンド”と比較されます。これは、カーネルモードで動作するプロセスを監視することができない、ということを意味しています。実際に監視を行ってみても、やはりプロセス数を検知することができません(下図)。
対策として、カスタム監視を使用する方法が考えられます。例えば、kthreadd
のプロセス数は、以下のコマンドで求めることができます。
1 2 |
# ps -ef|grep kthreadd|grep -v grep|wc -l 1 |
なお、プロセス数をカスタム監視の結果として取得するためには、key,value
の形式で標準出力へ出力させる必要があります。ここでは、カスタム監視の”コマンド”を以下のように設定します。
1 |
echo -n "NumOfProcs_kthreadd,";ps -ef|grep kthreadd|grep -v grep|wc -l |
カスタム監視の実行結果は以下のとおりです。
上図のとおり、カーネルモードのプロセス数を正しく検知することができました。HTTP監視を疑似的にカスタム監視として使用する方法で、同様に監視を行うことも可能です。こちらの記事で簡単に紹介しておりますので、興味のある方はご覧ください。
以上、簡単ですがプロセス監視とカスタム監視に関する話題をご紹介しました。