Фэндом


ЗадачаПравить

Выполнять подсчет доступности удаленных хостов (процент доступности)за произвольный период времени.

Принцип работыПравить

  1. Скрипт на bash будет выполнятся с некоторым интервалом производить пингование нужных хостов и сохранять результаты проверки в базу данных на mysql
  2. Путем запроса к базе данных мы получаем значение доступности канала за произвольный период

Средства и методыПравить

Операционная система

  • ubuntu server 10.04 LTS

Сервер баз данных mysql5

Установка компонентовПравить

apt-get update
apt-get install mysql-server mysql-client

При установке сервера запоминаем пароль который установили

Создание базыПравить

Создаем пустую базу

mysqladmin create pingmysql -p

Заходим в консоль сервера mysql

mysql -p

Выполняем запрос, который создаст таблицу stat в нашей базе с нужными полями, а затем создаст пользователя pingmysql с паролем pngsqlpass под которым мы будем работать с нашей базой в дальнейшем

USE pingmysql;
CREATE TABLE stat (
stdate           datetime NOT NULL default '0000-00-00 00:00:00',
ipaddr           varchar(40),
transmitted      SMALLINT,
received         SMALLINT,
loss             SMALLINT,
time             SMALLINT
);
grant usage on *.* to pingmysql@localhost identified by 'pngsqlpass';
grant all privileges on pingmysql.* to pingmysql@localhost;
exit

Создаем скриптПравить

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

nano /etc/pingmysql

Скопируем и вставим:

mysqlusr=pingmysql
mysqlpass=pngsqlpass
check_period="2s" # Частота опроса
packet_count=10
ipaddr=$1

while [ 1 ]
do

rn=$RANDOM
ping $ipaddr -f -c $packet_count | grep 'packets transmitted' | sed -r 's/packets transmitted|received|packet loss|%|time |ms|\s+//g' >tmpping-$rn
stdate=`date +"%Y-%m-%d %T"`
transmitted=`awk -F ',' '{print $1}' tmpping-$rn`
received=`awk -F ',' '{print $2}' tmpping-$rn`
loss=`awk -F ',' '{print $3}' tmpping-$rn`
time=`awk -F ',' '{print $4}' tmpping-$rn`

echo "use pingmysql;INSERT INTO stat (stdate,ipaddr,transmitted,received,loss,time) \
values ('$stdate','$ipaddr','$transmitted','$received','$loss','$time');"  >tmppingsql-$rn

mysql -u$mysqlusr -p$mysqlpass < tmppingsql-$rn
rm tmpping-$rn tmppingsql-$rn

sleep ${check_period}
done

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

chmod +x /etc/pingmysql

Запускаем так (имя_скрипта контролируемый адрес и знак &)

/etc/pingmysql 10.0.32.1 &
  • Одна запись в базу имеет размер 32 байта. Таким образом за месяц при интервале опроса раз в 2 секунды и одном контролируемом адресе получаем размер:
32*60/2*60*24*31/1024/1024=40,9 Мбайт/месяц

Статистика из базыПравить

Для выполнения запросов заходим в консоль mysql

mysql -p

Запрос на подсчет доступности хостов

use pingmysql;select ipaddr as host,avg(time) as avg_response,sum(received)/sum(transmitted)*100 as availability from stat group by ipaddr;

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на Фэндоме

Случайная вики