アプリケーションよりアイテムの無効化/有効化につきまして
いつもお世話になります。
以下の環境/作業手順/エラーメッセージにおきまして、
トラブルシューティングを実施しております。
◆バージョン情報:
ZABBIXのバージョン:1.6.9
ZABBIXサーバーのOS:CentOS 5.4
MySQLのバージョン:5.0.77
◆作業手順:
手順1.アプリケーションの作成
手順2.アイテムの作成
手順3.アプリケーションより"アイテムを無効にする"を選択
手順4.アプリケーションより"アイテムを有効にする"を選択
上記作業手順を行いましたところ、手順3.手順4にて下記のエラーメッセージが出力されました。
◆エラーメッセージ内容:
・Undefined index: hostid[/usr/share/zabbix/hosts.php:849]
・Error in query [SELECT ia.itemid,i.hostid,i.key_ FROM items_applications ia
LEFT JOIN items i ON ia.itemid=i.itemid WHERE ia.applicationid=195
AND i.hostid= AND (ia.applicationid div 100000000000000) in (0) ]
[You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'AND
(ia.applicationid div 100000000000000) in (0)' at line 1]
・mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
[/usr/share/zabbix/include/db.inc.php:521]
現在、調査を実施しておりますが、解決策を見出せないため、投稿させて頂きました。
大変申し訳ありませんが、ご教授頂けないでしょうか。
どうぞ宜しくお願い致します。
KAZ - 投稿数: 1085
ykykさん
バグですね…
エラーのSQLを整形すると下記になります。
<code>
SELECT
ia.itemid,
i.hostid,
i.key_
FROM items_applications ia
LEFT JOIN items i ON ia.itemid=i.itemid
WHERE
ia.applicationid=195 AND
i.hostid= AND
(ia.applicationid div 100000000000000) in (0)
</code>
「i.hostid= AND」が構文エラーです。
ソースはこれから見てみます。
KAZ - 投稿数: 1085
ykykさん
少々ソースを解析しました。
zabbix-1.6.9\frontends\php\hosts.phpの849行目でURLからhostidが取得できなくて発生しているみたいです。
<code>
$sql = 'SELECT ia.itemid,i.hostid,i.key_'.
' FROM items_applications ia '.
' LEFT JOIN items i ON ia.itemid=i.itemid '.
' WHERE ia.applicationid='.$appid.
' AND i.hostid='.$_REQUEST['hostid'].
' AND '.DBin_node('ia.applicationid');
</code>
なので、下記の手順の時URLに「hostid=xxx」が不足してると思われます。
もう少々お待ち下さい。
KAZ - 投稿数: 1085
ykykさん
1.6.8でも再現しました。
下記の部分のみで再現しますね。
発生原因も掴めましたので、修正方法を検討中です。
早ければ、火曜日にはパッチができるのではないかと思います。
ykyk - 投稿数: 2
伊藤様
お世話になります。
ykykです。
返信が遅くなり、申し訳ございません。
この度は、ご回答ならびに調査を実施して頂きまして、
誠にありがとうございます。
引き続き、伊藤様のご回答をお待ちしております。
KAZ - 投稿数: 1085
ykykさん
対処方法が分かりました。
1.6.8と1.6.9はソースが同じだったので、1.6.8で検証しました。
zabbix-1.6.8\frontends\php\hosts.phpの845行目から850行目のSQL
<code> $sql = 'SELECT ia.itemid,i.hostid,i.key_'.
' FROM items_applications ia '.
' LEFT JOIN items i ON ia.itemid=i.itemid '.
' WHERE ia.applicationid='.$appid.
' AND i.hostid='.$_REQUEST['hostid'].
' AND '.DBin_node('ia.applicationid');
</code>
下記のように変更すると正しく動作しました。
<code>
$sql = 'SELECT ia.itemid,i.hostid,i.key_'.
' FROM items_applications ia '.
' LEFT JOIN items i ON ia.itemid=i.itemid '.
[color=FF0000] ' LEFT JOIN applications a ON ia.applicationid=a.applicationid '.
' LEFT JOIN hosts h ON a.hostid=h.hostid '.[/color]
' WHERE ia.applicationid='.$appid.
[color=FF0000]// ' AND i.hostid='.$_REQUEST['hostid'].[/color]
' AND '.DBin_node('ia.applicationid');
</code>
パッチにした方が良いでしょうか?
取り敢えず、フォーラムのバグ報告に情報を公開しておきます。
KAZ - 投稿数: 1085
ykykさん
パッチを作成してZABBIX-JPに展開中です。
rpmとしてはZabbix1.6.9-2に取り込まれる予定です。
パッチがダウンロードできるようになったら、バグ報告にリンクを作る予定です。