Постановка задачи
· Нужен мониторинг 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/, создаем новый проект.
2. В поле два указываем имя скрипта (в моем случае checkServer), в поле 3 пишем скрипт. Вместо mymail@gmail.com вставляете свой email.
Скрипт:
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).
4. Настройки триггера.
Вводим следующие настройки.
· Название нашего скрипта (checkSever).
· Основное развертывание.
· Триггер по времени.
· По минутам.
· Раз в 15 минут.
Далее «Сохранить». Гугл запросит права доступа к скрипту от имени вашего аккаунта, подтвердите их.
5. Получить ссылку. Жмем «Начать развертывание» (6), выбираем «Новое развертывание» (7). Выбираем тип (8) – Веб-приложение (9). После еще раз подтверждаем кнопкой «Начать развертывание» (10).
5. В итоге получаем ссылку, которую можно скопировать кнопкой (11).
Ссылка выглядит примерно так: https://script.google.com/macros/s/AKfycbyhkLgiwagzKwaHtAXsKtik8TJlG0hT5JDkhwEWkybwTnGQ3pTbVH9HQn0XSVB-hA2GFQ/exec
6. После ждем 15 минут. Этот скрипт будет отправлять на вашу почту каждые 15 минут сообщение «Server Status Notification: Server is not reachable or admin is not logged in.». При желании можно сделать эти сообщения на русском в теле скрипта.
7. Теперь на Windows Server надо настроить Планировщик, который будет уведомлять скрипт Google, что сервер работает. У меня Windows Server 2012, настройки пишу под него. Для этого открываем Пуск – Администрирование – Планировщик заданий. Выбираем «Создать задачу» (1).
8. Общие настройки.
· При выполнении задачи использовать следующую учетную запись пользователя – ваш логин.
· Выполнять только для пользователей, вошедших в систему.
· Выполнять с наивысшими правами.
9. Вкладка Триггеры – Создать. Создаем триггер со следующими настройками.
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
11. Вкладка Действия – Создать. Программа или сценарий – Curl. В поле аргументы пишем следующую ссылку.
Исходная ссылка: https://script.google.com/macros/s/AKfycbyhkLgiwagzKwaHtAXsKtik8TJlG0hT5JDkhwEWkybwTnGQ3pTbVH9HQn0XSVB-hA2GFQ/exec
К ней добавляем текст: ?func=confirmServer
P.S. Где-то находила, что текст должен писать в кавычках. У меня работать стало если текст написан без кавычек.
12. Вкладка Условия, флажки не ставим.
13. Вкладка Параметры.
14. На этом все. Если сервер работает и уведомляет скрипт Google, то все ок. Если сервер перестает слать уведомления скрипту Google, то вы будете получать уведомления.
PS админы, если не в той теме - перенесите, пожалуйста, куда нужно...Мне кажется многим будет полезна информация..
