PowerShell Universal integriert derzeit Application Insights, um Metriken von Plattforminstanzen an Azure zu liefern. Diese Einrichtung finden Sie in der Überwachungsdokumentation. Das ist sofort einsatzbereit, aber das Erfassen von Metriken in der Cloud ist nicht für alle Benutzer sinnvoll. Damit isolierte Instanzen Metriken erfassen können, haben wir ein neues Plugin erstellt, das sich in OpenTelemetry integriert.
OpenTelemetry
Laut der OpenTelemetry-Website ist OpenTelemetry eine Sammlung von APIs, SDKs und Tools. Nutzen Sie sie, um Telemetriedaten (Metriken, Protokolle und Traces) zu instrumentieren, zu erzeugen, zu erfassen und zu exportieren, damit Sie die Leistung und das Verhalten Ihrer Software analysieren können.
OpenTelemetry stellt eine Bibliothek und NuGet-Pakete bereit, um Metriken und Protokolle in .NET- und ASP.NET Core-Anwendungen zu erzeugen. Durch die Einführung von OpenTelemetry in PowerShell Universal können wir Metriken einfach an Tools wie Prometheus liefern.
PowerShell-Universal-Metriken mit Prometheus konfigurieren
Im Rahmen der Entwicklung unseres neuen Plugin-Systems erstellen wir Plugins, um die Tragfähigkeit des Frameworks sicherzustellen. Ab heute Abend enthalten die Nightly Builds von PowerShell Universal v4.2 ein neues PowerShellUniversal.Plugin.OpenTelemetry-Plugin, um Metriken an externe Dienste wie Prometheus bereitzustellen. Sie finden auch die aktuelle OpenTelemetry-Plugin-Dokumentation.
OpenTelemetry aktivieren
Um dieses Plugin zu aktivieren, haben wir zwei Konfigurationsmethoden eingeführt. Zuerst können Sie jetzt die Datei appsettings.json verwenden, um Plugin-Module zu laden, die im $ENV:PSModulePath gefunden werden. Wir liefern das OpenTelemetry-Modul vorerst in PSU mit, und es kann mit dem folgenden JSON geladen werden.
{
"Plugins": [
"UniversalAutomation.LiteDBv5",
"PowerShellUniversal.Plugin.OpenTelemetry"
]
}
Wenn Sie ein anderes Persistenz-Plugin verwenden, sollten Sie diesen LiteDBv5-Wert durch den entsprechenden Wert ersetzen.
Zusätzlich können Sie die Datei plugins.ps1 im Verzeichnis Repository\.universal verwenden, um Plugins zu laden. Importieren Sie das Modul in dieser Datei. Sie müssen sie erstellen, falls sie nicht existiert. Änderungen an dieser Datei erfordern einen Neustart des PowerShell-Universal-Dienstes.
Import-Module PowerShellUniversal.Plugin.OpenTelemetry
Metriken an Prometheus senden
Sobald das Plugin aktiviert ist, müssen Sie den Zielendpunkt für Ihre Metrikdaten konfigurieren. Standardmäßig lauscht Prometheus unter der folgenden URL auf Metriken: http://localhost:9090/api/v1/otlp/v1/metrics.
Sie müssen appsettings.json aktualisieren oder Umgebungsvariablen erstellen, die diesen Wert an das PSU-Konfigurationssystem übergeben. Eine Beispiel-JSON-Konfiguration sieht so aus.
{
"OpenTelemetry": {
"Otlp": {
"Endpoint": "http://localhost:9090/api/v1/otlp/v1/metrics"
}
}
}
Eine Beispiel-Umgebungsvariable wäre wie folgt.
$Env:OpenTelemetry__Otlp__Endpoint = 'http://localhost:9090/api/v1/otlp/v1/metrics'
OTLP steht für OpenTelemetry Protocol. Wir werden weitere Konfigurationsoptionen für dieses Plugin bereitstellen, aber das ist derzeit die einzige verfügbare Option.
Mit konfiguriertem OTLP-Endpunkt können wir Prometheus jetzt starten, um Metriken zu erfassen. Laden Sie die neueste Version von Prometheus herunter und starten Sie sie mit aktivierter OTLP-Funktion.
prometheus --enable-feature=otlp-write-receiver
Sobald Prometheus läuft, können Sie das Dashboard unter http://localhost:9090 öffnen. Geben Sie die Metrik http_server_duration_milliseconds_count ein und klicken Sie auf Execute. Sie sehen, dass Prometheus die Anzahl der HTTP-Anfragen auflistet, die im PowerShell-Universal-Dienst eingehen. Die Zeitreihe _sum gibt die kumulierte Dauer in Millisekunden an.
Fazit
Lokal gesteuerte Betriebsmetriken sind eine wertvolle Funktion für jeden Dienst in Ihrer Umgebung. Wir hoffen, künftig weitere Konfigurationsoptionen für das OpenTelemetry-Plugin bereitzustellen. Dazu gehören Cmdlets zum Erzeugen benutzerdefinierter Metriken in Ihren PowerShell-Skripten, die in PowerShell Universal ausgeführt werden. Beachten Sie, dass die oben beschriebene Funktion nur in Nightly Builds ab dem 3. Oktober 2023 funktioniert und in Version 4.2 von PowerShell Universal erscheinen wird.
Während sich unser Plugin-System weiterentwickelt, können sich einige Abläufe ändern. Deshalb empfehlen wir derzeit nicht, neue Plugins zu erstellen. Wir werden mit Version 5 von PowerShell Universal ein öffentlich zugängliches NuGet-Paket und Dokumentation veröffentlichen.
Bitte senden Sie Feedback oder Fragen in den Foren.
Bereit zum Bauen? PowerShell Universal herunterladen.

Adam Driscoll