PowerShell Universal integrerer i dag med Application Insights for at levere metrikker til Azure fra instanser af platformen. Du kan se den opsætning i dokumentationen om overvågning. Selvom det er klar til brug med det samme, er indsamling af metrikker i skyen ikke nyttigt for alle brugere. For at give isolerede instanser mulighed for at indsamle metrikker har vi lavet et nyt plugin, der integrerer med OpenTelemetry.
OpenTelemetry
Som det er defineret på OpenTelemetry-webstedet, er OpenTelemetry en samling af API’er, SDK’er og værktøjer. Brug det til at instrumentere, generere, indsamle og eksportere telemetridata (metrikker, logge og traces), så du kan analysere softwarens ydeevne og adfærd.
OpenTelemetry stiller et bibliotek og NuGet-pakker til rådighed til at generere metrikker og logge i .NET- og ASP.NET Core-applikationer. Ved at føre OpenTelemetry ind i PowerShell Universal kan vi nemt levere metrikker til værktøjer som Prometheus.
Konfiguration af metrikker fra PowerShell Universal med Prometheus
Som en del af udviklingen af vores nye pluginsystem laver vi plugins for at sikre, at frameworket holder. Fra i aften leveres nightly builds af PowerShell Universal v4.2 med et nyt plugin, PowerShellUniversal.Plugin.OpenTelemetry, som eksponerer metrikker til eksterne tjenester som Prometheus. Du kan også se den aktuelle dokumentation til OpenTelemetry-pluginet.
Aktivering af OpenTelemetry
For at aktivere pluginet har vi indført to konfigurationsmetoder. For det første kan du nu bruge filen appsettings.json til at indlæse pluginmoduler, der findes på $ENV:PSModulePath. Vi leverer OpenTelemetry-modulet sammen med PSU, i det mindste indtil videre, og det kan indlæses med følgende JSON.
{
"Plugins": [
"UniversalAutomation.LiteDBv5",
"PowerShellUniversal.Plugin.OpenTelemetry"
]
}
Hvis du bruger et andet persistensplugin, skal du erstatte værdien LiteDBv5 med den værdi i stedet.
Derudover kan du også bruge filen plugins.ps1 i mappen Repository\.universal til at indlæse plugins. Importér modulet i filen. Du skal oprette den, hvis den ikke findes. Ændringer i filen kræver en genstart af PowerShell Universal-tjenesten.
Import-Module PowerShellUniversal.Plugin.OpenTelemetry
Afsendelse af metrikker til Prometheus
Når det er aktiveret, skal du konfigurere mål-endpointet for dine metrikdata. Som standard lytter Prometheus efter metrikker på denne URL: http://localhost:9090/api/v1/otlp/v1/metrics.
Du skal opdatere appsettings.json eller oprette miljøvariabler, der sender værdien til konfigurationssystemet i PSU. Et eksempel på JSON-konfiguration ser sådan ud.
{
"OpenTelemetry": {
"Otlp": {
"Endpoint": "http://localhost:9090/api/v1/otlp/v1/metrics"
}
}
}
Et eksempel på en miljøvariabel ser sådan ud.
$Env:OpenTelemetry__Otlp__Endpoint = 'http://localhost:9090/api/v1/otlp/v1/metrics'
OTLP står for OpenTelemetry Protocol. Der er flere konfigurationsmuligheder, som vi vil eksponere for pluginet, men det er i øjeblikket den eneste tilgængelige mulighed.
Når OTLP-endpointet er konfigureret, kan vi køre Prometheus for at indsamle metrikker. Download den seneste version af Prometheus, og start den med OTLP-funktionen aktiveret.
prometheus --enable-feature=otlp-write-receiver
Når Prometheus kører, kan du åbne dashboardet ved at gå til http://localhost:9090. Indtast metrikken http_server_duration_milliseconds_count, og tryk på Execute. Du kan se, at Prometheus viser antallet af HTTP-anmodninger, der kommer ind i PowerShell Universal-tjenesten. Serien _sum er den akkumulerede varighed i millisekunder.
Konklusion
Lokalt styrede driftsmetrikker er en fremragende funktion for enhver tjeneste, der kører i dit miljø. Vi håber at kunne tilbyde flere konfigurationsmuligheder til OpenTelemetry-pluginet i fremtiden. Det omfatter cmdlets til at generere brugerdefinerede metrikker i dine PowerShell-scripts, der kører i PowerShell Universal. Bemærk, at funktionaliteten beskrevet ovenfor kun virker i nightly builds fra den 3. oktober 2023 og udgives i version 4.2 af PowerShell Universal.
Efterhånden som pluginsystemet udvikler sig, kan der komme ændringer i, hvordan det virker, så vi anbefaler ikke, at du opretter nye plugins på nuværende tidspunkt. Vi udgiver en offentligt tilgængelig NuGet-pakke og dokumentation med version 5 af PowerShell Universal.
Skriv gerne med feedback eller spørgsmål på forummet.
Klar til at bygge? Download PowerShell Universal.

Adam Driscoll