alphaspirit - stock.adobe.com

So überwachen Sie die Leistung von Servern mit PowerShell

Ein PowerShell-Leistungsüberwachungsskript definiert und verfolgt die gewünschten Systemmetriken. Wir erklären, wie Sie ein solches Skript erstellen und anpassen.

Die Fähigkeit, die Serverleistung zu überwachen, ist für IT-Administratoren von entscheidender Bedeutung. Zu wissen, wie Ihre Server arbeiten, ist der beste Weg, um eine gute Endbenutzererfahrung zu gewährleisten. Die Überwachung der Serverleistung hilft Ihnen außerdem dabei, Risiken zu erkennen, bevor sie sich zu echten Problemen entwickeln.

Es gibt viele Serverüberwachungs-Tools von Drittanbietern. Mit etwas Zeit und Geduld ist es jedoch möglich, viele ihrer Funktionen kostenlos über PowerShell bereitzustellen.

Entscheiden Sie, was Sie überwachen möchten

Bevor Sie ein PowerShell-Skript zur Leistungsüberwachung erstellen, müssen Sie festlegen, was Sie überwachen möchten. PowerShell ist in der Lage, verschiedene aussagekräftige Leistungsmetriken zu verfolgen. In diesem Artikel erstellen wir ein Skript für das Überwachen der unten aufgeführten Leistungsindikatoren:

  • (*)% Idle Time.
  • (*). Disk sec/Read.
  • (*). Disk sec/Write.
  • (*)Disk Queue Length.
  • Bytes/sec.
  • Interface(*)Total/sec.
  • Interface(*)Queue Length.
  • File(*)% Usage.

Sie finden die Werte dieser Zähler durch Eingabe des Cmdlets Get-Counter. Wenn Sie das Cmdlet allein verwenden, erhalten Sie jedoch nur ein halbes Dutzend Zählerbeispiele. Sehen wir uns daher einmal an, wie Leistungsindikatoren strukturiert sind und wie Sie einen bestimmten Indikator abrufen.

Leistungszähler sind in Zählersätzen gruppiert, von denen jeder einzelne Zähler enthält, die in miteinander in Beziehung stehen. Der IPv4-Zählersatz enthält zum Beispiel Zähler, die sich auf TCP/IP Version 4 beziehen. Es ist möglich, das Cmdlet Get-Counter in Kombination mit dem ListSet-Parameter zu verwenden, um eine Liste der verfügbaren Zählersätze abzurufen. Der unten gezeigte Befehl enthält zusätzlich das Cmdlet Sort-Object, das die Liste alphabetisch sortiert.

PS> (Get-Counter -ListSet *).CounterSetName | Sort-Object

Um zu sehen, welche Zähler Teil eines bestimmten Zählersatzes sind, verweisen Sie auf die Eigenschaft Zähler. Um zum Beispiel Zähler zu finden, die sich auf die Funktionalität des Speichers beziehen, suchen Sie alle Zählersätze mit disk im Namen und zeigen Sie alle Zähler innerhalb dieser Zählersätze an.

PS> Get-Counter -ListSet *disk*** | foreach {$_.Counter}

Obwohl Sie mit diesem Befehl primär speicherbezogene Zähler finden, können Sie ihn leicht anpassen, um jede andere Art von Zähler abzurufen. Das Wichtigste dabei ist, dass die zurückgegebenen Ergebnisse die tatsächlichen Zählernamen sind. Bei der Abfrage von Leistungszählern – die wir im nächsten Abschnitt behandeln – müssen Sie den Namen des Zählers angeben, den Sie abfragen möchten. Mit einem Befehl wie dem oben aufgeführten rufen Sie den für die Abfrage erforderlichen Zählernamen ab.

Abfrage von Leistungszählern

Sobald Sie die Namen der Zähler gefunden haben, die Sie abfragen möchten, müssen Sie als Nächstes eine Stichprobe für jeden Zähler abrufen, an dem Sie interessiert sind. Eine Stichprobe ist einfach ein Zählerwert, wie er zu einem bestimmten Zeitpunkt vorlag.

Die Beschaffung von Zählerstichproben erfolgt in zwei Schritten. Sie verkürzen den Prozess, wenn Sie nur mit einem einzigen Zähler arbeiten. Der erste Schritt ist, ein Array mit den Zählern zu erstellen, die Sie untersuchen möchten. Im folgenden Code nennen wir dieses Array $Counters. Der zweite Schritt ist, mit dem Cmdlet Get-Counter ein Beispiel für jeden im Array aufgeführten Zähler zu suchen. Hier ist ein Beispiel für diesen Vorgang.

$counters = @(

  '\PhysicalDisk(**)\% Idle Time'*

  '\PhysicalDisk(**)\Avg. Disk sec/Read'*

  '\*PhysicalDisk(**)\Avg. Disk sec/Write'

  '\PhysicalDisk(**)\Current Disk Queue Length'*

  '\*Memory\Available Bytes'*

  '\*Memory\Pages/sec'*

  '\*Network Interface(**)\Bytes Total/sec'

  '\Network Interface(**)\Output Queue Length'*

  '\*Paging File(**)\% Usage'

 )

 foreach ($counter in $counters) {

  (Get-Counter -Counter $counter).CounterSamples

 }

Dieses Skript sollte eine Ausgabe wie in Abbildung 1 erzeugen. Beachten Sie, dass es hier die Eigenschaften InstanceName und CookedValue gibt. 

Abbildung 1: So finden Sie Zählerwerte für die Leistung des Servers.
Abbildung 1: So finden Sie Zählerwerte für die Leistung des Servers.

Jeder Zähler hat eine Instanz, die eine bestimmte Entität dieses Zählers angibt, die er überwacht. Einige PCs enthalten beispielsweise mehrere CPUs, so dass es für jede einzelne CPU eine Zählerinstanz geben wird. Mehrere Speicher-Volumes sind jeweils als Instanz aufgeführt werden, ebenso wie mehrere Netzwerkschnittstellen. Jeder Instanz ist ein Wert zugeordnet, den man als cooked value bezeichnet.

Erstellen eines HTML-Berichts

Um die Skriptausgabe in Abbildung 1 zu bereinigen, lassen wir sie in einem HTML-Bericht anzeigen. Wir erstellen einfachen Bericht im Tabellenformat, der die Zählerkategorie, den Zähler, die Instanz und den Beispielwert enthält.

Ändern Sie den Code aus dieser Anleitung, um die gewünschte Ausgabe zu erzeugen.

$samples = foreach ($counter in $counters) {

  $sample = (Get-Counter -Counter $counter).CounterSamples

  [pscustomobject]@{

   Category = $sample.Path.Split('\')[3]

   Counter = $sample.Path.Split('\')[4]

   Instance = $sample.InstanceName

   Value = $sample.CookedValue[0]

  }

 }

Die Variable $samples liefert dann eine Ausgabe, die wie folgt aussieht.

Abbildung 2: Ausgabe der $samples-Variable
Abbildung 2: Ausgabe der $samples-Variable

Erstellen Sie eine HTML-Seite zur Anzeige dieser Daten.

$htmlHeader = @"

  <!doctype html>

  <html lang='en'>

  <body>

   <table>

    <thead>

     <tr>

      <th>Category</th>

      <th>Counter</th>

      <th>Instance</th>

      <th>Value</th>

     </tr>

    </thead>

    <tbody>

 "@

 $body = ""

 foreach ($sample in $samples) {

  $row = '<tr>'

  foreach ($property in $sample.PSObject.Properties.Name) {

   $row += "<td>$($sample.$property)</td>"

  }

  $row += '</tr>'

  $body += $row

 }

 $footer = "</tbody></table></body></html>"

 $html = $htmlHeader + $body + $footer

 $html | Out-File -FilePath 'C:\ServerPerformance.html' -Force

Wenn Sie dieses PowerShell-Leistungsüberwachungsskript ausführen, sollte es eine HTML-Datei ausgeben, die ähnlich aussieht wie die in Abbildung 3. Dieser Bericht enthält die Zählerkategorie, den Zähler, die Instanz und den Beispielwert. Erweitern Sie diesen Basisbericht nach Bedarf.

Abbildung 3: HTML-Datei mit PowerShell-Leistungszählern
Abbildung 3: HTML-Datei mit PowerShell-Leistungszählern

Erfahren Sie mehr über Desktop-Management