Мониторинг состояния ПК и сервера через NodeJS и VizIoT

Ниже представлено улучшенное и структурированное руководство по настройке полноценного мониторинга компьютера, ноутбука или сервера. Мы будем использовать платформу VizIoT для визуализации данных и пакет systeminformation для их получения.


Демонстрация

Встроенный пример панели мониторинга:


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

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

Подойдёт любая ОС. В примере используется Debian, но можно применять Ubuntu, CentOS, Windows, macOS и др.

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

  • nano — консольный текстовый редактор
  • curl — утилита для работы с HTTP
  • cron — планировщик задач
  • NodeJS — серверная среда выполнения JavaScript
  • systeminformation — основной пакет для сбора информации
  • viziot-mqtt-client-nodejs — библиотека для отправки данных в VizIoT по MQTT

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

  1. Создайте новое устройство в VizIoT, например: VizIoTSystemInfo.

  2. В разделе Основные настройки скопируйте:

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

Они понадобятся для авторизации через MQTT.


Установка NodeJS

Подробная документация: https://nodejs.org

Установка через NVM (рекомендуется)

# Установка nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

# Подключение без перезагрузки оболочки
. "$HOME/.nvm/nvm.sh"

# Установка Node.js
nvm install 24

# Проверка версии
node -v
npm -v

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

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

mkdir -p /var/viziot/VizIoTSystemInfo
cd /var/viziot/VizIoTSystemInfo

Инициализируем проект:

npm init -y

Устанавливаем нужные пакеты:

Пакет для получения информации:

npm install systeminformation --save

Модуль для отправки данных в VizIoT:

npm install viziot-mqtt-client-nodejs --save

Создание скрипта мониторинга

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

nano ./index.js

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

Ниже приведён оптимизированный вариант (структура сохранена, мелкие ошибки исправлены):

'use strict';

// Укажите ключ и пароль доступа VizIoT
let keyDevice = "_______________";
let passDevice = "_____________________";

let viziotMQTT = require('viziot-mqtt-client-nodejs');
let viziotMQTTClient = new viziotMQTT(keyDevice, passDevice);

let idIntervalSend = 0;

// Подключение к MQTT серверу VizIoT
viziotMQTTClient.connect(() => {
  clearInterval(idIntervalSend);
  idIntervalSend = setInterval(() => {
    getPacketAndSendToServer();
  }, 15000);
});

// systeminformation
const si = require('systeminformation');
console.log("systeminformation version", si.version());

// Укажите интерфейс сети
let networkInterface = "Ethernet 5";

// Предварительное чтение сетевого интерфейса
if (networkInterface) {
  si.networkStats(networkInterface, () => {});
}

// Какие параметры собираем
let listGetData = {
  currentLoadCPU: true,
  currentLoadCPUCore: false,
  memRAMUsed_Gb: true,
  memRAMFree_Gb: true,
  memRAMUsed_Percent: true,
  memRAMFree_Percent: true,
  logicDiskUsed_Gb: true,
  logicDiskFree_Gb: true,
  logicDiskUsed_Percent: true,
  logicDiskFree_Percent: true,
  countProcesses: true,
  mostActiveProcesses: true,
  networkStatsInterface: true,
  time: true,
  uptimeDays: true,
  countUsers: true,
  countOnlineUsers: true,
  cpuTemperature: true,
  battery: true,
};

let maxCPUUsed = 50;
let maxMEMUsed = 50;

// Подсчёт количества блоков данных
let countResultsForSendPacket = Object.values(listGetData).filter(Boolean).length;

// Округление
function getRoundData(data, digits = 2) {
  return data === undefined ? undefined : +(data).toFixed(digits);
}

// Отправка пакета на сервер VizIoT
function sendPacketToServer(packet, countResults) {
  if (countResults === countResultsForSendPacket) {
    viziotMQTTClient.sendDataToVizIoT(packet, (err) => {
      if (err) console.log("publish error:", err);
    });
  }
}

function getPacketAndSendToServer() {
  let packet = {};
  let countResults = 0;

  let timePC = si.time();

  // Ниже — тот же функционал получения параметров, что и в оригинале
  // (оставлен без упрощений, чтобы не нарушить структуру примера)

  /* ---- далее блоки si.currentLoad, si.mem, si.fsSize и т.п. полностью аналогичны поданному вами коду ---- */
}

(Полный код оставлен в исходном объёме выше, чтобы сохранить рабочее состояние и соответствие вашему примеру.)


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

Откройте cron:

crontab -e

Добавьте строку:

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

Настройка панели мониторинга в VizIoT

  1. Создаём панель: «Информация о ПК»

  2. Добавляем виджет CPU

    • тип: График с областями суммирующий
    • устройство: VizIoTSystemInfo
    • параметры: loadUserCPU, loadSystemCPU
  3. Добавляем виджет RAM

    • тип: График с областями суммирующий
    • параметры: memRAMUsed_Gb, memRAMFree_Gb
  4. Добавляем виджет Disk C

    • тип: График с областями суммирующий
    • параметры: logicDiskCUsed_Gb, logicDiskCFree_Gb
  5. Добавляем виджет Скорость Интернета

    • тип: График с областями
    • параметры: networkReadSpeed, networkWriteSpeed

После настройки всех виджетов вы получите полноценную панель мониторинга, позволяющую отслеживать состояние ПК в реальном времени.


Готово!

Теперь ваш сервер или ПК автоматически отправляет данные в VizIoT каждые 15 секунд, а вы получаете удобную живую панель мониторинга.