Snmp trap zabbix настройка

Результат работы скрипта

Сообщение в почте.

Ссылки

  • Документация snmptt: http://snmptt.sourceforge.net
  • Документация snmptrapd: http://net-snmp.sourceforge.net/docs/man/snmptrapd.html
  • mibDepot (A Free SNMP MIB Search Engine for SNMP MIBs): http://www.mibdepot.com

The following two tabs change content below.

В профессиональной сфере занимаюсь всем, что связанно с IT. Основная специализация — VoIP и сети передачи данных. Стараюсь не заниматься Windows серверами (но иногда приходится) и 1С.

Latest posts by Андрей Торженов

  • libflashplayer.so пропатченный от Time bomb — 11/02/2021
  • WordPress. Внезапная ошибка «Не удалось создать директорию.» — 07/01/2021
  • Таблица распределения Wi-Fi частот 2.4, 5 и 6 ГГц (802.11ax, Wi-Fi 6E) — 28/04/2020
  • Fail2ban и Nextcloud. Защита от подбора пароля с помощью — 14/04/2020
  • Ошибки после обновления до OTRS 6.0.27 — 02/04/2020

Установка и запуск сервера

Установка из репозитория Debian 10

# apt install zabbix-server-mysql   #2m

Сервис MySQL Управление параметрами сервера innodb_strict_mode=OFF

# cat zabbix.sql
#drop database zabbix;
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
# mysql < zabbix.sql
# zcat /usr/share/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix  #1m

# zcat /usr/share/zabbix-server-mysql/images.sql.gz | mysql -uzabbix -pzabbix zabbix

# zcat /usr/share/zabbix-server-mysql/data.sql.gz | mysql -uzabbix -pzabbix zabbix

# cat /etc/zabbix/zabbix_server.conf
...
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
#end newline!!!
# systemctl enable zabbix-server

# service zabbix-server start

Настройка Zabbix на прием SNMP traps

В целом, как настроить прием SNMP трапов системой мониторинга довольно хорошо описано в вики самого Zabbix:

  • Настройка конфигурации: http://www.zabbix.org/wiki/Start_with_SNMP_traps_in_Zabbix
  • Настройка шаблонов и как оно вообще работает: https://www.zabbix.com/documentation/2.2/ru/manual/config/items/itemtype…

Открываем, читаем и делаем. Если ничего не понятно или не работает, тогда продолжаем читать здесь )))

Для успешной работы нам потребуются: 

  1. zabbix_trap_receiver.pl
  2. Настроенный и запущенный демон snmptrapd, который собственно и отвечает за прием данных на 162 порту
  3. Включить прием snmp трапов в конфигурации самого Zabbix
  4. Настроить «образцовый» шаблон для диагностики.
  5. Кроме того, потребуется внимательность и понимание как эти части м/у собой связаны.

Настройка Cisco на отдачу трапов

1
2
3
4

logging trap debugging

logging host192.168.1.251

 

snmp-server trap-source Vlan1
snmp-server enable traps snmp authentication linkdown linkup coldstart warmstart
snmp-server enable
traps vrrp
snmp-server enable traps tty
snmp-server enable traps license
snmp-server enable traps ethernet cfm cc mep-up mep-down cross-connect loop config
snmp-server enable traps ethernet cfm crosscheck mep-missing mep-unknown service-up
snmp-server enable traps flash insertion removal
snmp-server enable traps adslline
snmp-server enable traps adsl2line
snmp-server enable traps vdsl2line
snmp-server enable traps envmon
snmp-server enable traps c3g
snmp-server enable traps isdn call-information
snmp-server enable traps isdn layer2
snmp-server enable traps isdn chan-not-avail
snmp-server enable traps isdn ietf
snmp-server enable traps energywise
snmp-server enable traps cef resource-failure peer-state-change peer-fib-state-change inconsistency
snmp-server enable traps aaa_server
snmp-server enable traps atm subif
snmp-server enable traps memory bufferpeak
snmp-server enable traps config-copy
snmp-server enable traps config
snmp-server enable traps config-ctid
snmp-server enable traps entity
snmp-server enable traps fru-ctrl
snmp-server enable traps resource-policy
snmp-server enable traps event-manager
snmp-server enable traps hsrp
snmp-server enable traps ipmulticast
snmp-server enable traps msdp
snmp-server enable traps mvpn
snmp-server enable traps cpu threshold
snmp-server enable traps ipsla
snmp-server enable traps syslog
snmp-server enable traps l2tun session
snmp-server enable traps l2tun pseudowire status
snmp-server enable traps vtp
snmp-server enable traps pw vc
snmp-server enable traps firewall serverstatus
snmp-server enable traps nhrp nhs
snmp-server enable traps nhrp nhc
snmp-server enable traps nhrp nhp
snmp-server enable traps nhrp quota-exceeded
snmp-server enable traps isakmp policy add
snmp-server enable traps isakmp policy delete
snmp-server enable traps isakmp tunnel start
snmp-server enable traps isakmp tunnel stop
snmp-server enable traps ipsec cryptomap add
snmp-server enable traps ipsec cryptomap delete
snmp-server enable traps ipsec cryptomap attach
snmp-server enable traps ipsec cryptomap detach
snmp-server enable traps ipsec tunnel start
snmp-server enable traps ipsec tunnel stop
snmp-server enable traps ipsec too-many-sas
snmp-server host 192.168.1.251 informs version ВАШ_COMMUNITY
snmp-server host 192.168.1.251 version 2c ВАШ_COMMUNITY

голоса

Рейтинг статьи

Посылаем руками

Допустим, нам хочется послать сообщение менеджеру о том, что демон net-snmpd запустился и передать дополнительную информацию о размере swap файла и все это ручками ??? Ну пришла нам такая блажь. Допустим. Пишем:

Что здесь что ?

  • — брать uptime по дефолту
  • — послать этот трап
  • — добавить в нагрузку OID memTotalSwap равное целому 1024000

И если на целевом хосте запущен демон , то в логе появится сообщение о приходе трапа.

Однако, иногда хочется странного, например послать трап о том, что инопланетяне тырят SCSI винчестеры прямо из корзинки или о том, что серверную заливает водой, о чем вас предупредительно оповестил самодельный датчик, которые весит на COM порту. Понятное дело, в стандартных MIB о таких странных ситуациях не упоминается. Поэтому, можно использовать произвольную последовательность цифирек для обозначения нового в мире события. Например:

И что характерно, это будет работать. В логе появится такая бредятинка:

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

ALLIENSATTACK-MIB DEFINITIONS ::= BEGIN
IMPORTS
    OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY,
    Integer32, Opaque, enterprises, Counter32
        FROM SNMPv2-SMI

alliensattack MODULE-IDENTITY
    LAST-UPDATED "200209050000Z"
    ORGANIZATION "XCom"
    CONTACT-INFO
        "Planet Earth
        "
    DESCRIPTION
        "MIB for preventing aliens to stole our SCSI disks"
    ::= { enterprises 10050 }

attackTraps OBJECT IDENTIFIER ::= { alliensattack 1 }

attackStartTrap NOTIFICATION-TYPE
    STATUS      current
    DESCRIPTION
        "Notify about start of attack"
    ::= { attackTraps 1 }

attackStopTrap  NOTIFICATION-TYPE
    STATUS current
    DESCRIPTION
        "Notify about time to leave our hideouts"
    ::= { attackTraps 2 }

attackSource OBJECT IDENTIFIER ::= { aliensattack 2 }

attackFromDoors  OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Sent to manager when attack starts from doors"
   ::= { attackSource 1 }

attackFromWindows  OBJECT-TYPE
    SYNTAX      DisplayString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "May be alliens are innocent? And SCSI drives disappeared in the Gates?"
   ::= { attackSource 2 }

END

Здесь определяется enterptise с номером 10050 и ему даеся имя aliensattack. После этого вводятся две ветки: одна для трапов (начало и конец атаки), другая для OID дополнительной информации (атака через двери или это вовсе не инопланетяне).

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

Дальше! Укладываем этот файл с именем ALLIENSATTACK-MIB.txt в какой нибудь каталог поближе и запоминаем, что с этого момента все программы имеющие отношения к SNMP (snmpd, snmptrapd, snmpinform) мы запускаем с поддержкой этого MIB. Тоесть, к командной строке добавляем параметры

Знак „+“ перед именем MIB (не файла с MIB, а именно имя MIB), значит, что MIB будет добавлен к загружаемым по умолчанию.

Настройка Zabbix

Первым делом убедитесь, что в конфиге /etc/zabbix/zabbix_server.conf мониторилка натравлена на правильны лог SNMPTT и сам Zabbix запускает хотя бы один SNMP Trapper:

Для начала я создавал Item прямо на хосте, чтобы быстрее и проще ловить спецэффекты, сюда же напишу сразу как создать Template, потому что именно шаблонами надо пользоваться всегда когда это возможно

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

Создаем шаблон:

Тут просто даем вменяемое имя

Создаем Item

Важно — ключ должен быть таким, то, что указано в квадратных скобках это то, что будет искать Zabbix в логе, формат лога мы настраивали в /etc/snmp/snmptt.conf и писали там:

Собственно в логе это волшебное слово «OSPF» и появляется:

Формат даты мы определяли в конфиге /etc/snmp/snmptt.ini:

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

Создаем Trigger

у соседа может быть несколько:

Вообще не принципиально в каком именно состоянии находится сосед, если это состояние не FULL, т. к. чтобы это продиагностировать, придется всё-равно идти на железку, читать логи, вводить какие-то команды. Так что триггер будет один и будет возбуждаться только когда в TRAP состояние соседа не FULL.

Прежде чем повесить шаблон на конкретный хост, убедитесь, что у хоста настроен корректный SNMP интерфейс с правильным IP адресом, иначе трапы будут в логе /var/log/snmptt/snmptt.log, но Zabbix их «не привяжет» к хосту. В этом случае в логе Zabbix сервера /var/log/zabbix/zabbix_server.log будет сообщение вида:

Идем в Latest data, видим

Триггер тоже сработал

Теперь положим двух соседей

В дашборде видим что случилось две проблемы, это хорошо, и даже два письма прилетит на эту тему при настроенном оповещении.

Всё здорово, всё работает, а вот и вишенка на торте в завершении.

UPD: коллеги по цеху посоветовали таки разобраться и попробовать реализовать задуманное с использованием . Есть спрос, будет и предложение. Забегая вперед могу сказать — не так страшен черт, поехали. На сетевой железке рисуем волшебную команду:

Имена параметров требуют пояснений {snmp context name} — имя SNMP контекста, который будем использовать в запросах. {protocol instance} и {vrf name} берем из конфига настроенного OSPF процесса:

Было опасение, что после таких настроек у нас сломаются уже настроенные Item по SNMP с пустым контекстом, однако проверил — настройка затрагивает только отдачу данных по OSPF-MIB, при этом например из раздела IF-MIB всё продолжает отдаваться как и раньше с пустым контекстом. Если у вас не Nexus, рекомендую проверить этот момент лишний раз — вполне вероятно что поведение будет отличаться.

Теперь подкрутим шаблон в Zabbix. Необходимо создать новое правило Discovery с указанием контекста:

Новый Item prototype тоже с указанием контекста

И два триггера — первый — для алярма в случае если сосед в любом состоянии кроме FULL:

и второй — если сосед пропал:

Пробуем с наскока

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

Вколачиваем в поиск «zabbix ospf» и первая же ссылка ведет на шаблон. Счастье то какое — сейчас я его импортирую, причешу под свои нужды и всё будет оки доки. Проверяем как работает — вроде все хорошо, состояния отслеживаются, но вот когда сосед уходит в состояние DOWN, мы получаем от Zabbix «очень» информативное сообщение

и инфо

Что произошло — проблема старая и известная на форумах — когда пропадает OSPF сосед, то все OID, связанные с ним, просто удаляются на сетевом железе.

Да, решение есть — создать триггер nodata, ок создаем:

Видим в дашборде:

В принципе… юзабельно

Но из коробки LLD обнаруживает только соседей из default VRF. Конечно, это можно порешать с помощью , но как-то совсем не захотелось идти таким путем — это надо по всем железкам пройтись, каждому OSPF процессу или VRF вколотить контекст, потом в шаблоне сделать копии Discovery для каждого контекста свою, в целом многовато возни и при добавлении новых OSPF процессов надо в нескольких местах что-то менять. Можно конечно обложиться скриптами и через Zabbix API всё это менять, но не хотелось особого кастома, а хотелось по максимуму использовать только встроенную в Zabbix функциональность. Есть упоминание о некоем CISCO-CONTEXT-MAPPING-MIB, из которого можно выдернуть все соответствия контекстов и OSPF/VRF, но как эту конструкцию прикрутить к LLD и моему случаю я не сообразил. Если кто-то умеет так круто готовить Zabbix, то добро пожаловать в комментарии, а лучше в полноценную отдельную статью.

MIB файлы одним архивом для HP

По отдельности

rfc3636 rfc3413a rfc3019 rfc2863 rfc2579 rfc2578 rfc2108 rfc2096-07 rfc2021 rfc2012 rfc2011D10 rfc1850b ianaAFN hpNetSwitch hpicfVgRptr hpicfTC hpicfIpRoute hpicfIpLockdown hpicfIpAddress hpicfGppc hpicfFf hpicfChain hpicfAutz hpAcmxlSystem rfc2674_q rfc2674_p rfc2665 rfc2620 rfc2618 rfc2613 rfc2576 rfc2266 rfc2020 rfc2013 rfc1850 rfc1749 rfc1742 rfc1724 rfc1513 rfc1512 rfc1493 rfc1213 ipx ieee80211 ieee8023lag ieee8021pae ieee802af ianaiprouteprotocol ianaiftype hpVlan hpSwitchStat hpSwitchStack hpSwitchDrivers hpSwitchDma hpSwitchDistributedTrunk hpSwitchConfig hpicfXrrp hpicfVrrp hpicfvg hpicfUsrProf hpicfUsrAuth hpicfUSBPort hpicfUdpForward hpicfUdld hpicfSyslog hpicfStack hpicfSntp hpicfSnmp hpicfSecurity hpicfSavepower hpicfRip hpicfRateLimit hpicfProviderBridge hpicfPoe hpicfPim hpicfOspf hpicfOobm hpicfOid hpicfMld hpicfLinktest hpicfL3MacConfig hpicfJumbo hpicfInstMon hpicfHighAvailability hpicfGenRptr hpicfFtrCo hpicfEtwist hpicfDownload hpicfDot1x hpicfDosFilter hpicfDhcpv6Relay hpicfDhcpSnoop hpicfDcPower hpicfDcFan hpicfConnectionRateFilter hpicfChassis hpicfBridge hpicfBasic hpicfAutorun hpicfAuth hpicfArpProtect hpicf8023Rptr hpHttpMg hpentmib hpAcmxlMemProc hpAcmxlIfExt hpAcmxlBase rfc4022 rfc3636 rfc3413a rfc3019 rfc2863 rfc2579 rfc2578 rfc2108 rfc2096-07 rfc2021 rfc2012 rfc2011D10 rfc1850b ianaAFN hpNetSwitch hpicfVgRptr hpicfTC hpicfIpRoute hpicfIpLockdown hpicfIpAddress hpicfGppc hpicfFf hpicfChain hpicfAutz hpAcmxlSystem

Пробуем со второго наскока

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

С первых строк документация по мониторилке смутила длинным списком:

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

MIB файл контроллера WLC

Cisco WLC MIB можно загрузить на странице Wireless Downloads (только для зарегистрированных заказчиков).

Чтобы загрузить MIB WLC, выполните следующие действия:

  1. На странице Wireless Downloads нажмите Wireless LAN Controller и выберите платформу котроллера, MIB для которой вам требуются.
  2. Появится страница Software Download для контроллеров. На странице представлены все файлы для WLC, включая MIB.
  3. Загрузите стандартные MIB и MIB, характерные для Cisco. Должны быть загружены и содержать MIB следующие два файла. Имена файлов похожи на данные в примере:

    1
    2
    3
    4

    Standard-MIBS-Cisco-WLC4400-2000-XXXXXX.zip

    Cisco-WLC-MIBS-XXXX.zip

     

Журналирование — где это и что это ?

Согласно документации: https://www.zabbix.com/documentation/2.2/ru/manual/config/items/itemtype…

Только не совсем понятно, что это за журналирование и где оно ведется. Оказывается все просто — если на Zabbix приходит трап от устройсва, интерфейс, которого не значится в БД Zabbix, то при наличии этого крыжика заббикс запротоколирует это в своей лог. Но  интерфейс об этом никаким образом не скажет, что вполне логично. Будет это выглядеть примерно так:

 25596:20150320:161444.269 unmatched trap received from : 16:14:43 2015/03/20 PDU INFO:
  notificationtype               TRAP
  version                        0
  receivedfrom                   UDP: :161->:162
  errorstatus                    0
  messageid                      0
  community                      HUS110
  transactionid                  10
  errorindex                     0
  requestid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-MIB::warmStart
  SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.12.36
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "HUS110"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: SNMPv2-SMI::enterprises.116.3.11.1.2
 25596:20150320:161445.271 unmatched trap received from : 16:14:44 2015/03/20 PDU INFO:
  notificationtype               TRAP
  version                        0
  receivedfrom                   UDP: :161->:162
  errorstatus                    0
  messageid                      0
  community                      HUS110
  transactionid                  11
  errorindex                     0
  requestid                      0
VARBINDS:
  DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00
  SNMPv2-MIB::snmpTrapOID.0      type=6  value=OID: SNMPv2-MIB::warmStart
  SNMP-COMMUNITY-MIB::snmpTrapAddress.0 type=64 value=IpAddress: 192.168.12.37
  SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 type=4  value=STRING: "HUS110"
  SNMPv2-MIB::snmpTrapEnterprise.0 type=6  value=OID: SNMPv2-SMI::enterprises.116.3.11.1.2
 24969:20150320:161446.462 SNMP agent item "ifInOctets" on host "FW-TTI-1" failed: first network error, wait for 15 seconds
 25110:20150320:161449.532 resuming SNMP agent checks on host "ROU-BGP-MOW-2": connection restored

Установка и запуск web интерфейса

Все следующие компоненты поставятся, как зависимости:

Debian

# apt install zabbix-frontend-php php-mysql  #1m

# cat /etc/apache2/conf-available/zabbix-frontend-php.conf
...
php_value date.timezone Europe/Moscow
...
php_value date.timezone Europe/Moscow
...
# a2enconf zabbix-frontend-php

# service apache2 reload

# touch /etc/zabbix/zabbix.conf.php

# chown www-data /etc/zabbix/zabbix.conf.php
http://server.corpX.un/zabbix/setup.php
# less /etc/zabbix/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;

$DB     = 'MYSQL';
$DB   = 'localhost';
$DB     = '0';
$DB = 'zabbix';
$DB     = 'zabbix';
$DB = 'zabbix';

// Schema name. Used for IBM DB2 and PostgreSQL.
$DB = '';

$ZBX_SERVER      = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = '';

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;

Общие настройки

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

Для простоты будет использоваться готовый официальный образ виртуальной машины на основе openSUSE 12.3 (x86_64) с предустановленной системой Zabbix 2.2.2.

По умолчанию для доступа в консоль и по ssh – логин: root, пароль: zabbix

Настройка брендмауэра

Сначала для возможности получения SNMP TRAP сообщений, необходимо сконфигурировать встроенный в openSUSE сетевой фильтр пакетов, также известный как брандмауэр (firewall). Следует отредактировать следующую строку в файле /etc/sysconfig/SuSEfirewall2 с целью добавления 162 UDP-порта:

FW_SERVICES_EXT_UDP=»162″

Затем, выполнить команду:

# /sbin/SuSEfirewall2

За дополнительной информацией по настройке брандмауэра можно обратиться к документации.

Пакет Net-SNMP

Далее следует перейти к настройке системы на приём и обработку поступающих SNMP TRAP сообщений. Для их приема и передачи в Zabbix используется уже предустановленный пакет утилит Net-SNMP и perl скрипт zabbix_trap_receiver.pl.

В случае, если пакет утилит Net-SNMP отсутствует его необходимо установить. За информацией, как установить дополнительное ПО рекомендуется обратиться к соответствующей документации используемой операционной системы. Потребуются следующие пакеты:

  • «net-snmp-utils»;
  • «net-snmp-perl»

Скрипт zabbix_trap_receiver.pl

# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.2.2/zabbix-2.2.2.tar.gz/download

# tar -zxvf zabbix-2.2.2.tar.gz

Скопировать скрипт и установить ему права на выполнение:

# cp ./zabbix-2.2.1/misc/snmptrap/zabbix_trap_receiver.pl /usr/local/bin

# chmod a+x /usr/local/bin/zabbix_trap_receiver.pl

Скрипт sendsms.sh

Для использования внешнего скрипта для отправки SMS-сообщений в конфигурационном файле Zabbix сервера /etc/zabbix_server.conf указать:

AlertScriptsPath = /usr/local/lib/zabbix/alertscripts

Поместить скрипт sendsms.sh в указанную директорию и установить ему права на выполнение:

# chmod a+x /usr/local/lib/zabbix/alertscripts/sendsms.sh

Демон snmptrapd и Zabbix trapper

Для приема входящих SNMP TRAP сообщений будет использоваться демон snmptrapd из набора утилит Net-SNMP. Его конфигурационный файл /etc/snmp/snmptrapd.conf должен выглядеть следующим образом:

disableAuthorization yes

perl do «/usr/local/bin/zabbix_trap_receiver.pl»; 

Далее запустить демон snmptrapd и добавить его в автозагрузку:

# systemctl restart snmptrapd

# chkconfig snmptrapd on

Далее в конфигурационном файле Zabbix сервера /etc/zabbix_server.conf необходимо активировать опцию по обработке трапов:

StartSNMPTrapper=1

SNMPTrapperFile=/tmp/zabbix_traps.tmp

Перезапустить Zabbix:

# systemctl restart zabbix_server

Таким образом, при получении SNMP TRAP сообщения демон snmptrapd будет передавать его на обработку скрипту zabbix_trap_receiver.pl, а скрипт будет записывать данные в файл /tmp/zabbix_traps.tmp. Демон Zabbix постоянно проверяет данный файл на изменения и при их появлении передает данные на обработку.

Ротация zabbix_traps.tmp

При необходимости, чтобы избежать переполнения /tmp может быть настроена ротация файла /tmp/zabbix_traps.tmp. Для этого следует создать директорию:

# mkdir -p /var/log/zabbix_traps_archive

И файл /etc/logrotate.d/zabbix_traps следующего содержания: 

/tmp/zabbix_traps.tmp {

    weekly

    size 10M

    compress

    compresscmd /usr/bin/bzip2

    compressoptions -9

    notifempty

    dateext

    dateformat -%Y%m%d

    missingok

    maxage 365

    rotate 10

}

Архивные копии файла /tmp/zabbix_traps.tmp будут перемещаться в директорию /var/log/zabbix_traps_archive при достижении размера 10 Мб. 

API

Аутентификация

server:~# apt install curl

server:~# curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d '
{
   "jsonrpc": "2.0",
   "method": "user.login",
   "params": {
      "user": "Admin",
      "password": "zabbix"
   },
   "id": 1
} ' http://127.0.0.1/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","id":1}

Работа с объектами host/template

server:~# apt install jq

Получение списка узлов и шаблонов из Zabbix

server:~# curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d '
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {},
    "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "id": 2
} ' http://127.0.0.1/zabbix/api_jsonrpc.php | jq
...
...
    "method": "template.get",
...
  • Пример запроса определенных атрибутов и с фильтром
...
    "params": {
        "output": ,
        "templateids": 
    },
...

Доступ к результатам мониторинга

curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d '
{
    "jsonrpc": "2.0",
    "method": "history.get",
    "params": {
        "output": "extend",
        "history": 0,
        "itemids": "NNNNN",
        "sortfield": "clock",
        "sortorder": "DESC",
        "limit": 10
    },
    "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "id": 2
} ' http://127.0.0.1/zabbix/api_jsonrpc.php | jq

Оформление запросов в виде BASH скриптов

server:~# export AUTH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

server:~# cat /root/zab_get_hosts.sh
#!/bin/sh

curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d "
{
    \"jsonrpc\": \"2.0\",
    \"method\": \"host.get\",
    \"params\": {},
    \"auth\": \"${AUTH}\",
    \"id\": 2
} " http://127.0.0.1/zabbix/api_jsonrpc.php
server:~# /root/zab_get_hosts.sh | jq

Список имен узлов
server:~# /root/zab_get_hosts.sh | jq '.result | .[] | { host: .host} | tostring' | tr -d '{}\\' | tr '"' ' ' | cut -d ' ' -f5

Получение списка карт и их элементов из Zabbix

server.corp1.un:~# cat /root/zab_get_maps.sh
#!/bin/sh

curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d "
{
    \"jsonrpc\": \"2.0\",
    \"method\": \"map.get\",
    \"params\": {
        \"selectLinks\": \"extend\",
        \"selectSelements\": \"extend\"
    },
    \"auth\": \"${AUTH}\",
    \"id\": 2
} " http://127.0.0.1/zabbix/api_jsonrpc.php | jq

Пример изменения конфигурации через Zabbix API

server.corp1.un:~# cat /root/zab_set_map_name.sh
#!/bin/sh

MAPID=$1
MAPNAME=$2

curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d "
{
    \"jsonrpc\": \"2.0\",
    \"method\": \"map.update\",
    \"params\": {
        \"sysmapid\": \"${MAPID}\",
        \"name\": \"${MAPNAME}\"
    },
    \"auth\": \"${AUTH}\",
    \"id\": 2
} " http://127.0.0.1/zabbix/api_jsonrpc.php
server.corp1.un:~# /root/zab_set_map_name.sh 2 "Super MAP"

Настройка

Правим /etc/snmp/snmptrapd.conf

1
2
3
4
5

disableAuthorization yes

authCommunity log,execute,net COMMUNITY

traphandle default/usr/sbin/snmptthandler

 

Создадим файл /etc/snmp/cisco.conf со следующим содержимым

1
2
3
4

EVENT general.*»General event»Normal

FORMAT ZBXTRAP$aA$ar

 

Правим файл /etc/snmp/snmptt.ini

1
2
3
4
5
6

mode=daemon

net_snmp_perl_enable=1

date_time_format=%H%M%S%Y/%m/%d

log_file=/var/log/snmptt/snmptt.log

 

1
2
3
4
5
6
7
8
9
10
11
12

TrapFiles

# A list of snmptt.conf files (this is NOT the snmptrapd.conf file). The COMPLETE path
# and filename. Ex: ‘/etc/snmp/snmptt.conf’

snmptt_conf_files=<<END

/etc/snmp/snmptt.conf

/etc/snmp/cisco.conf

#/etc/snmp/dlink.conf
END
 
 
 

1
2
3
4
5

service snmpd restart

service snmptt restart

service snmptrapd restart

 

После внесения изменений я перезапускаю все демоны

1
2
3
4
5

service snmptrapd restart

service snmpd restart

service snmptt restart

 

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: