PowerBI und RCALog
Seit Exchange 2010 gibt es mit dem RCA-Log eine neue weitere Datenquelle für Berichte über Clients. Hier werden Zugriffe von Clients protokolliert, die per MAPI/TCP auf den Exchange Server zugreifen. Auf den Seiten CAS-Logging und Get-RCALog sind hier weitere Daten publiziert. Durch meine Arbeit um das Thema Exchange Sizing und Konsolidierung in die Cloud ist es natürlich wichtig zu wissen, welche Clients von welchen Subnetzen letztlich auf welchem Server arbeiten. Diese Daten lassen sich aus dem Log aller CAS-Server ermitteln und später auswerten.
Collect-RCALog
Als ich Get-RCALog geschrieben habe, gab es noch kein PowerBI und ich musste im Skript selbst sehr viele "Summen" und Zusammenfassungen erstellen. Mit PowerBI kann ich diese Logik und Flexibilität nun aus dem Skript entfernen und muss eigentlich nur noch die Daten einlesen und "vereinfachen". Denn in größeren Umgebungen können die RCALogs schon größer werden. Collect-RCAlog macht also
- Suche alle CAS-Server und Services und
leite den UNC-Pfad vom Namen des Servers,
der Installationsquelle und Client-XML ab
Alternativ können Sie eine CSV-Datei mit den Pfaden bereitstellen. - Lies alle CSV-Dateien ein, die ins
Zeitfenster passen
Vielleicht wollen Sie ja gar nicht alle 30, 60 oder mehr Tage einlesen, sondern nur den letzten Tag - Extrahiere die gewünschten Daten und
errechne zusätzliche Spalten
Aus den Rohdaten ermittle ich einige zusätzliche Informationen, die mir die Analyse in PowerBI und anderen Tools vereinfacht.- Alias statt LegacyExchangeDN
Zudem kürze ich aus dem LegacyExchangeDN alles vor dem letzten "="-Zeichen weg. In den meisten Fällen wird so aus dem LegacyExchangeDN der Alias. Ich erspare mir aber die Suche nach den Objekt um z.B. den Displaynamen oder die Mailadresse statt des Alias zu ermitteln. - Class-C-Net
In der Quelle steht die Client-IP als komplette IP-Adresse. Die übernehme ich aber zusätzlich addiere ich eine Spalte als Class-C Netz; quasi eine "Gruppierung" in 265er Gruppen. In PowerBI habe ich bislang keinen Weg gefunden einfach die letzte Stelle abzuschneiden. daher mache ich das hier im PowerShell Script - Connect-Events
Ich beschränke mich bei der Erfassung auf die Sammlung der "Connect"-Events, d.h. wenn ein Client sich mit dem Server verbindet, da hier auch die Client-IP enthalten ist. Folgepakete, aus denen Fehler, die Dauer, Stellvertreter und andere Zugriffe ermittelt werden können, habe ich nicht erfasst. für die interessanten Auswertungen ist dies nicht erforderlich und eine Zeiterfassen, welcher Anwender sich wann genau auch wieder abmeldet, sehe ich keine Notwendigkeit. - Vereinfachte Zeit
Um einfacher Auswertungen nach der Tageszeit (Stunde des Tages) machen zu können, addiere ich eine errechnete Spalte für die Stunde des Tages
- Alias statt LegacyExchangeDN
- Schreibe eine CSV-Datei oder STDOUT
Über die PowerShell Pipeline können Sie die Daten direkt weiter verarbeiten oder mit "Export-CSV" verketten. Das Skript kann aber auch direkt eine CSV-Datei schreiben.
Das Skript ist natürlich noch nicht perfekt. Folgende Optimierung stehen auf meiner Wunschliste:
- LegacyExchangeDN Umwandung
Mit dem String oder auch nur dem letzten Teil sind Benutzer nicht immer einfach zu erkennen. Ich überlege, ob ich den LegacyExchangeDN vielleicht in eine PrimäreMailadresse, MailboxGUID oder den MailNickname auflöse, um später die Daten besser mit anderen Quellen verknüpfen zu können. - IP-Adresse und AD-Site
Schick wäre es natürlich, wenn das Skript anhand der IP-Adresse gleiche die AD-Site ermitteln könnte. - Servername
Wenn man mehrere CAS-Services hat, dann wäre es schon interessant den Server zu sehen, über den der Zugriff erfolgt - Performance
Aktuell stand die "Funktion" im Vordergrund. Wenn größere Datenmengen auch regelmäßig auszuwerten sind, sollte ich noch mal an der Performance etwas schrauben oder die Lösung in C# entwickeln. Das fange ich aber erst an, wenn der Code eine gewisse "Stabilität" erreicht hat.
Keine Datenmenge
Leider enthält das RCALog von Exchange keine Daten über
die Datenmenge. Damit ist keine Auswertung von Outlook
Zugriffen möglich. Das gelingt aber beim Einsatz von
RPC/HTTP oder MAPI/HTTP über die IISLogs
Durch diese Umwandung reduziert sich die Datenmenge auf ca. 4% der Quelldaten und ist damit sehr viel einfacher zu handhaben. Zudem sind die Daten ein Stückweit reduziert, so dass keine genauen Benutzerprofile mehr ermittelt werden können.
PowerBI
Das geht sehr einfach mit PowerBI. Hier lässt sich die CSV-Datei einfach importieren. Allerdings habe ich beim Import noch zwei Änderungen angebracht, damit die Daten sinnvoll ausgegeben werden
- Client-IP
Diese Feld mit den IP-Adressen wird von PowerBI als "Ganze Zahl" erkannt und formatiert. Das habe ich zurückgestellt auf Text ohne Konvertierung
Aber mit den Daten lässt sich schon sehr viel anfangen: Hier eine Übersicht auf eine Seite. Das linke Kreisdiagram seit die Übersicht aller Clients. Neben Outlook sind hier auch UcMAPI.EXE (Lync/Skype für Business) zu sehen und ein "ArchivTask" (Symantec Enterprise Vault, ebenso wie der RetrievalTask). Den habe ich auch selektiert, so dass die anderen Grafiken entsprechend gefiltert aussehen:
Unten links sehen sie die Verteilung der Zugriffe über die Stunde. Es ist auch gut zu sehen, dass hier der Archivtask gegen 22:00 Uhr eine Spitze produziert. Die Verteilung der Zugriffe nach Client IP-Adressen zeigt den einen Client. Rechts davon ist zu sehen, dass diese Zugriffe "Classic" sind, also keinen Cached-Mode nutzen. Oben rechts ist die auf diesen Filter reduzierte MAPI-Version zu sehen.
Und nun stellen Sie sich vor, sie wählen andere Kriterien aus. Sie können überall mit der Maus drauf klicken und PowerBI passt die Filter der anderen Grafiken entsprechend an.
Skript zum Download
Neugierig geworden?. Hier ist das Skript um ihre eigenen RCA-Logs ihrer Server einzusammeln und auszuwerten.
Moment bitte noch. Das Script hat noch den Fehler, dass es auch HubServer sucht. Ich muss an der Fehlerbehandlung noch etwas arbeiten
Damit das Skript funktionieren kann, sollten Sie folgendes beachten
- Das Skript liest per Exchange Powershell
"Get-ExchangeServer" die Server
d.h. es muss in einer Exchange PowerShell gestartet werden - Es ermittelt per Remote Registry den
Exchange Installationspfad
d.h. der ausführende Anwender muss Admin auf den entfernten Exchange Servern sein und Remotezugriff auf die Registrierung muss möglich sein (Dienst, Firewall) - Administrative UNC-Pfade
Das Skript nutzt dann C$ oder wo Exchange installiert ist, um die Konfigurations-XML zu lesen und danach die Log-Files zu lesen - Parameter rcaresultcsvfilename
Biete geben Sie hier einen voll qualifizierten Namen zu einer Datei an. Ein partieller Name landet sonst in C:\Windows\System32. Ohne einen Namen werden die Daten auf die Standard-Pipeline ausgegeben. - Performance
Powershell ist natürlich bei weitem nicht so schnell wie ein native C++-Code aber 4 GB RCA-Logs über LAN zu lesen und auf 160 Megabyte zusammenzufassen dauerte bei mir ca. 1 Stunde.
Das Skript wertet aktuell nur die RPC-Logs aus, aber noch nicht die MAPI/HTTP-Logs. Es ist also primär ein Werkzeug für die Migration von älteren Exchange Umgebungen, z.B. um alte Outlook Versionen zu ermitteln oder die Aktivitäten für die Migration in die Cloud zu erfassen. Dieses Skript ist nur ein Teil einem Werkzeugkasten um verschiedene Aspekte von Exchange zu ermitteln und mit PowerBI oder anderen Tools zu berichten.
Weitere Links
- Power Bi
- Power Bi Desktop
- Get-RCALog
- CAS-Logging
-
RPC Client Access Logging In Exchange 2010…
https://theucguy.net/rpc-client-access-logging-in-exchange/ -
Get Exchange Install Path Using PowerShell
http://exchangeserverpro.com/get-exchange-install-path-using-powershell/