Мониторинг систем видеонаблюдения с помощью zabbix

SNMP Versions and Administration

Both the original SNMPv1 and the later SNMPv2c use the clear-text «community string» as a de-facto password, to indicate whether a particular request should be authorised or not. The SNMPv1 equivalent of the first example would be almost identical:

 % snmpget -v 1 -c demopublic sysUpTime.0
 SNMPv2-MIB::sysUpTime.0 = Timeticks: (586731977) 67 days, 21:48:39.77

SNMPv3 uses a significantly different authentication mechanism,
typically based around usernames and passwords, and allows both
proper validation of SNMP requests, and even encryption of the traffic
between the management client and the SNMP agent.
See the SNMPv3 Options tutorial for details.

The default version used will depend on how the software was configured when
it was first compiled. Typically, the Net-SNMP suite will probably use SNMPv3
by default, but it is safest to always specify the version explicitly.

SNMP write

Since RouterOS v3, SNMP write is supported for some functions. SNMP write allows to change router configuration with SNMP requests. Consider to secure access to router or to router’s SNMP, when SNMP and write-access are enabled.

To change settings by SNMP requests, use the command below to allow SNMP write for the selected community,
Write-access option for SNMP is available from v3.14,

/snmp community set <number> write-access=yes

System Identity

It’s possible to change router system identity by SNMP set command,

snmpset -c public -v 1  s New_Identity
  • snmpset — SNMP application used for SNMP SET requests to set information on a network entity;
  • public — router’s community name;
  • — IP address of the router;
  • — SNMP value for router’s identity;

SNMPset command above is equal to the RouterOS command,

/system identity set identity=New_Identity


It’s possible to reboot the router with SNMP set commamd, you need to set value for reboot SNMP settings, which is not equal to 0,

snmpset -c public -v 1 s 1
  •, SNMP value for the router reboot;
  • s 1, snmpset command to set value, value should not be equal to 0;

Reboot snmpset command is equal to the RouterOS command,

/system reboot

Run Script

SNMP write allows to run scripts on the router from system script menu, when you need to set value for SNMP setting of the script,

snmpset -c public -v 1 s 1
  • X, script number, numeration starts from 1;
  • s 1, snmpset command to set value, value should not be equal to 0;

The same command on RouterOS,

/system script> print 
Flags: I - invalid 
 0   name="test" owner="admin" policy=ftp,reboot,read,write,policy,
test,winbox,password,sniff last-started=jan/01/1970
01:31:57 run-count=23 source=:beep 

/system script run 0

Runing scripts with GET

It is possible to run /system scripts via SNMP GET request of the script OID (since 6.37). For this to work SNMP community with write permission is required. OIDs for scripts can be retrieved via SNMPWALK command as the table is dynamic.

Add script:

/system script
add name=script1 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
   "/sy reboot "
add name=script2 owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\

Get the script OID table

$ snmpwalk -v2c -cpublic
iso. = STRING: "script1"
iso. = STRING: "script2"
iso. = INTEGER: 0
iso. = INTEGER: 0

To run script use table 18

$ snmpget -v2c -cpublic
iso. = STRING: "output"

Tutorial Sections

About the SNMP Protocol

These tutorial links talk about SNMP generically and how the protocol itself works. They are good introductory reading material and the concepts are important to understand before diving into the later tutorials about Net-SNMP itself.

  • How SNMP Works: About the protocol itself (GETs, GETNEXTs, etc)
  • What data is in SNMP: All about SNMP Management Information Bases (MIBs)
  • Securing SNMP: How to use the SNMP protocol securely

Net-SNMP Command Line Applications

These tutorial pages discuss the command line tools provided in the Net-SNMP suite of tools. Nearly all the example commands in these tutorials works if you try it yourself, as they’re all examples that talk to our online Net-SNMP test agent. Given them a shot!

  • snmptranslate: learning about the MIB tree.
  • snmpget: retrieving data from a host.
  • snmpgetnext: retrieving unknown indexed data.
  • snmpwalk: retrieving lots of data at once!
  • snmptable: displaying a table.
  • snmpset: peforming write operations.
  • snmpbulkget: communicates with a network entity using SNMP GETBULK request
  • snmpbulkwalk: retrieve a sub-tree of management values using SNMP GETBULK requests.
  • snmptrap: Sending and receiving traps, and acting upon them.
    • Traps/informs with SNMPv3/USM: Sending and receiving SNMPv3/USM TRAPs and INFORMs
    • Sending Traps/Informs via AgentX: Sending notifications from the command line through snmpd
  • Common command line options:
    • Using and loading MIBS
    • SNMPv3/USM Options
    • Using SNMPv3 over TLS and DTLS
    • Customized Output Formats
  • Writing mib2c config files

Application Configuration

All of our applications support configuration to allow you to customize how they behave.

Configuration files for Net-SNMP applications

Net-SNMP Daemons

Net-SNMP comes with two long-running daemons: a SNMP agent (snmpd) for responding to management requests and a notification receiver (snmptrapd) for receiving SNMP notifications.

  • SNMP Agent (snmpd) Configuration
    • Configuration Basics
    • Access Control (VACM)
    • snmpconf
  • SNMP Notification Receiver (snmptrapd)
    • Configuring snmptrapd
    • Configuring SNMPv3 notifications
    • Configuring snmptrapd to understand vendor-specific MIBS (Cisco)
  • Agent Monitoring
    • DisMan Monitoring
    • Monitoring with MRTG

Coding Tutorials

Net-SNMP comes with a highly flexible and extensible API. The API allows you to create your own commands, add extensions to the agent to support your own MIBs and perform specialized processing of notifications.

  • Client / Manager Coding Tutorials
    • Writing a simple application
    • Writing a simple asynchronous application
  • Agent Coding Tutorials
    • The Agent Architecture page might be worth reading before or after the agent coding tutorials, and describes how the Agent Helpers work under the hood.
    • Writing a mib module to serve information described by an SNMP MIB, and how to compile it into the net-snmp snmpd agent.
    • Writing a Dynamically Loadable Object that can be loaded into the SNMP agent.
    • Writing a Subagent that can be run to attach to the snmpd master agent.
    • Writing a perl plugin to extend the agent using the NetSNMP::agent module.
    • Writing shell scripts to extend the agent
    • Using mib2c to help write an agent code template for you
      • General mib2c Overview
      • Using the mib2c-update script to recode your code
  • Header files and autoconf

Debugging SNMP Applications and Agents

All our tools and applications have extensive debugging output. These tutorials talk about how the debugging system works and how you can add your own debugging statements to you code:

  • Debugging output printed using the -D command line option

    Putting DEBUGMSG tokens in your code

  • Using -Ddump to display packet breakdowns
  • Debugging using GDB

Что такое snmpwalk?

snmpwalk это имя, данное приложение SNMP, которое автоматически выполняет несколько запросов GETNEXT. Запрос SNMP GETNEXT используется для запроса устройства и получения данных SNMP с устройства. Команда snmpwalk используется потому, что она позволяет пользователю объединять запросы GETNEXT вместе, не вводя уникальные команды для каждого OID или узла в поддереве..

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

Шаг 3 — Настройка сервера агента SNMP

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

В этом обучающем руководстве вы будете использовать версию 3 протокола SNMP. В отличие от версии 1 и 2 протокола SNMP, в версии 3 каждое сообщение содержит параметры безопасности в зашифрованном виде. На этом шаге вы выполните настройку аутентификации и правил контроля доступа SNMPv3.

Для начала откройте на вашем сервере агента файл конфигурации демона с привилегиями sudo:

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

Сначала вам нужно изменить директиву . Согласно текущим настройкам, она разрешает только подключение из локального компьютера. Вам нужно будет закомментировать текущую строку и разкомментировать строку ниже, которая разрешает все подключения.


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

Далее вы выполните временную вставку строки . Эти директивы обычно не хранятся в этом файле; поэтому вы должны будете удалить их снова через какое-то время.

Созданный вами пользователь с именем bootstrap будет использоваться в качестве шаблона, с помощью которого вы создадите вашего первого реального пользователя. Пакет SNMP делает это в процессе клонирования свойств пользователя.

При определении нового пользователя необходимо указать тип аутентификации (MD5 или SHA), а также предоставить фразу-пароль, которая должна быть длиной не менее восьми символов. Если вы планируете использовать шифрование при передаче, как в данном руководстве, вы должны указать протокол конфиденциальности (DES или AES) и по желанию фразу-пароль протокола конфиденциальности. Если фраза-пароль протокола конфиденциальности не будет предоставлена, фраза-пароль аутентификации также будет использоваться для протокола конфиденциальности.

Добавьте строку в конце файла:


Теперь, когда у вас есть новый пользователь, вы можете установить уровень доступа для данного пользователя. В этом обучающем руководстве вы выполните настройку вашего пользователя bootstrap, а также нового пользователя с именем demo, которого вы создадите. Вы предоставите права на чтение и запись с помощью директивы (альтернативой является для предоставления исключительно права на чтение).

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

В рамках данного обучающего руководства обе строки будут выглядеть следующим образом:


Когда вы закончите внесение изменений, сохраните и закройте файл.

Для вступления этих изменений в силу, перезапустите службу на вашем сервере агента:

Демон SNMP будет прослушивать подключения к порту . Настройте UFW для разрешения подключений с сервера менеджера к этому порту:

Дополнительную информацию о UFW можно получить в статье Настройка брандмауэра с UFW в Ubuntu 18.04.

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

Пакет net-snmp

Установка snmp консоли


server# apt install snmp snmp-mibs-downloader

server# :> /etc/snmp/snmp.conf

Настройка snmp агента


gate# apt install snmpd

gate# cat /etc/default/snmpd
#export MIBS=
gate# cd /etc/snmp/


gate# pkg install net-snmp

gate# service snmpd rcvar

gate# mkdir /usr/local/etc/snmp/

gate# cd /usr/local/etc/snmp/
gate# cat snmpd.conf
rocommunity public

Настройка snmptrapd сервиса


server# apt install snmptrapd

server# systemctl enable snmptrapd


server# cat /etc/snmp/snmptrapd.conf
#traphandle default mail -s snmptrap userX@isp.un

traphandle default /usr/bin/traptoemail -s mail.isp.un userX@isp.un

traphandle default cat >> /tmp/traps

authCommunity execute writetrap


# service snmptrapd start

# snmptrap -v 1 -c writetrap '.' '' 6 33 '55' . s "teststring000"

# tail -f /tmp/traps

!!! На стенде при первой итерации большие задержки

Варианты использования snmp консоли в режиме чтения

Определение имени устройства

server# snmpget -c public -v2c router .

server# snmpget -c public -v2c router SNMPv2-MIB::sysName.0

server# snmpget -c public -v2c router sysName.0

server# snmpwalk -c public -v2c router sysName

Вывод количества байт, прошедших через порт устройства с момента его включения

server# snmpget -c public -v2c router ifInOctets.2
server# snmpget -c public -v2c router ifHCInOctets.2

server# snmpget -c public -v2c router ifOutOctets.2
server# snmpget -c public -v2c router ifHCOutOctets.2

Информация по протоколу CDP

server# snmpwalk -c public -v2c router .

Варианты использования протокола SNMP в режиме записи

Отключение/включение интерфейсов

server# snmpwalk -c write -v2c switch ifDescr

server# snmpwalk -c write -v2c switch ifOperStatus

server# snmpwalk -c write -v2c switch ifAdminStatus

server# snmpset -c write -v2c switch ifAdminStatus.3 integer 2

server# snmpset -c write -v2c switch ifAdminStatus.3 integer 1

Копирование файла конфигурации по tftp

server# cat /srv/tftp/firewall.acl

server# snmpset -c write -v2c router . string "firewall.acl"

значение 192.168.X.10 в конце OID содержит адрес tftp сервера

Реализация операций

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

int iCurrentValue = 0;
        case MODE_GET:
            snmp_set_var_typed_value( requests->requestvb, ASN_INTEGER,
                                      &iCurrentValue , sizeof( iCurrentValue )

К шаблону добавляется адрес возвращаемого значения и длина этого значения (но в строгом
соответствии с тем типом данных, который предписан для этого OID).

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

Отдельных комментариев заслуживает, шаг на котором значения, заданные в команде
извлекаются в коде операции модификации значения
(). Заданные в команде
параметры (тип и значение для OID) поступают в
обработчик в составе последнего параметра типа
в виде списка значений — один вызов может указывать
сразу на несколько последовательных операций. Значения должны извлекаться поочерёдно из всех
элементов этого списка. Но в представленном примере значение переменной для простоты выбирается из
первого элемента списка:

        case MODE_SET_ACTION:
            { netsnmp_variable_list *var = requests->requestvb;
              netsnmp_vardata val = var->val;
              iNextStep = *val.integer;
              iCurrentValue += iNextStep;

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

Остаётся только написать код главной функции для
приложения субагента, но для большинства проектов он будет одинаковым, и его прототип также можно
найти на сайте проекта net-snmp или на
. Этот код нужно
поместить в произвольный файл, например, subagent.c.

Zabbix — Мониторинг коммутатора через SNMP

Хотите узнать, как настроить Zabbix для мониторинга коммутатора с использованием SNMP? В этом руководстве мы покажем вам, как контролировать сетевой коммутатор через SNMP-сервер Zabbix.

• Zabbix версия: 4.4.0

Прежде чем мы начнем, вам нужно настроить SNMP на вашем сетевом коммутаторе.

Вот несколько примеров конфигурации SNMP:

• Конфигурация SNMP на коммутаторе HP
• Конфигурация SNMP на коммутаторе Cisco

Список оборудования:

В следующем разделе представлен список оборудования, использованного для создания этого учебника Zabbix.

Каждое оборудование, перечисленное выше, можно найти на сайте Amazon.

Zabbix Playlist:

На этой странице мы предлагаем быстрый доступ к списку видео, связанных с установкой Zabbix.


Не забудьте подписаться на наш канал на YouTube FKIT.

На этой странице мы предлагаем быстрый доступ к списку учебных пособий, связанных с установкой Zabbix.

Учебное пособие — Zabbix Monitor Switch через SNMP

Получите доступ к панели инструментов Zabbix-сервера и добавьте сетевой коммутатор в качестве хоста.

Откройте браузер и введите IP-адрес вашего веб-сервера плюс / zabbix.

В нашем примере в браузере был введен следующий URL:


На экране входа в систему используйте имя пользователя по умолчанию и пароль по умолчанию.

• Имя пользователя по умолчанию: Admin
• Пароль по умолчанию: zabbix

После успешного входа вы будете отправлены на Zabbix Dashboard.

На экране панели инструментов откройте меню «Конфигурация» и выберите опцию «Хост».

В правом верхнем углу экрана нажмите кнопку «Создать хост».

На экране конфигурации хоста вам нужно будет ввести следующую информацию:

• Имя хоста — введите имя хоста для идентификации коммутатора.
• Видимое имя хоста — повторите имя хоста.
• Новая группа — введите имя для идентификации группы похожих устройств.
• Интерфейс агента — нажмите на кнопку Удалить.
• Интерфейс SNMP — нажмите кнопку «Добавить» и введите IP-адрес сетевого коммутатора.

Вот оригинальное изображение, перед нашей конфигурацией.

Вот новое изображение с нашей конфигурацией.

Далее нам нужно настроить сообщество SNMP, которое Zabbix будет использовать для подключения к сетевому коммутатору.

Откройте вкладку «Макросы» в верхней части экрана.

Создайте макрос с именем: {$ SNMP_COMMUNITY}

Значение макроса {$ SNMP_COMMUNITY} должно быть сообществом сетевого коммутатора SNMP.

В нашем примере значением {$ SNMP_COMMUNITY} является GokuBlack

Далее нам нужно связать хост с определенным шаблоном сетевого монитора.

По умолчанию Zabbix поставляется с большим разнообразием шаблонов мониторинга.

Откройте вкладку «Шаблоны» в верхней части экрана.

Найдите и выберите шаблон с именем: Шаблон Net Network Generic Device SNMPv2

Нажмите на кнопку Добавить.

Через несколько минут вы сможете увидеть первоначальный результат на Zabbix Dashboard.

Окончательный результат займет не менее часа.

По умолчанию Zabbix будет ждать 1 час, чтобы определить количество интерфейсов, доступных на коммутаторе.

По умолчанию Zabbix будет ждать 1 час, прежде чем собирать информацию из интерфейсов сетевого коммутатора.

Поздравляем! Вы настроили Zabbix сервер для мониторинга сетевого коммутатора.


Компоненты системы

Сервис состоит из двух компонентов: сервера и агента. Агент собирает snmp-данные об интерфейсах и отправляет их на сервер. Сервер обрабатывает (сортирует, обновляет rrd-файлы и прочая) полученные данные и отображает через web-интерфейс.

Как работает сервер

Сервер — это docker-контейнер со «стандартным» набором софта: nginx/php-fpm/memcached/mysql/rrdtool. Сервер ожидает, что агенты будут присылать данные каждые 5 минут. Данные сохраняются в базе – по нагрузке интерфейсов и ошибкам ведётся недельная history, по которой рассчитываются 95-й перцентиль и топ по max/avg. Сделано это для того, что «видеть» сеть в разных «разрезах» – без редких всплесков или наоборот, когда нужно посмотреть только всплески.

Данные контейнера хранятся на хостовой системе для удобства обновления, бекапа и переноса сервера на другие хосты. Обновиться можно буквально одной командой (идея взята у докера, см.

Как работает агент

Агент – это тоже docker-контейнер, в котором по крону раз в 5 минут запускается агент, собирающий snmp-данные об интерфейсах с сетевых устройств или серверов. Пока что интервал обновления (опроса) устройств изменить нельзя.

Клиент поддерживает две версии SNMP – v2 и v3.

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


Данная статья посвящена протоколу SNMP (Simple Network Management Protocol) — одному из
протоколов модели OSI, который практически не был затронут в документации просторов RU-нета.
Автор попытался заполнить этот вакуум, предоставив читателю почву для размышлений и
самосовершенствования, касательно этого, возможно нового для Вас, вопроса.
Этот документ не претендует на звание «документации для разработчика», а просто отражает
желание автора, насколько это возможно, осветить аспекты работы с данным протоколом,
показать его слабые места, уязвимости в системе «security», цели преследованные создателями
и объяснить его предназначение.


snmpwalk is an SNMP application that uses SNMP GETNEXT requests to query a network entity for a tree of information.

An object identifier (OID) may be given on the command line. This OID specifies which portion of the object identifier space will be searched using GETNEXT
requests. All variables in the subtree below the given OID are queried and their values presented to the user. Each variable name is given in the format
specified in variables(5).

If no OID argument is present, snmpwalk will search the subtree rooted at SNMPv2-SMI::mib-2 (including any MIB object values from other MIB modules,
that are defined as lying within this subtree). If the network entity has an error processing the request packet, an error packet will be returned and a
message will be shown, helping to pinpoint why the request was malformed.

If the tree search causes attempts to search beyond the end of the MIB, the message «End of MIB» will be displayed.

Basic Example

There are three main elements to such a request —
where to retrieve this information from,
the administrive information associated with the request,
and what information is actually required:

 % snmpget -v 2c -c demopublic SNMPv2-MIB::sysUpTime.0
 SNMPv2-MIB::sysUpTime.0 = Timeticks: (586731977) 67 days, 21:48:39.77

In this example, is the host name of the agent to query, using version 2 of the SNMP protocol, and the community string «demopublic». The OID being requested is sysUpTime.0 from the MIB module SNMPv2-MIB.

The same basic command can also be used to retrieve a single element from within a table:

 % snmpget -v 2c -c demopublic SNMPv2-MIB::sysORDescr.1
 SNMPv2-MIB::sysORDescr.1 = STRING: The Mib module for SNMPv2 entities

The snmptranslate tutorial described several ways to specify
an OID, and most of that discussion applies here too (as well as most of the other
Net-SNMP command-line tools). The one significant difference is that snmpget
(and most of the other tools) will apply «random-lookup» by default, so it is not
strictly necessary to specify the name of the MIB. The two commands above could
equally well be given as:

 % snmpget -v 2c -c demopublic sysUpTime.0
 SNMPv2-MIB::sysUpTime.0 = Timeticks: (586731977) 67 days, 21:48:39.77
 % snmpget -v 2c -c demopublic sysORDescr.1
 SNMPv2-MIB::sysORDescr.1 = STRING: The Mib module for SNMPv2 entities

and this form will be used throughout the rest of these tutorials.

Similarly, the options discussed in the
Customized Output Formats tutorial
can be used to control how the results should be displayed.

Walking an empty tree

If the agent does not implement any MIB objects underneath the specified
OID, then the snmpwalk command may return without displaying anything
at all, or it may display a vaguely informative message, depending on
the SNMP version being used:

 % snmpwalk -v 1 -c demopublic ifXTable
 (nothing displayed)
 % snmpwalk -v 2c -c demopublic ifXTable
 IF-MIB::ifXTable = No Such Object available on this agent at this OID

Alternatively, if the requested tree is later than the last MIB instance
that the agent implements, a slightly different message will be displayed:

 % snmpwalk -v 1 -c demopublic .2.0
 End of MIB
 % snmpwalk -v 2c -c demopublic .2.0
 joint-iso-ccitt.0 = No more variables left in this MIB View (It is past the end of the MIB tree)

But in each case, the meaning is the same — the agent had nothing relevant
to display.

Exactly the same behaviour holds if the agent does implement MIB objects within
the requested subtree, but the access control settings are configured to deny
access to them. That is effectively the same as not implementing these objects
at all. (At least for the given administrative information settings)

Оцените статью
Рейтинг автора
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
Добавить комментарий