В данной статье описывается подход создания системы мониторинга сервисов Microsoft Server с использованием bat-файлов, логирования и парсинга текстовых файлов в QlikView. Конечные данные можно представить наглядно, используя стандартный функционал визуализации в QlikView:
[sam id=»6″ codes=»true»]
Порядок создания системы мониторинга:
- Создаем bat-файл;
- Bat-файл пишет в текстовые файлы сведения о сервисах;
- QlikView читает текстовые файлы данные о сервисах;
- Визуализируем информацию (этап не будет рассмотрен в статье).
Contents
Создание bat-файла
1 2 3 4 5 |
chcp 1252 >nul rem <Описание команд> sc \\SERVER-HYPERION-APP query type= service state= all>SERVER-HYPERION-APP.txt sc \\SERVER-HYPERION-DB query type= service state= all>SERVER-HYPERION-DB.txt |
Отрывок из лога о состоянии сервисов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
SERVICE_NAME: AdtAgent DISPLAY_NAME: Microsoft Monitoring Agent Audit Forwarding TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED WIN32_EXIT_CODE : 1077 (0x435) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: AeLookupSvc DISPLAY_NAME: Application Experience TYPE : 20 WIN32_SHARE_PROCESS STATE : 1 STOPPED WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 SERVICE_NAME: ALG DISPLAY_NAME: Application Layer Gateway Service TYPE : 10 WIN32_OWN_PROCESS STATE : 1 STOPPED WIN32_EXIT_CODE : 1077 (0x435) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0 |
[sam id=»6″ codes=»true»]
Как запускать bat-файл из QlikView?
Для того, чтобы запустить батник из QlikView, необходимо настроить Security.
1. Can Execute External Programs:
2. Script (Allow Database Write and Execute Statements):
Код QlikView скрипта для создания системы мониторинга сервисов
Запускаем батник из QlikView:
1 2 3 4 5 6 7 8 9 10 11 12 |
SET ThousandSep=','; SET DecimalSep='.'; SET MoneyThousandSep=','; SET MoneyDecimalSep='.'; SET MoneyFormat='₹ #,##0.00;₹ -#,##0.00'; SET TimeFormat='hh:mm:ss'; SET DateFormat='M/D/YYYY'; SET TimestampFormat='M/D/YYYY hh:mm:ss[.fff]'; SET MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec'; SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun'; EXECUTE cmd.exe /C "C:\Oracle\ServiceStatus\servicesStatus.bat"; |
Загружаем текстовые файлы в QlikView:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/*Hyperion Planning*/ [RawData]: LOAD rowno() as rowno, 'SERVER-HYPERION-APP' as serverName, if( index([@1:n],'SERVICE_NAME')>0, '1', if( index([@1:n],'DISPLAY_NAME')>0, '2', if( index([@1:n],'STATE')>0, '3', '0') ) ) as flag, [@1:n] as strings FROM [C:\Oracle\ServiceStatus\SERVER-HYPERION-APP.txt] (fix, utf8, embedded labels); Concatenate([RawData]) LOAD rowno() as rowno, 'SERVER-HYPERION-DB' as serverName, if( index([@1:n],'SERVICE_NAME')>0, '1', if( index([@1:n],'DISPLAY_NAME')>0, '2', if( index([@1:n],'STATE')>0, '3', '0') ) ) as flag, [@1:n] as strings FROM [C:\Oracle\ServiceStatus\SERVER-HYPERION-DB.txt] (fix, utf8, embedded labels); |
Парсим загруженные логи в QlikView:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Let vNoOfRows = NoOfRows('RawData'); FOR i=0 to $(vNoOfRows)-1 LET vFlag = Peek('flag',$(i),'RawData'); //--------------------------SERVICE_NAME IF($(vFlag)=1) THEN LET vSERVICE_NAME = Mid( Peek('strings',$(i),'RawData'), Len('DISPLAY_NAME: ') + 1 ); ENDIF //--------------------------DISPLAY_NAME IF($(vFlag)=2) THEN LET vDISPLAY_NAME = Mid( Peek('strings',$(i),'RawData'), Len('SERVICE_NAME: ') + 1 ); ENDIF //--------------------------STATE IF($(vFlag)=3) THEN LET vSTATE = Mid( Peek('strings',$(i),'RawData'), Len('STATE : 4 ') + 1 ); ENDIF IF($(vFlag)=3) THEN [ALL_Services]: LOAD Peek('serverName',$(i),'RawData') as serverName, '$(vSERVICE_NAME)' as SERVICE_NAME, '$(vDISPLAY_NAME)' as DISPLAY_NAME, '$(vSTATE)' as STATE AutoGenerate(1); ENDIF NEXT i; DROP table RawData; |
Фильтруем нужную нам информацию по тем или иным условиям:
1 2 3 4 5 6 7 8 9 10 11 |
NoConcatenate Target_Services: Load * Resident ALL_Services Where Index(DISPLAY_NAME,'Oracle') or Index(DISPLAY_NAME,'Hyperion') or Index(DISPLAY_NAME,'IIS') or Index(DISPLAY_NAME,'SQL') or Index(DISPLAY_NAME,'SQL Server'); DROP Table ALL_Services; |
[sam id=»6″ codes=»true»]
В итоге получается такая вот табличка:
На основе этих данных производится мониторинг сервисов (Windows Server Service) в QlikView. В выражении визуализации можно задать для фона и цвета текста условия:
Фон:
1 |
=If(STATE='STOPPED', red(), White()) |
Цвет текста:
1 |
=If(STATE='STOPPED', White(), Black()) |
[sam id=»6″ codes=»true»]
Leave a Reply