Время задержки отправки пакета (PING) с отправкой данных в VizIoT

В этом примере создадим инструмент, который будет регулярно измерять задержку (RTT) до веб-сайтов, IP-адресов или определённых TCP-портов и автоматически отправлять данные на сервер VizIoT для построения графиков.


Что потребуется

Оборудование

  • Любой компьютер с операционной системой Linux

Необходимые программы

  • nano — консольный текстовый редактор
  • grep — утилита для поиска текста
  • cURL — HTTP-клиент
  • hping3 — мощный инструмент генерации TCP/IP пакетов
  • crontab — инструмент планирования задач

Добавление и настройка устройства в VizIoT

  1. Создайте новое устройство: «Тест ПИНГ»

  2. Добавьте параметры:

    • tpgoogleПользовательский
    • tpipПользовательский
    • tpportПользовательский
  3. В разделе «Основные настройки» скопируйте:

    • Ключ доступа
    • Пароль доступа

Они понадобятся в скрипте.


Установка необходимых программ

RedHat / CentOS

sudo yum install hping3 curl

Debian / Ubuntu / Linux Mint

sudo apt-get install hping3 curl

Пример работы команды hping3

Запрос:

hping3 -c 1 -S -1 google.com

Пример ответа:

HPING google.com (...): icmp mode set, 28 headers + 0 data bytes
len=46 ip=74.125.232.40 ttl=128 id=16442 icmp_seq=0 rtt=15.1 ms

--- google.com hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 15.1/15.1/15.1 ms

Алгоритм получения времени задержки

1. Сохраняем результат команды

res_ping_google=$(hping3 -c 1 -S -1 google.com 2>&1)

2. Проверяем успешность доставки пакета

isOk=$(echo "$res_ping_google" | grep -Eo '1 packets received')

3. Извлекаем задержку (или 9999 при ошибке)

time_ping_google=9999
if [ "$isOk" == "1 packets received" ]; then
    time_ping_google=$(echo "$res_ping_google" \
      | grep -Eo 'min/avg/max = [^ ]*' \
      | grep -Eo '\/[^\/a-z]*\/' \
      | grep -Eo '[^\/a-z]*')
fi

Отправка данных на VizIoT через cURL

Пример:

curl --silent "https://viziot.com/update?key=______________&pass=______________&tpgoogle=$time_ping_google" > /dev/null

Создание bash-скрипта для автоматического запуска

Создаём файл:

nano /var/viziot_ping.sh

Полный скрипт

key='_____________'
pass='_________________'

# Ping веб-сайта
res_ping_google=$(hping3 -c 1 -S -1 google.com 2>&1)
# Ping IP адреса
res_ping_ip=$(hping3 -c 1 -S -1 8.8.8.8 2>&1)
# Ping TCP порта
res_ping_port=$(hping3 -p 8080 -c 1 -S -1 google.com 2>&1)

time_ping_google=9999
time_ping_ip=9999
time_ping_port=9999

isOk=$(echo "$res_ping_google" | grep -Eo '1 packets received')
if [ "$isOk" == "1 packets received" ]; then
  time_ping_google=$(echo "$res_ping_google" | grep -Eo 'min/avg/max = [^ ]*' | grep -Eo '\/[^\/a-z]*\/' | grep -Eo '[^\/a-z]*')
fi

isOk=$(echo "$res_ping_ip" | grep -Eo '1 packets received')
if [ "$isOk" == "1 packets received" ]; then
  time_ping_ip=$(echo "$res_ping_ip" | grep -Eo 'min/avg/max = [^ ]*' | grep -Eo '\/[^\/a-z]*\/' | grep -Eo '[^\/a-z]*')
fi

isOk=$(echo "$res_ping_port" | grep -Eo '1 packets received')
if [ "$isOk" == "1 packets received" ]; then
  time_ping_port=$(echo "$res_ping_port" | grep -Eo 'min/avg/max = [^ ]*' | grep -Eo '\/[^\/a-z]*\/' | grep -Eo '[^\/a-z]*')
fi

# Отправка данных
curl --silent \
"https://viziot.com/update?key=$key&pass=$pass&tpgoogle=$time_ping_google&tpip=$time_ping_ip&tpport=$time_ping_port" \
> /dev/null

Даем права на выполнение

chmod +x /var/viziot_ping.sh

Автоматический запуск через cron

Открываем crontab:

crontab -e

В начале файла должны быть строки:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

Добавляем запуск каждый минуту:

0-59 * * * * /var/viziot_ping.sh

Добавление виджетов

  1. Создайте панель: «Тест ПИНГ»

  2. Добавьте виджет «Время Пинга»:

    • тип: График
    • параметры: tpgoogle, tpip, tpport

Готово!

Теперь система автоматически измеряет задержку пакетов до сайта, IP-адреса и TCP порта и отправляет данные в VizIoT. Через несколько минут вы увидите первые точки на графике.