カスタムローレベルディスカバリ アイテムのプロトタイプのキー設定について
カスタムローレベルディスカバリ アイテムのプロトタイプのキー設定についてについて質問です。
・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 - 投稿数: 4731
LLDを利用されるのであれば、対象となるワーカーのリストを取得
してくるのと、それぞれの値を取得してくるのを分けることになる
と思います。
LLDの処理の流れとしては、まず、リストを取得する方を利用して、
アイテムを作成します。
そして、その作成したアイテムから値を取得するUserParameter
を呼び出すようにするわけです。
例えば、UserParameterに
win.iis.apppool.cpu.get
という名前で引数にプールの名前を指定して、そのプールのCPU使
用率を取得できるようなものを用意しておくわけです。
ディスカバリ時には、そのwin.iis.apppool.cpu.get[<プール名>]
となるようなアイテムを生成するようにすれば良いと思います。
trik53 - 投稿数: 3
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 - 投稿数: 4731
ディスカバリルールのキーは、先のwin.iis.apppool.cpu.discovery
を利用されれば良いでしょう。
さらにそのディスカバリルールのアイテムのプロトタイプのキー
には、先ほど書かせて頂いた例の通りにUserParameterを用意して
頂けるのであれば、
win.iis.apppool.cpu.get[{#APPPOOLNAME}]
というような感じになると思います。
「win.iis.apppool」などと指定しても、それをUserParameterに
CPU使用率を取得してくるものとして先に用意するなどしないと
取得不可になるだけです。
trik53 - 投稿数: 3
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}"]
データ型:数値(整数)