NodeJS -> Мониторинга IP адреса и порта

Рассмотрим пример скрипта для Мониторинга доступности IP адреса и порта или сайта в интернете. Наш скрипт будет проверять доступность некоторых сайтов и IP адресов с интервалом в 15 секунд и передавать на сервер VizIoT затраченное время между отправкой запроса и получением ответа «PING». Если заданный узел будет недоступен, то значением PING будет -500.

Что нам потребуется:

  • Компьютер: Любой компьютер с операционной системой Linux или Windows
  • Программы:
    • cURL — программа командной строки, для работы с HTTP
    • cron —демон, использующийся для периодического выполнения заданий.
    • NodeJS — это серверная платформа для работы с JavaScript через движок V8.
    • tcp-ping— пакет NodeJS для проверки доступности ip адреса.
    • viziot-mqtt-client-nodejs – пакет NodeJS для взаимодействия с сервером VizIoT по протоколу MQTT.

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

  1. Добавим новое устройство в VizIoT с именем «VizIoTPinger»
  2. В «Основных настройках» устройства скопируем Ключ доступа и Пароль доступа.

Установка NodeJS:

Смотрите в «документацию NodeJS». Стандартная установка для Windows скачать пакет с Nodejs.org и установить. А для Ubuntu или Debian:

# Using Ubuntu
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt-get install -y nodejs

Создания программы на NodeJS в операционной системе Debian:

Создадим директорию:

mkdir /var/viziot/
mkdir /var/viziot/VizIoTPinger

перейдем в директорию:

cd /var/viziot/VizIoTPinger

Создадим NodeJS проект:

npm init

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

  • tcp-ping - пакет NodeJS для проверки доступности ip адреса;
    npm install tcp-ping --save
  • viziot-mqtt-client-nodejs - пакет NodeJS позволяет быстро и легко отправлять данные на сервер VizIoT по протоколу MQTT:
    npm install viziot-mqtt-client-nodejs --save

Создадим файл скрипта:

nano ./index.js

Содержание скрипта:

'use strict';

//#ключ и пароль доступа VizIoT
let keyDevice = '__________________';
let passDevice = '______________________';

//Массив WEB ресурсов которые будут пинговатся
//Состоят из:
//	key - название параметра который будет передаваться на сервер 
//	address - адрес WEB ресурса, IP адрес устройства
//	port - порт по которому доступно устройство
let pingList = [
	{
		key: "microsoft_ping",
		address: 'microsoft.com',
		port: 80
	}, {
		key: "google_ping",
		address: 'google.com'
	}, {
		key: "ipCamera_ping",
		address: '192.168.0.158',
		port: 554
	}
];

let tcpp = require('tcp-ping');
function pingIpAndPortAddress (item, callback) {
	let pingItem = {
		address: item.address,
		port: item.port || 80,
		attempts: 3,
		timeout: 5000
	};
	tcpp.ping(pingItem, function (err, data) {
		if (data.avg >= 0) {
			callback(item, +data.avg.toFixed(2))
		} else {
			callback(item, -500);
		}
	});
};

function getPacketAndSendToServer() {
	let countResults = 0;
	let packet = {
		'date': parseInt(new Date().getTime()/1000)
	};
	for (let ii = 0; ii < pingList.length; ii++) {
		pingIpAndPortAddress(pingList[ii], function (item, timeout) {
			packet[item.key] = timeout;
			console.log(item, timeout);
			countResults++;
			if (countResults == pingList.length) {
				viziotMQTTClient.sendDataToVizIoT(packet, function (err) {
					if (err) {
						console.log("publish", err);
					}
				});
			}
		});
	}
}

let viziotMQTT = require('viziot-mqtt-client-nodejs');
let viziotMQTTClient = new viziotMQTT(keyDevice, passDevice);
viziotMQTTClient.connect(function () {
	getPacketAndSendToServer();
});

let intervalTime = 60000;//интервал проверки доступности WEB сервиса
setInterval(function () {
	getPacketAndSendToServer();
}, intervalTime);

Данный скрипт будем запускать при старте системы. Для этого добавим запись в cron. Запустим редактор cron:

crontab -e

И в самый конец добавим строку, которая будет запускать скрипт «/var/viziot/VizIoTPinger/index.js»:

@reboot node /var/viziot/VizIoTPinger/index.js > /var/viziot/VizIoTPinger/output.txt &

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

  1. Создадим новую панель с именем «Доступность интернет сервисов»
  2. Добавим виджет «Время Пинга»
    1. тип: «График с областями суммирующий»;
    2. устройство: «VizIoTPinger»;
    3. параметры: loadUserCPU, loadSystemCPU;
  3. Теперь вы все настроили и можете наблюдать за доступность WEB сервисов.
  4. Также можно настроить уведомления на случай недоступности одного или нескольких WEB сервисов:
    1. Перейдите в «Уведомления»
    2. нажмите «Добавить уведомление»
    3. выберите в списке устройств «VizIoTPinger»
    4. выберите способ получения уведомлений
    5. выберите ключ параметра, например, «google»
    6. выберите тип срабатывания «генерация при условии»
    7. выберите значение параметра «меньше (<)» и задайте значение «0»
    8. установите галочку в пункте «Уведомлять при возвращении в диапазон значений?»
    9. Нажмите кнопку «Создать уведомление».
    10. Все вы настроили уведомления. И теперь если параметру google будет присвоено значении -500 то к вам придёт уведомление. И когда WEB сервиса восстановится вам придёт уведомление о восстановлении нормального состояние параметра.