Analisar dados telemétricos do Azure Functions no Application Insights

O Azure Functions se integra ao Application Insights para permitir o monitoramento de seus aplicativos de funções de modo mais adequado. O Application Insights coleta dados telemétricos gerados por seu aplicativo de funções, incluindo as informações que seu aplicativo grava nos logs. A integração do Application Insights geralmente é habilitada durante a criação de seu aplicativo de funções. Caso o aplicativo de funções não tenha um conjunto de chaves de instrumentação, primeiro será preciso habilitar a integração do Application Insights.

Por padrão, os dados coletados do aplicativo de funções são armazenados no Application Insights. No portal do Azure, o Application Insights fornece um amplo conjunto de visualizações de seus dados telemétricos. É possível executar uma pesquisa nos logs de erros, bem como consultar métricas e eventos. Este artigo fornecerá exemplos básicos de como exibir e consultar os dados coletados. Para saber mais informações sobre como explorar os dados do aplicativo de funções no Application Insights, confira o artigo O que é o Application Insights?.

Para exibir dados do Application Insights em um aplicativo de funções, você deve ter pelo menos as permissões da função de Colaborador no aplicativo de funções. Você também deve ter a permissão de Leitor de Monitoramento na instância do Application Insights. Você tem essas permissões por padrão para qualquer aplicativo de funções e instância do Application Insights que você cria.

Para saber mais sobre a retenção de dados e os possíveis custos de armazenamento, confira Coleta de dados, retenção e armazenamento no Application Insights.

Como ver dados telemétricos na guia de Monitoramento

Com a integração do Application Insights habilitada, você pode exibir dados de telemetria na guia Monitor.

  1. Na página de aplicativo de funções, selecione uma função que tenha sido executada pelo menos uma vez depois que o Application Insights foi configurado. Em seguida, selecione Monitor no painel esquerdo. Selecione Atualizar periodicamente até que a lista de invocações de função seja exibida.

    Invocations list

    Observação

    Pode levar até cinco minutos para que a lista seja exibida enquanto o cliente de telemetria empacota os dados para transmissão para o servidor. Esse atraso não se aplica ao Live Metrics Stream. Esse serviço se conecta ao host do Functions quando você carrega a página, logo os logs são transmitidos diretamente para a página.

  2. Para ver os logs de uma invocação de função específica, selecione o link da coluna Data (UTC) para a invocação. A saída de logs para essa invocação aparece em uma nova página.

    Invocation details

  3. Escolha Executar no Application Insights para exibir a origem da consulta que recupera os dados do log de Azure Monitor no log do Azure. Se esta for a primeira vez que você usa o Azure Log Analytics na sua assinatura, será solicitado que ele seja habilitado.

  4. Depois de habilitar o Log Analytics, a consulta a seguir é exibida. É possível ver que os resultados da consulta são limitados aos últimos 30 dias (where timestamp > ago(30d)) e os resultados mostram no máximo 20 linhas (take 20). Por outro lado, a lista de detalhes de invocação para sua função é para os últimos 30 dias sem limite.

    Application Insights Analytics invocation list

Para obter mais informações, consulte Dados de telemetria da consulta a seguir neste artigo.

Exibir a telemetria no Application Insights

Para abrir o Application Insights de um aplicativo de funções no portal do Azure:

  1. Navegue até seu aplicativo de funções no portal.

  2. Selecione Application Insights em Configurações na página esquerda.

  3. Caso seja a primeira vez que você usa o Application Insights com uma assinatura, será exibida uma solicitação para habilitá-lo. Para executar esse tipo de ação, clique em Ativar o Application Insights, depois em Aplicar na próxima página.

Open Application Insights from the function app Overview page

Para obter informações sobre como usar o Application Insights, consulte a documentação do o Application Insights. Esta seção mostra alguns exemplos de como exibir dados no Application Insights. Se você já conhece bem o Application Insights, poderá ir diretamente para as seções sobre como configurar e personalizar os dados de telemetria.

Application Insights Overview tab

As seguintes áreas do Application Insights podem ser úteis ao avaliar o comportamento, o desempenho e os erros em suas funções:

Investigar Descrição
Falhas Crie gráficos e alertas com base em falhas de função e de exceções do servidor. O Nome da Operação é o nome da função. Falhas nas dependências não são mostradas, a menos que você implemente telemetria personalizada para dependências.
Desempenho Para analisar problemas de desempenho, veja a utilização de recursos e a taxa de transferência por instâncias de função de nuvem. Esses dados de desempenho podem ser úteis para executar a depuração de cenários em que as funções estão sobrecarregando seus recursos subjacentes.
Métrica Crie gráficos e alertas baseados em métricas. As métricas incluem o número de invocações de função, tempo de execução e taxas de sucesso.
Métricas Dinâmicas Veja os dados de métricas conforme eles são criados em tempo quase real.

Dados de telemetria da consulta

A Análise do Application Insights oferece acesso a todos os dados de telemetria em forma de tabelas em um banco de dados. A Análise fornece uma linguagem de consulta para extrair, manipular e visualizar os dados.

Escolha Logs para explorar ou consultar eventos registrados.

Analytics example

Veja um exemplo de consulta que mostra a distribuição de solicitações por trabalhador nos últimos 30 minutos.

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

As tabelas disponíveis são mostradas na guia Esquema à esquerda. Você pode encontrar os dados gerados por invocações de função nas tabelas a seguir:

Tabela Descrição
traces Os logs criados por runtime, controlador de escala e rastreamentos de seu código de função.
requests Uma solicitação para cada invocação de função.
exceptions Todas as exceções geradas pelo runtime.
customMetrics Contagem de invocações bem-sucedidas e com falha, taxa de sucesso e duração.
customEvents Eventos rastreados pelo runtime, por exemplo: Solicitações HTTP que disparam uma função.
performanceCounters Informações sobre o desempenho dos servidores em que as funções estão sendo executadas.

As outras tabelas são para testes de disponibilidade e telemetria do cliente e navegador. Você pode implementar a telemetria personalizada para adicionar dados a ela.

Dentro de cada tabela, alguns dos dados específicos do Functions estão em um campo customDimensions. Por exemplo, a consulta a seguir recupera todos os rastreamentos que têm o nível de log Error.

traces 
| where customDimensions.LogLevel == "Error"

O runtime fornece os campos customDimensions.LogLevel e customDimensions.Category. Você pode fornecer campos adicionais nos logs que você grava em seu código de função. Para obter um exemplo em C#, confira o Log estruturado no guia do desenvolvedor da biblioteca de classes do .NET.

Chamadas de função de consulta

Cada invocação de função recebe uma ID exclusiva. InvocationId está incluído na dimensão personalizada e pode ser usado para correlacionar todos os logs de uma execução de função específica.

traces
| project customDimensions["InvocationId"], message

Correlação de telemetria

Os logs de funções diferentes podem ser correlacionados usando operation_Id. Use a consulta a seguir para retornar todos os logs de uma operação lógica específica.

traces
| where operation_Id == '45fa5c4f8097239efe14a2388f8b4e29'
| project timestamp, customDimensions["InvocationId"], message
| order by timestamp

Percentual de amostragem

A configuração de amostragem pode ser usada para reduzir o volume de telemetria. Use a consulta a seguir para determinar se a amostragem está operacional ou não. Se você vir que RetainedPercentage para qualquer tipo é menor que 100, então esse tipo de telemetria está sendo amostrado.

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

Consultar logs do controlador de escala

Este recurso está em versão prévia.

Após habilitar o log do controlador de escala e a integração do Application Insights, será possível usar a pesquisa de logs do Application Insights para consultar logs emitidos do controlador de escala. Os logs do controlador de escala são salvos na coleção traces da categoria ScaleControllerLogs.

A consulta a seguir poderá ser usada para pesquisar todos os logs do controlador de escala do aplicativo de funções atual dentro do período de tempo especificado:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"

A seguinte consulta expandirá a consulta anterior para mostrar de que modo obter somente os logs que indicam uma alteração na escala:

traces 
| extend CustomDimensions = todynamic(tostring(customDimensions))
| where CustomDimensions.Category == "ScaleControllerLogs"
| where message == "Instance count changed"
| extend Reason = CustomDimensions.Reason
| extend PreviousInstanceCount = CustomDimensions.PreviousInstanceCount
| extend NewInstanceCount = CustomDimensions.CurrentInstanceCount

Métricas específicas do plano de Consumo

Durante a execução em um plano de Consumo, o custo de execução de uma função única será medido em GB por segundo. O custo de execução é calculado pela combinação do respectivo uso de memória com o respectivo tempo de execução. Para saber mais, confira Como estimar custos do plano de Consumo.

As consultas abaixo de telemetria são específicas para métricas que afetam o custo de funções em execução no plano de Consumo.

Determinar o uso de memória flash

Em Monitoramento, selecione Logs (análise) , em seguida, copie a seguinte consulta de telemetria e cole-a na janela de consulta e selecione Executar. Essa consulta retorna o uso de memória total em cada tempo de amostra.

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

Os resultados são similares ao exemplo a seguir:

carimbo de data/hora [UTC] name value
9/12/2019, 1:05:14.947 AM Bytes Particulares 209.932.288
9/12/2019, 1:06:14.994 AM Bytes Particulares 212.189.184
9/12/2019, 1:06:30.010 AM Bytes Particulares 231.714.816
9/12/2019, 1:07:15.040 AM Bytes Particulares 210.591.744
9/12/2019, 1:12:16.285 AM Bytes Particulares 216.285.184
9/12/2019, 1:12:31.376 AM Bytes Particulares 235.806.720

Determinar duração

Azure Monitor acompanha as métricas no nível de recurso, o que, para Functions, é o aplicativo de funções. A integração do Application Insights emite métricas de acordo com a função. Aqui está um exemplo de consulta de análise para obter a duração média de uma função:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name averageDurationMilliseconds
QueueTrigger AvgDurationMs 16,087
QueueTrigger MaxDurationMs 90,249
QueueTrigger MinDurationMs 8,522

Próximas etapas

Para saber mais sobre como monitorar o Azure Functions: