MAIN MENU
Blog de Devolutions

Anuncios, actualizaciones y análisis de Devolutions.

Devolutions PowerShell Universal collecting metrics illustration for the blog.

Recopilar métricas de PowerShell Universal con OpenTelemetry y Prometheus

Recorra OpenTelemetry en PowerShell Universal v4.2, la carga del complemento mediante appsettings.json o plugins.ps1, el receptor de escritura OTLP de Prometheus y la consulta de http_server_duration_milliseconds_count en localhost:9090.

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.

Prometheus Graph table showing http_server_duration_milliseconds_count for PowerShell Universal routes.
Prometheus mostrando los recuentos de duración de solicitudes HTTP de PowerShell Universal

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.