å
æ¥ãããããZabbixã®ã¢ããããŒããæã«å
¥ããŸããã
Zabbix 2.2ã®èšäºãèªãã§ã察å¿ããããã°ã«æ²èŒ
ãããã®ã§ãGentooãããŒãžã§ã³2.2ã®ãã¹ã¯ãè§£é€ããã®ãåŸ
ã€ããšãã§ããŸããã§ããã ãã®ããŒãžã§ã³ã«ã¯ããæ¥åžžçæŽ»ãã«èå³ããªãæçšã§ã¯ãªããããªé©æ°ã¯ã»ãšãã©ãããŸããã§ããã ãããã¯ãVMwareã®ç£èŠãã·ã¹ãã ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãLLDPã®æ¹åãã€ãŸããã»ãŒãã¹ãŠã®é
ç®ã§ãã
æ°ã¶æãçµéããããŒãžã§ã³2.2ã¯åœè£
çã§ããããŸããã§ããã
æã
ç§ã¯ç©äºãèã«çœ®ããç·æ¥ãã€éèŠãªã¿ã¹ã¯ãšä»äºã«é¢ããŠã䞊è¡ãããããšãããŸãã ä»åãZabbixãããŒãžã§ã³2.2ã«ã¢ããã°ã¬ãŒãããããšããæããæãåºããŸããã
åœè£
ããã*ããã§ãã¯ã€ã³ããŸãããæåŸã«ã2.2.5ããããŸãã
ããŠãå
ã«é²ã¿ãŸãããããªãªãŒã¹ãã1幎ãçµéããŸãããå®å®çã¯ååšããªããããäœãèµ·ããŠã決å®ããŸãã
ãã¹ã¯ãè§£é€ããå¿
èŠãªå ŽæïŒäž»ãªãã®ã¯ãã¡ãããµãŒããŒãšãããã·ïŒãåéããåèµ·åããŸãã Webã€ã³ã¿ãŒãã§ã€ã¹IIIã®åã€ã³ã¹ããŒã«...
ãããŠäœããããŒã¿ããŒã¹ãæŽæ°ãããŠããŸãã
äºã¯éããããŸãããç§ã®ããŒã¹ã¯å°ãããããŸããããããŠãããã»ã¹ã¯äžè¬ã«ããªãŒãºããŸãã
ãŸãã圌ããèšãããã«ãããã¯å§ãŸã£ããšæããŸãããéå§ããæéããããŸããã§ãããããã¹ãŠããã§ã«æªãã§ãã
mysqlãã°ã«ã¯ãšã©ãŒçªå·28ãããããããã€ã¹ã«ã¹ããŒã¹ãæ®ã£ãŠããŸããããšããæå³ã§ãã©ãã«ãååãªã¹ããŒã¹ããããŸããã ãGoogleãããã°ãç¥æ§ãïŒcïŒãšããããšããã«ãããããã«ãããã«ã§ã¯ãªãããã®ããã€ã¹ãibdata1ãšibdata2ã§ããããšãããããŸããããµã€ãºã¯innodb_data_file_pathãã©ã¡ãŒã¿ãŒã§èŠå¶ãããŠããŸãã æå€§ã256Mãã512Mã«å€æŽããåŸãããŒã¿ããŒã¹ã®æŽæ°ãæåãããµãŒããŒãèµ·åããŸããã
ãããã·ã«ãåé¡ããããããŒã¿ããŒã¹ãåå ã§ããã sqliteã ããæŽæ°ãããªãããããããã·ã忢ããå€ãããŒã¿ããŒã¹ãåé€ããŠãããã·ãéå§ããŸãã 圌ããèšãããã«ãã¢ããã°ã¬ãŒãããŒããæ³šææ·±ãèªãã§ãã ãã
ãã¡ãããæŽæ°äžã«æéåãã®ããŒã¿ã倧éã«èç©ããããããã€ã³ã¿ãŒãã§ã€ã¹ã«ãã¹ãŠã衚瀺ãããŠããããšã確èªã§ããããšã確èªãããã¹ãŠã確å®ããŠæŽæ°ããããŸã§åŸ
æ©ããŸãã
æ°æéåŸãã¹ã±ãžã¥ãŒã«ã確èªããŸãã

ãã®æ¥ã¯ã ãããæãå§ããŠããŸããã
ããã¯ç§ãã¡ã®çªã§ãã ã©ãïŒ..ãããã·ã®1ã€ããã®äž»ãªæéåãããŒã¿ã ãããŠãã©ã®ãããªããŒã¿ã ãããŠãSNMPv3ã§åä¿¡ããããŒã¿ã
çŽ æŽãããã 以åã«ãã®æ©èœã«è³ªåããããŸãããããã¹ãŠã®æãå±ãããã¢ããããŒãããããã®åé¡ã解決ãããšããåžæããããŸããã ãããŠãã·ã¹ãã ã¯å®éã«ã¯åäœããªããªããŸãã ãã€ãŠã1å°ã®ãµãŒããŒãŸãã¯ãããã·ã䜿çšããŠãã人ã
ãäœçŸãã®ãããã¯ãŒã¯ããã€ã¹ãç£èŠããæ¹æ³ã«ã€ããŠèªãã§ãããšãã«ãäœãåé¡ãªã®ãçè§£ã§ããŸããã§ãããïŒ ç§ã¯æ°åã®ããã€ã¹ãæã£ãŠããŸããããã¹ãŠãéçãŸã§æ©èœããŸãã ãããããŒã¿ããŒã¹ã¯å®å
šã«æé©åãããŠããããµãŒããŒã¯é«éããŒã¿ã¹ãã¢ã«é
眮ããã倧éã®ã¡ã¢ãªãå²ãåœãŠãããŠããŸãã
ç§ã¯ããŒã«ããã¯ããããªãã£ãã®ã§ãåé¡ãåŠçããããšããããšã¯äœãšããŠã決å®ãããŸããã
ç§ã¯ãããã·ã®1ã€ãéžæãããã®èåŸã§æãå€ãã®SNMPããã€ã¹ãéžæããçè§£ãå§ããŸããã
ãããã·ã®ãã°ã«ãããã®ã¯æ¬¡ã®ãšããã§ã**ïŒ
4447:20141218:124053.605 SNMP agent item "ifAdminStatus.["10130"]" on host "co-xx02" failed: first network error, wait for 15 seconds 4468:20141218:124108.270 resuming SNMP agent checks on host "co-xx02": connection restored
ãããã£ãŠãç°ãªãã¢ã€ãã ã䜿çšããŠããã¹ãŠã®SNMPãã¹ãã§ã©ã³ãã ã«å®è¡ããŸãã
ãããã¯ãŒã¯ã®åé¡ã¯çµ¶å¯Ÿã«ãããŸããããå¿ å®ã®ããã«ãã¹ã€ããã®æ¥ç¶æ§ãé床ããã°ããã°ãã確èªããŸããã snmpwalkã䜿çšããŠSNMPèªäœããã§ãã¯ããããªãŒå
šäœããã«ããŸãã åé¡ãããŸããã
Googleã ããŒã©ãŒãè©°ãŸã£ãŠãããã¿ã€ã ã¢ãŠããééã£ãŠãããããŒãžã§ã³2.2.3ã§ããã«é¢é£ãããã°ãä¿®æ£ãããŠããŸãã 誰ãã«ãããã¯ãŒã¯ã®åé¡ããããUDPã倱ãããŠããŸãã ããããããã¯ç§ãã¡ã®å Žåã§ã¯ãããŸããã
ããã§ã¯ïŒ..
è峿·±ãäºå®ããããã·ããªããŒããããš
/etc/init.d/zabbix-proxy restart
ç·ãã©ã®ããã«çž®å°ãå§ããããèŠãããšãã§ããŸãããããããçªç¶ãåã³äœããèµ·ãããããã«æé·ããŸã***ã

äœãèµ·ãã£ãŠããã®ã§ããïŒ..
é«åºŠãªzabbix-proxyãã®ã³ã°ããªã³ã«ããŸã
DebugLevel = 4
zabbix-proxyãåèµ·åãããšã©ãŒã衚瀺ãããã®ãåŸ
ã¡ãŸã
ãããã¯ãŒã¯ãšã©ãŒã®ä»£ããã«ãããå®å
šãªæ
å ±ã衚瀺ãããããã«ãªããŸãã
ãããªæã 5414:20141218:125955.481 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94 5414:20141218:125955.481 End of zbx_snmp_get_values():NETWORK_ERROR 5414:20141218:125955.481 End of zbx_snmp_process_standard():NETWORK_ERROR 5414:20141218:125955.481 In zbx_snmp_close_session() 5414:20141218:125955.481 End of zbx_snmp_close_session() 5414:20141218:125955.481 getting SNMP values failed: Cannot connect to "192.168.xx:161": Too long. 5414:20141218:125955.481 End of get_values_snmp() 5414:20141218:125955.481 In deactivate_host() hostid:10207 itemid:43739 type:6 5414:20141218:125955.481 query [txnlev:1] [begin;] 5414:20141218:125955.481 query [txnlev:1] [update hosts set snmp_errors_from=1418896795,snmp_disable_until=1418896810,snmp_error='Cannot connect to "192.168.xx:161": Too long.' where hostid=10207] 5414:20141218:125955.481 query [txnlev:1] [commit;] 5414:20141218:125955.481 SNMP agent item "ifOperStatus.["10143"]" on host "co-xx04" failed: first network error, wait for 15 seconds 5414:20141218:125955.481 deactivate_host() errors_from:1418896795 available:1 5414:20141218:125955.482 End of deactivate_host()
ã¹ããŒã¿ã¹1ããšã©ãŒã¹ããŒã¿ã¹-1ãèŠçŽ æ°94
ãããNETWORK_ERRORã§ãããšããçµè«ã§ã
ãããŠãå°ãäœã埩å·åããŸãã«ãé·ããšãã¹ãã®éã¢ã¯ãã£ãåã ãã¹ããéã¢ã¯ãã£ãåããããšããã¹ãããããŒã¿ãåä¿¡ã§ãããããŒã¿ããã¥ãŒã«å
¥ããããããšã¯æããã§ããããããã¥ãŒã®èª¬æã§ãã
ããã«errstatãã©ã¡ãŒã¿ãŒã«èå³ããã
catã/var/log/zabbix/zabbix_proxy.logã«äœæ| grep errstat
5412:20141218:130351.410 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:11 5433:20141218:130351.470 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94 5430:20141218:130351.476 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94 5417:20141218:130353.442 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:5 5420:20141218:130353.534 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94
ããããã£ãšæ·±ãæããŸããã£ãšæ·±ãããå¿
èŠããããšããã€ã¡ãŒãžãããã¯ãã§ãããããã§ã¯ãããŸããã 圌女ã¯çãåŸããšæãã
cat /var/log/zabbix/zabbxi_proxy.logãå®è¡ãã| grep errstatïŒ-1
5416:20141218:130353.540 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94 5412:20141218:130355.571 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94 5417:20141218:130355.591 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94 ... 5420:20141218:130453.187 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94 5412:20141218:130455.206 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94 5413:20141218:130455.207 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94
1ã€ã®ãããã·ãé€ããã¹ãŠã®ããã€ã¹ã®ç£èŠããªãã«ãããšããæ¥ãŸããã ããããªããšããã°ãçè§£ããã®ãé£ããããŸãã ãšã«ãããçŸåšã®ã·ã¹ãã ã¯ç£èŠã«é©ããŠããŸããã
ãªãã«ããŠ
cat /var/log/zabbix/zabbxi_proxy.log | grep mapping_num
ãããã·ããªããŒãããŸã
æåã¯ééãããªããmapping_numã¯1ããåŸã
ã«æé·ããŠããŸãïŒååã瀺ãããã«åã
ã®ç·ãã«ãããããŠããŸãïŒ
mapping_numãã©ã®ããã«æé·ãããããã€ã§ãèŠãããšãã§ããŸã 7876:20141218:131251.660 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:4 7872:20141218:131251.681 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:6 7872:20141218:131251.919 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:8 7876:20141218:131251.919 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:9 7868:20141218:131351.965 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:13 10502:20141218:135237.884 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:31 10507:20141218:135238.244 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:62 12429:20141218:141637.942 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:31 12429:20141218:141637.966 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:31 12433:20141218:141651.142 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-1 mapping_num:94
次ã«oppa 94ââã-1ã§é·ãããŸãã ã€ãŸã éå§çŽåŸã«ããããã·ã¯ããã€ã¹ããã¹ãããSNMPèŠæ±ãéä¿¡ããŠã1ã€ã®èŠæ±ã®ã¢ã€ãã æ°ãå¢ãããŸãã ã©ã€ã³ã¯æ¥éã«çž®å°ãå§ããŸãã æ¬¡ã«ãïŒã€ãŸãããããã·ïŒããžãã¯çªå·94ã«å°éãããšãé害ãçºçããããã€ã¹ãzabbixã«ãã£ãŠ15ç§éãªãã«ãªãããã¥ãŒãæ¥æ¿ã«å¢å ãå§ããŸãã
ã芧ã®ãšãããããã«ãããã¯ãŒã¯ãšã©ãŒã¯ãããŸãããé·ãããŸãã
ããŠãzabbix snmpã§äœããèŠã€ããããšããŠé·ãããŸãã
ã¿ã€ã ã¢ãŠããããŒã©ãŒã®ãªãŒããŒããŒã...è峿·±ãæçš¿ã®1ã€ã«ãã¢ã€ãã ã®OIDã誀ã£ãŠçæããããšãã«ãã®ãããªãšã©ãŒãçºçãããšããæ
å ±ããã£ããããsnmpgetãå«ããã¹ãŠã®OIDãå確èªããŸãã
ã€ãŸã ãã®çµæãGoogleã¯ç§ãå©ããããšãã§ããŸããã§ããã
èªåã§æŽçããŸããããã¯äŸ¿å©ã§ãã
ã§ã¯ãäœããããŸããïŒ
ã¢ã€ãã ã®æ°ã94ïŒã€ãŸãååãªå€§ããïŒã«ãªããšããã«ãäœããèµ·ãããã·ã¹ãã ãè¿·åã«ãªããŸãã
ããã§ããããã§ã¯ãªãåç;ïŒ
ã³ãŒãã«åãæããæã§ãã gentooã«äœããããŠã³ããŒãããå¿
èŠã¯ãããŸããããã¹ãŠããã§ã«ããã®ã§ãäœæ¥ãã£ã¬ã¯ããªã«ãã¹ãŠãè§£åããŸããã
æåã«ããšã©ãŒã衚瀺ãããå ŽæãèŠã€ããŸãã errstatã§æ€çŽ¢
é©ããããšã«ããã¡ã€ã«ã«ã¯ãcheckings_snmp.cãšããååã®2ã€ã®å ŽæãããããŸããã
次ã®2ã€ã®å ŽæïŒ
745è¡ç®ãã
/* communicate with agent */ status = snmp_synch_response(ss, pdu, &response); zabbix_log(LOG_LEVEL_DEBUG, "%s() snmp_synch_response() status:%d errstat:%ld max_vars:%d", __function_name, status, NULL == response ? (long)-1 : response->errstat, max_vars);
è¡938ãã
status = snmp_synch_response(ss, pdu, &response); zabbix_log(LOG_LEVEL_DEBUG, "%s() snmp_synch_response() status:%d errstat:%ld mapping_num:%d", __function_name, status, NULL == response ? (long)-1 : response->errstat, mapping_num);
2çªç®ã®éšåã«èå³ãããäžæ¹ã§ïŒmapping_numã¯ãã®äžã«ãããšããäºå®ã«åºã¥ããŠïŒ
ããã°ã©ããŒã§ãããå¿çãNULLã§ããããšãèªèããŠããŸãããããªãã§ããïŒ..
errstatïŒ-1ã䜿çšããããšãæãåºããŠãã ããã ã€ãŸã snmp_synch_response颿°ã¯1ãè¿ããŸãããããã¯ã©ãããæå³ã§ããïŒ..
ãããŠãããã¯STAT_ERRORïŒ1ïŒãæå³ããŸãïŒåœŒå¥³ã¯STAT_TIMEOUTïŒ2ïŒããã³STAT_SUCCESSïŒ0ïŒã®æ¹æ³ãç¥ã£ãŠããŸãïŒ
圌ããèšãããã«ãããã¯æç¢ºã§ã¯ãããŸããããçŽ æŽããã...
äžæ¹ããã®ãã¡ã€ã«ã®ã©ããã«NETWORK_ERRORãè¿ãå¿
èŠããããŸããã©ãã§ããªããã®åå ãèŠã€ããŠãã ããã
zbx_get_snmp_response_error颿°ãžã®æåã®ãšã³ããªïŒã€ãŸãããã³ãïŒ
zbx_get_snmp_response_errorã³ãŒãã衚瀺 static int zbx_get_snmp_response_error(const struct snmp_session *ss, const DC_INTERFACE *interface, int status, const struct snmp_pdu *response, char *error, int max_error_len) { int ret; if (STAT_SUCCESS == status) { zbx_snprintf(error, max_error_len, "SNMP error: %s", snmp_errstring(response->errstat)); ret = NOTSUPPORTED; } else if (STAT_ERROR == status) { zbx_snprintf(error, max_error_len, "Cannot connect to \"%s:%hu\": %s.", interface->addr, interface->port, snmp_api_errstring(ss->s_snmp_errno)); switch (ss->s_snmp_errno) { case SNMPERR_UNKNOWN_USER_NAME: case SNMPERR_UNSUPPORTED_SEC_LEVEL: case SNMPERR_AUTHENTICATION_FAILURE: ret = NOTSUPPORTED; break; default: ret = NETWORK_ERROR; } } else if (STAT_TIMEOUT == status) { zbx_snprintf(error, max_error_len, "Timeout while connecting to \"%s:%hu\".", interface->addr, interface->port); ret = NETWORK_ERROR; } else { zbx_snprintf(error, max_error_len, "SNMP error: [%d]", status); ret = NOTSUPPORTED; } return ret; }
ããã ã€ãŸã äžèšã®æ¡ä»¶ã®ãããã«ã該åœããªãSTAT_ERRORå
¥åã¹ã€ããããããããããã©ã«ãã§NETWORK_ERRORãçºçããŸãã
ãã®ããã©ã«ãã¯ç§ãã¡ãæ··ä¹±ãããããšããã§ã«èªèããŠãããå®éã«ã©ã®ãããªãšã©ãŒã§ããããç¥ãå¿
èŠããããŸãã ãšã©ãŒã³ãŒãã¯ss-> s_snmp_errnoã«ä¿åããã倿°ã®åºåããã°ã«è¿œå ããŸãã
ç§ããã®ããã°ã©ããŒã¯ãŸããŸããªã®ã§ãã¯ããŒããŒãšèª°ãã®æ¯èŠªã®å©ããåããŠãç§ã¯ãã®ããã«ããããåœãŠãŸããïŒ
diff -urN zabbix-2.2.5/src/zabbix_server/poller/checks_snmp.c zabbix-2.2.5.new/src/zabbix_server/poller/checks_snmp.c --- zabbix-2.2.5/src/zabbix_server/poller/checks_snmp.c 2014-07-17 17:49:45.000000000 +0400 +++ zabbix-2.2.5.new/src/zabbix_server/poller/checks_snmp.c 2014-10-10 16:38:31.000000000 +0400 @@ -938,7 +938,7 @@ status = snmp_synch_response(ss, pdu, &response); zabbix_log(LOG_LEVEL_DEBUG, "%s() snmp_synch_response() status:%d errstat:%ld mapping_num:%d", - __function_name, status, NULL == response ? (long)-1 : response->errstat, mapping_num); + __function_name, status, NULL == response ? (STAT_ERROR == status ? (long) ss->s_snmp_errno : (long)-1) : response->errstat, mapping_num); if (STAT_SUCCESS == status && SNMP_ERR_NOERROR == response->errstat) {
ã¹ããŒã¿ã¹ãSTAT_ERRORã®å Žåãss-> s_snmp_errnoãåºåããŸã
zabbixã®ãœãŒã¹ãããŒã«ã«ãªããžããªã«æå
¥ããebuildããã°ããä¿®æ£ããŠå®è¡ããŸããã
ã³ã³ãã€ã«ãåèµ·åãåŸ
æ©ã
ãããŠãããã§åœŒå¥³ã¯ç§ãã¡ã®æ¬åœã®ééãã§ãã
11211:20141218:155253.362 zbx_snmp_get_values() snmp_synch_response() status:0 errstat:0 mapping_num:18 11210:20141218:155253.393 zbx_snmp_get_values() snmp_synch_response() status:1 errstat:-5 mapping_num:94
ãšã©ãŒ-5
Net-SNMP snmp_api.hãåç
§ããŠãã ãã
#define SNMPERR_TOO_LONG (-5)
åæ§ã®ããšããã°ã«è¡šç€ºãããŠããŸããããé·ããããã¬ãŒãºã§ã¯äœãèŠã€ãããŸããã§ããããšã©ãŒã®çš®é¡ãšçºçææãèŠãŠã¿ãŸãããã
snmp_api.cã§ç¢ºèªã§ããŸã
ããå°ãã³ãŒã if (pdu->version == SNMP_VERSION_3 && session->sndMsgMaxSize != 0 && length > session->sndMsgMaxSize) { DEBUGMSGTL(("sess_async_send", "length of packet (%lu) exceeds session maximum (%lu)\n", (unsigned long)length, (unsigned long)session->sndMsgMaxSize)); session->s_snmp_errno = SNMPERR_TOO_LONG; SNMP_FREE(pktbuf); return 0; } if (transport->msgMaxSize != 0 && length > transport->msgMaxSize) { DEBUGMSGTL(("sess_async_send", "length of packet (%lu) exceeds transport maximum (%lu)\n", (unsigned long)length, (unsigned long)transport->msgMaxSize)); session->s_snmp_errno = SNMPERR_TOO_LONG; SNMP_FREE(pktbuf); return 0; }
次ã®2ã€ã®ãªãã·ã§ã³ã®ã¿ããããŸãã
1.éä¿¡ããããŒã¿ã®é·ãããåä¿¡ããPDUã§æå®ãããmsgMaxSizeãã©ã¡ãŒã¿ãŒãããé·ã
2.åºç€ãšãªããã©ã³ã¹ããŒãã¯ããã®é·ãã®ãã±ãããéä¿¡ã§ããŸãã
åé¡ã¯ããã®ãšã©ãŒãä¿®æ£ããæ¹æ³ã§ãã äžèšãããmsgMaxSizeãååŸãããã©ãããæ£ããåŠçãããã©ãããªã©ãæ¢ãå¿
èŠããããŸãã ãªã© ããããzabbixã®ãœãŒã¹ã³ãŒãã¯åããŠãCã¯2åç®ïŒ3åç®ã¯å€§äžå€«ïŒã«è¡šç€ºãããŸãã
èŠããã«ãããã¯ç±æãåŒãèµ·ãããŸãã...ã¯ãããããŠããããäœããå£ããå¯èœæ§ããããŸãã
åæ
çãªäœè«ïŒ
ãã®åé¡ã®é²è¡äžã«ãSNMP倧éåŠçã«é¢ããæ
å ±ã«åºããããããšãèšããªããã°ãªããŸããã ã€ãŸã zabbixã¯ãåäžã®ãªã¯ãšã¹ãã§è€æ°ã®SNMPããŒã¿ã¢ã€ãã ããªã¯ãšã¹ãã§ããŸãã
SNMPäžæ¬åŠçã®è©³çްèŠããã«ãzabbixã¯1åã®ãªã¯ãšã¹ãã§æå€§128åã®å€ãã¯ãšãªã§ããŸããããã¹ãŠã®ããã€ã¹ããããã®128åã®å€ãäžåºŠã«åŠçã§ããããã§ã¯ãããŸããã ãŸããzabbihã¯ãç¹å®ã®åããã€ã¹ã®æå€§å€ã«å¯ŸããŠæ€çŽ¢æŠç¥ã䜿çšããŸãã ãšããã§ããã°ã§ãããèŠãŸããã mapping_numã®æŒžé²çãªå¢å ã zabbixã¯SNMPERR_TOO_BIGããã€ã¹ãããšã©ãŒãåä¿¡ãããšããã«ãç¹å®ã®ã¢ã«ãŽãªãºã ã䜿çšããŠãšã©ãŒã®ãªãçµæãè¿ãæå€§å€ãæ€çŽ¢ããŸãã
ãªãç§ã¯ãããããŠããŸããã
zabbixã«ã¯ãªãŒããŒãããŒãšã©ãŒãåŠçããã¡ã«ããºã ããããŸãïŒãããåŒã³åºããŸãããïŒãããš1ã€ã ãæ¡åŒµããå¿
èŠããããŸãã
ã¢ã«ãŽãªãºã èªäœã¯ããšã©ãŒã®çµè«ã®äžã§ãã€ã³ããããŠããŸãã
åã³ãã®ã³ãŒã else if (1 < mapping_num && ((STAT_SUCCESS == status && SNMP_ERR_TOOBIG == response->errstat) || STAT_TIMEOUT == status)) { /* Since we are trying to obtain multiple values from the SNMP agent, the response that it has to */ /* generate might be too big. It seems to be required by the SNMP standard that in such cases the */ /* error status should be set to "tooBig(1)". However, some devices simply do not respond to such */ /* queries and we get a timeout. Moreover, some devices exhibit both behaviors - they either send */ /* "tooBig(1)" or do not respond at all. So what we do is halve the number of variables to query - */ /* it should work in the vast majority of cases, because, since we are now querying "num" values, */ /* we know that querying "num/2" values succeeded previously. The case where it can still fail due */ /* to exceeded maximum response size is if we are now querying values that are unusually large. So */ /* if querying with half the number of the last values does not work either, we resort to querying */ /* values one by one, and the next time configuration cache gives us items to query, it will give */ /* us less. */ if (*min_fail > mapping_num) *min_fail = mapping_num; if (0 == level) { /* halve the number of items */ int base; ret = zbx_snmp_get_values(ss, items, oids, results, errcodes, query_and_ignore_type, num / 2, level + 1, error, max_error_len, max_succeed, min_fail); if (SUCCEED != ret) goto exit; base = num / 2; ret = zbx_snmp_get_values(ss, items + base, oids + base, results + base, errcodes + base, NULL == query_and_ignore_type ? NULL : query_and_ignore_type + base, num - base, level + 1, error, max_error_len, max_succeed, min_fail); } else if (1 == level) { /* resort to querying items one by one */ for (i = 0; i < num; i++) { if (SUCCEED != errcodes[i]) continue; ret = zbx_snmp_get_values(ss, items + i, oids + i, results + i, errcodes + i, NULL == query_and_ignore_type ? NULL : query_and_ignore_type + i, 1, level + 1, error, max_error_len, max_succeed, min_fail); if (SUCCEED != ret) goto exit; } } }
ã€ãŸãããã¹ãŠãåçŽã§ãããæ¢åã®æ¡ä»¶ãäžæããããšãªããç¬èªã®æ¡ä»¶ã远å ããå¿
èŠããããŸãã ããã«ã¯ããã¹ãŠã®ããŒã¿ããããŸãã
- ã¹ããŒã¿ã¹ã¯STAT_ERRORã§ãªããã°ãªããŸãã
- ss-> s_snmp_errnoã¯SNMPERR_TOO_LONGã§ãªããã°ãªããŸãã
ãŸãããã®ãããªå Žæã2ã€ïŒãã°ãã¡ã€ã«ãžã®åºåã2ã€ïŒããããšãèæ
®ããçµæã®ãããã¯æ¬¡ã®ããã«ãªããŸãã
ã€ãã« diff -urN zabbix-2.2.5/src/zabbix_server/poller/checks_snmp.c zabbix-2.2.5.new/src/zabbix_server/poller/checks_snmp.c --- zabbix-2.2.5/src/zabbix_server/poller/checks_snmp.c 2014-07-17 17:49:45.000000000 +0400 +++ zabbix-2.2.5.new/src/zabbix_server/poller/checks_snmp.c 2014-10-10 16:38:31.000000000 +0400 @@ -746,10 +746,10 @@ status = snmp_synch_response(ss, pdu, &response); zabbix_log(LOG_LEVEL_DEBUG, "%s() snmp_synch_response() status:%d errstat:%ld max_vars:%d", - __function_name, status, NULL == response ? (long)-1 : response->errstat, max_vars); + __function_name, status, NULL == response ? (STAT_ERROR == status ? (long)ss->s_snmp_errno : (long)-1) : response->errstat, max_vars); if (1 < max_vars && - ((STAT_SUCCESS == status && SNMP_ERR_TOOBIG == response->errstat) || STAT_TIMEOUT == status)) + ((STAT_SUCCESS == status && SNMP_ERR_TOOBIG == response->errstat) || STAT_TIMEOUT == status || (STAT_ERROR == status && SNMPERR_TOO_LONG == ss->s_snmp_errno))) { /* The logic of iteratively reducing request size here is the same as in function */ /* zbx_snmp_get_values(). Please refer to the description there for explanation. */ @@ -938,7 +938,7 @@ status = snmp_synch_response(ss, pdu, &response); zabbix_log(LOG_LEVEL_DEBUG, "%s() snmp_synch_response() status:%d errstat:%ld mapping_num:%d", - __function_name, status, NULL == response ? (long)-1 : response->errstat, mapping_num); + __function_name, status, NULL == response ? (STAT_ERROR == status ? (long) ss->s_snmp_errno : (long)-1) : response->errstat, mapping_num); if (STAT_SUCCESS == status && SNMP_ERR_NOERROR == response->errstat) { @@ -1001,7 +1001,7 @@ } } else if (1 < mapping_num && - ((STAT_SUCCESS == status && SNMP_ERR_TOOBIG == response->errstat) || STAT_TIMEOUT == status)) + ((STAT_SUCCESS == status && SNMP_ERR_TOOBIG == response->errstat) || STAT_TIMEOUT == status || (STAT_ERROR == status && SNMPERR_TOO_LONG == ss->s_snmp_errno))) { /* Since we are trying to obtain multiple values from the SNMP agent, the response that it has to */ /* generate might be too big. It seems to be required by the SNMP standard that in such cases the */
ã³ã³ãã€ã«ãåèµ·å...
çµæã¯æ¬¡ã®ãšããã§ãã

ãšã©ãŒãããã¯ãŒã¯ãšã©ãŒããã°ããæ¶ããŸããã
ãã£ãïŒ
ããšãã
ãã¡ãããå®éã«ã¯ããšã©ãŒãšè§£æ±ºçãèŠã€ããã®ã«æéãããããŸããã ãœãŒã¹ã³ãŒããéžæããæçµçã«zabbixãšnet-snmpãéžæããŠãã³ãŒãã®2ãæã§åæ¢ããå¿
èŠããããŸããã
ãããããäžæŽ»æ§ç©è³ªãã«å¯Ÿããåå©ã®æèŠã¯è²Žéã§ãã
*顿ã¯10æ7æ¥ã«è»¢ããããã®åŸ2.2.5ã¯ãŸã ãã¹ã¯ãããŠããŸããã å¶ç¶ã«ãã圌女ã¯10æ10æ¥ã«ãã¹ã¯ãããŸããã
**圌ã¯åŸã§ç¶æ³ããŸããèšäºãæžãããã«ãæéãèŠãªãã§ãã ããã ã·ã§ãŒããŠã³ã®éããã°ããããŒã¿ãåãåºãæéã¯çµ¶å¯Ÿã«ãããŸããã§ããã
***ã¯ããã¯ããç§ãåçãã¢ãã«åããŸããã æåã¯ç·è²ã§ããã¹ãŠãèµ€è²ã§ãããšæ³åããŠãã ãã;ïŒãããŠãåèµ·åäžã«é£²ã¿ãŸããã
2014.12.31 UPDïŒèšäºã®è°è«ã«åºã¥ããŠããã±ãããéãããŸããïŒ
alexvlã«æè¬ ïŒïŒ
ãé·ããããSNMPv3èŠæ±ã®éä¿¡ã«å€±æãããšãSNMPãã«ã¯ã«ãã£ãŠé©åã«åŠçãããŸãããããŒãžã§ã³2.2.9rc1ã2.4.4rc1ã2.5.0以éãæ£åžžã«éããããŸããïŒAleksandrs Saveljevsã«æè¬ïŒ