Сегодня я хочу показать и заодно задокумментировать себе каким образом снимаю информацию по состоянию SFP(SFP+)
модулей в Mikrotik(ах)
которые объединяют офисные здания в единую информационную систему. Просто я стараюсь все и вся чтобы я знал, что и где происходит и, как и что меняется со временем, вот для этого у меня Zabbix
и развернут, плюс — это интересно, а время у меня есть все разбирать так как вся инфраструктура задокумментирована. И опираясь на это мне проще работать.
В заметке используется следующее:
srv-zabbix.polygon.local
OS: Ubuntu 18.04 Server
sw_2-3-1.polygon.local
Mikrotik CRS328-24P-4S+ (v6.45.6)
sw_1-2-1.polygon.local
Mikrotik CRS326-24G-2S+ (v6.46.1)
Шаг №1:
Мой рабочий сервис в лице Zabbix
развернут на Ubuntu 18.04 Server + Zabbix 5.0.9
опираясь на заметку: "Устанавливаем Zabbix 5 + Nginx on Ubuntu 18.04 Server"
Настройки для Zabbix Server
на самом сервере:
ekzorchik@srv-zabbix:~$ cat /etc/zabbix/zabbix_server.conf LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=0 PidFile=/var/run/zabbix/zabbix_server.pid SocketDir=/var/run/zabbix DBHost=localhost DBName=db_zabbix DBUser=us_zabbix DBPassword=612mbddr@ DBPort=3306 SNMPTrapperFile=/var/log/snmptrap/snmptrap.log Timeout=30 AlertScriptsPath=/usr/lib/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts FpingLocation=/usr/bin/fping Fping6Location=/usr/bin/fping6 LogSlowQueries=3000 StatsAllowedIP=127.0.0.1 CacheSize=64M HousekeepingFrequency=24 MaxHousekeeperDelete=10500 ekzorchik@srv-zabbix:~$
Настройки для Zabbix Agent
на самом сервере:
ekzorchik@srv-zabbix:~$ cat /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 #EnableRemoteCommands=1 AllowKey=system.run[*] LogRemoteCommands=1 Timeout=30 Server=127.0.0.1, srv-zabbix.polygon.local ServerActive=127.0.0.1,srv-zabbix.polygon.local Hostname=Zabbix server Include=/etc/zabbix/zabbix_agentd.d/*.conf UnsafeUserParameters=1 ekzorchik@srv-zabbix:~$
Шаг №2:
Т.к. Zabbix
развернут в корпоративной среде, то для оперативного получения информации о происшествиях и просто о моментах что в подконтрольной среде происходит настроена связка Zabbix 5.0.9 + Exchange 2010 (Version: 14.03.0509.000)
опираясь на заметку: "Настройка Zabbix 5.0.41 на уведомление через почту Exchange 2010"
Шаг №3:
У меня получение информации с Mikrotik(а)
по части SFP(SFP+)
модулей будет строится на базе подключения к Mikrotik(у)
по SSH
и извлечению информации из вывода.
Шаг №4:
Подключаюсь через Winbox
к Mikrotik(ам)
и создаю на них учетную запись с правами Read
, если Zabbix Server
владеете только вы, то можно и под текущей Вашей административной информацией подключаться.
Шаг №5:
Устанавливаю в систему утилиту sshpass:
ekzorchik@srv-zabbix:~$ sudo apt-get install sshpass
Шаг №6:
Даю права учетной записи ekzorchik
взаимодействовать c командами системы без запроса авторизации:
ekzorchik@srv-zabbix:~$ sudo visudo ekzorchik ALL=(ALL) NOPASSWD:ALL
Шаг №7:
Подключение к Mikrotik
осуществляется следующим образом:
ekzorchik@srv-zabbix:~$ sshpass -p Aa1234567aA ssh -o "StrictHostKeyChecking no" zabbixviewer@sw_2-3-1.polygon.local -p 22 "interface ethernet monitor sfp-sfpplus2 duration=1" | grep rate rate: 1Gbps ekzorchik@srv-zabbix:~$
Шаг №8:
Подключаюсь по SSH
к Zabbix
серверу и создаю скрипт который будет извлекать необходимые параметры значений интерфейса с Mikrotik'а:
ekzorchik@srv-zabbix:~$ sudo nano /usr/lib/zabbix/externalscripts/sfpcheck.sh #!/bin/bash SERVER=$1 SSHPORT=22 TIMEOUT=25 SSHPASS=Aa1234567aA SSHUSER=zabbixviewer SFPINTERFACE=$2 #rate sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep rate #status sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep status #sfp-connector-type sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-connector-type #sfp-type sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-type #sfp-vendor-part-number sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-vendor-part-number #sfp-temperature sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-temperature #sfp-supply-voltage sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-supply-voltage #sfp-tx-bias-current sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-tx-bias-current #sfp-tx-power sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-tx-power #sfp-rx-power sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-rx-power #eeprom-checksum sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep eeprom-checksum ekzorchik@srv-zabbix:~$ sudo chmod +x /usr/lib/zabbix/externalscripts/sfpcheck.sh
Шаг №9:
Проверяю выполнение скрипта нацелив его на определенный интерфейс Mikrotik CRS328-24P-4S+
ekzorchik@srv-zabbix:~$ sudo /usr/lib/zabbix/externalscripts/sfpcheck.sh sw_2-3-1 sfp-sfpplus2 rate: 1Gbps status: link-ok sfp-connector-type: LC sfp-type: SFP-or-SFP+ sfp-vendor-part-number: SFP-BX-D sfp-temperature: 56C sfp-supply-voltage: 3.29V sfp-tx-bias-current: 23mA sfp-tx-power: -6.081dBm sfp-rx-power: -10.339dBm eeprom-checksum: good ekzorchik@srv-zabbix:~$
а вот если указать другой интерфейс, то в нем уже не такие данные извлекаются:
ekzorchik@srv-zabbix:~$ sudo /usr/lib/zabbix/externalscript/sfpcheck.sh sw_2-3-1 sfp-sfpplus4 rate: 1Gbps status: link-ok sfp-connector-type: LC sfp-type: SFP-or-SFP+ sfp-vendor-part-number: SFP-BX-D55 eeprom-checksum: good ekzorchik@srv-zabbix:~$
т.е. мне придется вручную составлять скрипты под каждое значение, ну пока по крайней мере так, надо же с чего-то начать.
Шаг №10:
Создаю на Zabbix
сервере конфигурационный файл, который будет извлекать из скрипта значение параметра sfp-temperature:
ekzorchik@srv-zabbix:~$ sudo nano /usr/lib/zabbix/externalscripts/sfptemp.sh
#!/bin/bash
SERVER=$1
SSHPORT=22
TIMEOUT=25
SSHPASS=Aa1234567aA
SSHUSER=zabbixviewer
SFPINTERFACE=$2
#sfp-temperature
sshpass -p $SSHPASS ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "LogLevel ERROR" $SSHUSER@$SERVER -p $SSHPORT "interface ethernet monitor $2 duration=1" | grep sfp-temperature | cut -d ':' -f2 | tr -d ' '
Шаг №11:
Создаю на Zabbix
сервере настройки для Zabbix
агента через который будет совершаться взаимодействие с узлом Mikrotik(а)
формировав ключ который обращается к скрипту получения параметра:
ekzorchik@srv-zabbix:~$ sudo nano /etc/zabbix/zabbix_agentd.d/sfptemp.conf
UserParameter=sfp-temperature[*],/usr/lib/zabbix/externalscripts/sfptemp.sh "$1" "$2"
$1 - это мне нужно передать IP&DNS Mikrotik куда я подключаюсь скриптом с паролем на подключение в скрипте
$2 - указываю наименование SFP интерфейса.
Итого:
ekzorchik@srv-zabbix:~$ sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t sfp-temperature[sw_2-3-1.polygon.local,sfp-sfpplus2]
sfp-temperature[sw_2-3-1.polygon.local,sfp-sfpplus2] [t|56C]
ekzorchik@srv-zabbix:~$
вот теперь это я уже могу завести в Web Zabbix
Шаг №12:
Создаю шаблон в Web
интерфейсе Zabbix:
http://srv-zabbix/zabbix - user&pass - Настройка - Шаблоны - Создать шаблон
Имя шаблона: Template_Mikrotik_SFP
Группы: GROUP_MIKROTIK
и здесь же перехожу на вкладку "Макросы"
и создаю с каждой новой строки колонки "Макрос": {$SFP1},{$SFP2},{$SFP3},{$SFP4},{$SW121},{$SW231}
Напротив каждого значения в колонке "Значение": sfp-sfpplus1,sfp-sfpplus2,sfp-sfpplus3,sfp-sfpplus4,sw_1-2-1.polygon.local,sw_2-3-1.polygon.local
см скриншот для наглядного понимания, как это выглядит:
после нажимаем "Обновить"
, опять переходим в созданный шаблон и в "Элементе данных"
создаем "Создать элемент данных"
Имя: SW231 SFP2 Temp
Тип: Zabbix агент
Ключ: sfp-temperature[{$SW231},{$SFP2}]
Тип информации: Символ
Интервал обновления: 30m
Пользовательские интервалы: Переменный
Период хранения истории: Период хранения 60d
Отображать значения: Как есть
Новая группа элементов данных: SFP
Заполнение поля инвентаря узла сети: Нет
Описание: sfp to sw_1-2-1
Активировано: отмечаю галочкой
и нажимаю "Добавить"
Шаг №13:
Создаю триггер на элемент данных Имя: SW231 SFP2 Temp
в шаблоне "Template_Mikrotik_SFP"
перехожу на вкладку "Триггеры"
и нажимаю "Создать триггер"
Имя: SW231 SFP2 Temp High
Важность: Высокая
Выражение: {Template_Mikrotik_SFP:sfp-temperature[{$SW231},{$SFP2}].last(#3,5)}>=70
Генерация ОК события: Выражение
Режим генерации событий ПРОБЛЕМА: Множественный
ОК событие закрывает: Все проблемы
Разрешить закрывать вручную: Отмечаю галочкой
Активировано: Отмечаю галочкой
и нажимаю "Добавить"
Шаг №14:
Связываю созданный шаблон "Template_Mikrotik_SFP"
с узлом "Zabbix server"
http://srv-zabbix/zabbix - user&pass - Настройка - Узлы сети
— отсортировываю по имения (Имя: zabbix)
и нажимаю Применить
, перехожу в "Zabbix server"
, затем на вкладку "Шаблоны"
и через "Присоединение новый шаблонов"
нажимаю "Выбрать"
присоединяю шаблон "Template_Mikrotik_SFP"
. В итоге вот текущий список шаблонов у узла "Zabbix server":
и нажимаю "Обновить"
Шаг №15:
Проверяю, как визуализируются получаемые данные Zabbix
сервером с Mikrotik(а): sw_2-3-1.polygon.local
, к примеру можно принудительно запустить применение шаблона:
http://srv-zabbix/zabbix - user&pass - Настройка - Узлы сети
Узлы сети: Zabbix server
Имя: SW
и нажимаю "Применить"
, после нажимаю в "Группы элементов данных"
на SFP
, получает вот так:
выделяю имя "Template_Mikrotik_SFP: SW231 SFP2 Temp"
и нажимаю "Выполнить сейчас"
затем переключаюсь на просмотр последних данных:
http://srv-zabbix/zabbix - user&pass - Мониторинг - Последние данные
Узлы сети: Zabbix server
Имя: sfp
и нажимаю "Применить"
перехожу в "История"
элемента "SW231 SFP2 Temp"
и вижу
По итогу получаю колонку с извлекаемыми данными, жалко, что они в текстовом виде и я не могу строить график изменения температуры с учетом времени, ну ничего, пока я данную задачу вижу так, может со временем я найду более расширенный способ.
Вот по такому же принципу и по всем остальным полям проделываю:
Скрипт извлечения нужно значения
UserParameters получения через скрипт
Заведение в шаблон нового элемента данных
Создание если нужно триггера.
Ну как бы собственно и все, значение температуры с SFP
модулей которые его отдают, отображая в свойствах интерфейса на Mikrotik
я получил и передаю в Zabbix 5.0.9
На этом пока я завершу свою заметку, мне она помогает, надеюсь и для Вас станет отправной точкой в Ваших задумках, с уважением автор блога Олло Александр aka ekzorchik.