Exchange Überwachungspraxis - Performance Counter

Exchange bindet durch die Installation sehr viele Performance Counter in das System ein, welche nicht zur zur Suche im Fehlerfall, sondern auch zur Messung der aktuellen Leistung geeignet sind. Übrigens können diese Counter auch per SNMP abgefragt werden.

Perfmon

Der Windows Performance Monitor ist das optimale Tool zur Überwachung des Servers. Er kann sowohl in Echtzeit die verschiedenen Parameter anzeigen, Sie bei Überschreitungen von Grenzwerten warnen und sogar langfristig Daten protokollieren. Mit Windows NT 4.0 muss er dazu aber interaktiv laufen oder mit Hilfsmitteln aus dem Ressource Kit (MONITOR.EXE) als Dienst eingerichtet werden. Bei Windows 200x ist PERFMON automatisch ein Dienst.

Nur ehe wir müssen, müssen wir wissen, welche Werte sinnvoll zu betrachten sind. Hier ist zu unterscheiden zwischen Alarmgrenzen und Trendwerten. Die individuellen Grenzen müssen natürlich je Server bestimmt werden.

Alarmgrenzen

Es gibt Grenzen, die ein Server nicht erreichen sollte, bzw. Uns sagen, das aktuell oder sehr bald etwas nicht mehr wie erwartet funktioniert. Diese sollten z.B.: mit der Alarmfunktion des Performance Monitors überwacht werden. Diese Überwachung sollte Zeitnah (z.B. alle Minute) erfolgen.

Trendwerte

Zudem sollten bestimmte Werte z.B. mehrfach täglich aufgezeichnet werden, um über die Laufzeit eine Entwicklung erkennen zu können. Damit diese Datenmenge ihren Server nicht auffüllt, sollten sie hier nur mit Bedacht Werte aufnehmen und den freien Platz der Festplatte mit überwachen.

Trendwerte können geschickt eingesetzt ihnen eine Planungssicherheit geben, wenn es um den Ausbau des Servers geht.

Parameter

Hier finden Sie eine kurze Liste der interessanten Werte, die für eine erste Beobachtung in Frage kommen. Natürlich können Sie für sich selbst Schwerpunkte setzen.

Wert Beschreibung

CPU-Belastung %

Alarm, wenn mehrfach bei 100 %
Trendaufzeichnung sinnvoll

Pagefile Nutzung %

Alarm, wenn über 70%
Trendaufzeichnung sinnvoll

Freie Plattenkapazität

Alarm, wenn unter xx MByte je Platte individuell
Trendaufzeichnung sinnvoll

Pages/Sek

Alarm bei überschreiten eines Grenze
Trendaufzeichnung sinnvoll
Die Größe ist individuell für den Server zu ermitteln. Sie enthält nicht nur die Auslagerungsdatei, sondern jede Art Aktivität.

Disktime in %
(mit diskperf -y aktivieren !!)

Alarm wenn über 80 %
Trendaufzeichnung sinnvoll

Interrupts/s

Alarm bei Überschreitung
möglicherweise Anzeichen auf Hardwarefehler

Netzwerkpakete /s

Alarm bei Überschreitung
möglicherweise Anzeichen auf Angriff / Loop

Freier Speicher 

Alarm wenn unter 4 Megabyte !!!
(der Wert ist RICHTIG)
Anzeichen für Engpass in der Speicherverwaltung

MSExchangeIS RPC Calls/Sek

Ein guter Counter über die Aktivität der Clients. Hohe werde sind nicht unbedingt schlecht, sondern sagen nur dass der Server etwas zu tun hat

MSExchangeIS RPC Requests

Exchange akzeptiert per Default maximal 100 RPC Requests (fest codiert). Wenn der Wert an diese Grenze stößt, stocken die Clients und der Server ist zu langsam

Exchange Queues

Alarm bei Überschreitung einer bestimmten Länge

Exchange Store Messages/Sek

Alarm bei Überschreitung
Trendaufzeichnung sinnvoll

Ob der Server wirklich "busy" ist, sagen nur die Performancecounter. Auch ein Server mit 512 MB RAM und 700 MB "in Benutzung" ist nicht automatisch am auslagern.

Es ist natürlich eine gute Idee, die Aufnahme der Wert und die Überwachung der Server nicht auf dem Server selbst durchzuführen, sondern auf einer eigens dafür abgestellten Maschine laufen zu lassen. Die zentrale Kontrolle und Konfiguration wie auch der Zugriff auf historische Daten, wenn der Server eben nicht mehr online ist, können Hilfsmittel für weitere Entscheidungen sein.

Eine ausgefeilte Überwachung ist wenig interessant für kleine Firmen oder Teilzeitadministratoren, da der Aufwand für Planung, Implementation und Betrieb eher in Tagen zu müssen ist. Wenn SNMP interessant wird, dann ist Überwachung und Betrieb sowieso ein Thema. Auch die Kosten für eine "richtige" Managementsoftware ist meist fünfstellig und schon daher kein Setup, welches einmal aufzurufen ist. sondern das gesamte Thema bedeutet einen permanent mit einzuplanenden Zeitaufwand. Die Ergebnisse sind aber nicht nur interessant, sondern erlauben erst eine Sicherstellung einer bestimmten Verfügbarkeit.

Berechtigungen

Um auf Performance Monitore zugreifen zu können, müssen sie entsprechende Berechtigungen haben. Windows sieht dazu mittlerweile zwei lokale Gruppen vor, die Sie mit "lusrmgr.msc" sehen und bearbeiten können.

Englisch  Deutsch Beschreibung

Performance Log Users 

Leistungsprotokollbenutzer 

Mitglieder dieser Gruppe können die Protokollierung von Leistungsindikatoren planen, Trace-Anbieter aktivieren und Ereignistraces sammeln, sowohl lokal als auch über Remotezugriff auf diesen Computer.

Performance Monitor Users

Leistungsüberwachungsbenutzer 

Mitglieder dieser Gruppe können lokal und remote auf Leistungszählerdaten zugreifen 

Normalerweise sind beide Gruppen "leer". Damit kann erst einmal nur ein Administrator oder LocalSystem oder NetworkSystem die Performance Counter lesen. 

Zum Anlegen von Performance Countern müssen Sie immer lokaler Administrator sein. Dieses Berechtigung kann wohl nicht delegiert wurden.

Perfmon Intern

Das Performance Counter System von Windows ist manchmal ein sehr empfindliches System, da es durch Drittprodukte natürlich erweitert werden kann. Wenn Sie  z.B. Exchange installieren, dann fügt das Setup entsprechende Erweiterungen in das Betriebssystem ein. Und das passiert an mehreren Stellen

  • c:\WINDOWS\system32\perfc*.dat  (meist 007 oder 009)
    Datenbank, welche die Liste der Counter selbst enthält
  • c:\WINDOWS\system32\perfd*.dat (meist 007 oder 009)
    Enthält die dazu gehörige Beschreibung zu den Countern
  • Registry
    In der Registrierung ist nun je Dienst ebenfalls ein Verweis zu den Performance Countern und den Einträgen in den Datenbanken.

Fatalerweise müssen diese Einträge auch sauber übereinstimmen und sind nicht auf allen Systemen identisch. Ergänzt eine neue Software eigene Counter, so muss Sie dazu die Counter und Hilfebeschreibungen in die Datenbank eintragen und die Verweise darauf in der Registrierung. Hierbei helfen die Programme "LODCTR.EXE" und "UNLODCTR.EXE", die anhand entsprechender INI-Dateien gesteuert werden, die vom Hersteller mitgeliefert werden. Suchen Sie auf einem Exchange Server einfach mal nach der Datei c:\WINDOWS\system32\esentprf.ini. Sie wird in etwa wie folgt aussehen:

Anhand dieser Informationen modifizieren LODCTR und UNLODCTR entsprechende Einträge in der Registrierung. Die Übersicht der installierten Performance Counter mit den Verweisen auf die Datenbank steht unter

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib

Hier gibt es die Einträge "Counter" und "Help" welche die einzelnen Counter samt ihrem Index enthalten:

Eine Anzeige ist sehr einfach mit dem Programm EXCTRLST.EXE (exctrlst.exe Extensible Counter list http://www.Microsoft.com/windows2000/techinfo/reskit/tools/existing/exctrlst-o.asp) möglich.

Sie sehen also, dass auch in den Tiefen von Windows einige Einträge stimmen müssen, damit die Performance Counter auch sauber funktionieren. Die Nummern müssen zudem nicht lückenlos sein.

Counter "reparieren"

Wenn Sie daher beim Start von PERFMON im Eventlog die Meldungen bekommen, dass einige Performance Counter nicht gefunden werden konnten, dann liegt es meist immer hier vergraben. Oftmals hilft dann die Deregistrierung und erneute Registrierung der Counter oder eine Suche nach "LODCTR" in der TechNet und Knowledgebase.

Mit dem Befehl LODCTR können Sie auch die Performance Counter neu aufbauen lassen. Starten Sie dazu den Dienst der Leistungsüberwachung und dann den Befehl "LODCTR /r" ein einer Shell:

LODCTR Rebuild

Genau genommen muss man das für 32 und 64bit in einer Admin-CMD ausführen:

Rem Counter aus dem Backup wieder herstellen.
C:\Windows\system32\lodctr.exe /R
C:\Windows\SysWOW64\lodctr.exe /R

Rem Resync der Performance Counter.
C:\Windows\System32\wbem\winmgmt.exe /RESYNCPERF
C:\Windows\SysWOW64\wbem\winmgmt.exe /RESYNCPERF

REM Vergessen Sie nicht die Dienste neu zu starten.
Restart-Service PLA 
Restart-Service winmgmt -Force

Besonders häufig scheint es auf Servern Probleme mit "BITS" und "WmiApRpl" zu geben.

Exchange Counter

Microsoft Exchange ist eine Software mit sehr vielen Performance Countern, bei denen manchmal auch was schief gehen kann. Mit jedem Exchange Update werden alle bisherigen Performance Counter entfernt und dann wieder neu mit der aktuellen Version installiert. Das funktioniert oft nicht, wenn Monitoring-Programme (Perfmon.exe, Nagios, Icinga, Splunk, PRTG etc.) über die bekannten Schnittstellen die Counter auslesen und damit ggfls. blockieren. Daher sollten Sie vor der Installation solche Programme und Zugriffe möglichst unterbinden oder Windows WMI durchstarten.

Ansonsten kann es sein, dass Sie die Performance Counter korrigieren müssen. Das ist aber nicht einfach der GUI möglich, denn wenn Sie das Exchange Setup starten, dann gibt es keine "Reparatur"-Option und mal schnell deinstallieren und neu installieren ist keine gute Idee. Ein Weg ist der Start einer Reparaturinstallation per Kommandozeile:

Setup /m:upgrade /IAcceptExchangeServerLicenseTerms 

Damit erreichen Sie meist, dass Exchange das Setup komplett wiederholt, obwohl die Software eigentlich schon installiert ist. Denken Sie aber daran, dass bestimmte Voreinstellungen wieder reaktiviert werden könnten. Dies gilt z.B. für Exchange Extended Protection, welches seit Anfang 2024 durch jedes Updates immer wieder per Default aktiviert wird.

Denken Sie auch daran, dass Sie nach der Installation des letzten CU-Updates auch ggfls. das letzte Security Update noch einmal installieren und konfigurieren müssen.

Für die manuelle Neuinstallation der Exchange Performance Counter hat Kevin (https://blog.kmsigma.com/) ein nettes Skript bereitgestellt, welche ich mir hier "gesichert" habe.

 

# Source: https://blog.kmsigma.com/2016/11/08/where-are-my-exchange-2016-performance-counters/

$InstallPath = Get-Item `
                  -Path ( Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\ExchangeServer\v15\Setup -Name MsiInstallPath | Select-Object -ExpandProperty MsiInstallPath ) `
                  -ErrorAction SilentlyContinue

Add-Pssnapin Microsoft.Exchange.Management.PowerShell.Setup
$PerfFiles = Get-ChildItem -Path ( Join-Path -Path $InstallPath -ChildPath "\Setup\Perf\*.xml" )
$i = 0; $iCount = $PerfFiles.Count
ForEach ( $PerfFile in $PerfFiles )
{
    $CounterName = ( ( Get-Content -Path $PerfFile.FullName ) ).Category.Name
    Write-Progress `
       -Activity "Updating Performance Counters"  `
       -CurrentOperation "[$( $i + 1 )/$( $iCount )] $( $CounterName )"  `
       -PercentComplete ( ( $i / $iCount ) * 100 )

    Write-Host "Removing Performance Counter: $CounterName" -Foreground Red
    Remove-PerfCounters -DefinitionFileName $PerfFile.FullName
    Write-Host "Adding Performance Counter: $CounterName" -Foreground Green
    New-PerfCounters –DefinitionFilename $PerfFile.FullName
    $i++
}
Write-Progress -Activity "Updating Performance Counters" -Completed

Es entfernt und reinstalliert die Exchange Performance Counter

Performance Counter und WMI

Windows Performance Counter können auch per WMI abgefragt werden.

Performance Counters can be consumed through WMI's COM and scripting interfaces. WMI also has support für instrumenting performance counters (by writing a WMI High Performance provider). Performance counters exposed by high performance providers can be seen in Perfmon by running "Perfmon /wmi". In Windows XP and later, these counters appear in Perfmon by default.

Ich selbst nutze WMI in Skripten, um z.B. mit QStatus die Warteschlangen abzufragen. Auch der Zugriff per "Permon /WMI" hat mir schon mehrfach geholfen, wenn die normalen Wege zum Counter durch eine fehlerhafte Drittsoftware kaputt gemacht wurden.

Remote Zugriff auf Performance Counter

Performance Counter könne nicht nur lokal, sondern auch über das Netzwerk per RPC erreicht werden. Sie können so von einem zentralen Monitoring-System die Werte einsammeln. Beachten Sie dabei aber, das RPC-Verbindungen eine gewisse Last generieren und bei einer fehlenden Verbindung Lücken in der Erfassung zu erwarten sind. Für ein Enterprise Monitoring ist ein lokaler Agent, der die Daten erfasst und an eine Zentrale meldet, vermutlich besser.

Performance Counter und PowerShell

Mit der PowerShell ist es sehr einfach, Performance Counter auszulesen und sogar eigene Counter anzulegen. Siehe auch PowerShell Performance Counter.

# Alle Counter exportieren
Get-Counter -ListSet * | Select-Object -ExpandProperty Counter

# Nur CPU-Counter ausgeben
Get-Counter -ListSet *processor* | Select-Object -ExpandProperty Counter

Performance Counter und SNMP

Leider kann man nicht alle Performance Counter direkt per SNMP abfragen. Dazu sind sogenannte Extension Agents erforderlich, die Microsoft nicht für alle Produkte mitliefert. Aber Dritthersteller sind hier natürlich sofort zur Stelle, um entsprechende Agenten nachzuliefern. Auf SNMP Intern finden Sie Links und Beschreibungen zu solchen Produkten.

Perfmon-Aufzeichnung konvertieren

Vielen unbekannt ist das Programm RELOG", welches bei Windows zum Standard Lieferumfang gehört. PERFMON kann ja Performance Counter in eine Binärdatei aufzeichnen, welche dann wieder mit Perfmon geöffnet und ausgewertet werden kann. Was machen Sie aber, wenn PERFMON ihnen nicht zur Auswertung reicht ?

Dann ist RELOG ihr Freund, denn RELOG liest die Binärdateien und kann dies als CSV oder TXT-Datei wieder abspeichern. RELOG kann die Daten aber auch über eine ODBC-Verbindung in eine beliebige von Windows ansprechbare Datenbank schreiben, z.B. den SQL-Server. Damit stehen ihnen nun weitere Auswertehilfsmittel zur Verfügung, z.B. SQL Reporting Services. Siehe auch SQL-Server

Das ist natürlich alles kein Ersatz für ein echtes permanentes Überwachung mit langfristigen Daten, Konsolidierung von Daten und Alarmierung bei Grenzwertüberschreitung, wie dies z.B. MOM2005 liefern kann.

Weitere Links

HKLM\SYSTEM\CurrentControlSet\Services\ESE\Performance\Show Advanced Counters: DWORD = 1