Ejercicio: Adición de características de registro y supervisión de una función de Azure en el portal

Completado

En la unidad anterior, ha obtenido información sobre algunas de las ventajas para incorporar Application Insights en la aplicación de funciones. También ha aprendido sobre algunas de las otras características de registro que están disponibles para el equipo de desarrolladores.

En esta fase de la investigación del proyecto, implementó la aplicación de funciones en Azure mediante Maven y probó la aplicación de función en producción. Su siguiente tarea consiste en agregar funcionalidades de seguimiento y registro a la aplicación.

En este ejercicio, actualizará los archivos de configuración del proyecto de función para admitir tanto las secuencias de registro como Application Insights. También aprenderá a agregar desencadenadores de eventos de seguimiento personalizado y de Application Insights al código del proyecto.

Streaming de registros en tiempo real

Ahora que la aplicación de funciones se implementa y ejecuta en Azure, puede solucionar problemas mediante el comando simple de la CLI de Azure para obtener el streaming de registros en tiempo real desde la aplicación.

  1. En Azure Portal, en la página Información general de la función HttpExample. Use el icono Copiar en el portapapeles para copiar el valor del grupo de recursos y la aplicación de funciones.

  2. En la ventana de Azure Cloud Shell, escriba el comando az webapp log tail -n <functionAppName> -g <resourceGroup> para transmitir registros. Reemplace <functionAppName> y <resourceGroup> por los valores que guardó en el paso anterior. Por ejemplo:

    az webapp log tail -n event-reporting-20240125192009873 -g learn-f0af729c-0493-4b45-a5b8-d6b4783b03da
    
    
  3. El resultado debe ser parecido al siguiente mensaje.

    2024-01-25T20:44:58  Welcome, you are now connected to log-streaming service. The default timeout is 2 hours. Change the timeout with the App Setting SCM_LOGSTREAM_TIMEOUT (in seconds). 
    2024-01-25T20:45:58  No new trace in the past 1 min(s).
    
  4. Abra una nueva pestaña en el explorador web y pegue la dirección URL totalmente construida del ejercicio anterior para acceder a la aplicación de funciones para generar algunos registros.

  5. Cuando haya terminado de probar, presione Ctrl+C en Cloud Shell para cerrar la secuencia de registro.

Adición de instrumentación al proyecto de Java para Application Insights

Ahora que Application Insights está habilitada para su aplicación, su siguiente tarea es habilitarla en la aplicación. Para habilitar el registro de la aplicación y Application Insights, debe modificar los archivos de configuración para incluir las bibliotecas necesarias y otras dependencias.

Hay dos archivos de configuración que debe actualizar: pom.xml y host.json.

Modificación del archivo pom.xml

  1. Mediante Azure Cloud Shell, cambie el directorio a la raíz del proyecto:

    cd ~/event-reporting
    
  2. Abra el archivo pom.xml con el editor de código de Cloud Shell:

    code pom.xml
    
  3. Agregue los siguientes elementos a la sección <dependencies> independiente para habilitar Application Insights para la aplicación:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>applicationinsights-web-auto</artifactId>
        <version>2.6.0</version>
    </dependency>
    

    Nota:

    Asegúrese de agregar <dependency> para Application Insights a la colección <dependencies> independiente, no a la colección <dependencies> que se encuentra dentro del elemento <dependencyManagement>.

  4. Presione Ctrl+S para guardar el archivo pom.xml y, después, presione Ctrl+Q para cerrar el editor de código.

Modificación del archivo host.json

  1. Abra el archivo host.json con el editor de código de Cloud Shell:

    code host.json
    
  2. Elimine el código JSON existente y reemplácelo por la siguiente configuración:

    {
        "version": "2.0",
        "extensionBundle": {
            "id": "Microsoft.Azure.Functions.ExtensionBundle",
            "version": "[1.*, 2.0.0)"
        },
        "logging": {
            "fileLoggingMode": "always",
            "logLevel": {
                "default": "Information"
            }
        },
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "maxTelemetryItemsPerSecond" : 5
            }
        }
    }
    

    La configuración de extensionBundle ya estaba definida, pero logging y applicationInsights definen varias opciones para esas características.

  3. Presione Ctrl+S para guardar el archivo host.json y, después, presione Ctrl+Q para cerrar el editor de código.

Adición de características de registro y de seguimiento de Application Insights al código del proyecto

Para mejorar la utilidad de los datos recopilados por Application Insights que aparecen en los archivos de registro, debe agregar algunos comandos de registro de datos al código de la aplicación.

Adición de características de registro al archivo Function.java

Para agregar características de registro generales a la función, puede agregar código como el siguiente ejemplo en los puntos clave del código de la aplicación, donde reemplaza la cadena [LOG MESSAGE] por el mensaje que quiera ver en los archivos de registro de la aplicación.

context.getLogger().info("[LOG MESSAGE]");

Para agregar características de registro a la aplicación, siga estos pasos.

  1. Abra el archivo Function.java en el editor de Cloud Shell:

    code ~/event-reporting/src/main/java/com/contoso/functions/Function.java
    

    Si examina el código existente, observará que existe un comando context.getLogger(); es la primera instrucción después de la definición de la función run().

  2. Busque la siguiente sección de código, la cual comprueba una cadena de consulta GET vacía o una solicitud POST vacía:

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
    
  3. Modifique esta sección de código para que contenga dos comandos context.getLogger() que generen el estado de la función en el sistema de registro:

    if (name == null) {
        context.getLogger().info("Execution failure - Incorrect or missing parameter used.");
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        context.getLogger().info("Execution success - name parameter = " + name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
    
  4. Presione Ctrl+S para guardar el archivo Function.java, pero no cierre el editor; agregará código a la aplicación en la siguiente sección de este ejercicio.

Adición de características de seguimiento de Application Insights al archivo Function.java

  1. Agregue la siguiente instrucción import al conjunto de importaciones existente (esta instrucción importa la biblioteca de telemetría de Application Insights):

    import com.microsoft.applicationinsights.TelemetryClient;
    
  2. Agregue la siguiente definición a la clase Function() de la aplicación (esta instrucción crea una instancia de un objeto TelemetryClient):

    private TelemetryClient telemetry = new TelemetryClient();
    
  3. Copie cada una de las instrucciones context.getLogger() y modifique el código para que cada una de las entradas duplicadas llame a telemetry.trackEvent() en lugar de a context.getLogger():

    . . .
    context.getLogger().info("Java HTTP trigger processed a request.");
    telemetry.trackEvent("Java HTTP trigger processed a request.");
    
    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    String name = request.getBody().orElse(query);
    
    if (name == null) {
        context.getLogger().info("Execution failure - Incorrect or missing parameter used.");
        telemetry.trackEvent("Execution failure - Incorrect or missing parameter used.");
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
    } else {
        context.getLogger().info("Execution success - name parameter = " + name);
        telemetry.trackEvent("Execution success - name parameter = " + name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hi, " + name).build();
    }
    . . .
    
  4. Presione Ctrl+S para guardar el archivo Function.java y, después, presione Ctrl+Q para cerrar el editor de código.

  5. Lo último que debe hacer es compilar, empaquetar y volver a implementar la aplicación de función.

    cd ~/event-reporting
    mvn clean package azure-functions:deploy
    

El registro y la recopilación de datos de Application Insights ahora se agregan a la función.

Uso de Application Insights para supervisar la función de Azure

Ya ha actualizado la aplicación para admitir registros detallados con el registro del sistema y Application Insights.

  1. Para generar tráfico HTTP de ejemplo, copie la dirección URL que ha usado en el ejercicio anterior para probar la aplicación en un explorador web. Use esa dirección URL con cURL para crear un bucle en Azure Cloud Shell; por ejemplo:

    while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
    
  2. Inicie sesión en Azure Portal con la misma cuenta que ha usado para activar el espacio aislado.

  3. En el menú de la izquierda, seleccione Todos los recursos.

  4. Seleccione su función en la lista de recursos; en este ejercicio, el nombre de la función comienza por event-reporting. Por ejemplo: event-reporting-20200102030405006.

  5. Vea la actividad de Secuencias de registro:

    1. Seleccione Flujo de registro en el menú Aplicación de funciones.

    2. Abra la lista desplegable Registros de App Insights y seleccione Registros del sistema de archivos.

      Image showing where to find Log Streaming.

    3. Observe que el tráfico de ejemplo genera una serie de entradas de registro.

      Image showing Log Streaming.

  6. Vea la actividad de Live Metrics:

    1. Seleccione la lista desplegable Registros del sistema de archivos y seleccione Registros de App Insights.

    2. Seleccione Abrir en Live Metrics. Ahora puede ver que el tráfico de ejemplo genera resultados de Application Insights y Live Metrics.

      Image showing Application Insights and Live Metrics highlights.

Enhorabuena, ha configurado correctamente la función de Azure para el registro detallado.

Antes de continuar, vuelva a Cloud Shell y presione Ctrl+C para cerrar el bucle de comandos.