Powershell Universal Dashboard als Consultancy tool

Ik denk dat iedere consultant het wel kent:

Je komt bij een nieuwe klant vanwege een performance analyse of voor het onderzoeken van een specifiek probleem, en je vraagt of het mogelijk is specifieke performance metrics op te halen van een omgeving zodat je daar de analyse op kan uitvoeren. 

Je begrijpt waarschijnlijk al dat deze vraag beantwoord gaat worden met een naam van een monitoring systeem samen met een opmerking dat het niet zeker is of de gewenste gegevens wel worden gelogd.

In mijn geval werk ik veel met Citrix gebaseerde omgevingen vanwege mijn specialisatie, waardoor de gegevens die ik nodig heb vaak gaan over de volgende componenten: 

  • De Hypervisor laag
  • De storage laag (vanwege de WriteCache disk en Pagefile)
  • De Citrix XenApp Workers
  • De Citrix Storefront omgeving
  • De Citrix Desktop Delivery Controllers
  • Welke applicaties worden gebruikt
  • Hoeveel gebruikers betreft het
  • Etc.

Nog te vaak zie ik dat veel van de antwoorden nog niet snel beantwoord kunnen worden omdat er dan alleen gekeken wordt naar de Backend. De Citrix Omgeving wordt daarbij gezien als “Werkplek” en als deze niet presteert, dan ligt dat zeker niet aan de Backend!

Om dit te ondervangen ben ik sinds enige tijd begonnen met in gebruik nemen van een tool, welke ik graag met jullie zou delen! Namelijk de “Powershell Universal Dashboard”tool!

Powershell Universal Dashboard varianten

Informatie over deze tool is te vinden op de volgende locaties:

  • Informatie over Wat je ermee kunt, prijzen en edities
https://ironmansoftware.com/powershell-universal-dashboard/
https://ironmansoftware.com/universal-dashboard-pricing/
  • Hoe de tool te gebruiken
https://docs.universaldashboard.io/

De powershell universal dashboard tool is verkrijgbaar in 2 varianten, nml: 

  • Enterprise Edition
  • Community Edition

Kijkend naar de feature list van beide versies blijkt dat je al een heel eind komt wanneer je gebruik maakt van de Community Editie! De grootste limitaties van de gratis versie zijn voornamelijk

  • Dashboard scripts runnen maximaal 1 uur, daarna moet je ze opnieuw starten
  • Built-in Authenticatie features werken enkel in betaalde versie 

De betaalde versie lost deze limitatie uiteraard op!

Hoe deze tool in te zetten in je Consultancy toolkit?

Middels dit blog artikel wil ik jullie graag een voorbeeld geven van een script, waarmee ik de volgende vraag beantwoord wil krijgen:

  • Welke applicaties gebruiken de meeste CPU resources
  • Welke applicaties gebruiken de meeste Memory resources

Bovenstaande vragen zijn natuurlijk ook gewoon even snel op te vragen per server als je daarvoor de nodige powershell scripts hebt en deze met enige regelmaat gebruikt om deze informatie te verzamelen. Maar wat als je deze gegevens wilt hebben over alle Servers binnen een silo? Of als iemand met iets minder kennis deze informatie bij moet gaan houden na bijvoorbeeld het overdragen van een opgeleverd project? Gebruik dan de volgende stappen om gratis een mooi web based dashboard te maken waarin de uiteindelijk beheerders eenvoudig de Applicaties kunnen controleren op Resource verbruik! 

Systeem vereisten

Om de Powershell Universal Dashboards te kunnen gebruiken heb je minimaal het volgende nodig:

  • “Windows Powershell v5.1 of later” of “Powershell Core v6.1 of later”
  • .NET Framework 4.7.2 

Het klaarzetten / Installeren van de nodige Powershell Universal Dashboard modules

  • Log in op de server / werkplek waar je de Powershell Universal dashboard wilt laden. 

LET OP:De webinterface met daarin het dashboard zal vervolgens op deze host beschikbaar worden gesteld. Het is dan ook mogelijk, mits de host dit toe laat, om remote deze web dashboard te benaderen!

  • Voer het volgende commando uit om de nodige modules te installeren

# Installeer de nodige Modules door uitvoeren van dit commando: 

# Installeer de nodige Modules door uitvoeren van dit commando: 
Install-ModuleUniversalDashboard.Community-scopeAllUsers         `
                                            -Force                  `
                                            -AcceptLicense3>$null 

Wanneer je de volgende melding krijgt ben je waarschijnlijk vergeten de parameter “-AcceptLicense” mee te geven:

  • Controleer of de betreffende module is geïnstalleerd door het volgende commando uit te voeren: 
# Controleer of betreffende module is geinstalleerd 
get-InstalledModule-Name"UniversalDashboard.Community" 
  • Als de module is geïnstalleerd kun je deze laden middels het volgende commando:
# Laad de nieuw geinstalleerde module
Import-ModuleUniversalDashboard.Community-Force 
  • Als de modules Correct zijn geladen gebruik dan het volgende commando om een voorbeeld dashboard te installeren en starten middels de volgende script regels:
## Download and install default Server-Performance Dashboard
Install-Script-Nameserver-performance-dashboard 
 
### Start voorbeeld Server-Performance Dashboard
&server-performance-dashboard.ps1

Er zal nu in de terminal getoond worden onder welke poort het nieuwe dashboard is gestart:

Middels deze poort is het Dashboard vervolgens te openen.

Als je dit direct vanuit het script wilt doen, kun je de volgende script regels opnemen:

### Open het Server-Performance-Dashboard via de browser
Start-Process"http://localhost:10000" 

Vervolgens zal het voorbeeld dashboard worden geopend met daarin de “live” bijgewerkte en bijgehouden performance metrics van de machine waarop het dashboard is gestart!

  • Wanneer je klaar bent met gebruiken van het dashboard kun je deze stoppen middels het volgende commando (er van uit gaand dat je nog geen andere dashboards hebt draaien!):
### Stoppen van het Dashboard proces
Get-UDDashboard|Stop-UDDashboard-ErrorActionContinue 
  • Hierbij het test script waarin ik bovenstaande stappen heb verwerkt!

Het maken van een Custom dashboard

Nadat de Powershell Universal Dashboard modules zijn geïnstalleerd is het niet meer nodig deze in ieder script te laden. Kortom, we kunnen nu een script maken waarin we direct beginnen met het bouwen van een Custom dashboard!

Het is vrij eenvoudig om middels de Powershell Universal Dashboard modules zelf een dashboard te maken. Hierbij een voorbeeld waarbij ik op eenvoudige manier een dashboard maak waarin ik de top 15 hoogste Memory verbruikende processen weer laat geven:

Stap 1: Maak een script voor het verzamelen van de nodige data

Maak een script waarmee je, net zoals je altijd doet, de nodige gegevens verzamelt en op vraagt. In dit geval een script dat de Top 15 van hoogste Memory verbruikende processen op vraagt:

### Alle proces informatie opvragen 
$Processes=get-process`
      -ComputerName$Hostnaam|Group-Object-PropertyProcessName
 
### Maak een array aan om alle informatie te verzamelen 
$ProcessDataArray=@()
 
### Alle Processen doornemen, informatie in records zetten en toevoegen aan Array 
foreach($Processin$Processes){
   
$Obj=New-Objectpsobject
 
   $Obj|Add-Member`
     -MemberTypeNoteProperty`
     -NameName `
      -Value$Process.Name
 
  $Obj|Add-Member`
     -MemberTypeNoteProperty`
     -NameInstances`
     -Value$Process.Group.Count
 
  $Obj|Add-Member`
     -MemberTypeNoteProperty`
     -NameMem`
      -Value(($Process.Group|Measure-ObjectWorkingSet-Sum).Sum  /1KB)
      
  $ProcessDataArray+=$obj                                
}
 
### Top 15 bepalen 
TopTenProcesses=$ProcessDataArray|SortMem-Descending|select-first15  

Test of het gemaakte script de juiste informatie aanlevert door het uit te voeren en de resultaten te bekijken: 

Wanneer dit script de juiste informatie aanlevert kan deze op eenvoudige manier doorgegeven worden aan Powershell Universal Dashboard voor bijvoorbeeld het maken van een Grafiek.

Stap 2: Maak een script dat de data vervolgens doorgeeft aan Universal Dashboard

Begin met het opnemen van de volgende variabelen om te zorgen dat je de variabelen eenvoudig kunt veranderen. Op deze manier kun je eenvoudig een dashboard maken met bijvoorbeeld een alternatief Poort nummer of andere naam:

### Instellen van Variabelen
$Hostnaam      =$env:COMPUTERNAME
$PoortNummer   =10000
$Url           ="http://$HostNaam"+":"+$PoortNummer
$Dashboardname="Test Dashboard" 

Controleer of niet al een dashboard draait op het gebruikte poort nummer, want zoals je weet kun je een poort nummer maar een maal gebruiken!

### Stop Dashboard indien deze hetzelfde poortnummer gebruikt
Get-UDDashboard|Where-ObjectPort-eq$PoortNummer|Stop-UDDashboard

Voor het maken van het dashboard heb je altijd minimaal de volgende regels nodig, waarin vervolgens ons eerder gemaakte script wordt geplaatst om componenten aan de dashboard toe te voegen:

### Definieer Dashboard als Object
$Dashboard=New-UDDashboard-Title$DashBoardName-Content{ 
 
            #-- >   Hier worden de Dashboard componenten toegevoegd < --#
}
### Start Dashboard als opbject
Start-UDDashboard-Dashboard$Dashboard-Port$PoortNummer-Autoreload

In dit voorbeeld maken we een grafiek aan waarin van hoog naar laag de top 15 hoogste Memory verbruikende processen worden getoond. 

Grafieken kunnen we toevoegen middels het commando:  New-UdChart 

Als we daar ons eerdere script aan toevoegen dan ziet dat er als volgt uit: 

New-UdChart`
   -Title"Top 15 Memory Using Processes"`
   -TypeBar-AutoRefresh`
   -RefreshInterval4`
   -Endpoint{
                            
### Alle proces informatie opvragen
$Processes=get-process-ComputerName$Hostnaam`
                             |Group-Object-PropertyProcessName
                            
### Maak een array aan om alle informatie te verzamelen
$ProcessDataArray=@()
                            
### Alle Processen doornemen, informatie in records zetten en toevoegen aan Array
foreach($Processin$Processes){
   
$Obj=New-Objectpsobject
 
   $Obj|Add-Member`
     -MemberTypeNoteProperty`
     -NameName `
      -Value$Process.Name
 
  $Obj|Add-Member`
     -MemberTypeNoteProperty`
     -NameInstances`
     -Value$Process.Group.Count
 
  $Obj|Add-Member`
     -MemberTypeNoteProperty`
     -NameMem`
      -Value(($Process.Group|Measure-ObjectWorkingSet-Sum).Sum  /1KB)
      
  $ProcessDataArray+=$obj                                
}
 
### Top 15 bepalen 
TopTenProcesses=$ProcessDataArray|SortMem-Descending|select-first15  

Vervolgens willen we in de New-UDchart onze gegevens doorzetten naar de UDchart. Dat kan door middels een pipeline de waarden vanuit ons eerdere script door te zetten naar het “Out-UDChartData” Commando: 

$TopTenProcesses|Out-UDChartData`
    -LabelProperty"Name"`
    -dataset@( 
         New-UDChartDataset`
               -DataProperty"Instances"`
               -Label"Process Instances"`
               -BackgroundColor'#68f442'`
               -HoverBackgroundColor'#2a631a'
          New-UDChartDataset`
               -DataProperty"Mem"`
               -Label"Memory Usage"  `
               -BackgroundColor'#41db91'`
               -HoverBackgroundColor'#1d6040') 
}

Vervolgens starten we het Dashboard weer en openen we de URL naar het nieuwe dashboard middels: 

### Start Dashboard als opbject
Start-UDDashboard-Dashboard$Dashboard-Port$PoortNummer-Autoreload
 
#### DASHBOARD Gedeelte ####
 
### Open het Server-Performance-Dashboard via de browser
Start-Process$Url 

Als alles goed is gegaan verschijnt dan het nieuw gemaakte Custom Dashboard wat live voorzien wordt van updates!

Hierbij  ook het hierboven gemaakte script zodat je het snel kunt testen:

Het grote voordeel van gebruiken van deze dashboard methode is dat je zeer snel een mooi dashboard kunt maken om informatie inzichtelijk te krijgen. Dit kan van alles zijn, van performance metrics tot aan statische Excel data ! Doe er je voordeel mee!

Deel deze post

Meer van dit

Samen Sterk! Door EightFence biedt RawWorks nu ook 24×7 Microsoft SOC dienstverlening!

Referentie implementatie Workspace 365 Gemeente Katwijk

Samen Sterk! Door EightFence biedt RawWorks nu ook 24×7 Microsoft SOC dienstverlening!

Samen Sterk! Na jarenlange samenwerking met onze partner EightFence, kunnen we nu melden dat we collega’s zijn geworden! 🔐

Play Video
Play Video
Play Video

Pop up

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.