Упражнение. Добавление журналирования и мониторинга функции Azure на портале

Завершено

В предыдущем уроке вы узнали о некоторых преимуществах включения приложения Аналитика в приложение-функцию. Вы также узнали о некоторых других функциях ведения журнала, доступных вашей команде разработчиков.

На этом этапе в исследовании проекта вы развернули приложение-функцию в Azure с помощью Maven и протестировали приложение-функцию в рабочей среде. Следующая задача — добавить в приложение функции отслеживания и ведения журнала.

В этом упражнении вы обновляете файлы конфигурации проекта функции для поддержки потоковой передачи журналов и приложений Аналитика. Вы также узнаете, как добавлять пользовательские триггеры отслеживания и события Application Insights в код проекта.

Потоковая передача журналов в режиме реального времени

Теперь, когда приложение-функция развернуто и запущено в Azure, его можно устранить с помощью простой команды Azure CLI, чтобы получить потоковую передачу журналов в режиме реального времени из приложения.

  1. В портал Azure на странице обзора функции HttpExample. Используйте значок копирования в буфер обмена, чтобы скопировать значение группы ресурсов и приложения-функции.

  2. В окне Azure Cloud Shell введите az webapp log tail -n <functionAppName> -g <resourceGroup> команду для потоковой передачи журналов. Замените и <resourceGroup> на <functionAppName> значения, сохраненные на предыдущем шаге. Например:

    az webapp log tail -n event-reporting-20240125192009873 -g learn-f0af729c-0493-4b45-a5b8-d6b4783b03da
    
    
  3. Вы увидите выходные данные, как показано в следующем сообщении.

    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. Откройте новую вкладку в веб-браузере и вставьте полностью созданный URL-адрес из предыдущего упражнения, чтобы получить доступ к приложению-функции, чтобы создать некоторые журналы.

  5. После завершения тестирования нажмите клавиши CTRL+C в Cloud Shell, чтобы закрыть поток журналов.

Добавление инструментирования в проект Java для Application Insights

Теперь, когда приложение Аналитика включено для приложения, ваша следующая задача, чтобы включить ее в приложении. Чтобы включить ведение журнала приложений и приложение Аналитика, необходимо изменить файлы конфигурации, чтобы включить необходимые библиотеки и другие зависимости.

Необходимо обновить два файла конфигурации: pom.xml и host.json.

Изменение файла pom.xml

  1. В Azure Cloud Shell смените каталог на корневую папку проекта:

    cd ~/event-reporting
    
  2. Откройте файл pom.xml в редакторе кода Cloud Shell:

    code pom.xml
    
  3. Добавьте следующие элементы в автономный <dependencies> раздел, чтобы включить Аналитика приложения для приложения:

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

    Примечание.

    <dependency> для Application Instights необходимо добавить в отдельную коллекцию <dependencies>, а не коллекцию <dependencies> в элементе <dependencyManagement>.

  4. Нажмите клавиши CTRL+S, чтобы сохранить файл pom.xml, а затем клавиши CTRL+Q, чтобы закрыть редактор кода.

Изменение файла host.json

  1. Откройте файл host.json в редакторе кода Cloud Shell:

    code host.json
    
  2. Удалите существующий код JSON и замените его следующими параметрами:

    {
        "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
            }
        }
    }
    

    Параметры для extensionBundle уже были определены, но logging и applicationInsights определяют различные параметры для этих компонентов.

  3. Нажмите клавиши CTRL+S, чтобы сохранить файл host.json, а затем клавиши CTRL+Q, чтобы закрыть редактор кода.

Добавление ведения журнала и отслеживания Application Insights в код проекта

Чтобы повысить полезность данных, собранных приложением Аналитика, которые отображаются в файлах журнала, необходимо добавить в код приложения несколько команд ведения журнала данных.

Добавление функции ведения журнала в файл Function.java

Чтобы добавить общее ведение журнала в функцию, можно добавить код, как показано в следующем примере, в ключевых точках кода приложения, где вы замените [LOG MESSAGE] строку сообщением, которое вы хотите увидеть в файлах журнала приложения.

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

Чтобы добавить функцию ведения журнала в приложение, выполните указанные ниже действия.

  1. Откройте файл Function.java приложения в редакторе Cloud Shell:

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

    Если вы изучите существующий код, вы заметите, что есть существующая context.getLogger() команда; это первая инструкция после определения run() функции.

  2. Найдите следующий раздел кода, который проверяет, являются ли пустыми строка запроса GET или запрос POST:

    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. Измените этот раздел кода, так чтобы он содержал две команды context.getLogger(), которые выводят состояние функции в систему ведения журнала:

    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. Нажмите клавиши CTRL+S, чтобы сохранить файл Function.java, но не закрывайте редактор. Вы добавите код в приложение в следующем разделе этого упражнения.

Добавление отслеживания Application Insights в файл Function.java

  1. Добавьте следующую инструкцию import в существующий набор импортируемых элементов. Эта инструкция импортирует библиотеку телеметрии Application Insights:

    import com.microsoft.applicationinsights.TelemetryClient;
    
  2. Добавьте следующее определение в класс Function() приложения; эта инструкция создает экземпляр объекта TelemetryClient:

    private TelemetryClient telemetry = new TelemetryClient();
    
  3. Скопируйте все инструкции context.getLogger() и измените код таким образом, чтобы каждая из повторяющихся инструкций вызывала telemetry.trackEvent() вместо 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. Нажмите CTRL+S, чтобы сохранить файл Function.java, затем нажмите CTRL+Q, чтобы закрыть редактор кода.

  5. Последнее, что нужно сделать, — это собрать, упаковать и повторно развернуть приложение-функцию.

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

Теперь в функцию добавляется сбор данных Аналитика журналов и приложений.

Использование Application Insights для мониторинга Функции Azure

Теперь приложение поддерживает подробное ведение журнала с помощью системного средства ведения журнала и Application Insights.

  1. Чтобы создать пример HTTP-трафика, скопируйте URL-адрес, используемый для тестирования приложения в веб-браузере в предыдущем упражнении. Используйте этот URL-адрес с cURL для создания цикла в Azure Cloud Shell; Например:

    while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
    
  2. Войдите на портал Azure, используя ту же учетную запись, с помощью которой вы активировали песочницу.

  3. Выберите Все ресурсы в меню слева.

  4. Выберите функцию из списка ресурсов. В этом упражнении имя функции начинается с event-reporting. Например: event-reporting-20200102030405006.

  5. Просмотрите действие Потоковая передача журналов:

    1. Выберите поток журнала в меню "Приложение-функция".

    2. Откройте раскрывающийся список "Журналы Аналитика приложения" и выберите "Журналы файловой системы".

      Image showing where to find Log Streaming.

    3. Обратите внимание, что образец трафика создает ряд записей журнала.

      Image showing Log Streaming.

  6. Просмотр действия Динамические метрики:

    1. Выберите раскрывающийся список журналов файловой системы и выберите "Журналы приложений Аналитика".

    2. Выберите "Открыть" в динамических метриках. Теперь вы увидите, что образец трафика создает результаты приложений Аналитика и динамических метрик.

      Image showing Application Insights and Live Metrics highlights.

Поздравляем, вы успешно настроили функцию Azure для подробного ведения журнала.

Прежде чем продолжить, вернитесь к Cloud Shell и нажмите CTRL+C, чтобы закрыть цикл команд.