SNMPでプロセス毎のCPU使用率やメモリ使用率を取得する方法(zabbixで監視)

1.稼働プロセスのindex番号を調べる

●稼働しているプロセスの名前で判断できる場合
HOST-RESOURCES-MIB::hrSWRunName
この値を見ると、稼働しているプロセス名の一覧が取得できる。

例1:HOST-RESOURCES-MIB::hrSWRunName.4861 = STRING: "ntpd"

ntpdのプロセスが稼働していることがわかる。
この時、indexの番号(4861)が重要なので記録。

●稼働しているプロセスのパラメータ値で判断できる場合
同じ名前のプロセス名が複数稼働しているが、起動プロセスのパラメータ値が異なっているような場合は下記のようにindex番号を取得する。
HOST-RESOURCES-MIB::hrSWRunParameters

例2:HOST-RESOURCES-MIB::hrSWRunParameters.6419 = STRING: "-Dproc_tasktracker -Xmx1000m -Dsqoop.shim.jar.dir=/usr/local/sqoop/shims -server -Djava.net.preferIPv4Stack=true -Dhadoop.log.di"

Hadoopのプロセスは基本的にjavaが稼働している。
DataNodeやTaskTrackerなど複数のプロセスが稼働していて個別に確認したい場合、
プロセス名だけでは区別できない。
そこでプロセス起動時のパラメータ値をチェックして判断すればindex番号がわかる。
上記例では、HadoopのTaskTrackerの情報。

上記のように稼働しているプロセスのindex番号を取得できればあとは下記の値をチェックすればCPUやメモリの使用量が取得できる。

2.index番号に対応したCPU使用量やメモリ使用量を取得

●CPU使用量
CPUの使用量については下記の値を取得する。
HOST-RESOURCES-MIB::hrSWRunPerfCPU

例1,例2の値だとこのように取得できる。

HOST-RESOURCES-MIB::hrSWRunPerfCPU.4861 = INTEGER: 13
HOST-RESOURCES-MIB::hrSWRunPerfCPU.6419 = INTEGER: 18982

この値の単位はcenti-secondである。
プロセスがCPUを使用したcenti-secondの累積値が取得できるので、
ある間隔でこの値を取得した場合は、差分を計算し、間隔分の時間で割ると単位時間当たりのCPU使用時間が取得可能。

※1cd(centi-second)とは0.01secのことです。こんな単位使ったことなかった。

●メモリ使用量
メモリ使用量については下記の値を取得する
HOST-RESOURCES-MIB::hrSWRunPerfMem

例1,例2の値だと以下のように取得できる。

HOST-RESOURCES-MIB::hrSWRunPerfMem.4861 = INTEGER: 5032 KBytes
HOST-RESOURCES-MIB::hrSWRunPerfMem.6419 = INTEGER: 101232 KBytes

KBytes単位のメモリ使用量が取得できる。

3.zabbixにアイテム登録

上記のSNMPの値をzabbixに登録する場合、ダイナミックスインデックス機能を利用すると便利に登録できる。

indexの値はプロセスの再起動等が発生した場合に変更されてしまう。
このindexが変わる毎にzabbixへの登録情報を変更していては非常に手間がかかる。

そこでダイナミックスインデックス機能を利用してindexが変更されても正しく値を取得できるようにする。

アイテムの設定情報は下記のようにする。

以下、例2のCPU使用量、メモリ使用量の値取得のアイテム設定値

●CPU使用量

タイプ:SNMPv2エージェント
SNMP OID値:HOST-RESOURCES-MIB::hrSWRunPerfCPU["index",HOST-RESOURCES-MIB::hrSWRunParameters,"-Dproc_tasktracker -Xmx1000m -Dsqoop.shim.jar.dir=/usr/local/sqoop/shims -server -Djava.net.preferIPv4Stack=true -Dhadoop.log.di"]
データ型:数値(浮動小数)
単位:sec
乗数を使用:0.01
保存時の計算:差分/時間

●メモリ使用量

タイプ:SNMPv2エージェント
SNMP OID値:HOST-RESOURCES-MIB::hrSWRunPerfMem["index",HOST-RESOURCES-MIB::hrSWRunParameters,"-Dproc_tasktracker -Xmx1000m -Dsqoop.shim.jar.dir=/usr/local/sqoop/shims -server -Djava.net.preferIPv4Stack=true -Dhadoop.log.di"]
データ型:数値(整数)
データの形式:10進数
単位:bytes
乗数を使用:1024
保存時の計算:なし