カスタムローレベルディスカバリ アイテムのプロトタイプのキー設定について

カスタムローレベルディスカバリ アイテムのプロトタイプのキー設定についてについて質問です。

・Zabbix Server
 CentOS 6.5
 Zabbix 2.4.5

・Zabbix Agent
 Windows Server 2008R2
Zabbix 2.4.4

・前提作業

1. Agent側に IISワーカープロセスの CPU使用率を取得する Powershellスクリプトを作成。
2. Agent側の agent.confに UserParameterを記述し、agentプロセスを再起動。

UserParameter=win.iis.apppool.cpu.discovery[*],powershell -ExecutionPolicy RemoteSigned -File "C:\Program Files\xxxxxx\win_iis_apppool_cpu_discovery.ps1"

3. Serverから zabbix_getできることを確認。

# zabbix_get -s 対象ホスト -k win.iis.apppool.cpu.discovery

{
"data":[

{ "{#APPPOOLNAME}":"AppPool2" , "{#APPPOOLCPU}":"0" },
{ "{#APPPOOLNAME}":"DefaultAppPool" , "{#APPPOOLCPU}":"0" },
{ "{#APPPOOLNAME}":"AppPool3" , "{#APPPOOLCPU}":"33" },
{ "{#APPPOOLNAME}":"AppPool4" , "{#APPPOOLCPU}":"1" },
{ "{#APPPOOLNAME}":"AppPool5" , "{#APPPOOLCPU}":"0" },
{ "{#APPPOOLNAME}":"AppPool6" , "{#APPPOOLCPU}":"3" },
{ "{#APPPOOLNAME}":"AppPool7" , "{#APPPOOLCPU}":"0" },
{ "{#APPPOOLNAME}":"AppPool8" , "{#APPPOOLCPU}":"0" },
{ "{#APPPOOLNAME}":"AppPool9" , "{#APPPOOLCPU}":"0" },
{ "{#APPPOOLNAME}":"AppPool10" , "{#APPPOOLCPU}":"7" },
{ "{#APPPOOLNAME}":"AppPool11" , "{#APPPOOLCPU}":"0" },
{ "{#APPPOOLNAME}":"AppPool12" , "{#APPPOOLCPU}":"1" }

]
}

4. Zabbix Webコンソールからディスカバリルールを作成

  ディスカバリルール
  名前:IIS-AppPool-CPU
タイプ:Zabbixエージェント
キー:win.iis.apppool.cpu.discovery
フィルター:なし

アイテムのプロトタイプ
名前:Windows-IIS-AppPool-CPU-{#APPPOOLNAME}
タイプ:Zabbixエージェント
キー:※
データ型:数値(整数)

質問内容

上記 4.で、どのようなキーを設定すれば CPU使用率である {#APPPOOLCPU}を取得し、そのデータを参照できますでしょうか?

・アイテムのプロトタイプの名前は、「Windows-IIS-AppPool-CPU-AppPool2」といった形で取得できています。
・キーを、「test[{#APPPOOLCPU}]」といった形で設定することはできますが、CPU使用率は取得のたびに値が変わるので
 キーの異なるアイテムがその都度作成されるだけです。
・このキーは動的に一意にならないとキー重複でエラーとなる事は理解しています。
・そもそも wmi.getアイテムキーを使わないのは、監視上の要件のためです。
 (プロセス名で CPU使用率を取得することはできても、それがどのアプリケーションプールのものかわからないと意味がないため)
・また、開発チームが申請を忘れて勝手にアプリケーションプールを手動で増やしたりするため、我々監視チーム側としては
 ディスカバリアイテムとして登録しておきたい。

以上、よろしくお願いします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

LLDを利用されるのであれば、対象となるワーカーのリストを取得
してくるのと、それぞれの値を取得してくるのを分けることになる
と思います。

LLDの処理の流れとしては、まず、リストを取得する方を利用して、
アイテムを作成します。
そして、その作成したアイテムから値を取得するUserParameter
を呼び出すようにするわけです。

例えば、UserParameterに

 win.iis.apppool.cpu.get

という名前で引数にプールの名前を指定して、そのプールのCPU使
用率を取得できるようなものを用意しておくわけです。

ディスカバリ時には、そのwin.iis.apppool.cpu.get[<プール名>]
となるようなアイテムを生成するようにすれば良いと思います。

ユーザー trik53 の写真

TNK様

早速のご返信ありがとうございます。
二段階での LLD方式を早速試してみたいと思います。

>> LLDの処理の流れとしては、まず、リストを取得する方を利用して、
>> アイテムを作成します。
とのコメントを頂いていますが、これをLLDのアイテムのプロトタイプに
設定する際のアイテムキーがどうしたものかわかりません…。

・キーに {#APPPOOLNAME} のみ記述
→ 登録不可。
  間違った書式が"{#APPPOOLNAME}"付近に見つかりましたエラー。

・キーに 独自キー名 win.iis.apppool{#APPPOOLNAME} を記述
→ 登録はできるが、ホストに適用した後、ステータスが「取得不可」になり、
  Unsupported item key というエラーが表示される。

・キーに 独自キー名 win.iis.apppool のみ記述
→ 登録はできるが、ホストに適用した後、ステータスが「取得不可」になり、
  キーの重複でエラーが表示される。

LLDの場合は、独自キー名でなく、Zabbixが提供しているアイテムキー(vfs.fs.size[ ]等)を
使用しなければならないのでしょうか?
(ドライブレターを取得する監視において LLDを使用していますが、その際、
vfs.fs.size[{#FSNAME},free] などと記述したアイテムプロトタイプは問題なく動いています)

以上、よろしくお願いします。

ユーザー TNK の写真

ディスカバリルールのキーは、先のwin.iis.apppool.cpu.discovery
を利用されれば良いでしょう。
さらにそのディスカバリルールのアイテムのプロトタイプのキー
には、先ほど書かせて頂いた例の通りにUserParameterを用意して
頂けるのであれば、

 win.iis.apppool.cpu.get[{#APPPOOLNAME}]

というような感じになると思います。

「win.iis.apppool」などと指定しても、それをUserParameterに
CPU使用率を取得してくるものとして先に用意するなどしないと
取得不可になるだけです。

ユーザー trik53 の写真

TNK様

メッセージありがとうございます。
最終的に下記の設定で想定していた通りのことができました。

1. Agent側に IISワーカープロセスの名前一覧を取得する Powershellスクリプトを作成。
  この Powershellスクリプトは、IISワーカープロセスの名前一覧を JSONで返す。
LLDで IISワーカープロセスの名前一覧を取得するための仕組み。

2. 更に Agent側に IISワーカープロセスの名前を引数として渡すと当該プロセスの
  CPU使用率を取得する Powershellスクリプトを作成。
  この Powershellスクリプトは、IISワーカープロセスの CPU使用率をただの数値で返す。

3. Agent側の agent.confに UserParameterを記述し、agentプロセスを再起動。

UserParameter=win.iis.apppool.cpu.discovery,powershell -ExecutionPolicy RemoteSigned -File "C:\Program Files\xxxxx\win_iis_apppool_cpu_discovery.ps1"
UserParameter=win.iis.apppool.cpu.get[*],powershell -ExecutionPolicy RemoteSigned -File "C:\Program Files\xxxxx\win_iis_apppool_cpu_get.ps1" "$1"

4. Serverから zabbix_getできることを確認。

# zabbix_get -s 対象ホスト -k win.iis.apppool.cpu.discovery

↓ IISワーカープロセスの名前一覧が JSONで返ってくる

{
"data":[

{ "{#APPPOOLNAME}":"AppPool2" },
{ "{#APPPOOLNAME}":"AppPool3" },
{ "{#APPPOOLNAME}":"AppPool4" },
{ "{#APPPOOLNAME}":"AppPool5" },
{ "{#APPPOOLNAME}":"AppPool6" },
{ "{#APPPOOLNAME}":"AppPool7" },
{ "{#APPPOOLNAME}":"AppPool8" },
{ "{#APPPOOLNAME}":"AppPool9" }

]
}

# zabbix_get -s 対象ホスト -k win.iis.apppool.cpu.get["AppPool2"]

↓ 指定した IISワーカープロセスの CPU使用率が数値として返ってくる

2

5. Zabbix Webコンソールからディスカバリルールを作成

  ディスカバリルール
名前:IIS-AppPool
タイプ:Zabbixエージェント
キー:win.iis.apppool.cpu.discovery
フィルター:なし

アイテムのプロトタイプ
名前:Windows-IIS-AppPool-CPU-{#APPPOOLNAME}
タイプ:Zabbixエージェント
キー:win.iis.apppool.cpu.get["{#APPPOOLNAME}"]
データ型:数値(整数)