Упражнение. Добавление журналирования и мониторинга функции Azure на портале
В предыдущем уроке вы узнали о некоторых преимуществах включения приложения Аналитика в приложение-функцию. Вы также узнали о некоторых других функциях ведения журнала, доступных вашей команде разработчиков.
На этом этапе в исследовании проекта вы развернули приложение-функцию в Azure с помощью Maven и протестировали приложение-функцию в рабочей среде. Следующая задача — добавить в приложение функции отслеживания и ведения журнала.
В этом упражнении вы обновляете файлы конфигурации проекта функции для поддержки потоковой передачи журналов и приложений Аналитика. Вы также узнаете, как добавлять пользовательские триггеры отслеживания и события Application Insights в код проекта.
Потоковая передача журналов в режиме реального времени
Теперь, когда приложение-функция развернуто и запущено в Azure, его можно устранить с помощью простой команды Azure CLI, чтобы получить потоковую передачу журналов в режиме реального времени из приложения.
В портал Azure на странице обзора функции HttpExample. Используйте значок копирования в буфер обмена, чтобы скопировать значение группы ресурсов и приложения-функции.
В окне 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
Вы увидите выходные данные, как показано в следующем сообщении.
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).
Откройте новую вкладку в веб-браузере и вставьте полностью созданный URL-адрес из предыдущего упражнения, чтобы получить доступ к приложению-функции, чтобы создать некоторые журналы.
После завершения тестирования нажмите клавиши CTRL+C в Cloud Shell, чтобы закрыть поток журналов.
Добавление инструментирования в проект Java для Application Insights
Теперь, когда приложение Аналитика включено для приложения, ваша следующая задача, чтобы включить ее в приложении. Чтобы включить ведение журнала приложений и приложение Аналитика, необходимо изменить файлы конфигурации, чтобы включить необходимые библиотеки и другие зависимости.
Необходимо обновить два файла конфигурации: pom.xml и host.json.
Изменение файла pom.xml
В Azure Cloud Shell смените каталог на корневую папку проекта:
cd ~/event-reporting
Откройте файл pom.xml в редакторе кода Cloud Shell:
code pom.xml
Добавьте следующие элементы в автономный
<dependencies>
раздел, чтобы включить Аналитика приложения для приложения:<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-web-auto</artifactId> <version>2.6.0</version> </dependency>
Примечание.
<dependency>
для Application Instights необходимо добавить в отдельную коллекцию<dependencies>
, а не коллекцию<dependencies>
в элементе<dependencyManagement>
.Нажмите клавиши CTRL+S, чтобы сохранить файл pom.xml, а затем клавиши CTRL+Q, чтобы закрыть редактор кода.
Изменение файла host.json
Откройте файл host.json в редакторе кода Cloud Shell:
code host.json
Удалите существующий код 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
определяют различные параметры для этих компонентов.Нажмите клавиши CTRL+S, чтобы сохранить файл host.json, а затем клавиши CTRL+Q, чтобы закрыть редактор кода.
Добавление ведения журнала и отслеживания Application Insights в код проекта
Чтобы повысить полезность данных, собранных приложением Аналитика, которые отображаются в файлах журнала, необходимо добавить в код приложения несколько команд ведения журнала данных.
Добавление функции ведения журнала в файл Function.java
Чтобы добавить общее ведение журнала в функцию, можно добавить код, как показано в следующем примере, в ключевых точках кода приложения, где вы замените [LOG MESSAGE]
строку сообщением, которое вы хотите увидеть в файлах журнала приложения.
context.getLogger().info("[LOG MESSAGE]");
Чтобы добавить функцию ведения журнала в приложение, выполните указанные ниже действия.
Откройте файл Function.java приложения в редакторе Cloud Shell:
code ~/event-reporting/src/main/java/com/contoso/functions/Function.java
Если вы изучите существующий код, вы заметите, что есть существующая
context.getLogger()
команда; это первая инструкция после определенияrun()
функции.Найдите следующий раздел кода, который проверяет, являются ли пустыми строка запроса 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(); }
Измените этот раздел кода, так чтобы он содержал две команды
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(); }
Нажмите клавиши CTRL+S, чтобы сохранить файл Function.java, но не закрывайте редактор. Вы добавите код в приложение в следующем разделе этого упражнения.
Добавление отслеживания Application Insights в файл Function.java
Добавьте следующую инструкцию
import
в существующий набор импортируемых элементов. Эта инструкция импортирует библиотеку телеметрии Application Insights:import com.microsoft.applicationinsights.TelemetryClient;
Добавьте следующее определение в класс
Function()
приложения; эта инструкция создает экземпляр объектаTelemetryClient
:private TelemetryClient telemetry = new TelemetryClient();
Скопируйте все инструкции
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(); } . . .
Нажмите CTRL+S, чтобы сохранить файл Function.java, затем нажмите CTRL+Q, чтобы закрыть редактор кода.
Последнее, что нужно сделать, — это собрать, упаковать и повторно развернуть приложение-функцию.
cd ~/event-reporting mvn clean package azure-functions:deploy
Теперь в функцию добавляется сбор данных Аналитика журналов и приложений.
Использование Application Insights для мониторинга Функции Azure
Теперь приложение поддерживает подробное ведение журнала с помощью системного средства ведения журнала и Application Insights.
Чтобы создать пример HTTP-трафика, скопируйте URL-адрес, используемый для тестирования приложения в веб-браузере в предыдущем упражнении. Используйте этот URL-адрес с cURL для создания цикла в Azure Cloud Shell; Например:
while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
Войдите на портал Azure, используя ту же учетную запись, с помощью которой вы активировали песочницу.
Выберите Все ресурсы в меню слева.
Выберите функцию из списка ресурсов. В этом упражнении имя функции начинается с event-reporting. Например: event-reporting-20200102030405006.
Просмотрите действие Потоковая передача журналов:
Выберите поток журнала в меню "Приложение-функция".
Откройте раскрывающийся список "Журналы Аналитика приложения" и выберите "Журналы файловой системы".
Обратите внимание, что образец трафика создает ряд записей журнала.
Просмотр действия Динамические метрики:
Выберите раскрывающийся список журналов файловой системы и выберите "Журналы приложений Аналитика".
Выберите "Открыть" в динамических метриках. Теперь вы увидите, что образец трафика создает результаты приложений Аналитика и динамических метрик.
Поздравляем, вы успешно настроили функцию Azure для подробного ведения журнала.
Прежде чем продолжить, вернитесь к Cloud Shell и нажмите CTRL+C, чтобы закрыть цикл команд.