Представим что у вас есть удалённый офис или просто стоит какое либо оборудование в определенном удалении от вас. Для стабильной работы, вы даже завели второго провайдера на роутер Mikrotik и хотели бы знать поминутный аптайм своих провайдеров на нём. Для этого будем использовать отличный скрипт router-pulse от Максима Иванченко, чтобы это всё реализовать.
Выглядит это так:
Минимальная версия php >=5.5.9, иначе получите ошибку
This package requires php >=5.5.9 but your PHP version (5.3.3)
Итак, нам нужен сам скрипт
https://github.com/maxiv/router-pulse/archive/master.zip
Установить версию php 5.6 на Centos 6
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm yum install php56w
После чего необходимые компоненты
yum install php56w-dom yum install php56w-mbstring yum install php56w-mysql
Распаковываем наш архив со скриптом в каталог виртуального хоста.
Кон фигурируем виртуальный хост таким образом, чтобы он смотрел в в каталог router-pulse-master/public
Необходимо установить Composer
cd /tmp curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
Переходим в каталог с нашим скриптом и выполняем:
cd /www/router-pulse-master/ composer install
При установке Composer могут возникнуть ошибки, с просьбой вставить ваш Personal access tokens с GitHub
Ошибка будет примерно такого вида;
please create a GitHub OAuth token to go over the API rate limit
Регистрируемся на GitHub и получаем tokens , вставляем в консоль при необходимости.
Создаёте базу данных MySQL с правами пользователя на пользователя
mysql -u root -p CREATE DATABASE `stata` CHARACTER SET utf8 COLLATE utf8_general_ci; grant all on stata.* to [email protected] identified by "stata";
Копируете файл .env.example в .env и редактируете в нём настройки
После, выполняете миграцию БД
php artisan migrate
На этом настройка сервера окончена. Переходим к настройке роутера.
Базовый запрос с роутера выглядит таким образом;
https://{YOUR-DOMAIN}/ping?key={ROUTER_KEY}&isp1={ISP1-STATUS}&isp2={ISP2-STATUS}
Но если у вас роутер Mikrotik, скрипт будет выглядеть так:
:local isp1; :local isp2; :set isp1 "0"; :set isp2 "0"; # Fist ISP: check link /interface ethernet cable-test ether10 once do={ :if ($"status" = "link-ok") do={ :set isp1 "1"; } }; # Second ISP: check pppoe connection /interface pppoe-client { monitor pppoe-isp2 once do={ :if ($"status" = "connected") do={ :set isp2 "1"; } :if ($"status" = "waiting for packets...") do={ :if ([/ping 8.8.8.8 interface=pppoe-isp2 count=1 size=50 ]>0) do={ :set isp2 "1"; } } } } /tool fetch url="https://{YOUR-DOMAIN}/ping?key={ROUTER_KEY}&isp1=$[ $isp1 ]&isp2=$[ $isp2 ]" mode=http
В моём случае используется скрипт, где состояние каждого провайдера проверяется наличием пинга к публичному DNS серверу по своей таблице маршрутизации:
:global isp1; :global isp2; :set isp1 "0"; :set isp2 "0"; :local pingcountA 5; :local hostpingA 8.8.8.8; :local pingresultA [/ping $hostpingA interface=ISP1 count=$pingcountA]; :if ($pingresultA > 0) do={:set isp1 "1";} else={:set isp1 "0";} :local pingcountB 5; :local hostping 8.8.4.4; :local pingresultB [/ping $hostping interface=ISP2 routing-table=ISP2 count=$pingcountB]; :if ($pingresultB > 0) do={ :set isp2 "1";} else={:set isp2 "0";} /tool fetch url="https://{YOUR-DOMAIN}/ping?key={ROUTER_KEY}&isp1=$[ $isp1 ]&isp2=$[ $isp2 ]" mode=http
Скрипт помещаем в Scheduler на выполнение раз в минуту.
На этом настройка мониторинга закончена, если всё сделали правильно, по адресу вашего виртуального хоста будет доступна картинка, очень похожа на перекрепленную выше. https://{YOUR-DOMAIN}/
История за последние 30 дней будет доступна на странице: https://{YOUR-DOMAIN}/statistics
В ближайшее время скрипт будет обрастать новыми функциями, например уведомление на e-mail или sms информирование через API. Следите на https://github.com/maxiv/router-pulse