If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to REGISTER before you can post. To start viewing messages, select the forum that you want to visit from the selection below.
Есть железка которая отдает нагрузку процессора в формате 10% или 12% т.е. параметр текстовый, а мне естественно хочется получить числовой параметр для построения графиков и настройки триггеров.
А если этот параметр попытаться сохранить как число, забикс будет ругаться? Есть да, то я бы похачил, отрезал бы весь "хвост" строки начинающийся с первого нечислового символа если тип обрабатываемого итема числовой.
Фигово когда агент отдает, например, географичечкие координаты в виде строки `56 34" 21' E`, такое без парсера вообще никак не обработать, приходится "проксировать" через agentx.
А если этот параметр попытаться сохранить как число, забикс будет ругаться? Есть да, то я бы похачил, отрезал бы весь "хвост" строки начинающийся с первого нечислового символа если тип обрабатываемого итема числовой.
Фигово когда агент отдает, например, географичечкие координаты в виде строки `56 34" 21' E`, такое без парсера вообще никак не обработать, приходится "проксировать" через agentx.
Как число не сохраняет, т.к. данные фактически не число, а текст.
Навскидку, в функции get_value_snmp (check_snmp.c), в самом конце перед тем как делать `return ret` можно проверить тип итема, итем передаетсяв эту функцию в качестве параметра DC_ITEM *item, так что ничего хитрого делать не прийдется, если тип итема числовой то просто проверяем что у нас в ret и отрезаем с первого нечислового символа до конца строки. Есть хачить только для целочисленных данных, то вообще просто, если еще и для float, то прийдется учесть точки/запятые и тп.
AgentX это расширение net-snmp, например, embeded perl это по сути agentx. Надежнее расширять не через embeded, а полноценным agentx демоном, пишется он очень просто на том же perl или еще лучше на C. Я перекрываю некоторые железки проксей, используя стандарный функционал net-snmp "proxy", по сути это snmpd у которого в конфиге только строчки "proxy", затем к этому snmpd цепляются несколько agentx которые или "перекрывают" какие то OID, значения которых я хочу исправить, или создают дополнительные OID. Это решение удобно когда у нас 2-3 "жирных" SNMP агента, если же у нас 100500 мелких железок, то проксировать это все будет не очень удобно, геморойно.
P.S. Скриптом можно довольствоваться если это единичный случай, десяток проверок в час, если же дергать срипт по 10 раз в секунду серверу станет плохо.
Навскидку, в функции get_value_snmp (check_snmp.c), в самом конце перед тем как делать `return ret` можно проверить тип итема, итем передаетсяв эту функцию в качестве параметра dc_item *item, так что ничего хитрого делать не прийдется, если тип итема числовой то просто проверяем что у нас в ret и отрезаем с первого нечислового символа до конца строки. Есть хачить только для целочисленных данных, то вообще просто, если еще и для float, то прийдется учесть точки/запятые и тп.
Agentx это расширение net-snmp, например, embeded perl это по сути agentx. Надежнее расширять не через embeded, а полноценным agentx демоном, пишется он очень просто на том же perl или еще лучше на c. Я перекрываю некоторые железки проксей, используя стандарный функционал net-snmp "proxy", по сути это snmpd у которого в конфиге только строчки "proxy", затем к этому snmpd цепляются несколько agentx которые или "перекрывают" какие то oid, значения которых я хочу исправить, или создают дополнительные oid. Это решение удобно когда у нас 2-3 "жирных" snmp агента, если же у нас 100500 мелких железок, то проксировать это все будет не очень удобно, геморойно.
P.s. Скриптом можно довольствоваться если это единичный случай, десяток проверок в час, если же дергать срипт по 10 раз в секунду серверу станет плохо.
К сожалению я не настолько силен в c кодинге.
И версию пока стоит старенькая 1.8 - нам пока хватает.
Comment