Итак, как создать шаблон для SNMP-устройств? Zabbix часто используется для мониторинга именно SNMP-устройств от самых простых — принтеров или камер, до  IP-телефонии, свичей, firewall, брандмауэров и практически любого серверного оборудования. При желании даже рабочие станции могут передавать все метрики используя SNMP.

Содержание

I. Мониторинг SNMP-устройств в Zabbix (0:31)
II. Создание пользовательских SNMP-шаблонов (3:32)

Мониторинг SNMP-устройств в Zabbix

Что может предложить Zabbix для мониторинга ваших SNMP-устройств? Вариантов довольно много уже после установки, ведь Zabbix предлагает большое количество шаблонов «из коробки» для устройств разного типа и от разных производителей, таких как Cisco, Mikrotik, Brocade или Arista и в среднем любых устройств с поддержкой SNMP.

Но если шаблон «из коробки» или шаблон от сообщества не подходит, можно и самостоятельно создать шаблон для сбора метрик, необходимых вам или вашей компании.  Элементы данных можно создать, уточнив в документации производителя, как именно мониторить выбранное устройство и какие метрики отслеживать. Кроме того, можно проверить, доступны ли все необходимые метрики просто выполнив запрос snmpwalk, который вернет древо данных, доступных по SNMP. Исходя из возможностей Zabbix и snmpwalk, результаты запросов можно использовать в низкоуровневом обнаружении для работы с различными ответлениями MIB и отдельно, того что есть в каждом из этих ответвлений.

Мониторинг SNMP-агентов в Zabbix

Создание пользовательских SNMP-шаблонов

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

Кроме того, в документации описывается не только, какие данные возвращаются, например, аптайм или количество пакетов, которое прошло через порт, но и величины, в которых возвращаются метрики, например миллисекунды, байты, килобайты и т. д. Это позволяет настроить шаблон и хранить значения в получаемом виде или сразу конвертировать в необходимые единицы, например, с помощью предварительной обработки.

Создание пользовательских SNMP-шаблонов

Необходимые MIB-файлы предоставляются производителем (в том числе относящиеся только к его устройствам). Чаще всего предоставляется файл, напрямую относящийся к модели или к типу устройства, который содержит OID производителя. При этом OID четко разделяются по определенным группам производителей.

SNMP-шаблоны «из коробки» можно совмещать с MIB-файлами общего назначения

Отсутствующий OID можно запросить у производителя, либо найти нужное значение самостоятельно и прикрепить его к SNMP-шаблону «из коробки» для интересующего вас типа или модели устройства. В таком случае до начала мониторинга Zabbix самостоятельно проверяет, доступны ли такие значения на конкретном устройстве.

При использовании готового шаблона доступны и встроенные триггеры и оповещения.

Создание среды для тестирования шаблонов

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

Такую симуляцию рекомендуется выполнить заранее, чтобы избежать всплеска запросов на устройство, особенно если необходимо конвертировать MIB-файлы в элементы данных в Zabbix. Учитывая размер библиотеки, количество запросов на устройство может оказаться огромным, что приведет к перегрузке или задержке ответа, несмотря на то, что Zabbix позволяет распределять запросы максимально эффективно.

Чтобы провести такую симуляцию, можно использовать эффективный и легко настраиваемый SNMP-симулятор — snmpsim.

github.com/etingof/snmpsim

Симулятор поддерживает все три версии SNMP-протокола и обеспечивает все связанные с ними возможности, например, bulk requests — механизм сбора множества значений за один запрос или шифрованные соединения (в случае SNMPv3).

snmpsim работает с IPv4, и IPv6, а также уникальном для каждого устройства EngineID. Кроме того, snmpsim может слать трапы, если необходимо протестировать и отправку трапов, а не только сбор данных с устройства.

Подготовка правильных инструментов для  симуляции SNMP-устройства

Итак, что понадобится для симуляции SNMP-устройства и сбора данных? Для начала необходимо убедиться, что все инструменты подобраны правильно, а после создать эмуляцию например, на  виртуальной машине. В рассматриваемом примере вам понадобится:

  • CentOS 8 — самая актуальная операционная система на данный момент;
  • Zabbix 5.2 (хотя Zabbix 5.0 также справится с этой задачей);
  • документация Zabbix (SNMP-обнаружение), даже если вы уже давно пользуетесь Zabbix, но вам редко приходится настраивать шаблоны;
  • установленный SNMPSIM — симулятор SNMP-устройств, чтобы обеспечить возможность добавить узел в Zabbix, настроить опрос и наладить работу и проверить нужные OID;
  • результат команды snmpwalk с устройства, которое мы планируем мониторить, или заранее предоставленные MIB-файлы;

Выполнить snmpwalk

Выполнение команды snmpwalk обязательно.

snmpwalk

Необходимо указать используемую версию протокола SNMP (SNMPv2 остается самой популярной, хотя пользователи активно переходят на более надежную и безопасную SNMPv3. При этом snmpsim поддерживает обе версии).

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

Установка SNMPSIM

После сохранения результатов snmpwalk в отдельный файл:

  • Устанавливаем актуальную версию Python.
# yum install python3

или

# dnf install python3
  • Устанавливаем SNMP-симулятор с помощью pip (package installer for Python). В данном случае Python 3 мы используем pip3 (возможно использование и других версий, хотя это не рекомендуется).
pip3 install snmpsim

ПРИМЕЧАНИЕ. Необходимо создать отдельного пользователя, поскольку snmpsim не запускается под повышенными правами пользователя.

  • Создаем новую группу и пользователей для запуска SNMPSIM.
groupadd snmpd
useradd -g snmpd snmpd

ПРИМЕЧАНИЕ. Демонизация по умолчанию не поддерживается. Это означает, что, если запускаете snmpsim под определенным пользователем, snmpsim будет работать только пока вы авторизованы. Для выполнения других запросов можно авторизоваться под другим пользователем или продублировать сессию.

  • Создаем директорию для хранения вывода snmpwalk/MIB-файлов.
mkdir -p /usr/share/snmpsim/data
  • После сохранения файлов в созданную папку, запускаем snmpsim, указав IP/Port для прослушивания (можно использовать localhost, стандартный порт 127.0.0.1 или любой свободный порт).
snmpsimd.py --agent-udpv4-endpoint=192.168.1.126:1024
  • Файл snmpwalk становится именем сообщества (community name).
Configuring /usr/share/snmpsim/data/192.168.1.126.raw.snmpwalk controller
SNMPv1/2c community name: 192.168.1.126.raw
SNMPv3 Context Name: 6bdad8c3906f65190f7c5f4674434a6c or 192.168.1.126.raw

При чтении файлов snmpsim генерирует доступы, которые используются для подключения к файлу, т. е. будет работать по такому же принципу, что и любое другое SNMP-устройство. snmpsim находит нужный файл и показывает сгенерированное имя сообщества (community name), соответствующее названию файла (.snmpwalk означает, что файл предназначен для snmpsim). SNMpv3 сгенерирует еще и контекстное имя.

Имя сообщества — имя файла, к которому обращается snmpsim

  • Тестируем возможность выполнения snmpwalk до симулируемого устройства.

Тестирование snmpwalk

ПРИМЕЧАНИЕ. Необходимо указать правильное имя сообщества, IP-адрес и порт, которые должны быть доступны для тестов.

ПРИМЕЧАНИЕ. Поскольку можно использовать localhost, выбор довольно большой: можно использовать 127.0.0.2, 127.0.0.3, 127.0.0.4 и т. д. 

  • Если запрос из командной строки выполняется и данные возвращаются, создаем узел в Zabbix.

Создание узла в Zabbix

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

Добавление узла не свидетельствует о доступности SNMP-интерфейса (он остается серым, и данные мы не видим), поэтому необходимо убедиться, что данные могут быть получены.

  • Создаем элемент данных на SNMP-устройстве. При этом в созданном для симуляции файле должен быть не менее, чем один OID.

Чтобы получить числовой OID из результата SNMPWalk текстовом формате используем snmptranslate.

Текстовый вывод:

IF-MIB: :ifHCInOctets.103007 = Counter64: 7566464822
IF-MIB: :ifHCInOctets.103008 = Counter64: 48097542881
IF-MIB: :ifHCInOctets.103009 = Counter64: 75748849150
IF-MIB: :ifHCInOctets.103010 = Counter64: 25963616931

snmptranslate:

[root@localhost ~]# snmptranslate -On -IR ifHCInOctets
.1.3.6.1.2.1.31.1.1.1.6

где:

-O = output,
n = не переводить.

Результатом snmptranslate является OID, к которому необходимо добавить индекс соответствующего порта:

После того, как OID прописан в Zabbix, мы можем начинать мониторинг значения.

  • Используем правила низкоуровневого обнаружения, чтобы не создавать элемент данных для каждого порта вручную. В настройках правила обнаружения в качестве SNMP OID указываем, что мы будем обнаруживать все индексы под 1.3.6.1.2.1.2.2.1.2 {#IFDESCR} в данной данной ветке — все, что было бы получено, если бы была выполнена команда snmpwalk с указанным OID.

Создание правила низкоуровневого обнаружения

Кроме того, обнаруживаются все описания под указанными индексами.

  • Создаем прототип элемента данных для входящего трафика.

Указываем ключи и {#IFDESCR}, чтобы сделать ключи уникальными.

ПРИМЕЧАНИЕ. Ключи должны быть уникальными в пределах одного шаблона или узла. В противном случае обнаружение будет выдавать ошибку, что ключи дублируются.

В имя также стоит добавить макрос низкоуровневого обнаружения {#IFDESCR}, чтобы было понятно, на какой порт идет входящий трафик.

  • Обнаруженные индексы (#SNMPINDEX) добавляются в конце каждого OID (ifHCInOctets), обнаруженного в результате выполнения snmpwalk, что обеспечивает уникальность значений.

Ошибки

Ошибка ‘No such instance currently exists’

Ошибка ‘No such instance currently exists’

Появление ошибки ‘No such instance currently exists‘ при выполнении симуляции означает, что индексов IfDesr гораздо больше, чем результатов по реальному входящему трафику ifHCInOctets, т. е. описание порта не соотносится с существующим или используемым портом.

Эту ошибку можно решить, отфильтровав лишние индексы по IfDesr на уровне правила низкоуровневого обнаружения:

Если необходимы более точные и более гибкие фильтры, можно обнаружить дополнительные OID (IFTYPE), чтобы обнаруживать только правильные типы портов.

Фильтр сущностей LLD

Ошибка ‘No value received for macro’

Появление ошибки ‘No value received for macro‘ при попытке обнаружить множество значений — {#IFNAME}, {#IFTYPE}, {#IFDESCRI} означает, что невозможно применить фильтр, потому что значения для макроса на обнаружены.

Ошибка ‘No value received for macro’

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

В данном случае отсутствует индекс 3 для {#IFTYPE} и {#IFDESCR}, хотя продолжаются попытки отфильтровать {#IFTYPE} и {#IFDESCR}. Поэтому необходимо отфильтровать, например, {#IFNAME}.

Модульные шаблоны и правила обнаружения

Можно использовать модульные шаблоны и правила обнаружения, например, создавать отдельные правила обнаружения для отдельных типов интерфейса. Это позволит определять, нужны ли попытки обнаружить какой-то интерфейс на устройстве, а также отсоединять или присоединять шаблоны для определенных сущностей в одном родительском шаблоне. Это обеспечивает большую гибкость, например, если какие-либо сущности отсутствуют, а также позволяет создавать разные типы шаблонов из нескольких маленьких шаблонов для разного типа устройств.

Модульные шаблоны и правила обнаружения

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

 

 

Подписаться
Уведомить о
1 Comment
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Rudolf Babayan
Rudolf Babayan
1 год назад

как в заббиксе добавить мониторинг температури через snmp UPS-а?? помогите с етим

1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x