|
|||||||
Как работать с протоколом snmp в Linux на примере APC Smart-UPS RT 5000
Время создания: 13.05.2015 16:54
Раздел: Компьютер - Linux - Сеть в Linux - Протокол SNMP
Запись: xintrea/mytetra_syncro/master/base/1431525257cfxxcowxi0/text.html на raw.github.com
|
|||||||
|
|||||||
Настройка сети для ИБП APC Вначале нужно узнать IP-адрес нашего APC. Во многих ИБП APC (например в APC Smart-UPS RT 5000 и Smart-UPS X 1000) по-умолчанию настроено получение IP адреса по DHCP. Поэтому нужно посмотреть в консоль управления DHCP и найти регистрацию устройства. Имя у устройства будет начинаться на строку "apc", например: apc96CAC3 apcB79982 apcB134F9 Узнав в консоли DHCP IP-адрес устройства, можно через браузер зайти в его консоль управления, набрав в адресной строке IP-адрес. Обычно, на бесперебойниках APC по-умолчанию используются следующие параметры входа:
Сразу после входа нужно вместо DHCP прописать статический IP-адрес для этого устройства, так как бесперебойник относится к серверному оборудованию, а на использование резервирования IP в DHCP надежды нет в случае каких-либо проблем. Настройка производится во вкладке Administration, под-вкладка Network. После чего делеается Reboot Management Interface в под-вкладке General-Reser/Reboot. Использование протокола snmp в Linux Вначале нужно установить поддержку протокола snmp: # apt-get install snmp Сразу же нужно установить стандартные MIB-файлы с известными устройствами, зарегистрированными в IANA, ISO, и. т. д.: # apt-get install snmp-mibs-downloader Далее нужно найти MIB-файл для устройства, с которым будем работать. Если MIB-файла нет, то придется работать с числовыми идентификаторами параметров (OID), которые совершенно неинформативны и понять какой параметр что значит практически нереально. Заходим на сайт производителя, и на странице скачивания файлов находим MIB файл для устройства. Скачиваем его и кладем в каталог /usr/share/mibs/netsnmp: # wget ftp://ftp.apc.com/apc/public/software/pnetmib/mib/414/powernet414.mib (Нигде не смог найти информацию, нужно ли перечитывать MIB-файлы после добавления/изменения и как это делать). Теперь нужно понять, сможем ли мы воспользоваться этим MIB файлом. Открываем mib-файл и смотрим самую первую директиву (пропуская комментарии, начинающиеся на "--"). В нашем случае она будет следующей: PowerNet-MIB DEFINITIONS ::= BEGIN Строка "PowerNet-MIB" - это имя модуля. Поставим себе задачу: нам надо определить температуру на устройстве (мы знаем, что в APC Smart-UPS RT 5000 есть датчик температуры, его видно в веб-интерфейсе). Пробуем посмотреть MIB-дерево. Воспользуемся командой, чтобы найти хоть какое-то упоминание о температуре: $ snmptranslate -M ./ -m PowerNet-MIB | grep emperatur где:
В ответ выдастся: No log handling enabled - turning on stderr logging MIB search path: ./ Cannot find module (SNMPv2-SMI): At line 209 in .//powernet414.mib Did not find 'enterprises' in module #-1 (.//powernet414.mib) Did not find 'DisplayString' in module #-1 (.//powernet414.mib) Unlinked OID in PowerNet-MIB: apc ::= { enterprises 318 } Undefined identifier: enterprises near line 215 of .//powernet414.mib Cannot adopt OID in PowerNet-MIB: atsInputEntry ::= { atsInputTable 1 } Cannot adopt OID in PowerNet-MIB: rARUIdentName ::= { rARUIdentEntry 2 } Cannot adopt OID in PowerNet-MIB: rARUIdentAruIndex ::= { rARUIdentEntry 1 } ... Cannot adopt OID in PowerNet-MIB: airFMSysAlarmMapExpMod1Entry ::= { airFMSysAlarmMapExpMod1Table 1 } USAGE: snmptranslate [OPTIONS] OID [OID]... Version: 5.4.3 Web: http://www.net-snmp.org/ Email: net-snmp-coders@lists.sourceforge.net OPTIONS: -h display this help message -V display package version number В общем, какой-то бред, и причем grep на этом выводе не работает. Еще раз потыкавшись и поковырявшись в MIB-файле, становится понятно, что OID температурного датчика нейти невозможно. Тогда пойдем другим путем. Воспользуемся достижениями опенсорса. Найдем в конфигурациях Zabbix настройки для модуля взаимодействия с APC. Мы можем отыскать примерно следующее: https://github.com/ma-tty/zabbix/blob/master/_Special_APC_Battery.xml Открываем этот файл на просмотр, делаем поиск по строке "temperature", и находим следующий параметр: <item> <name>Battery temperature</name> <type>4</type> <snmp_community>public</snmp_community> <multiplier>0</multiplier> <snmp_oid>.1.3.6.1.4.1.318.1.1.1.2.2.2.0</snmp_oid> <key>apc.BatteryTemperature</key> <delay>360</delay> <history>90</history> <trends>365</trends> <status>0</status> <value_type>3</value_type> <allowed_hosts/> ... </item> Теперь получаем все доступные параметры с устройства APC, чтобы узнать, есть ли параметр с OID ...1.3.6.1.4.1.318.1.1.1.2.2.2.0... на устройстве: $ snmpwalk -u apc -v 1 -c public IP_адрес_APC В ответ будут передаваться все параметры в количестве 700-800 штук: iso.3.6.1.2.1.1.1.0 = STRING: "APC Web/SNMP Management Card (MB:v4.0.1 PF:v5.1.7 PN:apc_hw05_aos_517.bin AF1:v5.1.7 AN1:apc_hw05_sumx_517.bin MN:AP9631 HR:05 SN: ZA1232007803 MD:08/01/2012) (Embedded PowerNet SNMP Agent SW v2.2 compatible)" iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.318.1.3.27 iso.3.6.1.2.1.1.3.0 = Timeticks: (520550) 1:26:45.50 iso.3.6.1.2.1.1.4.0 = STRING: "Unknown" iso.3.6.1.2.1.1.5.0 = STRING: "Unknown" iso.3.6.1.2.1.1.6.0 = STRING: "Unknown" iso.3.6.1.2.1.1.7.0 = INTEGER: 72 iso.3.6.1.2.1.1.8.0 = Timeticks: (0) 0:00:00.00 iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.1 iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.10.3.1.1 iso.3.6.1.2.1.1.9.1.2.3 = OID: iso.3.6.1.6.3.11.3.1.1 iso.3.6.1.2.1.1.9.1.2.4 = OID: iso.3.6.1.6.3.15.2.1.1 iso.3.6.1.2.1.1.9.1.2.5 = OID: iso.3.6.1.6.3.16.2.1.1 iso.3.6.1.2.1.1.9.1.3.1 = STRING: "The MIB Module from SNMPv2 entities" ... Попробуем увидеть, есть ли в этом выводе подстрока с нашим числовым температурным OID "3.6.1.4.1.318.1.1.1.2.2.2.0". Единицу вначале не пишем, потому что в символьном представлении под ней подставляется "iso". Цифр "3.6.1.4.1.318.1.1.1.2.2.2.0" нам хватит чтобы однозначно идентифицировать параметр. Пытаемся найти в выводе всех параметров нужную строку (да, я знаю про точку в регвырах, но пусть поиск будет избыточный): $ snmpwalk -u apc -v 1 -c public IP_адрес_APC | grep 3.6.1.4.1.318.1.1.1.2.2.2.0 И ничего не находим. На реальной железке параметра с OID ".1.3.6.1.4.1.318.1.1.1.2.2.2.0" нет. Тогда пытаемся нащупать нужный параметр вручную. Смотрим в консоли браузера текущую температуру (цифры до точки), и грепаем вывод. Например, у нас в браузере устройство показывает 24,3 градусов. Ищем подстроку "24". $ snmpwalk -u apc -v 1 -c public IP_адрес_APC | grep 24 Потом идем в серверную, включаем или выключаем кондиционер (нам нужно чтобы температура изменилась хотя бы на 1 градус). Видим в web-консоли, что температура стала 23,5 градуса и ищем подстроку "23" $ snmpwalk -u apc -v 1 -c public IP_адрес_APC | grep 23 Проанализировав, что изменилось в выводе, можно понять, что искомый параметр следующий: iso.3.6.1.2.1.33.1.2.7.0 = INTEGER: 23 Попробуем его получить напрямую, через программу snmpget: $ snmpget -c public -v 1 IP_адрес_APC iso.3.6.1.2.1.33.1.2.7.0 iso.3.6.1.2.1.33.1.2.7.0 = INTEGER: 24 Параметр нормально вытягивается с APC. А теперь сделаем финт ушами. Попробуем таким же способом получить параметр apc.BatteryTemperature с OID ".1.3.6.1.4.1.318.1.1.1.2.2.2.0", который описан в XML-файле Zabbix, но не виден в MIB-дереве устройства: $ snmpget -c public -v 1 IP_адрес_APC .1.3.6.1.4.1.318.1.1.1.2.2.2.0 iso.3.6.1.4.1.318.1.1.1.2.2.2.0 = Gauge32: 24 Опаньки, да тут не все так просто. Параметр-то, оказывается, есть и поддерживается. Только устройство не показывает его OID в MIB-дереве, скрывая под другим OID. Зачем так делать - мне лично непонятно. А так же я не смог узнать, как получить с устройства десятые доли градуса. Но для мониторинга перегрева они не так важны. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|