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 und 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 einer Logdatei:
{ "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
- Use log files in troubleshooting
Microsoft Teams
https://docs.microsoft.com/de-de/microsoftteams/log-files
https://learn.microsoft.com/en-us/microsoftteams/log-files
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
- Lync Keyhole Diagnose
- Snooper (OCSLogger)
- Fiddler
- Wireshark (vormals Ethereal)
- Direct Routing und Media Bypass
- Teams Dialpad
-
Use log files in troubleshooting Microsoft
Teams
https://docs.microsoft.com/de-de/microsoftteams/log-files - Microsoft Teams: Desktop and Web Client Log Location
https://blogs.technet.microsoft.com/uclobby/2016/11/08/microsoft-teams-desktop-and-web-client-log-location/ - How Microsoft Teams uses memory
https://learn.microsoft.com/en-us/microsoftteams/teams-memory-usage-perf