Zabbix. Обнаружение, SNMP (Предварительный анализ, Настройка snmp запросов, Постройка ффкусняшек)

Приветствую тех, кто не читал предыдущие 3 главы/раздела. А сразу, так сказать, перешел в наступление. Ничего плохого в этом нету, я такой же, как и вы. Ну да ладно.
Итак, что мы имеем на даный момент: подготовленый и настроенный сервер мониторинга. Который просто напросто мечтает мониторить всё подряд в вашей сети. Что ж, давайте дадим ему такую возможность.

Итак, я обычно использую два способа мониторинга: это либо обычный пинг, либо опрос по ssh. Для решения моих задач этого хватает с головой и выше крыши. Но я также понимаю, что есть люди, которые наблюдают за серверами, за их службами и тд. и тп. И это здорово. Таким людям я посоветую использовать Zabbix-агент. Который, например, при обнаружении в процессе мониторинга того, что служба не поднята, может ее запустить. Или можете поизвращаться: запускать и тушить службу по расписанию. Скажу сразу, настраивать агент не сложно, я по-началу даже хотел это описание включить в мануал. Но потом передумал, так как мои случаи слишком тревиальны и просты. Тем более на офф сайте замечательно всё расписано. Но, если вдруг я буду настраивать что-то интересное с помощью агента, то в этих статьях сразу появятся записи. Только вы не подумайте, что я такой не умеха. В моей практике были и умопомрачительные требования, но они настолько специфичны и редки, что их просто нету смысла включать в описание, я лишь опишу самое основное, так сказать первые шаги. А дальше, как я всегда говорю, нет ничего такого, что бы вы не смогли сделать, тем более, если это сделали до вас. Предел возможности это предел вашей фантазии... Что-то увлекся я писаниной. Ближе к телу делу.

А начнём мы с самого простого. 
Для начала мы определимся, что конкретно мы хотим мониторить в сети. Какое оборудование, и какие диапазоны IP оно покрывает. Ну и в дальнейшем облегчим себе жизнь. 
И так лезем сюда
Настройка -> Обнаружение
Видим что-то такое.



Дальше Создать правило.


И тут мы заполняем поля.
Обнаружение делаем простейшее по пингу. А в диапазон ip адресов вносим те сети, которые мы будем мониторить.
Вносить сети можно так.
10.10.10.0-255,40.40.40.0-65,40.40.40.68-90,40.40.40.100-255
Главное чтобы перечесления шли через обычную запятую.
Состояние выбираем "деактевирован". Мы это потом запустим.
Жмём сохранить.
Теперь подготовимся к автомотической сортировке. Открываем
Настройка->Группы узлов сети, создаём группу. В появившемся окне заполняем название группы. И больше ничего не делаем. Нажимаем Сохранить (если у вас будет групп больше чем одна, есть смысл создать их все сейчас). И дальше лезем сюда
Настройка->Действие
Справа в углу выбираем обнаружение



Потом жмакаем на кнопочку Создать действие.

В появившемся меню 



Мы будем создавать условия, при которых это действие будет срабатывать. Это нужно для того, чтобы необходимые нам объекты попали в нужную нам группу(ы), которую(ые) мо создали. Итак, первым делом создаём условия действия.
В меню условия действия (выделенно красным) нажимаем на кнопку Новый (её видно на картинке выше). И вы увидите меню, которое показанно ниже.
Из этого меню нам нужно 3 составляющие, при выполнении которых у нас будет срабатывать действие.
Итак, это:
Состояние обнаружеие = UP 
Правило обнаружение = Local network  (внимание, если правило обнаружения вы назвали пупкин, то у вас вместо Local network будет пупкин. Будьте бдительны)
IP адресс узла сети = 10.10.10.0-10.10.10.50,10.10.10.52-255,40.40.40.0-255 
Тут вы пишете предпологаемые IP адреса, которые будут находиться в этой группе. Я писал сети с запасом. Однако есть ситуации, когда один IP из этой подсети 100% будет находиться в другой группе. В таком случае я его исключал из этого диапазона. Это я показал на примере выше.

 
В итоге, вы будете иметь что-то такое




Можете удалить все что находится в полях тема по умолчанию. В общем, можете сделать, как показано на картинке выше. Следующим в очереди будет Операция действия, при выполнений условий будет выполняться эта операция. Нажимаем новый, выбираем пункт добавит в группу и выбираем нужную для нас группу.
В конце всего этого нажимаем на кнопочку Сохранить.
Итак, мы успешно создали действие, которое будет фильтровать обнаруженные IP в нужные для нас группы. По аналогии создадим действия для других групп. По аналогии создаются и тригеры, при срабатывании которых будет запускаться действие. Это может быть и отсылка сообщения к вам на почту или же запуск действия по snmp, например запуск определённой службы. Об этом я напишу чуть позже. Но если вы разберётесь сами, это будет хорошим плюсом в вашу сторону.

Теперь я вам на простом примере расскажу, как работать с snmp запросами. Дальнейшие действия с snmp будут почти похожи. Тут самое главное уловить суть.
Вот наше задание.
У нас есть маршрутизатор/свитч cisco (не суть, какое оборудование, мне была удобна cisco, вам может быть будет удобен juniper,d-link, не важно) и нам на одном интерфейсе ( или например подинтерфейс на маршрутизаторе) нужно мониторить нагрузку на интернет канал (для вас это может быть и просто мониторинг сетевого трафика, для анализа пропускной способности вашей сети.) Вообще, вы можете построить график из любых данных хоть из данных по пингу. Тут, я ещё раз повторюсь, главное - это уловить суть.

Итак, в моем случае, это маршрутизатор. И надо смотреть нагрузку на интернет канал, в сторону нашего провайдера.
С чего начать? Начинайте с чего угодно. Я обычно начинаю с прописывания политик для snmp на самой cisco. У еня это выглядит вот так:
snmp-server community tRaLiVali RO       # обязательный атрибут
snmp-server location megodomen           # не обязательный атрибут
snmp-server contact moja_pochta@domen.ru # не обязательный атрибут
Вот так вот, всего три строчки. А по большому счету всего только одна.

Допустим вы первый раз слышите, что такое это ваше snmp. Что это за магические 4 буквы вы можете прочитать в википедии. Дальше я покажу, как проверять запросы, не занося их сначала в заббикс. А вдруг вы вносили их, вносили, а они оказались не те что надо. И давай всё сначала. Я покажу, как делать запросы из омандной строки.
Так как мы будем делать запросы с нашего сервера Zabbix, то и отправлять тестовые запросы мы тоже будем с него.
Конектимся к серверу, заходим под рутом в командную строку. И пишем вот это
snmpget -v 2c -On -c tRaLiVali 11.11.11.11 ifInOctets.48
На выходе получите что-то типа такого
.1.3.6.1.2.1.2.2.1.10.48 = Counter32: 1703944305
tRaliVali это нечто иное, как наш public key. Другими словами: это пароль для запросов snmp.
ifInOctets - это запрос. Какие именно данные мы хотим получить с cisco. В данном случае это показывает входящий трафик, количество байт в секунду (byte/s) в данный момент опроса. Соответственно ifOutOctets покажет исходящий трафик интерфейса. Так как провайдер у меня воткнут прямиком в маршрутизатор, то исходящий трафик для меня будет исходящим трафиком интерфейса на маршрутизаторе, а входящий трафик для меня будет входящим трафиком интерфейса на маршрутизаторе. Запомните, чётко представляйте все то, что вы делаете и хотите получить, тогда не запутаетесь и не ошибётесь.
Ну вроде бы понятно, как работает snmp запрос. И я знаю, с какого интерфейса я хочу получить данные. А что делать, если я не знаю как в cisco или какой номер должен стоять, если я хочу снять данные с под-интерфейса, который отвечает за 280 VLAN и физически воткнут в 3 порт на cisco.
В настройках cisco он выглядит так.
interface GigabitEthernet0/3.280
 encapsulation dot1Q 280
 ip address 22.22.22.22 255.255.255.222
Так как я знаю, что имя интерфейса - GigabitEthernet0/3.280, то запрос на сервере будет выглядить так: 

snmpwalk -v 2c -On -c tRaLiVali 11.11.11.11 | grep GigabitEthernet0/3.280
Вывод команды будет такой:
.1.3.6.1.2.1.2.2.1.2.28 = STRING: GigabitEthernet0/3.280
.1.3.6.1.2.1.13.3.1.1.2.21 = STRING: "GigabitEthernet0/3.280
Сейчас думаете: "их же тут 2! Какой из них?". Но я то знаю благодаря предварительному ознакомлению с snmp.
.1.3.6.1.2.1.2.2.1.2.i - это описание интерфейса i. Таким образом, я делаю вывод, что нам нужна 1 строчка. И отсюда узнаю, что в запросе будет учавствовать интрфейс под номером 28.
Вот таким вот нехитрым образом можно делать предварительные запросы snmp прямо из командной строки.

Допустим, мы узнали уже всё, что нам нужно. И мы бы хотели всё это дело завести в мониторинг.

Заходим
Настройка -> узы сети
Выбираем требуемую для нас cisco (в моём случаи это ciscoo 7201)
И выбираем элементы данных



в верхнем правом углу выбираем 
Создать элемент данных
И перед нами открывается от такое вот окошечко.



Теперь, что и как мы вносим в поля.
ОПИСАНИЕ - пусть будет KANAL in (мы же смотрим входящий трафик)
Тип - SNMPv2 агент (ну я пользую второй... хотя первый тоже подходит)
SNMP OID - вносим эти загадочные циферки ( у меня .1.3.6.1.2.1.2.2.1.10.48 вносим как есть с точкой впереди)
SNMP community - пароль. В данном мануале это tRaLiVali (регистр имеет значение)
Ключь - ifInOctets.48 (знакомое что-то верно?)
Тип информации - числовой (целое)
Тип данных - Десятиричный
Единица измерения - bps (мы же скорость мерим)
Использовать множитель - Пользовательский множитель
Пользовательский множитель - 8
Интервал обновления - 15 (я понял, что раз в 15 сек. это для меня то, что нужно. Некоторым и раз в 5 мин. - это норм)
Состояние - Активен
Хранить значения - Дельта (скорость в секунду)

Обратите внимание что я указал только нужные для изминения поля. Если вы что-то не так написали, то и скорость у вас не так будет мериться, и график будет показывать невесть что. Пользовательский множитель, потому что в байте 8 бит.
Нажимаем кнопку сохранить

По аналогии делаем данные и для ifOutoctets.48
Теперь рисуем график.
Настройка -> узы сети
Выбираем требуемую для нас cisco (в моём случаи это ciscoo 7201)
И выбираем элементы данных графики (да-да вместо элементы данных выбираем графики в той же строчке, только правее)

Потом в правом верхнем углу нажимаем кнопочку Создать график 

Сначало создаём для входящего трафика.
В появившемся окне нажимаем кнопку
Добавить
потом в строке параметры выбрать
Выбираем элемент данных, который мы недавно создали.
По вкусу настраиваем (я напишу что выбираю я)
Тип - простой
Функция - среднее
Способ черчения - заполение
Цвет - 009900 (зелёный) (000099 - синий)
Расположение оси Y - право
Порядок сортировки (0->100) - 0

сохранить

Аналогично делаем и для исходящщего.
После всего этого любуемся графиками
Мониторинг -> Графики

Вот так вот несложно создаются элементы данных. И строятся графики. Самое основное и принцип работы я вам описал. Как видите, это совсем не сложно. Но когда у вас объём работы большой, то это просто долго и нудно. Но что поделать, такая вот у нас работа. Зато потом красиво и наглядно всё видно. На этом эту часть мы закончим.

Раздел с картами, я думаю, вы осилите сами. К сожалению, я не смогу вам показать какую красоту можно сделать, используя карты. У одного провайдера я разрисовал всю его сеть по домам. И вывел это в отдельный отчет. Очень круто было, группа подержки мгновенно реагировала, потому что видела сразу где есть свет или какие проблемы происходят на том или ином участке. Но, к сожалению, сервер приказал долго жить. И то, что я делал в течении 3 месяцев нужно будет делать с 0. Вот такие вот случаи тоже бывают. Но думаю, что вы разберётесь сами. Там правда все очень-очень просто.

P.S. я хотел было вынести рисование графиков в отдельную главу, но решил объединить с этой. И, наверно, это будет последняя часть мануала по введению. Я и так слишком долго уже пишу этот мануал (уже год как), просто физически нет на это времени. Но думаю, что благодаря ему администрация откроет ещё один раздел. И, думаю, я буду не единственным, кто напишет заметочки про Zabbix. Если что будет попадаться у меня интересное в настройках мониторинга, я обязательно буду выкладывать статьи. Желаю удачи.

159

Комментарии

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

Делаете команду
snmpwalk -v 2c -On -c tRaLiVali 11.11.11.11 | grep GigabitEthernet0/3.280
Правильный итог
.1.3.6.1.2.1.2.2.1.2.28 = STRING: GigabitEthernet0/3.280 -  в запросе будет учавствовать интерфейс под номером 28.

Теперь
SNMP OID
.1.3.6.1.2.1.2.2.1.10 - это идет на ifInOctets
почему у вас в итоге  .1.3.6.1.2.1.2.2.1.10.48?  и ключ ifInOctets.48

Ведь был интерфейс под номером 28?

Объясните при возможности - буду благодарен, Zabbix установил впервые .... перешел только к настройке




Это просто опечатка.

Отличная статья!
Никакой опечатки. Дело в том что 48. Это реальный интрфейс на свитче. С которого я снимал данные для этой статьи.
28 это подинтрфейс на маршрутизаторе. Я привёл его в качестве примера, чтобы можно было понять как искать нужные тебе данные на маршрутизаторе. К примеру у меня на маршрутизаторе около 500 вланов, сейчас наверное больше. И мне к примеру не нужно знать данные всех их сразу, а нужно вычеслить определённый влан. Вот пользуясь примером про то где "28" мы легко найдём, то что нам нужно. Ну а дальше подставляя название интрфейса снимем любые данные.
Желаю удачи
Спасибо большое! Хорошая вещь ZABBIX.
Друзья, а как быть, если номера под-интерфейсов не соответствуют номерам VLAN (к слову это не обязательное условие создания под-интерфейса)? Как определить индекс нужного интерфейса?
Для адреса 10.10.10.10 искать индекс интерфейса, скажем Vlan100

host# snmpwalk -c community_name -v1 10.10.10.10 | fgrep Vlan100
IF-MIB::ifDescr.333 = STRING: Vlan100
host#

Индекс 333 :) 
Аналогично,

host# snmpwalk -c community_name -v1 10.10.10.10 | fgrep FastEthernet0/2.10
IF-MIB::ifDescr.217 = STRING: FastEthernet0/2.10
host#

217
ели у Вас Циски можно смотреть сразу командой:
cis7609ХХХ#sh snmp mib ifmib ifindex TenGigabitEthernet4/2.139
Interface = TenGigabitEthernet4/2.139, Ifindex = 169

Кстати полезная вещь при натройки SNMP  на роутерах и L3 коммутаторов,
делайте команду:
snmp persist
позволяет сохранить все значения Ifindex сабиков после перезагрузки оборудования.

Тысяча чертей!!! Сударь вы правы!!!
Я лишь в статье хотел показать людям что ничего страшного в этом нет. И не зависимо от вендера они смогут найти все нужые им данные.
Рад что кому-то пригождаются мои заметки.