MAIN MENU
Blog di Devolutions

Annunci, aggiornamenti e approfondimenti di Devolutions.

Devolutions PowerShell Universal collecting metrics illustration for the blog.

Raccogliere metriche da PowerShell Universal con OpenTelemetry e Prometheus

Percorra OpenTelemetry in PowerShell Universal v4.2, il caricamento del plugin tramite appsettings.json o plugins.ps1, il receiver di scrittura OTLP di Prometheus e la query http_server_duration_milliseconds_count su localhost:9090.

PowerShell Universal si integra attualmente con Application Insights per fornire metriche ad Azure dalle istanze della piattaforma. Può consultare questa configurazione nella documentazione di monitoraggio. Sebbene sia pronto all’uso, raccogliere metriche nel cloud potrebbe non essere utile per tutti gli utenti. Per offrire alle istanze isolate la possibilità di raccogliere metriche, abbiamo creato un nuovo plugin che si integra con OpenTelemetry.

OpenTelemetry

Come definito sul sito OpenTelemetry, OpenTelemetry è una raccolta di API, SDK e strumenti. Lo usi per strumentare, generare, raccogliere ed esportare dati di telemetria (metriche, log e tracce) e analizzare prestazioni e comportamento del software.

OpenTelemetry fornisce una libreria e pacchetti NuGet per generare metriche e log nelle applicazioni .NET e ASP.NET Core. Introducendo OpenTelemetry in PowerShell Universal, possiamo fornire facilmente metriche a strumenti come Prometheus.

Configurare le metriche di PowerShell Universal con Prometheus

Nell’ambito dello sviluppo del nostro nuovo sistema di plugin, stiamo producendo plugin per garantire la validità del framework. A partire da questa sera, le build nightly di PowerShell Universal v4.2 includeranno un nuovo plugin PowerShellUniversal.Plugin.OpenTelemetry per esporre metriche a servizi esterni come Prometheus. Può anche consultare la documentazione attuale del plugin OpenTelemetry.

Abilitare OpenTelemetry

Per abilitare questo plugin, abbiamo introdotto due metodi di configurazione. Innanzitutto, ora può usare il file appsettings.json per caricare i moduli plugin trovati in $ENV:PSModulePath. Per il momento includeremo il modulo OpenTelemetry in PSU e può essere caricato con il JSON seguente.

{
    "Plugins": [
        "UniversalAutomation.LiteDBv5",
        "PowerShellUniversal.Plugin.OpenTelemetry"
    ]
}

Se usa un plugin di persistenza diverso, dovrà sostituire quel valore LiteDBv5 con il valore corrispondente.

Inoltre, può usare il file plugins.ps1 nella directory Repository\.universal per caricare i plugin. Importi il modulo in questo file. Dovrà crearlo se non esiste. Le modifiche a questo file richiedono un riavvio del servizio PowerShell Universal.

Import-Module PowerShellUniversal.Plugin.OpenTelemetry

Inviare metriche a Prometheus

Una volta abilitato, dovrà configurare l’endpoint di destinazione per i dati delle metriche. Per impostazione predefinita, Prometheus ascolta le metriche all’URL seguente: http://localhost:9090/api/v1/otlp/v1/metrics.

Dovrà aggiornare appsettings.json o creare variabili d’ambiente che passino questo valore al sistema di configurazione di PSU. Un esempio di configurazione JSON è il seguente.

{
    "OpenTelemetry": {
        "Otlp": {
            "Endpoint": "http://localhost:9090/api/v1/otlp/v1/metrics"
        }
    }
}

Un esempio di variabile d’ambiente sarebbe come questo.

$Env:OpenTelemetry__Otlp__Endpoint = 'http://localhost:9090/api/v1/otlp/v1/metrics'

OTLP sta per OpenTelemetry Protocol. Esporremo altre opzioni di configurazione per questo plugin, ma questa è attualmente l’unica opzione disponibile.

Con l’endpoint OTLP configurato, possiamo ora eseguire Prometheus per raccogliere le metriche. Scarichi l’ultima versione di Prometheus e la avvii con la funzione OTLP abilitata.

prometheus --enable-feature=otlp-write-receiver

Quando Prometheus è in esecuzione, può accedere al dashboard visitando http://localhost:9090. Immetta la metrica http_server_duration_milliseconds_count e prema Execute. Vedrà che Prometheus elenca il numero di richieste HTTP in arrivo nel servizio PowerShell Universal. La serie _sum corrisponde alla durata cumulativa in millisecondi.

Prometheus Graph table showing http_server_duration_milliseconds_count for PowerShell Universal routes.
Prometheus che elenca i conteggi della durata delle richieste HTTP di PowerShell Universal

Conclusione

Le metriche operative controllate in locale sono un’ottima funzionalità per qualsiasi servizio in esecuzione nel suo ambiente. Speriamo di offrire ulteriori opzioni di configurazione per il plugin OpenTelemetry in futuro. Questo includerà cmdlet per generare metriche personalizzate nei suoi script PowerShell eseguiti in PowerShell Universal. Tenga presente che la funzionalità descritta sopra funzionerà solo nelle build nightly a partire dal 3 ottobre 2023 e sarà inclusa nella versione 4.2 di PowerShell Universal.

Man mano che il nostro sistema di plugin evolve, potrebbero esserci modifiche al suo funzionamento, quindi al momento non consigliamo di creare nuovi plugin. Pubblicheremo un pacchetto NuGet accessibile pubblicamente e la documentazione con la versione 5 di PowerShell Universal.

Ci scriva per feedback o domande sui forum.

Pronto a iniziare a creare? Scarichi PowerShell Universal.