Exercício – Adicionar registos e monitorizar uma Função do Azure no portal
Na unidade anterior, você aprendeu sobre alguns dos benefícios de incorporar o Application Insights em seu aplicativo de função. Você também aprendeu sobre alguns dos outros recursos de registro que estão disponíveis para sua equipe de desenvolvedores.
Nesta etapa da pesquisa de projeto, você implantou seu aplicativo de função no Azure usando o Maven e testou seu aplicativo de função em produção. A próxima tarefa será adicionar uma funcionalidade de registo e de monitorização à aplicação.
Neste exercício, você atualiza os arquivos de configuração do projeto de função para oferecer suporte ao streaming de logs e ao Application Insights. Você também aprenderá como adicionar rastreamento personalizado e gatilhos de eventos do Application Insight ao código do seu projeto.
Transmitir em fluxo registos em tempo real
Agora que seu aplicativo Function está implantado e em execução no Azure, você pode solucioná-lo usando o comando simples da CLI do Azure para obter streaming de log em tempo real do aplicativo.
No portal do Azure, na página Visão geral da sua função HttpExample. Use o ícone Copiar para área de transferência para copiar o valor do seu grupo de recursos e do aplicativo Função.
Na janela do Azure Cloud Shell, insira o
az webapp log tail -n <functionAppName> -g <resourceGroup>
comando para transmitir logs. Substitua<functionAppName>
e<resourceGroup>
pelos valores que você salvou na etapa anterior. Por exemplo:az webapp log tail -n event-reporting-20240125192009873 -g learn-f0af729c-0493-4b45-a5b8-d6b4783b03da
Você deve ver a saída como a seguinte mensagem.
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).
Abra uma nova guia no navegador da Web e cole a URL totalmente construída do exercício anterior para acessar seu aplicativo de função e gerar alguns logs.
Quando terminar o teste, pressione Ctrl+C no Cloud Shell para fechar o fluxo de log.
Adicionando instrumentação ao seu projeto Java para Application Insights
Agora que o Application Insights está habilitado para seu aplicativo, sua próxima tarefa para habilitá-lo em seu aplicativo. Para habilitar o log de aplicativos e o Application Insights, você precisa modificar os arquivos de configuração para incluir as bibliotecas necessárias e outras dependências.
Há dois arquivos de configuração que você precisa atualizar: pom.xml e host.json.
Modificar o ficheiro pom.xml
Com o Azure Cloud Shell, mude o diretório para a pasta raiz do projeto:
cd ~/event-reporting
Abra o ficheiro pom.xml com o editor de código do Cloud Shell:
code pom.xml
Adicione os seguintes elementos à seção autônoma
<dependencies>
para habilitar o Application Insights para seu aplicativo:<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-web-auto</artifactId> <version>2.6.0</version> </dependency>
Nota
Confirme que adiciona o
<dependency>
para o Application Insights à coleção<dependencies>
autónoma e não à coleção<dependencies>
que está contida no elemento<dependencyManagement>
.Prima Ctrl+S para guardar o ficheiro pom.xml e, em seguida, prima Ctrl+Q para fechar o editor de código.
Modificar o ficheiro host.json
Abra o ficheiro host.json com o editor de código do Cloud Shell:
code host.json
Remova o código JSON existente e substitua-o pelas definições seguintes:
{ "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 } } }
As definições de
extensionBundle
já tinham sido definidas, maslogging
eapplicationInsights
definem várias definições para essas funcionalidades.Prima Ctrl+S para guardar o ficheiro host.json e, em seguida, prima Ctrl+Q para fechar o editor de código.
Adicionar os registos e a monitorização do Application Insights ao código do projeto
Para melhorar a utilidade dos dados coletados pelo Application Insights que aparecem em seus arquivos de log, você precisa adicionar alguns comandos de log de dados ao código do aplicativo.
Adicionar registos ao ficheiro Function.java
Para adicionar o log geral à sua função, você pode adicionar código como o exemplo a seguir em pontos-chave no código do aplicativo, onde você substitui a [LOG MESSAGE]
cadeia de caracteres por uma mensagem que deseja ver nos arquivos de log do aplicativo.
context.getLogger().info("[LOG MESSAGE]");
Para adicionar o registo à aplicação, utilize os passos seguintes.
Abra o ficheiro Function.java da aplicação no editor do Cloud Shell:
code ~/event-reporting/src/main/java/com/contoso/functions/Function.java
Se você examinar o código existente, notará que há um comando existente
context.getLogger()
, é a primeira instrução após a definição darun()
função.Localize a seguinte secção de código, que testa uma cadeia de consulta GET vazia ou um pedido POST vazio:
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(); }
Modifique esta secção de código de modo a que contenha dois comandos
context.getLogger()
que emitem o estado da função para o sistema de registo: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(); }
Pressione Ctrl+S para salvar seu arquivo Function.java, mas não feche o editor, você adicionará código ao seu aplicativo na próxima seção deste exercício.
Adicionar a monitorização do Application Insights ao ficheiro Function.java
Adicione a seguinte instrução
import
ao conjunto de importações existente; esta instrução importa a biblioteca de telemetria do Application Insights:import com.microsoft.applicationinsights.TelemetryClient;
Adicione a seguinte definição à classe
Function()
da aplicação ; esta instrução instancia um objetoTelemetryClient
:private TelemetryClient telemetry = new TelemetryClient();
Copie cada uma das instruções
context.getLogger()
e modifique o código para que cada uma das entradas duplicadas chametelemetry.trackEvent()
em vez decontext.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(); } . . .
Prima Ctrl+S para guardar o ficheiro Function.java e, em seguida, prima Ctrl+Q para fechar o editor de código.
A última coisa a fazer é criar, empacotar e reimplementar a aplicação de função.
cd ~/event-reporting mvn clean package azure-functions:deploy
O registro em log e a coleta de dados do Application Insights agora são adicionados à sua função.
Utilizar o Application Insights para monitorizar a Função do Azure
A aplicação está agora atualizada para suportar o registo detalhado com o registo do sistema e o Application Insights.
Para gerar algum tráfego HTTP de exemplo, copie a URL que você usou para testar seu aplicativo em um navegador da Web no exercício anterior. Use essa URL com cURL para criar um loop no Azure Cloud Shell; Por exemplo:
while :; do curl https://event-reporting-20200102030405006.azurewebsites.net/api/HttpExample?name=Bob; sleep 1; done
Inicie sessão no portal do Azure com a mesma conta que utilizou para ativar o sandbox.
Selecione Todos os recursos no menu esquerdo.
Selecione a função na lista de recursos; para este exercício, o nome da função começa por event-reporting. Por exemplo: event-reporting-20200102030405006.
Veja a atividade de Transmissão em Fluxo de Registos:
Selecione Fluxo de log no menu Aplicativo de função.
Abra a lista suspensa Logs do App Insights e selecione Logs do sistema de arquivos.
Observe que seu tráfego de exemplo gera uma série de entradas de log.
Veja a atividade do Live Metrics:
Selecione a lista suspensa Logs do sistema de arquivos e selecione Logs do App Insights.
Selecione Abrir em métricas dinâmicas. Agora você pode ver que seu tráfego de exemplo gera resultados do Application Insights e do Live Metrics.
Parabéns, você configurou com êxito sua Função do Azure para registro em log detalhado.
Antes de continuar, volte ao Cloud Shell e prima Ctrl+C para fechar o ciclo do comando.