2
Янв
2016-01-02_17-03-09

Скрипт удалённого мониторинга доступности провайдеров Mikrotik для Centos 6

Представим что у вас есть удалённый офис или просто стоит какое либо оборудование в определенном удалении от вас. Для стабильной работы, вы даже завели второго провайдера на роутер Mikrotik и хотели бы знать поминутный аптайм своих провайдеров на нём. Для этого будем использовать отличный скрипт router-pulse от Максима Иванченко, чтобы это всё реализовать.

Выглядит это так:

2016-01-02_17-02-55

2016-01-02_17-03-252016-01-02_17-03-09

Минимальная версия 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 stata@localhost identified by "stata";

Копируете файл .env.example в .env и редактируете в нём настройки

После, выполняете миграцию БД

php artisan migrate

На этом настройка сервера окончена. Переходим к настройке роутера.

Базовый запрос с роутера выглядит таким образом;

http://{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="http://{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="http://{YOUR-DOMAIN}/ping?key={ROUTER_KEY}&isp1=$[ $isp1 ]&isp2=$[ $isp2 ]" mode=http

Скрипт помещаем в Scheduler на выполнение раз в минуту.

На этом настройка мониторинга закончена, если всё сделали правильно, по адресу вашего виртуального хоста будет доступна картинка, очень похожа на перекрепленную выше. http://{YOUR-DOMAIN}/

История за последние 30 дней будет доступна на странице: http://{YOUR-DOMAIN}/statistics

В ближайшее время скрипт будет обрастать новыми функциями, например уведомление на e-mail или sms информирование через API. Следите на https://github.com/maxiv/router-pulse

Комментариев нет

Leave a Comment