[1.4.6-1] ZBX-533の回避方法

みなさん、始めまして untama と申します。
2ヶ月程、下記環境にて利用しています。
個人的に利用してみた結果、下記不具合を確認しています。

・環境

[root@SC1430 ~]# rpm -q zabbix
zabbix-1.4.6-1.fc8
[root@SC1430 ~]# rpm -q zabbix-agent
zabbix-agent-1.4.6-1.fc8
[root@SC1430 ~]# uname -r
2.6.26.6-49.fc8
[root@SC1430 ~]# cat /etc/redhat-release
Fedora release 8 (Werewolf)
[root@SC1430 ~]#

・不具合内容
[ZBX-533] に該当すると思われる。

・質問内容
なんとか設定で誤魔化せないかと粘りましたが、
VerUP しか解決策はないんですかね。

みなさんの環境では如何でしょうか。

後日、Fedora9にて1.6系を使ってみて再度レポートさせて頂きます。
それでは。

コメント表示オプション

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

KAZです。

[ZBX-533] fixed incorrect SNMP string to float conversion
[ZBX-533] SNMP文字列を数値へ変換する処理の間違いを修正;

[ZBX-533]とは上記のことですね。

ソースを確認しましたが、checks_snmp.cの310行目付近が怪しいかと。
下記ソースが関数名(get_value_snmp)から分かる通り、snmpの値を取得する関数と思われます。

<code>
)
{
/* Negative integer values are converted to double */
if(*vars->val.integer<0)
{
SET_DBL_RESULT(value, (double)*vars->val.integer);
}
else
{
SET_UI64_RESULT(value, (zbx_uint64_t)*vars->val.integer);
}
}
#ifdef OPAQUE_SPECIAL_TYPES
else if(vars->type == ASN_FLOAT)
{
SET_DBL_RESULT(value, *vars->val.floatVal);
}
else if(vars->type == ASN_DOUBLE)
{
SET_DBL_RESULT(value, *vars->val.doubleVal);
}
#endif
else if(vars->type == ASN_OCTET_STR)
{
if(item->value_type == ITEM_VALUE_TYPE_FLOAT)
{
p = malloc(vars->val_len+1);
if(p)
{
memcpy(p, vars->val.string, vars->val_len);
p[vars->val_len] = '\0';
dbl = strtod(p, NULL);

SET_DBL_RESULT(value, dbl);
}
else
{
zbx_snprintf(error,sizeof(error),"Cannot allocate required memory");
zabbix_log( LOG_LEVEL_ERR, "%s", error);
SET_MSG_RESULT(value, strdup(error));
}
</code>

SET_UI64_RESULT / SET_DBL_RESULTと言うのはbackenddbに値を保存する関数です。
※:これは以前の調査で解析済み。

item設定時のType of infomationにはNumetic(integer 64bit) / Numetic(float) / Character / Log / Textがあり、SET_UI64_RESULTはNumetic(integer 64bit)専用なので、SET_DBL_RESULTで設定しているNumetic(float)の値を設定しているところが問題の箇所でしょう。

その前にアイテムの設定内容、障害内容の詳細、ログレベルをdebugにしたログ等を公開して頂けると調査が楽になります。