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

  1. 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.
  2. 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
  3. 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
  4. 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