MikroTik The Dude e PowerShell

The Dude è un’applicazione gratuita per il monitoraggio della rete con funzionalità di scansione dei dispositivi e di rilevamento dei servizi ospitati da questi.

E’ possibile installare l’applicazione anche come servizio e accedervi tramite una console web. Per quanto riguarda il monitoraggio è possibile utilizzare ICMP, SNMP, DNS, TCP (http, ftp, smtp etc..), UDP (netbios, radius) ed utilizzare delle custom function tramite cui è possibile costruire una logica per testare un servizio o avviare ad esempio eseguibili esterni che eseguono il monitoraggio di determinati workload.

I concetti base su cui si basa The Dude sono i Device che rappresentano gli host da monitorare, le Probe che rappresentano i test da eseguire sui Device per monitorare i servizi, le Notification che rappresentano le azioni da eseguire se i test rilevano un cambio di stato nei servizio monitorato. Per ulteriori informazioni si veda il manuale online, per un elenco di Probe per monitore servizi e dispositivi hardware si veda il Probe Thread.

Come detto precedentemente le Probe possono essere customizzate ad esempio avviando un eseguibile che monitora un determinato workload, al seguente thread A short tutorial on extending the Dude using WMI viene mostrato un esempio di sviluppo di una semplice applicazione console VB.NET che tramite WMI monitora un Citrix XenServer.

Un altra possibilità è quella di utilizzare la possibilità offerta da PowerShell a partire dalla versione 2.0 mediante il cmdlet Get-Counter di poter leggere i Performance Counter di un computer locale o remoto e di configurare una Probe che sfrutti questa possibiltà per aggiungere a The Dude la funzionalità di raccogliere dati sui servizi eseguiti su host Windows mediante la lettura di Performance Counters.

Di seguito illustrerò i passi necessari per creare una Probe che legge la dimensione di un Database SQL Server (TestDB) ospitato da un host Windows (VMSQL01.sysadmin.local):

Passo 1: creare un file VMSql01TestDBSize.ps1 che conterrà la query PowerShell per leggere il valore del Perfomance Counter Data File(s) Size (KB) sul computer remoto:

try
{
Return (Get-counter -Counter “\\vmsql01.sysadmin.local\SQLServer:Databases(TestDB)\Data File(s) Size (KB)” -ErrorAction Stop).CounterSamples | Select -ExpandProperty RawValue
}
catch [Exception] {
Return “Error”
}

Passo 2: creare il file GetPerformanceConters.cmd che conterrà la chiamata al comando PowerShell (o ai comandi PowerShell se si intende per leggere vari Performance Counter su vari computer):

powershell c:\scripts\VMSql01TestDBSize.ps1 > c:\scripts\VMSql01TestDBSize.log

Come si può notare il valore del Perfomance Counter viene memorizzato in un file di testo (VMSql01TestDBSize.log), questo perché tramite la Probe configurata mediante una Function non si riesce leggere correttamente i dati restituiti da PowerShell. Ho provato in vari modi a gestire la chiamata diretta di PowerShell da una Probe, ma senza risultato come anche riportato nel seguente thread remote powershell script.

Il file GetPerformanceConters.cmd verrà eseguito tramite un’operazione.

image

Passo 3: Creare il file GetLog.cmd che legge e restituisce il contenuto di un file log il cui nome viene passato come parametro:

@type %1

Il file GetLog.cmd verrà utilizzato per costruire la Proble

image

Il comando impostato per controllare la disponibilità del servizio (Disponibile) verifica che l’esecuzione di GetLog.cmd che restituisce un array di tre elementi non contenga nel secondo (indice 1) il testo “Error”:

if(array_element(execute(“GetLog.cmd”,”VMSql01TestDBSize.log”,”C:\\Scripts”),1)=”Error”,0,1)

Il comando impostato per controllare il valore del Performance Counter (Valore) legge il valore del secondo elemento (indice 1) dell’array dividendolo per 1024 per ottenere i Mega Bytes:

array_element(execute(“GetLog.cmd”,”VMSql01TestDBSize.log”,”C:\\Scripts”),1)/1024

Passo 4: assegnazione della Proble al device:

image

image