Sysinternals: ProcMon

Hallo und herzlich willkommen,

In der Sysinternals-Serie möchte ich auf die wohl besten, jemals geschrieben Tools eingehen, die mir im IT-Support bis dato untergekommen sind. Die Sprache ist, wie der Titel der Serie wohl schon verraten hat, von den Sysinternals-Tools, bzw der Sysinternals Suite (die Suite beinhaltet alle Tools in einem einzigen Archiv). Zu verdanken haben wir dieses Glanzstück im Windows-Development Mark Russinovich (sehr interessanter Blog, übrigens), seines Zeichens mittlerweile Entwickler bei Microsoft. Er entwickelte Mitte der 1990’er zusammen mit seinem Kollegen Bryce Cogswell die Sysinternal-Tools auf ihrer eigenen Webplattform, bis sie 2006 von Microsoft übernommen wurde. Ich sage das mit voller Überzeugung, wenn ich behaupte, bis heute noch keine nützlichere und vielseitigere Software zum Troubleshooten von IT- und EDV-Problemen gesehen habe.

Genug des Lobes, wollen wir lieber einmal genauer darauf eingehen, womit Mark sich meinen – und ich hoffe auch von vielen anderen – Respekt verdient hat: Angefangen mit dem ProcessMonitor (kurz ProcMon).

ProcMon:

Der ProcessMonitor ist ein Programm, das einige frühere Versionen verschiedener Sysinternals-Tools in sich vereint, so zum Beispiel FileMon und RegMon, die getrennt benutzt werden mussten, um Änderungen am Dateisystem bzw. der Registry zu beobachten. Der ProcessMonitor zeigt nach seinem Start sämtliche Lese- und Schreibvorgänge aller laufenden Prozesse an, ihre Zugriffe auf die Registry, startende Threads, Netzwerkkommunikation und vieles mehr. Das sind prinzipiell recht viele Informationen, die man als einzelner Mensch kaum auf einmal verarbeiten kann (2-3 Sekunden Protokollierung auf einem frisch installierten Windows XPSP3 warfen mir schon gute 22.000 Events…). Doch sehen wir uns zunächst die Oberfläche von ProcMon an:

Als erstes möchte ich den Aufbau der Oberfläche in 2 Bereiche gliedern. Zum einen gibt es die Menüleiste und die Statusleiste am unteren Rand des Programmes (fehlt leider im Screenshot), zum anderen die Tabelle mit der Auflistung der geworfenen Events. Wie man auf den ersten Blick erkennen kann, hat der Explorer während ich den Screenshot erstellt habe, einige Zugriffe auf die Registry versucht. Für die nächsten Zeilen möchte ich dieses Bildschirmfoto als Beispiel benutzen.
Konzentrieren wir uns zunächst auf die Menüleiste am oberen Rand des ProcessMonitors. Wir sehen einige Menüpunkte die uns bereits aus anderer, einschlägiger Software vertraut sein sollten, wie „File“, „Edit“, „Options“ und „Help“. Die beiden anderen Menüs „Filter“ und „Tools“ sind schon etwas spezifischer auf den Sinn und Zweck des Monitors zugeschnitten.
Im „File“-Menü haben wir zunächst die Optionen Open… und Save…. Der ProcessMonitor bietet die Möglichkeit, die Logfiles, die beim Protokollieren der Events entstanden sind, zu speichern um sie Beispielsweise an den Techniker unseres Vertrauens zu mailen, damit er sie genauer unter die Lupe nehmen kann, und im Gegenzug auch wieder zu öffnen.
Mit der Option Backing Files… haben wir die Wahl, wo die Events zur Laufzeit des Monitors gespeichert werden sollen. Entweder können wir dazu virtuellen Speicher (PageFile.sys) oder eine Datei auf der Festplatte auswählen. Beide haben unterschiedliche Limits (die PageFile ist logischerweise an das System Commit Limit gebunden, die Datei auf der Festplatte an den vorhandenen Speicherplatz), voreingestellt ist der virtuelle Speicher, was auch in 99% aller Anwendungsfälle völlig in Ordnung ist.
Capture Events startet oder stoppt den ProcessMonitor von seiner Tätigkeit die Events zu protokollieren.
Wenn wir Einstellungen getroffen haben, die wir voraussichtlich öfter benötigen, lassen sich diese mit Export Configuration… / Import Configuration…auf andere Systeme portieren.
Exit beendet das Programm.
Unter „Edit“ finden wir einige nützliche Punkte, wie das kopieren einer Zeile in Textformat (Copy), eine Suchfunktion (Find…) wie wir sie aus Notepad kennen und wir können zu Markierungen (Find Highlight), und Lesezeichen (Find Bookmark) springen (dazu mehr bei Filtern). Zur besseren Übersicht haben wir noch eine AutoScroll-Funktion und einen Clear Display-Button. Die geleerte Anzeige wird gerade dann interessant wenn man eine spezielle Aktion eines Programms überwachen will, und alle anderen Aktionen bis dahin einwandfrei geklappt haben, oder nicht für das Problem relevant sind.
Die Optionen im Menü „Event“ sind bereits, wie erwähnt, etwas spezieller – auf einige davon möchte ich gerne später noch einmal zurückkommen. Keine Angst, euch wird nichts vorenthalten – ich finde nur die alternativen Wege, die meisten Punkte hier aufzurufen für wesentlich effektiver. Soviel sei erwähnt, mit Toggle Bookmark lassen sich beliebig Lesezeichen im Protokoll finden. Dadurch werden die markierten Einträge fett markiert.
Jetzt wird es richtig interessant: Das Menü „Filter“ fasst die wohl wichtigsten Optionen zusammen, die wir im ProcessMonitor finden. Zunächst haben wir mit dem Punkt Enable Advanced Output die Möglichkeit, Filter zu entfernen, die bereits im Auslieferungszustand gesetzt sind (hauptsächlich sind das Filter, die Aktionen von ProcMon selbst, von Systemprozessen und Aktionen auf z.B. die Auslagerungsdatei pagefile.sys von der Ansicht ausblenden). Sollte man dennoch einen dieser Filter für eine Analyse benötigen, lassen sich mit dieser Option alle Filter deaktivieren, bis auf „Event Class is Profiling“.
Auf die Filter… die man setzen kann, möchte ich später noch etwas genauer eingehen – hier sei nur soviel gesagt, dass ihr jederzeit mit Load Filter, Save Filter… und Organize Filters… eigene Sets von Kriterien erstellen und jederzeit erneut laden könnt. Sollte einmal zu viel gefiltert worden sein, könnt ihr die Filter mit Reset Filter auf den Ausgangszustand zurücksetzen.
Mit der Highlight…-Funktion lassen sich einzelne Events, wie beim Filter, nach verschiedenen Kriterien hervorheben. Die Hervorgehobenen Events werden farbig in der Tabelle markiert. Jetzt könnt ihr, wie oben beschrieben unter „Edit“ mit Find Highlight zu den einzelnen hervorgehobenen Events springen – eine sehr übersichtliche und nützliche Funktion. Beispielsweise interessieren mich bei einer Analyse vielleicht alle Aufrufe und Events, die ein „Path not found“-Result liefern, und da ich nicht alle anderen Events ausblenden möchte um zu erkennen, wie es zu dem Result kam, markiere ich mir nur diejenigen Events mit dem entsprechenden Result. Daraufhin springt man zum nächsten Marker und kann sich die Prozesskette direkt vor dem Result genauer ansehen.
Im Menü „Tools“ werden einige recht nützliche Features angeführt, die hauptsächlich statistischen Auswertungen dienen. Hierbei die Ausnahme ist derProcess Tree… über den ich prinzipiell auch einen Abschnitt hier alleine schreiben könnte. Das wird auch passieren. Weiter unten.
Ansonsten lassen sich hier wie gesagt viele Auswertungen machen, angefangen mit den System Details…. Hier wird kurz und bündig zusammengefasst, auf welchem System das vorliegende Capture durchgeführt wurde. Wir erfahren etwas über das Betriebssystem inkl. System-Wurzelverzeichnis, Architektur (32 oder 64bit), die Anzahl an logischen Prozessoren und den verfügbaren Arbeitsspeicher. Die Process Activity Summary… fasst grafisch und statistisch zusammen, welcher Prozess während des Captures wieviele Aktionen auf dem Dateisystem, der Registry oder im Netzwerk durchgeführt hat. Es lässt sich die CPU-Last im Verlauf der Aufzeichnung verfolgen, von laufenden, aber auch gestarteten und wieder beendeten Prozessen.
Ebenso lassen sich in der File Summary… die Events auswerten, die auf spezielle Dateien, Verzeichnisse oder Erweiterungen angewendet wurden. Bevor ich jetzt über jede einzelne Zusammenfassung ein Wort verliere, wenn ihr euch eh schon denken könnt, worauf die RegistryStack– und Network Summary hinauslaufen werden, würde ich sagen, schaut sie euch am besten selbst mal an.
Über die Cross Reference Summary… könnt ihr die Pfade herausfinden, die von mehreren verschiedenen Prozessen gelesen oder geschrieben werden. Gegebenenfalls findet sich ja ein Prozess, der dort gar nichts zu suchen hat?
Zu guter Letzt haben wir mit Count Occurrences… einen einfachen Weg innerhalb des riesigen Captures die Anzahl verschiedener Einträge zu zählen.
Für die „Options“ haben wir ebenfalls einige Konfigurationsmöglichkeiten, die das ein oder andere Mal sehr nützlich sein können. Zunächst gibt es denAlways on Top-Schalter, der den Procmon – ähnlich wie den Windows Task Manager – im Vordergrund hält, um das Capture besser im Auge behalten zu können. Die Punkte Font… und Highlight Colors… dienen in erster Linie der Optik des Captures, so kann man auf hochauflösenden Displays beispielsweise eine größere Schriftart definieren oder die Farbe der Markierungen beeinflussen.
Configure Symbols… bedarf einer weiteren Auslagerung in einen eigenen Abschnitt dieses Posts, dennoch werden wir detailliert darauf eingehen, keine Sorge. Mit den Haken unter Select Colums… lassen sich Informationen in der Capture-Ansicht nach belieben ein- und ausblenden.
Die History Depth… definiert, wie viele (Millionen!) Events in einem Capture vorgehalten werden. Diese Option dient ganz einfach dazu, das System nicht mit einem riesigen Logfile des ProcessMonitors voll laufen zu lassen, sondern rechtzeitig die Notbremse zu ziehen.
Mit Profiling Events… lassen sich Thread Stack Traces erstellen, die genutzt werden können, um CPU-fressenden Anwendungen auf die Schliche zu kommen.
Über die Option Enable Boot Logging lässt sich der ProcessMonitor bereits beim Systemstart mit einem eigenen Treiber im Windows-Verzeichnis laden. Damit hat man die Möglichkeit, Ereignisse und Events noch wesentlich früher zu erfassen, als es in der Anwendung des ProcMon als Applikation auf dem Desktop möglich ist. Beachtet aber, dass immer nur ein Boot-Log von ProcMon erstellt werden kann, und das Netzwerkereignisse in dem frühen Stadium des Windows-Boot-Vorgangs noch nicht erfasst werden können, da sie auf ETW (Event Tracking for Windows) beruhen.
Wenn sich jemand für IP-Adressen statt Hostnames in den Netzwerkevents interessiert, kann er mit der Option Show Resolved Network Addressesbestimmen, welche Form der Anzeige von Zielen und Quellen der TCP-Events ihm mehr zusagt.
Last but not Least können wir über „Help“, wie der Name schon sagt, weitere Hilfe anfordern (Help…), uns
die Command Line Options anzeigen lassen, oder im About…-Fenster Version und Copyright des ProcMon betrachten.
Viele der bereits angesprochenen Optionen kann man auch über die Symbolleiste direkt unter der Menüleiste direkt auswählen:
Von links nach rechts sind das:
Open… & Save… aus „File“, Capture Events aus „File“, AutoScroll und Clear Display aus „Edit“, Filter… und Highlight… aus „Filter“, als zusätzliches Feature die Zielscheibe (Include Process from Window – siehe unten), View Process Tree… aus „Tools“, Find… aus „Edit“ & Jump To aus „Event“, und als Shortcuts die Möglichkeit Registry, Filesystem, Network, Thread und Profiling Events im Capture ein und auszublenden.
Mit der Zielscheibe können wir nach dem Klick darauf ein Fenster auswählen, dessen zugehöriger Prozess daraufhin zu den Filtern hinzugefügt wird. Wir müssen also nicht mühselig selbst herausfinden, zu welchem Prozess genau dieses Fenster gehört, sondern können dies den ProcessMonitor machen lassen.
Ich hoffe mit diesem ersten Post aus einer Reihe von vielen weiteren konnte ich euch den ProcessMonitor schon einmal etwas näher bringen – und hoffentlich den ein oder anderen jetzt schon von diesem grandiosen Tool überzeugen.
Im nächsten Post werden wir dann etwas genauer auf die Events eingehen, was wir mit ihnen in unserem Capture anfangen können, und natürlich die Funktionen, die ich aufgrund ihrer unglaublichen Wucht nicht auch noch in diesen Post stecken wollte. Freut euch also auf den Process Tree, eine detaillierte Anleitung zum richtigen Filtern, das ganze Menü „Event“, bzw wie man die Funktionen sinnvoller aufrufen kann, und noch einiges mehr!
Bis dahin,
Hannes
Dieser Eintrag wurde veröffentlicht in IT. Lesezeichen auf den Permanentlink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*