zabbixでの計算式で、『Division by zero, Cannnot evaluate expression[0/0]』となる
【環境】
OS:REd Hat Enterprise Linux Server release 6.6 (Santiage)
パッケージ:zabbix server 2.2.15
【状況】
FW機器からSNMP通信で各インターフェイスのトラフック情報を取得して、zabbixで計算しています。
2020/03までは、グラフは取得できており、FW機器のバージョンアップ後にグラフが取れなくなっています。
※FW機器のバージョンアップでSNMPのバージョン、MIB情報は変わっていません。
ですが、zabbixで見ると計算が『取得不可』となってます。(計算式も変更してません)
名前:{#SNMPVALUE}
深刻度:高度の障害
条件式:last(".1.3.6.1.2.1.2.2.1.16.[{#SNMPVALUE}]")/last(".1.3.6.1.2.1.2.2.1.5.[{#SNMPVALUE}]")*100
取得不可のメッセージにカーソルを合わせると、以下のメッセージが表示されます。
Division by zero, Cannnot evaluate expression[0/0]
Division by zero, Cannnot evaluate expression[24376.57947/0]
【実現したいこと】
FW機器のNW通信のログをzabbixで取得したい。
早めに解決したく、お分かりの方がいらっしゃいましたら、ご協力をお願いいたします。
よろしくお願いいたします。
TNK - 投稿数: 4729
snmpwalkコマンドなどを使用して、計算式で使用されている分母側
のアイテムの値が取得できるか確認してください。
恐らく、ifSpeed(.1.3.6.1.2.1.2.2.1.5)だと思うのですが、対象
のSNMPの機器が対応していて取得できていますか?
tatebon - 投稿数: 34
TNK様
ありがとうございます。
snmptranslate -On IF-MIB::ifSpeedを実行した結果、.1.3.6.1.2.1.2.2.1.5の値は取得できています。
TNK - 投稿数: 4729
snmptranslateではなく、snmwalkで取得できているのかとお聞きし
たのですが?
snmpwalkで取得できるのであれば、その各インターフェースごとの
値で0になってしまっているものがないか確認してください。
tatebon - 投稿数: 34
TNK様
大変失礼いたしました。
snmwalk -v2c -c <コミュニティ名> NW機器のIPアドレスの実行結果が以下のように表示されました。
IF-MIB::ifSpeed.1 = Gauge32: 1000000000
IF-MIB::ifSpeed.2 = Gauge32: 1000000000
IF-MIB::ifSpeed.3 = Gauge32: 1000000000
IF-MIB::ifSpeed.4 = Gauge32: 1000000000
IF-MIB::ifSpeed.5 = Gauge32: 1000000000
IF-MIB::ifSpeed.6 = Gauge32: 1000000000
IF-MIB::ifSpeed.7 = Gauge32: 1000000000
IF-MIB::ifSpeed.8 = Gauge32: 1000000000
IF-MIB::ifSpeed.9 = Gauge32: 1000000000
IF-MIB::ifSpeed.10 = Gauge32: 1000000000
IF-MIB::ifSpeed.11 = Gauge32: 1000000000
IF-MIB::ifSpeed.12 = Gauge32: 1000000000
IF-MIB::ifSpeed.13 = Gauge32: 1000000000
IF-MIB::ifSpeed.14 = Gauge32: 1000000000
IF-MIB::ifSpeed.15 = Gauge32: 1000000000
IF-MIB::ifSpeed.16 = Gauge32: 1000000000
IF-MIB::ifSpeed.17 = Gauge32: 1000000000
IF-MIB::ifSpeed.18 = Gauge32: 1000000000
IF-MIB::ifSpeed.19 = Gauge32: 1000000000
IF-MIB::ifSpeed.20 = Gauge32: 1000000000
IF-MIB::ifSpeed.21 = Gauge32: 1000000000
IF-MIB::ifSpeed.22 = Gauge32: 1000000000
IF-MIB::ifSpeed.23 = Gauge32: 1000000000
IF-MIB::ifSpeed.24 = Gauge32: 1000000000
IF-MIB::ifSpeed.25 = Gauge32: 1000000000
IF-MIB::ifSpeed.200000000 = Gauge32: 0
IF-MIB::ifSpeed.300000000 = Gauge32: 0
IF-MIB::ifSpeed.400000000 = Gauge32: 0
IF-MIB::ifSpeed.500010000 = Gauge32: 0
IF-MIB::ifSpeed.500014000 = Gauge32: 0
IF-MIB::ifSpeed.500020000 = Gauge32: 0
IF-MIB::ifSpeed.500020121 = Gauge32: 0
IF-MIB::ifSpeed.500030000 = Gauge32: 0
IF-MIB::ifSpeed.500030202 = Gauge32: 0
IF-MIB::ifSpeed.500030301 = Gauge32: 0
IF-MIB::ifSpeed.500040000 = Gauge32: 0
IF-MIB::ifSpeed.500040010 = Gauge32: 0
IF-MIB::ifSpeed.500040011 = Gauge32: 0
IF-MIB::ifSpeed.500040020 = Gauge32: 0
IF-MIB::ifSpeed.500040030 = Gauge32: 0
IF-MIB::ifSpeed.500040051 = Gauge32: 0
IF-MIB::ifSpeed.500040052 = Gauge32: 0
IF-MIB::ifSpeed.500040096 = Gauge32: 0
IF-MIB::ifSpeed.500040200 = Gauge32: 0
IF-MIB::ifSpeed.500040203 = Gauge32: 0
IF-MIB::ifSpeed.500040204 = Gauge32: 0
IF-MIB::ifSpeed.500040206 = Gauge32: 0
IF-MIB::ifSpeed.500040207 = Gauge32: 0
IF-MIB::ifSpeed.500040210 = Gauge32: 0
IF-MIB::ifSpeed.500040212 = Gauge32: 0
TNK - 投稿数: 4729
インデックスが200000000以降のインターフェースでは、0になって
しまっているので、最初の質問に書かれていたような計算式だと、
0で割り算をすることになってしまい、「Division by zero」と計算
ができず、アイテムの状態は取得不可となってしまうと思います。
以前のFW機器のバージョンでは問題なかったとのことですので、FW
機器のベンダーに問い合わせてみてください。
tatebon - 投稿数: 34
TNK様
>インデックスが200000000以降のインターフェースでは、0になってしまっているので、最初の質問に書かれていたような計算式だと、0で割り算をすることになってしまい、「Division by zero」と計算
>ができず、アイテムの状態は取得不可となってしまうと思います。
データが取得できている場合は、以下のようになる認識で合っていますでしょうか?
例)IF-MIB::ifSpeed.500014000 = Gauge32: 123456
よろしくお願いいたします。
TNK - 投稿数: 4729
例示頂いたような出力が得られるのであれば、値は123456になる
でしょう。
tatebon - 投稿数: 34
TNK様
ベンダに確認した結果、32bitカウンタで情報が取得できていない可能性があるとのことでした。
なぜ、バージョンアップ後に32bitカウンタで情報が取得でなくなったかについては、ベンダにて確認中とのことです。
ですが、ベンダからは64bitカウンタで情報が取得できているとのことから、64bitカウンタで情報するとグラフが表示されました。
しかし、計算式の結果にて100を超えてしまっております。
元々使用していた計算式に記載しているMIBを変更するだけで正常に動くと思ったのですが、32bitカウンタから64bitカウンタに変更したことで計算式やその他に変更すべき箇所があるのでしょうか?
【32bitカウンタサイズ】
・各インタフェースの受信バイト総数
snmpwalk -v2c -c コミュニティ名 -On FW機器のIPアドレス IF-MIB::ifInOctets
・各インタフェースの送信バイト総数
snmpwalk -v2c -c コミュニティ名 -On FW機器のIPアドレス IF-MIB::ifOutOctets
・各インタフェースがサポートする帯域速度(bps)
snmpwalk -v2c -c コミュニティ名 -On FW機器のIPアドレス IF-MIB::ifSpeed
【64bitカウンタサイズは64bit】
・各インタフェースの受信バイト総数
snmpwalk -v2c -c コミュニティ名 -On FW機器のIPアドレス IF-MIB::ifHCInOctets
・各インタフェースの送信バイト総数
snmpwalk -v2c -c コミュニティ名 -On FW機器のIPアドレス IF-MIB::ifHCOutOctets
・各インタフェースがサポートする帯域速度(bps)
snmpwalk -v2c -c コミュニティ名 -On FW機器のIPアドレス IF-MIB::ifHighSpeed
【やったこと】
①zabbixで以下の設定を変更した
Traffic in - {#SNMPVALUE}
■変更前
キー : .1.3.6.1.2.1.2.2.1.10.[{#SNMPINDEX}]
SNMP OID : .1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}
■変更後
キー : .1.3.6.1.2.1.31.1.1.1.6.[{#SNMPINDEX}]
SNMP OID : .1.3.6.1.2.1.31.1.1.1.6.{#SNMPINDEX}
Traffic out - {#SNMPVALUE}
■変更前
キー : .1.3.6.1.2.1.2.2.1.16.[{#SNMPINDEX}]
SNMP OID : .1.3.6.1.2.1.2.2.1.16.{#SNMPINDEX}
■変更後
キー : .1.3.6.1.2.1.31.1.1.1.10.[{#SNMPINDEX}]
SNMP OID : .1.3.6.1.2.1.31.1.1.1.10.{#SNMPINDEX}
Traffic speed - {#SNMPVALUE}
■変更前
キー : .1.3.6.1.2.1.2.2.1.5.[{#SNMPINDEX}]
SNMP OID : .1.3.6.1.2.1.2.2.1.5.{#SNMPINDEX}
■変更後
キー : .1.3.6.1.2.1.31.1.1.1.15.[{#SNMPINDEX}]
SNMP OID : .1.3.6.1.2.1.31.1.1.1.15.{#SNMPINDEX}
Traffic in pused - {#SNMPVALUE}
■変更前
式 : last(".1.3.6.1.2.1.2.2.1.10.[{#SNMPINDEX}]")/last(".1.3.6.1.2.1.2.2.1.5.[{#SNMPINDEX}]")*100
■変更後
式 : last(".1.3.6.1.2.1.31.1.1.1.6.[{#SNMPINDEX}]")/last(".1.3.6.1.2.1.31.1.1.1.15.[{#SNMPINDEX}]")*100
Traffic out pused - {#SNMPVALUE}
■変更前
式 : last(".1.3.6.1.2.1.2.2.1.16.[{#SNMPINDEX}]")/last(".1.3.6.1.2.1.2.2.1.5.[{#SNMPINDEX}]")*100
■変更後
式 : last(".1.3.6.1.2.1.31.1.1.1.10.[{#SNMPINDEX}]")/last(".1.3.6.1.2.1.31.1.1.1.15.[{#SNMPINDEX}]")*100
単位はbpsを設定しております。
今までIF-MIB::ifSpeedで取得していたので、bpsで単位を設定しておりましたが、ifHighSpeedで取得するようにしたので、単位がMbpsに変更が必要でしょうか?
よろしくお願いいたします。
TNK - 投稿数: 4729
計算式で使用してる各アイテムの値が、想定されているような値が
取得できているのかを確認してください。
tatebon - 投稿数: 34
TNK様
貴重なお時間を割いていただき、色々とありがとうございました。
64bitカウンタにて取得したデータで想定通りのグラフが表現されているようです。