現在位置: ホーム / みらくるブログ / WindowsのCPU時間 【MIRACLE ZBX 1.8, 2.0, 2.2】

WindowsのCPU時間 【MIRACLE ZBX 1.8, 2.0, 2.2】

Windowsタスクマネージャにて表示できる"CPU 時間"を、Zabbixの監視で設定できるか? Zabbixで提供されているキーでプロセスの時間を取得できるものを調査しました。

最近いただいたお問い合わせで、「Windowsタスクマネージャにて表示することができる、"CPU 時間"をZabbixの監視で設定できないか?」というものがありました。

Windowsでは実装・仕様が公開されていないことも多く、「同じもの」かどうかを判断することはできません。ですので、Zabbixで提供されているキーでプロセスの時間を取得できるものを調査しました。

proc_info[]キーがそれにあたり、第二引数にktime, utimeを指定することにより、それぞれカーネル時間、ユーザー時間を取得することができます。しかしながら、これらの合算値を取得するためのオプションは存在しません。
こういった場合、計算アイテムを作成し二つのアイテムの合算値を取得することが可能ですが、複数のアイテムは決して同時には取得しません。ですので、計算アイテムの値は正確ではありません。(多少の誤差を許容できるならば問題ないと思います。)

ソースコードを調査したところ、下記が処理の箇所となります。(2.0.14)

src/libs/zbxsysinfo/win32/proc.c :
180 static int  GetProcessAttribute(HANDLE hProcess,int attr,int type,int count,double *lastValue)
181 {
...
188    switch(attr)
189    {
...
202       case 3:        /* ktime */
203       case 4:        /* utime */
204          GetProcessTimes(hProcess,&ftCreate,&ftExit,&ftKernel,&ftUser);
205          value = ConvertProcessTime(attr==3 ? &ftKernel : &ftUser);
206          break;
...
303 int PROC_INFO(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
304 {
...
311   const char  *attrList[] = {"vmsize", "wkset", "pf", "ktime", "utime", "gdiobj", "userobj", "io_read_b", "io_read_op",
312           "io_write_b", "io_write_op", "io_other_b", "io_other_op", NULL},
...
360   for (i = 0; i < proc_cnt; i++)
361   {
362     if (NULL != (hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE, procList[i])))
363     {
364       if (SUCCEED == zbx_get_processname(hProcess, baseName))
365         if (0 == stricmp(baseName, proc_name))
366           if (SYSINFO_RET_OK != (ret = GetProcessAttribute(hProcess, attr_id, type_id, counter++, &value)))
367             break;
368       CloseHandle(hProcess);
369     }
370   }


l.204にてカーネル時間とユーザー時間は一回の呼び出しで同時に取得できています。
ですので、これらの合算値は容易に取得できます。
結果として、ll.311-312 に新しく"cpu_time"というリストを追加し、l.180から始まるGetProcessAttribute()に対応する処理追加することで、"CPU 時間"と同等なものを取得することが可能となりました。

この機能追加はMIRACLE ZBXに追加されると思います。