PowerShell Universal s’intègre actuellement à Application Insights pour envoyer des métriques vers Azure depuis les instances de la plateforme. Vous pouvez consulter cette configuration dans la documentation de surveillance. Bien que ce soit prêt à l’emploi, collecter des métriques dans le cloud n’est pas utile à tous les utilisateurs. Pour offrir aux instances isolées la possibilité de collecter des métriques, nous avons créé un nouveau plugin qui s’intègre à OpenTelemetry.
OpenTelemetry
Selon le site OpenTelemetry, OpenTelemetry est une collection d’API, de SDK et d’outils. Utilisez-le pour instrumenter, générer, collecter et exporter des données de télémétrie (métriques, journaux et traces) afin d’analyser les performances et le comportement de vos logiciels.
OpenTelemetry fournit une bibliothèque et des paquets NuGet pour générer des métriques et des journaux dans les applications .NET et ASP.NET Core. En intégrant OpenTelemetry à PowerShell Universal, nous pouvons facilement fournir des métriques à des outils comme Prometheus.
Configurer les métriques PowerShell Universal avec Prometheus
Dans le cadre du développement de notre nouveau système de plugins, nous produisons des plugins pour assurer la viabilité du framework. À partir de ce soir, les builds nightly de PowerShell Universal v4.2 seront livrés avec un nouveau plugin PowerShellUniversal.Plugin.OpenTelemetry pour exposer des métriques à des services externes comme Prometheus. Vous pouvez aussi consulter la documentation actuelle du plugin OpenTelemetry.
Activer OpenTelemetry
Pour activer ce plugin, nous avons introduit deux méthodes de configuration. D’abord, vous pouvez maintenant utiliser le fichier appsettings.json pour charger les modules de plugins trouvés sur le $ENV:PSModulePath. Nous livrerons le module OpenTelemetry dans PSU, du moins pour le moment, et il peut être chargé avec le JSON suivant.
{
"Plugins": [
"UniversalAutomation.LiteDBv5",
"PowerShellUniversal.Plugin.OpenTelemetry"
]
}
Si vous utilisez un autre plugin de persistance, vous voudrez remplacer cette valeur LiteDBv5 par celle-ci à la place.
Vous pouvez aussi utiliser le fichier plugins.ps1 dans le répertoire Repository\.universal pour charger des plugins. Importez le module dans ce fichier. Vous devrez le créer s’il n’existe pas. Les modifications de ce fichier exigent un redémarrage du service PowerShell Universal.
Import-Module PowerShellUniversal.Plugin.OpenTelemetry
Envoyer des métriques à Prometheus
Une fois activé, vous devrez configurer le point de terminaison cible pour vos données de métriques. Par défaut, Prometheus écoute les métriques à l’URL suivante : http://localhost:9090/api/v1/otlp/v1/metrics.
Vous devrez mettre à jour appsettings.json ou créer des variables d’environnement qui transmettent cette valeur au système de configuration de PSU. Un exemple de configuration JSON ressemble à ceci.
{
"OpenTelemetry": {
"Otlp": {
"Endpoint": "http://localhost:9090/api/v1/otlp/v1/metrics"
}
}
}
Un exemple de variable d’environnement ressemblerait à ceci.
$Env:OpenTelemetry__Otlp__Endpoint = 'http://localhost:9090/api/v1/otlp/v1/metrics'
OTLP signifie OpenTelemetry Protocol. Nous exposerons d’autres options de configuration pour ce plugin, mais c’est actuellement la seule option disponible.
Avec le point de terminaison OTLP configuré, nous pouvons maintenant exécuter Prometheus pour collecter les métriques. Téléchargez la dernière version de Prometheus et démarrez-la avec la fonction OTLP activée.
prometheus --enable-feature=otlp-write-receiver
Une fois Prometheus en cours d’exécution, vous pouvez accéder au tableau de bord en visitant http://localhost:9090. Saisissez la métrique nommée http_server_duration_milliseconds_count et appuyez sur Execute. Vous verrez que Prometheus liste le nombre de requêtes HTTP qui arrivent dans le service PowerShell Universal. La série _sum correspond à la durée cumulée en millisecondes.
Conclusion
Des métriques opérationnelles contrôlées localement sont une excellente fonction pour tout service qui s’exécute dans votre environnement. Nous espérons offrir d’autres options de configuration pour le plugin OpenTelemetry à l’avenir. Cela inclura des cmdlets pour générer des métriques personnalisées dans vos scripts PowerShell qui s’exécutent dans PowerShell Universal. Notez que la fonctionnalité décrite ci-dessus ne fonctionnera que dans les builds nightly à compter du 3 octobre 2023, et sera livrée dans la version 4.2 de PowerShell Universal.
À mesure que notre système de plugins évolue, certains changements pourront être apportés à son fonctionnement, donc nous ne recommandons pas de créer de nouveaux plugins pour le moment. Nous publierons un paquet NuGet accessible publiquement et de la documentation avec la version 5 de PowerShell Universal.
N’hésitez pas à nous écrire pour vos commentaires ou questions sur les forums.
Prêt à construire? Téléchargez PowerShell Universal.

Adam Driscoll