MyTetra Share
Делитесь знаниями!
Как работать с протоколом 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 по-умолчанию используются следующие параметры входа:


  • Логин: apc
  • Пароль: 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


где:


  • -M ./ - значит искать MIB-файл в текущей директории. Команду надо выполнять в директории где лежит MIB-файл.
  • -m PowerNet-MIB - значит просмотр нашего модуля. Если имя модуля не указать, вообще ничего просматриваться не будет.


В ответ выдастся:


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. Зачем так делать - мне лично непонятно.


А так же я не смог узнать, как получить с устройства десятые доли градуса. Но для мониторинга перегрева они не так важны.



Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования