Автор#1

Постановка задачи

·        Нужен мониторинг VPS (Windows Server) на случай внеплановых отключений, перезагрузок.

·        Сервисы вроде ping-admin (тут описывали как настроить сервис https://tlap.io/kak-ustanovit-i-nastroit-vps-server-dlya-torgovli-na-foreks/) не решают задачу, т.к. для работы терминалов нужно авторизоваться в Windows. В случае внеплановой перезагрузки сервер даже без авторизации будет отвечать на ping, telnet и т.п.

·        Желательно бесплатное решение.

Вариант решения

·        Создать скрипт на https://script.google.com/, отправляющий раз в 15 минут на указанный email сообщение, что сервер недоступен.

·        На Windows Server в Task Scheduler добавляем задачу, которая каждые 15 минут будет слать информацию в наш скрипт на Google, что сервер работает и с ним все в порядке.

·        Если скрипт на Google получил уведомление от VPS, что VPS работает, то скрипт пропускает плановую отправку уведомления о недоступности сервера. Если подтверждения от VPS не пришло, то скрипт в плановом порядке отправляет уведомление на email.

 

Как настроить

1. Запускаем https://script.google.com/, создаем новый проект.

 

 

image1.thumb.png.3fc6246f1ea7d30788d6d3296682240a.png

2. В поле два указываем имя скрипта (в моем случае checkServer), в поле 3 пишем скрипт. Вместо mymail@gmail.com вставляете свой email.

 

image2.thumb.png.f5f271c20806c5494abf233adcc5683f.png

 

Скрипт:

 

function checkServer() {

  var lastCheckTime = PropertiesService.getScriptProperties().getProperty('lastCheckTime');

  if (lastCheckTime) {

    var currentTime = new Date();

    lastCheckTime = new Date(lastCheckTime);

    var timeDifference = (currentTime - lastCheckTime) / 1000 / 60; // Разница во времени в минутах

 

    if (timeDifference > 15) { // Проверяем, прошло ли более 15 минут с последней проверки

      sendEmail("Server is not reachable or admin is not logged in.");

    }

  } else {

    sendEmail("Server has never confirmed its status.");

  }

}

 

function confirmServer() {

  var currentTime = new Date();

  PropertiesService.getScriptProperties().setProperty('lastCheckTime', currentTime);

}

 

function sendEmail(message) {

  var emailAddress = "mymail@gmail.com"; // Замените на ваш email

  var subject = "Server Status Notification";

  MailApp.sendEmail(emailAddress, subject, message);

}

 

// Добавляем функцию doGet для обработки GET-запросов

function doGet(e) {

  var func = e.parameter.func;

  if (func === "confirmServer") {

    confirmServer();

    return ContentService.createTextOutput("Server confirmed successfully");

  } else if (func === "checkServer") {

    checkServer();

    return ContentService.createTextOutput("Server status checked");

  } else {

    return ContentService.createTextOutput("Invalid function name").setMimeType(ContentService.MimeType.TEXT);

  }

}

 

3. Далее кнопка «Сохранить» (3), после открыть меню триггеры (4), выбрать «Добавление триггера» (5).

 

image3.thumb.png.8a01e77cd40d8d6969c15909c407c6a5.png

 

image4.thumb.png.226b39723e27e55f77626f97616f94fe.png

 

4. Настройки триггера.

Вводим следующие настройки.

·        Название нашего скрипта (checkSever).

·        Основное развертывание.

·        Триггер по времени.

·        По минутам.

·        Раз в 15 минут.

Далее «Сохранить». Гугл запросит права доступа к скрипту от имени вашего аккаунта, подтвердите их.

 

image5.thumb.png.2e0191769277281821c965c7e749a4e3.png

 

5. Получить ссылку. Жмем «Начать развертывание» (6), выбираем «Новое развертывание» (7). Выбираем тип (8) – Веб-приложение (9). После еще раз подтверждаем кнопкой «Начать развертывание» (10).

image6.thumb.png.d3da92768e82a8f716043540400a2549.png

image7.thumb.png.058dac3fa3fea38cf10edc082de877c4.png

 

image8.thumb.png.68bd2ffeb5746ba893af19ff07e2c5a1.png

 

 

5. В итоге получаем ссылку, которую можно скопировать кнопкой (11).

Ссылка выглядит примерно так: https://script.google.com/macros/s/AKfycbyhkLgiwagzKwaHtAXsKtik8TJlG0hT5JDkhwEWkybwTnGQ3pTbVH9HQn0XSVB-hA2GFQ/exec

 

image9.thumb.png.fc9ae948aaae1cda7f801cbdf9b8cf27.png

 

6. После ждем 15 минут. Этот скрипт будет отправлять на вашу почту каждые 15 минут сообщение «Server Status Notification: Server is not reachable or admin is not logged in.». При желании можно сделать эти сообщения на русском в теле скрипта.

7. Теперь на Windows Server надо настроить Планировщик, который будет уведомлять скрипт Google, что сервер работает. У меня Windows Server 2012, настройки пишу под него. Для этого открываем Пуск – Администрирование – Планировщик заданий. Выбираем «Создать задачу» (1).

 

image10.thumb.png.08703516c44eb7e9f7be60ea5133b9a7.png

 

8. Общие настройки.

·        При выполнении задачи использовать следующую учетную запись пользователя – ваш логин.

·        Выполнять только для пользователей, вошедших в систему.

·        Выполнять с наивысшими правами.

 

image11.png.3808a14f49deca5a45ec27e5947301a0.png

 

9. Вкладка Триггеры – Создать. Создаем триггер со следующими настройками.

 

image12.png.1e27395693f6c615f5cf086201049ff7.png

 

10. Проверить наличие утилиты curl. Утилита curl входит в стандартный комплект Windows. У меня ее не оказалось пришлось установить ее.

·        Проверить наличие можно таким образом. Нажимаете Win+R, команда cmd. Далее в командной строке вводите curl --version (два тире это не опечатка, надо именно так). Если в ответ видите версию, то вам повезло, переходите к пункту 11.

·        Иначе скачиваете отсюда эту утилиту https://curl.se/windows/ и распаковываете в любую папку на VPS. Например, c:\curl\.

·         Далее открываете Свойства системы (Win+Pause/Break), выбираете Дополнительные параметры системы - Переменные среды – Переменная Path, нажимаете Изменить. К указанному там тексту через точку с запятой добавляете папку, куда распаковали утилиту.

В моем случае было: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

Добавила: ;C:\curl\bin

Стало: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\curl\bin

 

image13.thumb.png.8730e2259837aa5b67b4489683a40dc8.png

 

 

11. Вкладка Действия – Создать. Программа или сценарий – Curl. В поле аргументы пишем следующую ссылку.

Исходная ссылка: https://script.google.com/macros/s/AKfycbyhkLgiwagzKwaHtAXsKtik8TJlG0hT5JDkhwEWkybwTnGQ3pTbVH9HQn0XSVB-hA2GFQ/exec

К ней добавляем текст: ?func=confirmServer

Получаем: https://script.google.com/macros/s/AKfycbwUbcvDnPIlFnO_HCrH89bJkhTixTHGiyz-Oqh_xgixCC1p4o-0zdLWNiFPnQ-p7iY/exec?func=confirmServer

P.S. Где-то находила, что текст должен писать в кавычках. У меня работать стало если текст написан без кавычек.

 

image14.png.729a8dc38db43a9e7aa51653bc9be1bf.png

 

12. Вкладка Условия, флажки не ставим.

 

image15.png.022470b88d85b15725fe4bac6bd8936c.png

 

13. Вкладка Параметры.

 

image16.png.1a8e15564e38d5a49ee0b0ba5681df06.png

 

14. На этом все. Если сервер работает и уведомляет скрипт Google, то все ок. Если сервер перестает слать уведомления скрипту Google, то вы будете получать уведомления.

 

PS админы, если не в той теме - перенесите, пожалуйста, куда нужно...Мне кажется многим будет полезна информация..

 

 

#2

Спасибо, думаю многим будет полезно. 

#3

Еще вариант включить сайт (обычная пустая страница, даже без домена) на Ngnix а ping-admin.com проверятся этот сайт запросом http (методом head) на доступность просто по ip (чтобы не резольвить адрес www, резольверы частенько тупят). Если сервер перезагрузился, то Ngnix выключен и сайт не доступен следовательно ping-admin.com не получив ответа начинает паниковать слать смски, звонить не пропустишь. Заморочек в настройке вообще ноль. Просто пинговать сервер занятие малоэффективное или почти бессмысленное. А скриптом много заморочек, да и уведомления на почту такое себе, кто следит за уведомлениями с почты.

Изменено 18 января, 2025 пользователем JBocs

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025