Parse-UCCAPILog.ps1

Der Lync Client als auch der Server erlauben die Aktivierung von Protokollen. Speziell die Clientversion ist sehr interessant, um bestimmte Sachverhalte nachzuvollziehen, da Sie sehr ausführlich Informationen liefert. Allerdings ist es eine einfache Textdatei und entsprechend erst mal zu parsen.

Das Skript "Parse-UCCAPILOG.PS1 liest eine angegebene Datei ein und sammelt bestimmte Informationen zusammen. Mein erster Ansatz war einfach mal zu ermitteln, wie viele Bytes so ein Communicator während der Zeit sendet und empfängt. Dazu sucht es nach folgenden Zeilen:

04/16/2013|03:17:30.168 1F68:C14 INFO :: End of Sending Packet - 192.168.100.100:5061 (From Local Address: 192.168.103.35:20323) 1503 bytes
04/16/2013|03:17:31.555 1F68:C14 INFO :: End of Data Received -192.168.100.100:5061 (To Local Address: 192.168.103.35:20323) 1096 bytes

Von diesen Zeilen wird die Anzahl der Bytes und die Anzahl addiert und am ende ausgegeben. Leider stehen im Log nur die "Netto"-Werte, d.h. die Anzahl des SIP-Pakets. Insofern kann das Skript nicht die absolut korrekte Anzahl der Bytes auf dem LAN-Kabel ermitteln, die für eine WAN-Abschätzung relevant wären. Es fehlen also die Bytes für:

  • Overhead für TCP Handshake (Sync, SyncAck, Ack)
  • Overhead für TLS Handshake
  • Overhead für TCP/IP/Ethernet Encapsulation

Weiterhin werden nur die SIP-Pakete gezählt, d.h. Anmeldung, Abmeldung, Presence-Update, INVITE und Instant Messages aber keine Audio/Video Volumen und auch keine Lync Webservices (OAB Download etc.)

Hinweis:
Diese Zahlen sind eine "Stichprobe" eines 12h Intervalls meines eigenen UserAccounts, der sehr viele Buddies eingetragen hat und auch viel IM und Telefonie macht, also entsprechend oft auch StatusUpdates, Invites und IM-Messages versendet. Ihre individuellen Daten können abweichen.

Ein exemplarisches Logfile von 50 MB liefert z.B.  folgende Daten:

Starttimestamp: 19.04.2013 13:31:28
Endtimestamp : 19.04.2013 18:48:53
TimeSpan : 19045
Total Lines : 599059
Total Found : 7287
Duration (Sec): 19044,621
Duration (Min): 317,41035
SIP in (MB)   : 9.892054
SIP out (MB)  : 5.216018
SIP bit/Sek   : 6346,26285114203
ScriptRunTime (s) : 34,5169742

Starttimestamp: 15.04.2013 14:57:58
Endtimestamp  : 16.04.2013 03:17:30
TimeSpan      : 44372
Total Lines   : 733246
Total Found   : 10980
Duration (Sec): 44372,105
Duration (Min): 739,535083333333
SIP in (MB)   : 14,953400
SIP out (MB)  : 7,503824
SIP bit/Sek: 4049

Die Verarbeitung von 50 Megabyte mit 733.246 Zeilen dauerte also gerade mal 34 Sekunden. In dem erfassten Zeitraum vom  15.04.2013 14:57:58 bis 16.04.2013 03:17:30 (also knapp 740 Minuten = 12 Stunden) wurden per SIP netto 14MB gesendet und 7 MB empfangen, also ca. 1,75MB/Stunde oder 29KB/Min oder 4 KBit/Sek.

Selbst über eine ISDN-Wählverbindung bleibt genug Platz für andere Daten. Wenn Sie aber einen größeren Standort mit vielleicht 1000 Benutzern remote anbinden, dann sind das auch schon mal 4 MBit/Sek, die da drauf schlagen können.

Ihre Werte !

Mich würde natürlich mal interessieren, wie viel Bandbreite z.B. bei Office 365 auf SIP entfallen. Solche Daten wird Microsoft aber wohl nicht veröffentlichen. Ich bin daher auf ihre Mithilfe angewiesen:

  1. Aktivieren Sie im Lync Client das Logging in den Optionen - Allgemein
    • Lync 2010
    • Lync 2013
      Es reicht aus den Status auf "Gering" zu stellen.
  2. Lassen Sie das Logging einfach über den Tag an
    Der Client protokolliert relativ viele Daten aber rollt nach 50 Megabyte das Logfile durch. Die Disk wird nicht überlaufen. Arbeiten Sie wie gewohnt weiter.
  3. Analysieren das Log
    Nutzen sie das PowerShell-Skript und geben Sie einfach die Datei als Parameter an.

Wer Zugriff auf Auswertungen wie RMON2, PRTG, NTOP oder auch WAN-Optimizer (Riverbed etc.) hat, und damit das Volumen auf Port 5061 selektieren kann, ist natürlich auch willkommen seine Daten zu liefern. Allerdings bitte mir Angabe der Anzahl Benutzer, die die WAN-Leitung nutzt. Senden Sie mir einfach ihre Daten, damit die Tabelle etwas Leben erhält.

Quelle Duration (min) SIP In (MByte) SIP out (MByte) SIP kbit/sek SIP-Requests

Microsoft Sizing Dokumentationen

entfällt

entfällt

entfällt

1-2

entfällt

Frank Carius

739

14

7

4

10980

Frank Carius

317

9,8

5,2

6,3

7347

Maehner, Jan (wilo.com)

116

3,2

1,0

5

2029

Maehner, Jan (wilo.com)

384

9,8

3,5

4,9

6962

Maehner, Jan (wilo.com)

289

16,6

2,8

9,4

4405

Es ist recht deutlich zu sehen, dass die Datenmenge für "SIP Allein" deutlich über den Werten liegt, die Microsoft in ihren eigenen Dokumentationen ansetzen. Dort wird nämlich von 1KBit/Sek/User ausgegangen.

Ich bin auf ihre Werte gespannt. Bitte teilen Sie mir mit, ob und wie Sie als "Quelle" aufgeführt werden wollen, wenn ich ihre Zahlen addiere.

Download und Einsatz

Um die Daten aus ihren UCCAPI-Logs zu extrahieren können sie dieses einfache Script verwenden. Es erwartet als Parameter den Dateinamen mit Pfad der UCCAPI-Log. Sie liegt je nach Lync Version in den ein oder anderen Verzeichnis:

  • Lync Communicator 2010
    %USERPROFILE%\tracing\Communicator-uccapi-0.uccapilog
  • Lync Communicator 2013
    %LOCALAPPDATA%\microsoft\office\15.0\lync\tracing\Lync-UccApi-0.UccApilog

parse-uccapilog.1.2.ps1.txt
Speichern Sie den Download in einem leeren Verzeichnis und benennen Sie die Extension entsprechend um.

Der Aufruf erfolgt dann ganz einfach in einer PowerShell (keine Exchange oder Lync Addons erforderlich). Allerdings können Sie nicht die DOS-Umgebungsvariablen verwenden. Aber auch PowerShell kann helfen.

Achtung:
Sie müssen den Pfad immer "voll deklariert" angeben, da ich die bis zu 50 Megabyte mit "[System.IO.File]::ReadAllLines($path)" einlese statt "Get-Content. Das ist deutlich schneller (siehe PS Performance unter "Beispiel 8: Textdateien lesen ". Allerdings darf die Datei dann nicht mehr durch den Communicator geöffnet sein. Ein Wechsel auf "[System.IO.File]::ReadAllLines($path)" würde das Problem beheben aber erfordert dann .NET 4.0 oder höher. Sie können aber gerne einen "get-content $path" daraus machen.

# Lync 2010 Auswertung
PS C:\temp> .\parse-uccapilog\parse-uccapilog.1.1.ps1 ($home+"\tracing\Communicator-uccapi-0.uccapilog")

# Lync 2013 Auswertung
PS C:\temp >.\parse-uccapilog\parse-uccapilog.1.1.ps1 ($home+"\appdata\local\microsoft\office\15.0\lync\tracing
\Lync-UccApi-0.UccApilog")

Ich bin gespannt auf ihre Ergebnisse.

Erweiterung

Kaum fertig und schon fallen einem weitere Analysen ein. In den Logs liegen viele weitere Schätze, z.B. könne man die Anzahl und Dauer der Telefonate erfassen. Sicher kann das auch ein Lync Monitoring Server, so denn einer vorhanden ist. Aber gerade im Pilotbetrieb ist der vielleicht noch nicht vorhanden.

Auch könnte eine Art automatische Fehlersuche interessant sein, da Lync selbst in der Regel nur stark vereinfachte Fehlermeldungen liefert und die Details im SIP-Paket gerne unterdrückt. Eine Auflistung der letzten Fehler mit dem Zeitpunkt kann eine interessante Option sein. Dann aber vielleicht als Windows-Programme zum selbst starten.

Weitere Links