Teams Client Logs

Auch der Teams Client kann umfangreiche Protokolle schreiben oder über Tools bei seiner Arbeit betrachtet werden. Dies ist manchmal für eine Fehlersuche oder Analyse durch aus erforderlich, denn einen Zugriff auf den Server selbst haben sie ja nicht mehr. Auf der Seite Lync Keyhole Diagnose und Snooper (OCSLogger) habe ich für Skype ja schon beschrieben dass sie hier sehr viele Details ermitteln können. Mit Teams ist das nicht mehr ganz so einfach, da Teams nicht mehr SIP spricht aber es gibt durchaus Wege Teams unter die Haube zu schauen.

Teams Debug Logs

Der erste weg besteht einfach darin mit den eingebauten Hilfsmitteln ein Debug Log zu starten. Das geht recht einfach per Maus oder Shortcut und die Logs landen an dem angegebenen Platz:

Client Windows Mac

Maus

Über das kleine Icon in der Taskleiste kommen Sie mit der rechten Maustaste an das Menü "Protokolle abrufen"

Leider habe ich aktuell kein MacOS-System. Aber auch hier soll es das Menü geben

Hotkey

Ctrl + Alt + Shift + 1

Option + Command + Shift+1

Logverzeichnis

%userprofile%\Downloads

Downloads-Ordner

Die Funktion gibt es so erst mal nicht im Teams Client, welcher im Browser oder Mobilgeräten läuft. Einige Logs habe ich mit iTunes auf %appdata%\Apple Computer\Logs\CrashReporter\MobileDevice\iphone\Retired gefunden. Auf meinem Windows PC finde ich dann aber folgende Dateien:

Die Datei "*sync-txt" ist aus meiner Sicht wenig interessant nud die einfache TXT-Datei enthält die meisten Informationen zur aktuellen Session. Sie erst recht groß aber einige Ausschnitte helfen bei der Fehlersuche, z.B. das Auth Token.

Hinweis: Die aktuellste Information der Datei steht oben. Bei der Generierung wird das Log also anhand interne Informationen komplett neu geschrieben. Frühere Sessions finden sie also weiter unter. Suchen Sie dazu einfach nach "Previous Session Logs" um das Ende der aktuellen Session zu finden.

Hier mal ein gekürzter Auszug eines Logfiles

{
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Teams/1.2.00.13765 Chrome/66.0.3359.181 Electron/3.1.8 Safari/537.36",
  "ring": {
    "id": "general",
    "friendlyName": "Public",
    "isPublic": true,
  },
  "sessionId": "03e40671-db49-ac66-c29d-18f7306ad56d",
  "timezone": 2,
  "version": {
    "buildDate": "2019-05-31T22:26:26.211Z",
    "versionDate": "2019-05-31T21:21:09.000Z",
    "versionHash": "dff7c5de6e5861170a7a03534cd2346674d3bc71",
    "clientVersion": "27/1.0.0.2019053130",
    "semver": "1.0.2019053130",
    "tsCallingVersion": "2019.18.01.2",
    "slimcoreVersion": "2019.14.4"
  },
  "authState": {
    "adal_error": null,
    "adal_error_description": null,
    "adal_failed_renew": null,
    "adal_login_error": null
  },
  "user": {
    "isAuthenticated": true,
    "profile": {
      "aud": "1fec8e78-bce4-4aaf-ab1b-5451cc387264",
      "iss": "https://sts.windows.net/de21c301-a4ae-4292-aa09-6db710a590a6/",
      "iat": 1560068884,
      "nbf": 1560068884,
      "exp": 1560072784,
      "acct": 0,
      "acr": "1",
      "aio": "42ZgYPg3Of7wGROzww8dEiqUeCMX+CxiPmGvksZgaCutaXjlQT8A",
      "amr": [
        "pwd"
      ],
      "appid": "1fec8e78-bce4-4aaf-ab1b-5451cc387264",
      "appidacr": "0",
      "family_name": "User1a",
      "given_name": "Vorname1a",
      "ipaddr": "91.39.139.19",
      "name": "user1a, Vorname1a",
      "oid": "b39bb717-ea64-46cd-ab57-00186effe82c",
      "onprem_sid": "S-1-5-21-11949449-30417519-71842111-1009",
      "puid": "10033FFF814B5F32",
      "scp": "Contacts.ReadWrite.Shared Files.ReadWrite.All Notes.ReadWrite.All Sites.ReadWrite.All",
      "sub": "xxx-xxx",
      "tid": "xxx-xx-xx-xx-xxx",
      "unique_name": "user1a@uclabor.de",
      "upn": "user1a@uclabor.de",
      "uti": "Lz4aCIXWF0eNxU1GFzRUAA",
      "ver": "1.0"
    },
    "userName": "user1a@uclabor.de",
    "userRole": 0
  },
  "context": {
    "UserInfo.Ring": "general",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Teams/1.2.00.13765 Chrome/66.0.3359.181 Electron/3.1.8 Safari/537.36",
    "userType": "user",
    "clientType": "desktop",
    "environment": "msteams-web-prod-euwe-01",
    "clientVersion": "27/1.0.0.2019053130",
    "buildtime": "2019-05-31T21:57:45.575Z",
    "commitHash": "dff7c5d",
    "schemaVersion": "2.0",
    "appState": "InCall",
    "pageVisible": true,
    "serviceWorkerEnabled": "disabled",
    "phase": "",
    "flights": "test-skypeteams-web-a;msteams-web-b;msteams-mt-emea-b;msteams-mt-amer-b;msteams-mt-apac-b;msteams-mt-uk-b;msteams-mt-in-b;msteams-mt-global-b;...",
    "theme": "default",
    "AppInfo.ProcessArchitecture": "x64",
    "appversion": "1.2.00.13765",
    "cores": 8,
    "cpuarchitecture": "x64",
    "cpuspeed": 1992,
    "desktopBuildVersion": "27/1.2.00.13765",
    "desktopSession": "desktop-xxx-xxx-xxx-xxx-xxx",
    "machineId": "xxxx",
    "osarchitecture": "x64",
    "osversion": "10.0.17763",
    "platformId": 27,
    "totalMemory": 17022623744,
    "UserRole": "default",
    "preferredLocales": "de-de",
    "locale": "de-de",
    "localeResolution": "primary_locale_used",
    "UserInfo.TenantId": "xxx-xxx-xxx-xxx-xxx",
    "dbOpen": "opened",
    "Call.Type": "oneToOnePstnCall",
    "Call.IsChatVersion2": false,
    "Call.Id": "xxx-baf8-x-x-x",
    "Call.ParticipantId": "xxx-x-x-9ce2-xxx",
    "Call.IsBroadcast": "",
    "Call.BroadcastRole": "",
    "Call.BroadcastModalityState": "",
    "Call.BroadcastMediaCount": "",
    "threadId": ""
  }
}

In dem Log sehen sie am Ende auch, dass der Teilnehmer in einem "Call" war. Weitere Informationen finden Sie dann in der dazugehörigen "*.calling.txt" :

CallId: 451f1c1f-baf8-40be-a22b-5c2ecef8e67c
teamsCallId: 2
Call state: 3
participantId: 951e1839-770e-491c-9ce2-eaba6ead64d0
endpointId: 75b54eea-ffff-ffff-4f11-fcfb6e82459f
setupArgs: {"conversationId":"19:preview-d88aae7a-301b-4d0f-872e-d2f1d308a731",
            "isChannelMeeting":false,
            "muted":false,
            "withVideo":false,
            "networkReconnect":1,
            "mutedSpeakers":false,
            "screenSharingOnly":false,
            "isEchoBotCall":false,
            "scenarioName":"call_accept"
}
Dominant Speaker: {"speakerList":[],"timestamp":null}
Call Participants info: 
Participant with id PSTN-xxxxxxxxxxx is in state 3, isServerMuted flag is false, stream info is:
	No streams available
	No streams available

Recording status is: none

Active calls info: {"19:xxxxxxxxxxxxx@thread.skype":{"callsMap":{},"calls":[]}}
Calling Debug data: 

	Layout: 0
	Participant Manager Items Count: 1
	PlusCount: 0
	Item MRI: 4:+49160xxxxxxxx, item position: Stage
	Roster info:
Chat panel has not been created. Reason: 1to1 pstn call
Meeting info panel has not been created. Reason: One to One call
Recording button has not been created. Reason: Disabled by FF for type of conversation
Video button has not been created. Reason: 1to1 pstn call

 

 

Erweiterte Debug Logs

Es gibt übrigens noch einen besonderen Weg weitere Logs zu erhalten: Klicken sie sieben Mal mit der linken Maustaste auf das kleine Teams-Icon neben der Uhr und dann mit der rechten Maus-Taste. Sie finden dann eine ganze Flut von verschiedenen Logs, auf die ich später mal eingehen werden.

Allerdings sind die meiden Punkte für normale Anwender und selbst Administratoren nicht weiter hilfreich. Entwickler werden aber mit der ein oder anderen Option schon arbeiten wollen. Ein normaler Anwender wird aber sicher nicht versehentlich die sieben Klicks auf das Icon tätigen.

Media Logs

Parallel dazu gibt es aber noch weitere Protokolle, die der Teams Client kontinuierlich mitschreibt und auch bei Bedarf genauer untersucht werden können:

Client Windows Mac

Media Logs

%appdata%\Microsoft\Teams\media-stack*.etl

~/Library/Application Support/Microsoft/Teams/media-stack*.blog

 Die Media-Logs kann offiziell aber nur Microsoft selbst auswerten. Sie enthalten weitere Details hinsichtlich Audio, Video und Desktop-Sharing-Übertragungen. Es sind zwar ETL-Traces und theoretisch können Sie diese auch mit dem EventViewer oder Microsoft Message Analyzer betrachten aber bislang habe ich diese Logs noch nicht gebraucht.

Bootstrap Logs

Diese Logs benötigen Sie, wenn Teams sich gar nicht erst anmelden kann und Sie den Grund dafür ermitteln wollen.

Client Windows Mac

Bootstrap Logs

%appdata%\Microsoft\Teams\logs.txt

~/Library/Application Support/Microsoft/Teams/logs.txt

Das Log ist eine einfache Text-Datei und kann direkt mit NotePad o.ä. gelesen werden

Outlook Meeting AddOn

Probleme mit dem AddOn für Outlook können sie ebenfalls in einem eigenen Protokoll analysieren

Client Windows Mac

MeetingAddOnLog

%appdata%\Microsoft\Teams\meeting-addin\teams-meeting-addin.log

Diese Information fehlt noch

Normalerlweise schaue ich mir die Logs nicht genauer an. Bislang funktioniert mein Meeting AddOn wie gehabt und je nach Teams Mode ist auch das richtige Icon sichtbar. In den Logs gibt es aber einen Hinweise auf eine Konfigurationsdatei

2019-06-06-04:45:19.446 8 Info Microsoft.Teams.MeetingAddin.Settings.TeamsDesktopConfigContainer Watcher_Changed C:\Users\user1\AppData\Roaming\Microsoft\Teams\desktop-config.json has changed. Loading settings
2019-06-06-04:45:19.447 7 Info Microsoft.Teams.MeetingAddin.Settings.TeamsDesktopConfigContainer Watcher_Changed C:\Users\user1\AppData\Roaming\Microsoft\Teams\desktop-config.json has changed. Loading settings
2019-06-06-04:45:22.501 4 Info Microsoft.Teams.MeetingAddin.Settings.TeamsDesktopConfigContainer Timer_Tick Timer ticked and the file has changed. Loading it again
2019-06-06-04:45:22.502 12 Info Microsoft.Teams.MeetingAddin.Settings.TeamsDesktopConfigContainer LoadSettingsFromFile Entry
2019-06-06-04:45:22.502 12 Info Microsoft.Teams.MeetingAddin.Settings.TeamsDesktopConfigContainer LoadSettingsFromFile Settings loaded successfully! Attempts remaining = 5

In der Datei lässt sich die ein oder andere Information schnell auslesen.

{
  "preventUpnDetectSso":false,
  "silentUpdateTriggered":false,
  "previousCrashesInfo":{
    "crashes":[{"type":"renderer","datetime":1494360640556}]},
    "windowState":{"x":490,"y":100,"width":1419,"height":853,"isMaximized":false,"isFullScreen":false,"monitorId":2779098405},
    "restartCommand":{"command":"","reason":""},
    "userUpn":"",
    "userOid":"xxxxx-xx-xx-xx-xxxxxx",
    "userTid":"xxxxx-xx-xx-xx-xxxxxx",
    "guestTenantId":"",
    "homeTenantId":"de21c301-a4ae-4292-aa09-6db710a590a6",
    "launchTime":"1559685528996",
    "desktopZoomLevelV2":3,
    "isAppFirstRun":false,
    "desktopSessionId":"desktop-xxxx-xxx-xxx-xxx-xxxxxx",
    "teamsUrlProtocolsRegistered":true,
    "lyncUrlProtocolsRegistered":true,
    "disableWarningOnOpenKeyRegistered":true,
    "previousElectronVersion":"2.0.18",
    "lastKnownElectronVersion":"3.1.8",
    "overrideOpenAsHiddenProperty":true,
    "isPrivateCloud":true,
    "teamsProtocolsRegistered":false,
    "lyncProtocolsRegistered":false,
    "urlProtocolsRegistered":false,
    "rendererCrashInfo":{"datetime":0,
    "session":"",
    "desktopSession":"",
    "type":""
  },
  "versions":{"updated":""},
  "processCrashInfo":{"datetime":0},
  "notificationWindowOnClose":true,
  "isForeground":false,
  "machineId":"xxxxxxxxxxxxxxxxxxxxx",
  "hooks":{},
  "updateInfo":{"attempts":0
  "status":"Succeed",
  "lastUpdate":"2017-07-26T07:59:16.870Z",
  "error":null},
  "currentWebLanguage":"de",
  "isLoggedOut":false,
  "deviceInfoId":"xxxxxxxxxxxxxxxxxxxxx",
  "restartReason":null,
  "appPreferenceSettings":{"openAsHidden":true,"openAtLogin":true,"registerAsIMProvider":true,"runningOnClose":true},
  "overrideOpenAsHidden":true,
  "pastModernAuthSucceeded":true,
  "previousWebClientVersion":"27/1.0.0.2019053130",
  "isAppTerminated":false,
  "theme":"default",
  "isAppSessionEnd":false
}

Setup Log

Jede Installation aber auch ein Update des Teams Clients wird ebenfalls protokolliert. Ich habe bisher folgende Logs gesehen

Client Windows Mac

MeetingAddOnLog

%appdata%\..\Local\Microsoft\Teams\SquirrelSetup.log

Diese Information fehlt noch

Hier ein Beispiel:

2019-04-19 19:31:02> Program: Starting Squirrel Updater: --processStart Teams.exe
2019-04-19 19:31:02> Program: Want to launch 'C:\Users\user1\AppData\Local\Microsoft\Teams\current\Teams.exe'
2019-04-19 19:31:02> Program: About to launch: 'C:\Users\user1\AppData\Local\Microsoft\Teams\current\Teams.exe': 
2019-04-20 13:35:23> Program: Starting Squirrel Updater: --update C:\Users\user1\AppData\Roaming\Microsoft\Teams\DownloadedUpdate\xxx
2019-04-20 13:35:23> Program: Starting update, downloading from C:\Users\user1\AppData\Roaming\Microsoft\Teams\DownloadedUpdate\xxx
2019-04-20 13:35:23> UpdateManager: using rootAppDirectory: C:\Users\user1\AppData\Local\Microsoft\Teams
2019-04-20 13:35:23> Program: About to update to: C:\Users\user1\AppData\Local\Microsoft\Teams
2019-04-20 13:35:23> CheckForUpdateImpl: Using existing staging user ID: 5403b8be-1c6c-5f71-819e-6b1333ad6fe0
2019-04-20 13:35:23> CheckForUpdateImpl: Reading RELEASES file from C:\Users\user1\AppData\Roaming\Microsoft\Teams\DownloadedUpdate\xxx
2019-04-20 13:35:23> ApplyReleasesImpl: Found partially applied release folder, killing it: C:\Users\user1\AppData\Local\Microsoft\Teams\stage
2019-04-20 13:35:23> ApplyReleasesImpl: Writing files to app directory: C:\Users\user1\AppData\Local\Microsoft\Teams\stage
2019-04-20 13:35:26> ApplyReleasesImpl: Squirrel Enabled Apps: [C:\Users\user1\AppData\Local\Microsoft\Teams\stage\Teams.exe]
2019-04-20 13:35:42> ApplyReleasesImpl: Starting fixPinnedExecutables
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: Excel 2016.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: File Explorer.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: Google Chrome.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: Internet Explorer.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: Microsoft Office SharePoint Designer 2007.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: Notepad++.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: OneNote 2016.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: Outlook.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: Snooper.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: SyncBack Pro.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Examining Pin: Windows PowerShell.lnk
2019-04-20 13:35:42> ApplyReleasesImpl: Fixing up tray icons
2019-04-20 13:35:42> MeetingAddinInstaller: System.ArgumentException: Eine Unterschlüsselstruktur kann nicht gelöscht werden, da der Unterschlüssel nicht vorhanden ist.
2019-04-20 13:35:42> MeetingAddinInstaller: Version: 1.0.19098.3; addinPackageDirectory: 1.0.19098.3
2019-04-20 13:35:42> MeetingAddinInstaller: .dead exists: False
2019-04-20 13:35:42> MeetingAddinInstaller: path to .dead: C:\Users\user1\AppData\Local\Microsoft\TeamsMeetingAddin\1.0.19098.3\.dead
2019-04-20 13:35:42> MeetingAddinInstaller: before cleanup unused versions
2019-04-20 13:35:42> MeetingAddinInstaller: Addin directory exists. Copy was successful
2019-04-20 13:35:42> MeetingAddinInstaller: Version 1.0.19098.3 of the meeting add-in is now installed
2019-04-20 13:35:42> ApplyReleasesImpl: cleanDeadVersions: for version 1.2.00.10168
2019-04-20 13:35:42> ApplyReleasesImpl: cleanDeadVersions: exclude folder stage
2019-04-20 13:35:42> ApplyReleasesImpl: cleanDeadVersions: exclude folder stage
2019-04-20 13:52:47> Program: Starting Squirrel Updater: --quitAndInstall Teams.exe
2019-04-20 13:52:47> IEnableLogger: : System.InvalidOperationException: Die Anforderung kann nicht verarbeitet werden, da der Prozess (21284) beendet wurde.
2019-04-20 13:52:47> IEnableLogger: : System.ComponentModel.Win32Exception (0x80004005): Zugriff verweigert
2019-04-20 13:52:48> Program: Moving staged to current app directory
2019-04-20 13:52:48> Program: Want to launch 'C:\Users\user1\AppData\Local\Microsoft\Teams\current\Teams.exe'
2019-04-20 13:52:48> Program: About to launch: 'C:\Users\user1\AppData\Local\Microsoft\Teams\current\Teams.exe':

Fiddler (HTTP)

Wenn wir mal Audio und Video ignorieren, dann spricht der Teams Client die meiste Zeit per HTTPS mit dem Backend oder Speichern. Das ist natürlich die Domäne der ProxyServer für Debugging und Analysen. Mein Favorit ist hier der kostenfreie Fiddler, der mit passender Konfiguration auch die HTTPS-Verbindungen aufbrechen und inspizieren kann. Sie finden hier sehr ausführlich alle Zugriffe von Teams.

Browser Konsole

Es spricht aber auch nichts dagegen die Teams-Version im Browser zu starten. Fast alle Browser haben heute auch eine Debugging-Konsole, die meist per F12-Taste erreichbar ist. Auch hier sehen Sie die URL, Payload und Antworten.

WireShark (RTP)

Sprache, Bild und Desktop Sharing werden aber nur dann über HTTPS getunnelt, wenn die UDP-Verbindungen über 3478-3481/UDP blockiert sind. Diese Ports sind aber meist frei, da speziell Sprache durch HTTPS nu den Proxy-Server stärker belastet und die Qualität verschlechtert. Zwar sind alle Übertragungen per SRTP verschlüsselt, aber dies betrifft nur den Payload der Pakete. Die Information, dass es UDP-Pakete zu gewissen Zieladressen sind und selbst das Wissen um RTP als Rahmen samt dem verwendeten Codec ist nicht verschlüsselt. Allerdings kann WireShark die RTP-Verbindungen nicht eigenständig erkennen. Das geht nur, wenn WireShark auch die unverschlüsselten SIP-Pakete gefunden und darauf die Kandidaten ermittelt hat. Sie können aber natürlich die fraglichen Pakete sehr einfach manuell als "Decode as .. RTP" auswählen. Schon beim Mitschneiden können Sie sich auf die Portrange beschränken

Sie sehen dann den STUN-Request

Nachdem ich dann weiter unten nach einer "großen Menge UDP-Pakete gesucht habe und diese als "RTP" decodieren lassen

Danach ändert sich dann auch gleich die Anzeige in WireShark. Ich sehe nun auch den Codec und die RTCP Rückmeldungen.

Sie sehen hier aber auch, dass mein Client mit seiner 192.168.178.50 allem Anschein nach im Home-Office hinter einer Fritz!Box verbunden ist und der Telefonanruf gar nicht über die Cloud geht, wie Microsoft dies empfiehlt, sondern direkt zur öffentlichen IP-Adresse des Media Relays unterwegs ist. Hier werde ich also noch mal in der Firewall genauer nachschauen müssen, warum die IP-Adresse und die A/V-Ports auch von "nicht Microsoft-Adressen" erreichbar ist. Das möchte ich natürlich nicht.

So können Sie zumindest passiv auf einem Computer die Audio/Video-Daten etwas weiter analysieren.

Weitere Links