SNMPディスカバリにてエラー
お世話になっております。
タイトルの件についてですが、うまく動作せずに困っております。
情報をお持ちでしたらご教授頂きたく。
■現象
ネットワーク機器へSNMPディスカバリを実行すると、エラーを
吐いてディスカバリに失敗する。
■環境
・OS:RHEL6.6
・zabbix:2.4.5-1
・Database: mysql-server-5.5
・使用アイテム:Template SNMP Interfaces
■ディスカバリ対象機器
・Cisco Catalyst:成功
・NEC Ironport:成功
・FUJITSU IPCOM:失敗
■エラーメッセージ(抜粋)
5502:20150624:131704.301 [Z3005] query failed: [1062] Duplicate entry '10107-ifAdminStatus[lan0.0]'
for key 'items_1' [insert into items (itemid,name,key_,hostid,type,value_type,data_type,delay,delay_flex,history,trends,status,trapper_hosts,units,multiplier,delta,formula,logtimefmt,valuemapid,params,ipmi_sensor,snmp_community,snmp_oid,port,snmpv3_securityname,snmpv3_securitylevel,snmpv3_authprotocol,snmpv3_authpassphrase,snmpv3_privprotocol,snmpv3_privpassphrase,authtype,username,password,publickey,privatekey,description,interfaceid,flags,snmpv3_contextname) values
(25092,'Admin status of interface $1','ifAdminStatus[LoopBack]',10107,4,3,0,60,'',7,365,0,'','',0,0,'1','',11,'','','{$SNMP_COMMUNITY}','IF-MIB::ifAdminStatus.1','','',0,0,'',0,'',0,'','','','','The desired state of the interface.',3,4,''),
(25093,'Admin status of interface $1','ifAdminStatus[LAN0.0]',10107,4,3,0,60,'',7,365,0,'','',0,0,'1','',11,'','','{$SNMP_COMMUNITY}','IF-MIB::ifAdminStatus.350','','',0,0,'',0,'',0,'','','','','The desired state of the interface.',3,4,''),
(25094,'Admin status of interface $1','ifAdminStatus[LAN0.1]',10107,4,3,0,60,'',7,365,0,'','',0,0,'1','',11,'','','{$SNMP_COMMUNITY}','IF-MIB::ifAdminStatus.351','','',0,0,'',0,'',0,'','','','','The desired state of the interface.',3,4,''),
TNK - 投稿数: 4769
itemsテーブルに対して、key 'items_1'での重複エラーということ
は、ホストに対して同じキーの値を登録しようとしたことが考えら
れます。
Zabbix 2.4.5のデフォルトのテンプレートである
Template SNMP Interfaces
を利用されてこのエラーが発生するということは、恐らく同じイン
ターフェース名で複数のインターフェースが定義されていることが
考えられます。
提示頂いたエラーメッセージは抜粋でしたが、その並びで「key_」
に対応する部分を、
ifAdminStatus[LoopBack]
ifAdminStatus[LAN0.0]
ifAdminStatus[LAN0.1]
...
と抜き出してみてください。
同じものがあったりしませんか?
これらの値は、ディスカバリルールにある通り、OIDとして、
IF-MIB::ifDescr
で取得してきたリストを元に設定しています。
snmpwalkコマンドを利用して、
snmpwalk -c <コミュニティ名> -v2c < SNMP機器のIP> IF-MIB::ifDescr
などと実行してみても確認できると思います。
もしも同じインターフェース名の物があるのであれば、その環境で
の命名規則、設定状況、IPCOMでの制限などもあるかもしれません
が、各インターフェースの名称を異なるように設定することは可能
でしょうか?
ご確認ください。
kaeru - 投稿数: 264
>TNK様
前回に続き、迅速なご回答誠にありがとうございます。
追加質問となってしまい大変申し訳ありませんが、
snmpwalkにてインターフェース名を取得したところ、
大文字小文字の違いはありますが、同アルファベットの文字列がありました。
("LAN0.0" と"lan0.0" です。)
Linux上なのでセーフかと思いましたが、
大文字と小文字は区別されないのでしょうか?
もしご存知でしたらご教授をお願い致します。
# snmpwalk -v 2c -c iesogaot fw-slb01 | grep ifDescr
IF-MIB::ifDescr.1 = STRING: LoopBack
IF-MIB::ifDescr.350 = STRING: LAN0.0
IF-MIB::ifDescr.351 = STRING: LAN0.1
IF-MIB::ifDescr.352 = STRING: LAN0.2
IF-MIB::ifDescr.353 = STRING: LAN0.3
IF-MIB::ifDescr.360 = STRING: LAN1.0
IF-MIB::ifDescr.361 = STRING: LAN1.1
IF-MIB::ifDescr.362 = STRING: LAN1.2
IF-MIB::ifDescr.363 = STRING: LAN1.3
IF-MIB::ifDescr.500 = STRING: lan0.0
IF-MIB::ifDescr.810 = STRING: vlan10
IF-MIB::ifDescr.820 = STRING: vlan20
IF-MIB::ifDescr.830 = STRING: vlan30
IF-MIB::ifDescr.840 = STRING: vlan40
IF-MIB::ifDescr.850 = STRING: vlan50
IF-MIB::ifDescr.860 = STRING: vlan60
IF-MIB::ifDescr.900 = STRING: vlan100
IF-MIB::ifDescr.910 = STRING: vlan110
kaeru - 投稿数: 264
自己回答で申し訳ありません。
その後ディスカバリのフィルタルールに、
lan0.0を除外することで、無事ディスカバリすることが確認出来ました。
大文字小文字は区別されないようです。
重ねてご回答ありがとうございました。
TNK - 投稿数: 4769
大文字小文字が区別されないのは、データベースの設定だと思いま
す。
MySQLサーバの文字コードとして、my.cnfに、
character-set-server=utf8
とサーバの文字コードだけを指定していて、データベース作成時に
明示的に指定しない場合は、照合順序が
utf8_general_ci
になっていると思います。
確認方法は、mysqlコマンドなどでデータベースに接続して、以下
のようなコマンドで確認できます。
mysql> show variables like 'collation_%';
この照合順序が「utf8_general_ci」であった場合は、半角英字の
大文字小文字は区別されない設定のようです。
半角英字の大文字小文字を区別して比較して評価できるようにする
のであれば、この照合順序を「utf8_bin」にすると、バイナリデー
タとして比較するようになるので、半角英字の大文字小文字を区別
して扱えるようになると思います。
kaeru - 投稿数: 264
>TNK様
Zabbix側の仕様かと思っていたのですが、DB側の設定だったんですね。
サーバの状態としてはTNK様に記載頂いた通りの情報となっておりました。
今回はフィルタルールで対応は出来ましたが、
今後SNMPディスカバリを使用する際は留意するように致します。
詳細なご説明ありがとうございました。