Как реализовать мониторинг работоспособности сервисов на JScript?

Многим IT специалистам приходилось сталкиваться с такой задачей, как осуществлять мониторинг какого-нибудь процесса, сервиса на предмет его работоспособности, при условии, что физически постоянно Вы не можете этого делать, поэтому нужна автоматизация. Мне недавно тоже встала такая задача, и как я ее решил сейчас расскажу. Сразу хотелось бы отметить, что задача была решена с помощью WSH скрипта написанного на языке JScript и бат файла.

Задача состояла в следующем, мне необходимо было следить за работоспособностью одного Web сервера, который находился в удаленном офисе. Причем только по одному порту, так как происходило перенаправление на данном ip адресе, по данному порту на тот сервер, который был мне нужен. Поэтому доступность других портов меня не интересовала, так как сервера на других портах могли быть доступными, а нужный мне нет (например, в серверной задели кабель и связь отвалилась).

Пример реализации механизма для мониторинга доступности порта

Давайте приступим.

Утилита ping ОС Windows мне не подходила, с помощью telnet не знал, как автоматизировать, и, в конце концов, наткнулся на одну Microsoft-ую консольную программу, которая осуществляла своего рода ping по порту, это программа PortQryV2.

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

      
   PortQry -n [ip] -e [port] -l [путь к лог файлу] –y

Где

  • PortQry – это сама команда;
  • -n – ключ, для того чтобы задать ip адрес того компьютера, который нужно мониторить;
  • -e – ключ для порта, за которым необходимо следить;
  • -l – ключ для указания пути лог файла;
  • -y – ключ для того, чтобы, когда программа задавала вопрос о перезаписи лог файла, автоматом отвечать «Да».

Скрипт для мониторинга на JScript

Теперь перейдем к самому WSH скрипту. Данный скрипт делал следующее, он открывал лог файл, искал строку со сведениями о том, что сервис работает, далее, если работает, он запускал этот самый батник, который мы только что написали, для очередной проверки доступности сервера. Затем засыпал на 5 минут, потом запускал сам себя и прекращал работу данного экземпляра скрипта.

В случае отсутствия данных в логе о том, что сервер по данному порту доступен, скрипт начинал подавать звуковой сигнал на доступные динамики (колонки), затем выдавал сообщение о том, что сервер не доступен. Звуковой сигнал я сделал для того, чтобы сразу услышать, что что-то не то, так как данный скрипт крутился не на моем рабочем компьютере, а на соседнем, а сообщение для того, чтобы если я вдруг вышел, а потом пришел, взглянув на монитор, сразу увидел это уведомление.

А сейчас перейдем к коду скрипта, он написан на языке Jscript, я его прокомментировал, поэтому должно быть все понятно.

   
   //создание объекта для работы с файловой системой
   var fs = new ActiveXObject("Scripting.FileSystemObject");
   //создание объекта для работы командной строкой
   var WshShell = WScript.CreateObject("WScript.Shell");
   //переменная, для того чтобы открыть файл на чтение
   var ForReading = 1;
   //путь к файлу лога
   var filename = "C:\\PortQryV2\\log.txt"
   //переменная для записи статуса
   var state;
   //открываем лог на чтение
   f = fs.OpenTextFile(filename, ForReading ); 
   //циклом перебираем все строки в логе, до конца файла
   while (!f.AtEndOfStream) { 
                //если есть наша строка
       if (f.ReadLine() == "нужная нам строка") {
           //для проверки запустим батник
                WshShell.Run("state.bat");  
                //подождем 5 минут (параметр указан в миллисекундах)
                WScript.Sleep(300000);
                //запустим себя еще раз
                WshShell.Run("proverka.js");
                //завершим работу этого экземпляра скрипта
                WScript.quit();   
         } else {
         //если строку не нашли
                state = 1; 
        }
   }   
   // и на выходе проверяем
   if (state ==1 ){
        args=WScript.Arguments;
        //количество звуковых сигналов
        n=(args.length>0)?args(0):20;
        //задержка межу ними
        p=(args.length>1)?args(1):300;
        //циклом начинаем "пищать:)"
        for (i=0;i<n;i++){
          WshShell.Run("%comspec% /c echo "+String.fromCharCode(7),0,true);
          WScript.Sleep(p);
        }
        //и напоследок сообщение
        WshShell.Popup( "Сервер не доступен!!!" );
   }
   //после того как закроем сообщение, начнем все заново
   WshShell.Run("state.bat");
   WScript.Sleep(300000);
   WshShell.Run("proverka.js");
   WScript.quit();  

Вот такой простенький скрипт. Данный скрипт у меня пока работает, надеюсь, он и Вам поможет в решении какой-нибудь задачи.

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.