Protokollierung
Über
PowerShell Universal verwendet ein strukturiertes Logging-Framework namens Serilog. Serilog erlaubt mehrere Logging-Ziele (Sinks), Log-Event-Eigenschaften und die Speicherung von Log-Event-Daten. Standardmäßig protokolliert PowerShell Universal zwei verschiedene Logdateien. Die erste ist das Systemlog. Dieses enthält Logdetails über den PowerShell Universal-Server und ist standardmäßig auf verbose eingestellt. Die zweite ist das Benutzerlog. Das Benutzerlog erfasst Informationen über alle Skripte, die innerhalb von PowerShell Universal ausgeführt werden und vom Benutzer erstellt wurden.
Beide Logdateien befinden sich in %ProgramData%\PowerShellUniversal.
System-Logging
Das System-Logging wird über die Anwendungseinstellungen (appsettings.json) oder Umgebungsvariablen konfiguriert. Systemlogs enthalten typischerweise internes Logging, das hilfreich ist, um festzustellen, was innerhalb des PowerShell Universal-Servers passiert, und nicht notwendigerweise in Ihren Skripten.
Die Systemlog-Einstellungen befinden sich im Stammverzeichnis von appsettings.json.
{
"SystemLogPath": "%ProgramData%\\PowerShellUniversal",
"SystemLogLevel": "Information"
}Der Systemlog-Pfad kann Umgebungsvariablen enthalten. Gültige Log-Level sind:
Verbose
Debug
Information
Warning
Error
Wir empfehlen, in Produktionsumgebungen auf Information oder höher zu laufen und nur beim Debuggen von Problemen unter diese Level zu wechseln.
Konfiguration
Die Logging-Konfiguration kann auf der Seite Einstellungen \ Logging geändert werden.
Ziele
PowerShell Universal bietet fünf integrierte Logging-Ziele.
Datei
Datenbank
TCP
HTTP
PowerShell
Jedes Ziel hat seinen eigenen Satz von Eigenschaften. Zum Beispiel haben Dateien eine Dateipfad-Eigenschaft.
Scope
Jedes Ziel kann so konfiguriert werden, dass es einen bestimmten Satz von Log-Ereignissen erfasst, basierend darauf, was sie erzeugt. Dazu gehören:
Scope - System- oder Benutzer-Logmeldungen
Feature - Die Funktion, die die Logmeldung erzeugt (z. B. API)
Resource - Eine bestimmte Ressource, die das Log erzeugt (z. B. Script1.ps1)
Wenn Feature oder Resource nicht angegeben sind, empfängt das Logziel alle Meldungen für den Scope. Wenn Sie zum Beispiel ein Ziel mit einem User-Scope und einem API-Feature definieren, würde es alle API-Anfragen protokollieren.
Level
Log-Level legen fest, welche Meldungen basierend auf dem Level der Logmeldungen protokolliert werden. Zum Beispiel empfängt ein Logging-Ziel, das auf das Level Information konfiguriert ist, Logmeldungen von Information bis Error, protokolliert aber keine Debug- oder Verbose-Meldungen.
PowerShell-Ziel
Das PowerShell-Logging-Ziel kann verwendet werden, um einen benutzerdefinierten Logger mit einem PowerShell-Skriptblock zu erstellen, der die Meldungen empfängt. Der Skriptblock sollte zwei Parameter haben. Der erste ist das von Serilog erzeugte Log-Event-Objekt und der zweite die gerenderte Meldungszeichenfolge.
Berücksichtigen Sie die Leistung bei der Verwendung des PowerShell-Ziels, da PowerShell für jede Logmeldung ausgeführt wird. Ein Logging-Runspace-Pool wird verwendet, um Multithread-Logging für PowerShell-Ziele bereitzustellen.
Protokollieren Sie innerhalb Ihres PowerShell-Ziels nicht mit Write-PSULog.
Write-PSULog
Sie können das Cmdlet Write-PSULog verwenden, um aus Ihren Skripten in Logs zu schreiben. Das Cmdlet setzt automatisch den User-Scope und Sie können wählen, ein Feature, eine Resource und eine Nachricht anzugeben.
Konsole
Sie können Write-PSULog erlauben, in die Streams der aktuellen PowerShell-Sitzung auszugeben, indem Sie den Schalterparameter -Console verwenden. Je nach gewähltem Level erscheinen die Logmeldungen auf diesen Streams.
Verschachtelte Runspaces
Wenn Ihre Lösung eigene Runspaces erstellt, entweder direkt oder über Jobs, können Sie Write-PSULog weiterhin verwenden, müssen dem Runspace jedoch die globale Variable $UniversalClient bereitstellen.
Logs anzeigen
Sie können Logs anzeigen, indem Sie Platform \ Logging aufrufen. Der Log-Viewer zeigt standardmäßig alle Logmeldungen an. Sie können die Sortier- und Filteroptionen verwenden, um bestimmte Level, Features und Ressourcen auszuwählen, für die die Logs angezeigt werden sollen.
Die Suchleiste sucht nach Logmeldungen, die die Suchzeichenfolge enthalten.

Beispiel: ELK-Stack
Sie können das TCP-Logging-Ziel verwenden, um Logmeldungen im ELK-Stack zu speichern und zu parsen. Für dieses Beispiel verwenden wir das docker-elk-Repository.
Klonen Sie das docker-elk-Repository und führen Sie die folgenden Befehle im Repository aus.
Nach der Ausführung läuft der ELK-Stack. Sie können die Web-Konsole aufrufen, indem Sie zu http://localhost:5601 navigieren.
Der Standardbenutzername ist elastic und das Passwort ist changeme.
In PowerShell Universal möchten Sie ein Logging-Ziel erstellen und TCP-Ereignisse an tcp://localhost:50000 senden.
Die obige Konfiguration sendet alle Logmeldungen des User-Scope über die TCP-Verbindung an Logstack. Navigieren Sie unter dem Abschnitt Observability in der Konsole zur Seite Logs \ Stream.

Von hier aus können Sie Logmeldungen von Universal suchen und anzeigen.

Zuletzt aktualisiert
War das hilfreich?