Я немного погорячился с этим тикетом, мои извенения, но багу я все равно нашел:
В структуре кэша нету идентификации SNMP агента, а так как один и тот же "value" для одного и того же "oid" будет иметь разный индекс для каждого агента (железки), то кэш фактически работать не будет, а так как индекс каждый раз перепроверяется, получается на каждый каждый запрос получаем полный набор: перепроверка + сканирование индекса.
Собственно у меня в сети (как видно из дебага выше) есть свичи где индексация портов начинается с 10000, а есть и такие где нумерация с 1.
И что бы не флудить, да еще и на русском, лишний раз, мои скромные предложения
1) таймаут на кэш запись, до истечения таймаута индекс не перепроверяется, а сразу идет запрос значения, если запрос значения вернул ошибку, то сбрасываем кэш (значение можно и не перезапрашивать и заново индекс в этой итерации не искать)
2) таймаут конфигурируемый как поле элемента данных, так как в 90% случаев (agent, value, index_oid) => index будет вечным, это и интерфейсы свичей и маршрутизаторы с включенным snmp ifindex persist
3) кэш общий для всех пулеров, если это возможно
P.S. типичная конфигурация для SNMP опросов это банальный 48-ми(48+2uplink) портовый эзернет свич, минимум 16 элементов данных на каждый интерфейс, получается 800 элементов опрашиваемых в лучшем случае раз в 5 минут, при текущей реализации кэша это 1600 опросов через 1 пулер, если же пулеров несколько или есть устройства с несовпадающими индексами, то
|
Hi.
Seems the problem is also present in 1.8.4
from the logs, the cache won't get a hit, and every index is retrieved every time and saved in the cache again...
at 6 items per port, that adds up quickly...
Obviously this floods the switch snmp agent, and it seems my switch can't keep up ...
512:20110224:083915.472 In substitute_simple_macros() data:'ifInOctets01'
512:20110224:083915.472 In substitute_simple_macros() data:'xxxxx'
512:20110224:083915.472 In substitute_simple_macros() data:'ifInOctets"index","ifDescr","Port #1"'
512:20110224:083915.472 In get_value() key:'ifInOctets01'
512:20110224:083915.472 In get_value_snmp() key:'ifInOctets01' oid:'ifInOctets"index","ifDescr","Port #1"'
512:20110224:083915.472 In snmp_open_session()
512:20110224:083915.473 SNMP [[email protected]:161]
512:20110224:083915.473 End of snmp_open_session()
512:20110224:083915.473 Special processing
512:20110224:083915.473 method:index
512:20110224:083915.473 oid_index:ifDescr
512:20110224:083915.473 index_value:Port #1
512:20110224:083915.473 In snmp_normalize(oid:ifDescr)
512:20110224:083915.474 End of snmp_normalize():1.3.6.1.2.1.2.2.1.2
512:20110224:083915.474 In cache_get_snmp_index(oid:1.3.6.1.2.1.2.2.1.2,value:Port #1)
512:20110224:083915.474 In get_snmpidx_nearestindex(oid:1.3.6.1.2.1.2.2.1.2,value:Port #1)
512:20110224:083915.474 End of get_snmpidx_nearestindex():1
512:20110224:083915.474 End of cache_get_snmp_index(index:101):SUCCEED
512:20110224:083915.474 In snmp_get_index(oid:1.3.6.1.2.1.2.2.1.2.101,value:Port #1)
512:20110224:083915.474 snmp_get_index: snmp_pdu_create()
512:20110224:083915.506 VAR: IF-MIB::ifDescr.101 = Port #1 (type=4)(length = 7)
512:20110224:083915.506 FOUND: Index is 101
512:20110224:083915.506 End of snmp_get_index():SUCCEED
512:20110224:083915.506 In cache_put_snmp_index(oid:1.3.6.1.2.1.2.2.1.2,value:Port #1,index:101)
512:20110224:083915.507 In get_snmpidx_nearestindex(oid:1.3.6.1.2.1.2.2.1.2,value:Port #1)
512:20110224:083915.507 End of get_snmpidx_nearestindex():1
512:20110224:083915.507 End of cache_put_snmp_index()
512:20110224:083915.507 Found index:101
512:20110224:083915.507 In snmp_normalize(oid:ifInOctets)
512:20110224:083915.507 End of snmp_normalize():1.3.6.1.2.1.2.2.1.10
512:20110224:083915.507 Full OID:1.3.6.1.2.1.2.2.1.10.101
512:20110224:083915.507 In get_snmp(oid:1.3.6.1.2.1.2.2.1.10.101)
512:20110224:083915.571 Status send [0]
512:20110224:083915.571 AV loop OID [1.3.6.1.2.1.2.2.1.10.101] Type [0x41] 'Counter32: 664431371'
512:20110224:083915.571 End of get_snmp():SUCCEED
512:20110224:083915.572 In snmp_close_session()
512:20110224:083915.572 End of snmp_close_session()
512:20110224:083915.572 End of get_value_snmp():SUCCEED
512:20110224:083915.572 End of get_value():SUCCEED
512:20110224:083915.572 In zbx_hashset_search()
512:20110224:083915.572 End of zbx_hashset_search()
512:20110224:083915.572 In zbx_hashset_search()
512:20110224:083915.572 End of zbx_hashset_search()
512:20110224:083915.572 In calculate_item_nextcheck (23475,120,"",1298536755)
512:20110224:083915.573 End calculate_item_nextcheck (nextcheck:1298536875 delay:120)
512:20110224:083915.573 In zbx_binary_heap_insert() key:23475
512:20110224:083915.573 In zbx_hashmap_get() key:23475
512:20110224:083915.573 End of zbx_hashmap_get() key:23475 value:-1
512:20110224:083915.573 In zbx_hashmap_set() key:23475 value:88
512:20110224:083915.573 End of zbx_hashmap_set()
512:20110224:083915.573 End of zbx_binary_heap_insert()
512:20110224:083915.573 In DCflush_nextchecks()
512:20110224:083915.573 End of get_values()
|