web.page.getでのis not supportedエラー

こちらへの書き込みは初めてです。

zabbixを自作ウェブサービスの監視に使おうと考えています。
ホストの登録なども一通り終わり、テンプレートで用意されている項目の監視は出来るようになりました。

そこで自作サービスの情報も監視させようと思い、とあるページにアクセスしたら対応する数値のみを表示するようにし、web.page.getで取得したいと考えています。

ブラウザからは取得したい数値が表示されるのですが、zabbixのサーバログには
Item [ホスト:web.page.get[ドメイン,/foo/bar.php?type=DATATYPE,]] is not supported
というエラーが出ます(ホスト、ドメインは実在のものです)。
httpd側にはアクセスは来ていません。

他に試してダメだったもの
・パスをダブルクォーテーションでくくってみる
・ポートの80を指定してみる
・サーバ側のページでContent-Type: text/plainで出力してみる
・?type=DATATYPEを無くして表示されるようにする
いずれもis not supportedエラーになってしまいます。
どういう形で出力してやれば、zabbixは認識してくれるのでしょうか?

他に上手いやり方(一つのページで複数のアイテムを同時に取得とか)をご存じでしたら教えていただけないでしょうか?
よろしくお願いします。

コメント表示オプション

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

書かれている情報に関しては問題はないように思いますが、他の要素でなにか問題があるのかもしれません。

実際に私の個人環境で監視設定してみたところ、以下のような設定で動作しました。
-----------------------------------------------------
キー: web.page.get[192.168.0.250,/zabbix/index.php?value=ooo]
タイプ: Zabbixエージェント
データ型: テキスト
更新間隔: 30秒
-----------------------------------------------------

あと、切り分けのためにzabbix_getコマンドでも同様に失敗するか確認してもらえますか?
上記の私の監視例だと以下のようなコマンドになります。(127.0.0.1はZabbixエージェントが動作しているサーバのIP)
$ zabbix_get -s 127.0.0.1 -k 'web.page.get[192.168.0.250,/zabbix/index.php?value=ooo]'

一つのページで複数のアイテムを同時に取得、というようなことについては、Zabbixにはユーザスクリプトという外部スクリプトを実行した結果を監視結果として保存する機能もあるので、それを使用することはできないでしょうか?
たとえばLL系言語を使ってあるページ内のコンテンツをチェックして回って、その結果を返すとかはどうでしょう?
現状では、ZabbixのWeb監視はそれほど細かい設定はできないので、状況によってはLL系言語でスクリプト書く方が早い気がします。

よろしくお願いします。

ユーザー osapon の写真

返信ありがとうございます。

そういえばバージョンを書いていませんでした。
使っているのは1.8.5でソースからmakeしました。

zabbix_getは動作しました。
ただこちらではデータ型を「数値(整数)」にしていたので「テキスト」に変えてみたのですが、マシンが重たいためかキューに入ったまま処理されなくなってしまいました。
また実行されたら報告します。

ユーザー kodai の写真

httpd側にアクセスが来ておらず、Zabbixサーバ側のキューに溜まったままということは、Zabbixサーバ内部の処理で監視が実行されずに止まっている可能性が高いですね。

Zabbixサーバのコンパイル時にcurlのサポートは有効にされているでしょうか?Zabbixサーバの起動時に、zabbix_server.logに

WEB monitoring: YES

の出力があれば、curlのサポートが有効になっています。

上記が問題ない場合、zabbix_server.confのDebugを4に設定してデバッグログを出力するようにしてみれば、何か分かるかもしれません。

ユーザー osapon の写真

キューが溜まっていたのは、サーバが落ちていたためでした。

先に書いたとおり、データ型をテキストにしてみました。
そうするとエラーは出なくなったのですが、テキストだとトリガーでの監視のみでグラフに描画は出来ないんでしょうか。
すいません、最初にやりたいことを全部書いておくべきでした。
ということで、「数値(整数)」に戻してみるとやはりis not supportedになります。

単位とかも指定しないといけないのでしょうか?
ヘルプを見てもエージェントの種類とかは書いてありますが、各項目の説明が見つかりません。
アイテムの設定を書いてみます。

ホスト:www5
説明:キュー数
タイプ:Zabbixエージェント
キー:web.page.get[www5.osa-p.net,/hoge/fuga.php?type=QUEUE_CNT,80]
データ型:数値(整数)
データ形式:10進数
単位:
乗数を使用:チェック無し
更新間隔(秒):20
例外の更新間隔(秒):例外の更新間隔はありません
例外の更新間隔の作成:
ヒストリの保存期間(日):90
トレンドの保存期間(日):365
ステータス:取得不可 ←有効にしても、何度かエラーになると取得不可になるようです。
保存時の計算:なし
値のマッピングの使用:なし
アプリケーション:Services

ユーザー TNK の写真

web.page.getでは、HTTPでのデータの取得になり、レスポンスヘッダなどを含む複数行の
テキストが取得されますので、PHP等で数値だけを返却するようにしてもその数値だけを取
り出すことができません。

外部スクリプトやUserParameterなどと組み合わせて、Webサーバから返却されたテキスト
から数値を取り出してからZabbixサーバに取り込むような設定や仕組みが必要になると思い
ます。
場合によっては、Webサーバを経由しなくてもUserParameterだけで実現できるかもしれま
せん。

例えば、キュー数をWebサーバ上の
<code>
/usr/local/bin/get_quenum
</code>
というスクリプトなどで取得できるようにして、Webサーバ上の、zabbix_agentd.conf
もしくはzabbix_agentd.confから読み込むファイル内に、以下のような記述を追加します。
<code>
UserParameter=web.quenum,/usr/local/bin/get_quenum
</code>
あとは、アイテムとしてキーに「web.quenum」を指定します。

つまり、Webサーバを経由しなくてもスクリプトやプログラムを呼び出して取得できるの
であれば、こういった方法もあるということをご紹介させて頂きました。