Site icon 8HOST.COM

Управление и мониторинг сервера с помощью инструментов Net-SNMP

Сбор точной информации о серверах и инфраструктуре – очень важный аспект системного администрирования. Существует множество инструментов для сбора и обработки таких данных, и многие их них основаны на технологии SNMP.

SNMP (Simple Network Management Protocol) – это средство, с помощью которого серверы могут обмениваться информацией о своем текущем состоянии, а также канал, по которому администратор может управлять параметрами сервера. Сам протокол SNMP очень простой, однако структура программ, реализующих SNMP, может быть очень сложной.

Читайте также:

Данное руководство научит вас работать с набором инструментов net-snmp.

Примечание: Подразумевается, что вы выполнили руководство Установка и настройка демона и клиента SNMP в Ubuntu 14.04.

Клиентские команды SNMP

Набор инструментов net-snmp содержит довольно много утилит, которые помогают выполнять запросы или настраивать значения OID на удаленных хостах. Большинство инструментов используют общий синтаксис и имеют схожие шаблоны использования. Рассмотрим основы некоторых наиболее популярных инструментов.

Примечание: Руководство подразумевает, что вы знакомы с командами аутентификации net-snmp. Все данные аутентификации в приведённых ниже командах обозначены как authentication_info.

В предыдущем руководстве вы создали файл snmp.conf с настройками клиента. Теперь его можно удалить: в этом руководстве вы научитесь добавлять данные аутентификации в конфигурационный файл.

Если у вас нет конфигурационного файла snmp.conf, замените authentication_info в каждой команде информацией для подключения к удалённому демону. Аккаунт demo использует следующие данные:

-u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password

Примечание: Если вы используете другой аккаунт, не забудьте откорректировать учётные данные.

Извлечение значения OID с помощью SnmpGet

Это, пожалуй, самая простая команда для извлечения информации с помощью SNMP. При помощи базовых флагов аутентификации команда snmpget может прочитать любое значение OID, к которому пользователь имеет доступ.

В базовом синтаксисе нужно указать известный числовой OID. К примеру, чтобы извлечь описание системы, нужно ввести:

snmpget authentication_info host 1.3.6.1.2.1.1.1.0

Поскольку в предыдущем руководстве на менеджер был установлен пакет snmp-mibs-downloader, вы также можете сослаться на OID по имени. К примеру, ту же информацию можно получить с помощью:

snmpget authentication_info host sysDescr.0

Извлечение следующего доступного OID с помощью SnmpGetNext

Эта команда извлекает значение OID, идущего после запрашиваемого OID. Иерархия MIB позволяет извлекать значения последовательно. Используя это свойство, вы можете получить значение (и метку OID) следующего объекта с помощью любого объекта в дереве.

Ранее вы получили описание системы. Теперь попробуйте узнать следующий OID и его значение. Для этого нужно использовать:

snmpgetnext authentication_info host sysDescr.0
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10

Эта команда вернёт ObjectID системы, который является следующим объектом в дереве. Эту команду можно обновлять, указывая полученный OID, и таким образом получать доступ к следующему объекту.

snmpgetnext authentication_info host sysObjectID.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (114216) 0:19:02.16

Извлечение раздела иерархии MIB с помощью SnmpWalk

С помощью команды snmpwalk можно получить доступ ко всем OID, которые подчиняются заданному OID. Эта команда выведет целое дерево, которое принадлежит указанной точке.

К примеру, чтобы получить все значения в точке system, нужно ввести:

snmpwalk authentication_info host system
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (126926) 0:21:09.26
SNMPv2-MIB::sysContact.0 = STRING: admin@example.com
SNMPv2-MIB::sysName.0 = STRING: target
SNMPv2-MIB::sysLocation.0 = STRING: Sitting on the Dock of the Bay
SNMPv2-MIB::sysServices.0 = INTEGER: 72
. . .

Эта команда автоматически отправляет хосту запросы SNMP GetNext, пока не построит все дерево под запрашиваемым значением.

Чтобы вывести всё дерево MIB, выполните команду:

snmpwalk authentication_info host .

Она выведет всё доступное текущему пользователю дерево.

Эта команда в сочетании с grep позволяет искать OID по имени. Предположим, вы знаете, что OID с именем sysUpTime.0 выдает время работы SNMP на удалённых хостах, но вы также хотите узнать, как давно работает сам сервер.

Команда snmpwalk может вывести всю иерархию объектов OID, а затем grep отфильтрует их по слову «uptime» в имени. Флаг –i отключает чувствительность к регистру.

snmpwalk authentication_info host . | grep -i uptime
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (113856) 0:18:58.56
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.10 = Timeticks: (0) 0:00:00.00
HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (9741455) 1 day, 3:03:34.55
NOTIFICATION-LOG-MIB::nlmLogVariableID."default".1.1 = OID: DISMAN-EVENT-MIB::sysUpTimeInstance
NET-SNMP-AGENT-MIB::nsModuleName."".8.1.3.6.1.2.1.1.3.127 = STRING: mibII/sysUpTime

Проверив несколько из полученных значений вы обнаружите, что OID с именем hrSystemUptime.0 содержит нужное значение. Теперь вы можете использовать этот OID, чтобы узнать, как давно работает машина.

snmpget authentication_info host hrSystemUptime.0
HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (9795352) 1 day, 3:12:33.52

Преобразование числовых OID в буквенные с помощью snmptranslate

Утилита snmptranslate – одна из самых полезных в наборе. Она никак не взаимодействует с удалённым хостом, она просто помогает получить необходимые сведения об иерархии MIB.

Утилита snmptranslate позволяет преобразовать числовые объекты в буквенные, и так получить их текстуальную репрезентацию.

snmptranslate 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0

Команда выдаёт модуль MIB, который определяет буквенное имя и имя самого OID.

Также эта утилита выполняет преобразование в обратном направлении. Возьмём, к примеру, MIB hrSystemUptime.0, который сообщает время работы системы. Попробуйте узнать, какое место этот объект занимает в дереве. Чтобы получить числовой адрес, нужно использовать флаг –On.

Укажите требуемый модуль MIB, чтобы получить информацию об OID:

snmptranslate -On HOST-RESOURCES-MIB::hrSystemUptime.0
.1.3.6.1.2.1.25.1.1.0

Этот инструмент может предоставить множество другой информации о любой точке. К примеру, флаг –Td позволяет получить полное описание и путь.

snmptranslate -Tp 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0
sysDescr OBJECT-TYPE
-- FROM   SNMPv2-MIB
-- TEXTUAL CONVENTION DisplayString
SYNTAX    OCTET STRING (0..255)
DISPLAY-HINT  "255a"
MAX-ACCESS    read-only
STATUS    current
DESCRIPTION   "A textual description of the entity.  This value should
include the full name and version identification of
the system's hardware type, software operating-system,
and networking software."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysDescr(1) 0 }

Параметр -O_ позволяет изменить отображение вывода (где _ – формат вывода). Полный список флагов можно найти на странице OUTPUT OPTIONS мануала snmpcmd. Наиболее распространённые флаги для форматирования вывода:

Флаг Описание Пример
-Oa Отображает строки ASCII SNMPv2-MIB::sysDescr.0
-Of Показывает полный текстовый путь к OID .iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0
-On Показывает полный числовой путь к OID .1.3.6.1.2.1.1.1.0
-Os Отображает конечное текстовое представление OID sysDescr.0

Эти опции применимы и к некоторым другим инструментам набора.

Извлечение табличных данных с помощью SnmpTable

SNMP хранит и табличные данные. Команда snmpwalk может отобразить любые необходимые данные, однако она не всегда сохраняет форматирование.

К примеру, так snmpwalk покажет OID udpTable:

snmpwalk authentication_info host udpTable
UDP-MIB::udpLocalAddress.0.0.0.0.161 = IpAddress: 0.0.0.0
UDP-MIB::udpLocalAddress.0.0.0.0.35679 = IpAddress: 0.0.0.0
UDP-MIB::udpLocalPort.0.0.0.0.161 = INTEGER: 161
UDP-MIB::udpLocalPort.0.0.0.0.35679 = INTEGER: 35679

Теперь попробуйте отправить такой же запрос с помощью snmptable:

snmptable authentication_info host udpTable

Вы получите таблицу:

udpLocalAddress udpLocalPort
0.0.0.0          161
0.0.0.0        35679

С такими данными гораздо удобнее работать.

Изменение значений с помощью SnmpSet

Эта команда используется для записи значения в OID. Все предыдущие команды предназначены для получения информации, а эта команда используется для изменения данных на хосте.

Синтаксис команды snmpset почти такой же, как у других команд, однако этой команде необходима дополнительная информация, чтобы установить значение.

Базовый синтаксис:

snmpset authentication_info host OID_to_modify data_type new_value

Синтаксис довольно прост и понятен, но типы данных требуют более подробного объяснения. Каждый тип представлен одним символом. Доступны следующие типы данных:

Пакет snmp-mibs-downloader позволяет вставлять символ = вместо идентификатора типа.

Чтобы протестировать эту команду, закомментируйте одно значение в файле snmpd.conf на агенте. Жёсткое кодирование значений в файле делает их менее гибкими и не позволяет изменять их методами SNMP.

Откройте на агенте файл /etc/snmp/snmpd.conf:

sudo nano /etc/snmp/snmpd.conf

Закомментируйте директиву sysLocation:

#sysLocation  Sitting on the Dock of the Bay

Сохраните и закройте файл. Перезапустите сервис.

sudo service snmpd restart

Перейдите на менеджер и установите Earth в качестве значения OID sysLocation. Параметр s задаёт тип данных (строки).

snmpset authentication_info host sysLocation.0 s "Earth"
SNMPv2-MIB::sysLocation.0 = STRING: Earth

Теперь проверьте, сможет ли спецификатор типа = правильно установить тип значения.

snmpset authentication_info host sysLocation.0 = "New York City"
SNMPv2-MIB::sysLocation.0 = STRING: New York City

Как видите, спецификатор = работает правильно.

Отправка запросов с помощью SnmpBulkGet и SnmpBulkWalk

При повторном запуске команд snmpget и snmpwalk можно создать большое количество сетевого трафика.

Команды snmpbulkget и snmpbulkwalk устраняют эту проблему; они собирают все возвращаемые значения в одну транзакцию вместо того, чтобы отправлять каждое значение OID в отдельной транзакции.

Передайте команде snmpbulkget один или несколько OID или веток, и вы получите пакет значений дополнительных OID.

snmpbulkget authentication_info host system
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (429891) 1:11:38.91
SNMPv2-MIB::sysContact.0 = STRING: call now
SNMPv2-MIB::sysName.0 = STRING: target
SNMPv2-MIB::sysLocation.0 = STRING: New York City
SNMPv2-MIB::sysServices.0 = INTEGER: 72
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance

Команда snmpbulkget работает так же, как snmpgetnext. По сути, команда snmpbulkget – это команда snmpwalk, которая возвращает результат в одном пакете.

Команда snmpbulkwalk работает аналогичным образом, но продолжит выполнять BulkGet, пока не извлечёт все поддерево.

Заключение

Набор утилит net-snmp – надёжное и гибкое средство для извлечения и управления данных. С помощью этих утилит вы можете создать сложную среду для мониторинга и управления серверами.