PowerShell Universal se integra actualmente con Application Insights para enviar métricas a Azure desde las instancias de la plataforma. Puede ver esa configuración en la documentación de supervisión. Aunque está listo para usar, recopilar métricas en la nube puede no ser útil para todos los usuarios. Para que las instancias aisladas puedan recopilar métricas, hemos creado un nuevo complemento que se integra con OpenTelemetry.
OpenTelemetry
Según el sitio de OpenTelemetry, OpenTelemetry es una colección de API, SDK y herramientas. Úselo para instrumentar, generar, recopilar y exportar datos de telemetría (métricas, registros y trazas) y así analizar el rendimiento y el comportamiento de su software.
OpenTelemetry ofrece una biblioteca y paquetes NuGet para generar métricas y registros en aplicaciones .NET y ASP.NET Core. Al incorporar OpenTelemetry en PowerShell Universal, podemos proporcionar métricas fácilmente a herramientas como Prometheus.
Configurar las métricas de PowerShell Universal con Prometheus
Como parte del desarrollo de nuestro nuevo sistema de complementos, estamos produciendo complementos para garantizar la viabilidad del marco. A partir de esta noche, las compilaciones nightly de PowerShell Universal v4.2 incluirán un nuevo complemento PowerShellUniversal.Plugin.OpenTelemetry para exponer métricas a servicios externos como Prometheus. También puede consultar la documentación actual del complemento OpenTelemetry.
Habilitar OpenTelemetry
Para habilitar este complemento, hemos introducido dos métodos de configuración. Primero, ahora puede usar el archivo appsettings.json para cargar módulos de complementos encontrados en $ENV:PSModulePath. Por el momento, incluiremos el módulo OpenTelemetry en PSU y se puede cargar con el siguiente JSON.
{
"Plugins": [
"UniversalAutomation.LiteDBv5",
"PowerShellUniversal.Plugin.OpenTelemetry"
]
}
Si usa un complemento de persistencia distinto, deberá reemplazar ese valor LiteDBv5 por el valor correspondiente.
Además, también puede usar el archivo plugins.ps1 en el directorio Repository\.universal para cargar complementos. Importe el módulo en este archivo. Deberá crearlo si no existe. Los cambios en este archivo requieren un reinicio del servicio PowerShell Universal.
Import-Module PowerShellUniversal.Plugin.OpenTelemetry
Enviar métricas a Prometheus
Una vez habilitado, deberá configurar el endpoint de destino para sus datos de métricas. De forma predeterminada, Prometheus escucha métricas en la siguiente URL: http://localhost:9090/api/v1/otlp/v1/metrics.
Deberá actualizar appsettings.json o crear variables de entorno que pasen este valor al sistema de configuración de PSU. Un ejemplo de configuración JSON tiene este aspecto.
{
"OpenTelemetry": {
"Otlp": {
"Endpoint": "http://localhost:9090/api/v1/otlp/v1/metrics"
}
}
}
Un ejemplo de variable de entorno sería como este.
$Env:OpenTelemetry__Otlp__Endpoint = 'http://localhost:9090/api/v1/otlp/v1/metrics'
OTLP significa OpenTelemetry Protocol. Expondremos más opciones de configuración para este complemento, pero esta es actualmente la única opción disponible.
Con el endpoint OTLP configurado, ya podemos ejecutar Prometheus para recopilar métricas. Descargue la última versión de Prometheus e iníciela con la función OTLP habilitada.
prometheus --enable-feature=otlp-write-receiver
Cuando Prometheus esté en ejecución, puede acceder al panel visitando http://localhost:9090. Introduzca la métrica http_server_duration_milliseconds_count y pulse Execute. Verá que Prometheus enumera el número de solicitudes HTTP que llegan al servicio PowerShell Universal. La serie _sum corresponde a la duración acumulada en milisegundos.
Conclusión
Las métricas operativas controladas de forma local son una excelente función para cualquier servicio que se ejecute en su entorno. Esperamos ofrecer más opciones de configuración para el complemento OpenTelemetry en el futuro. Esto incluirá cmdlets para generar métricas personalizadas en sus scripts de PowerShell que se ejecutan en PowerShell Universal. Tenga en cuenta que la funcionalidad descrita anteriormente solo funcionará en compilaciones nightly a partir del 3 de octubre de 2023 y se incluirá en la versión 4.2 de PowerShell Universal.
A medida que evolucione nuestro sistema de complementos, es posible que se realicen cambios en su funcionamiento, por lo que no recomendamos crear complementos nuevos en este momento. Publicaremos un paquete NuGet de acceso público y documentación con la versión 5 de PowerShell Universal.
Envíenos comentarios o preguntas en los foros.
¿Listo para crear? Descargue PowerShell Universal.

Adam Driscoll