Analisar a telemetria do Azure Functions no Application Insights

As Funções do Azure podem ser integradas no Application Insights para lhe permitir monitorizar melhor as suas aplicações de funções. O Application Insights coleta dados de telemetria gerados pelo seu aplicativo de função, incluindo informações que seu aplicativo grava em logs. A integração do Application Insights normalmente é habilitada quando seu aplicativo de função é criado. Se seu aplicativo de função não tiver a chave de instrumentação definida, você deve primeiro habilitar a integração do Application Insights.

Por padrão, os dados coletados do seu aplicativo de função são armazenados no Application Insights. No portal do Azure, o Application Insights fornece um extenso conjunto de visualizações de seus dados de telemetria. Você pode detalhar logs de erros e consultar eventos e métricas. Este artigo fornece exemplos básicos de como exibir e consultar os dados coletados. Para saber mais sobre como explorar os dados do seu aplicativo de função no Application Insights, consulte O que é o Application Insights?.

Para poder visualizar dados do Application Insights de um aplicativo de função, você deve ter pelo menos permissões de função de Colaborador no aplicativo de função. Você também precisa ter a permissão Monitoring Reader na instância do Application Insights. Você tem essas permissões por padrão para qualquer aplicativo de função e instância do Application Insights que criar.

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

Visualizando telemetria na guia Monitor

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

  1. Na página do aplicativo de função, 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.

    Lista de invocações

    Nota

    Pode levar até cinco minutos para que a lista apareça enquanto o cliente de telemetria armazena dados em lote para transmissão ao servidor. O atraso não se aplica ao Live Metrics Stream. Esse serviço se conecta ao host Functions quando você carrega a página, para que os logs sejam transmitidos diretamente para a página.

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

    Detalhes da invocação

  3. Escolha Executar no Application Insights para exibir a origem da consulta que recupera os dados de log do Azure Monitor no Log do Azure. Se esta for a primeira vez que utiliza o Azure Log Analytics na sua subscrição, ser-lhe-á pedido para ativá-lo.

  4. Depois de ativar o Log Analytics, a consulta a seguir é exibida. Você pode ver que os resultados da consulta estão limitados aos últimos 30 dias (where timestamp > ago(30d)), e os resultados mostram no máximo 20 linhas (take 20). Em contrapartida, a lista de detalhes de invocação para sua função é dos últimos 30 dias sem limite.

    Lista de invocação do Application Insights Analytics

Para obter mais informações, consulte Consultar dados de telemetria mais adiante neste artigo.

Exibir telemetria no Application Insights

Para abrir o Application Insights a partir de um aplicativo de função no portal do Azure:

  1. Navegue até seu aplicativo de função no portal.

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

  3. Se esta for a primeira vez que utiliza o Application Insights com a sua subscrição, ser-lhe-á pedido para ativá-la. Para fazer isso, selecione Ativar Informações do Aplicativo e, em seguida, selecione Aplicar na próxima página.

Abra o Application Insights na página Visão geral do aplicativo de função

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

Guia Visão geral do Application Insights

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

Investigar Description
Falhas Crie gráficos e alertas com base em falhas de função e exceções de servidor. O Nome da Operação é o nome da função. As falhas nas dependências não são mostradas, a menos que você implemente telemetria personalizada para dependências.
Desempenho Analise problemas de desempenho exibindo 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 depurar cenários em que as funções estão sobrecarregando seus recursos subjacentes.
Métricas Crie gráficos e alertas baseados em métricas. As métricas incluem o número de invocações de funções, o tempo de execução e as taxas de sucesso.
Live Metrics Veja os dados de métricas à medida que são criados quase em tempo real.

Consultar dados de telemetria

O Application Insights Analytics oferece acesso a todos os dados de telemetria na forma de tabelas em um banco de dados. O Google Analytics fornece uma linguagem de consulta para extrair, manipular e visualizar os dados.

Escolha Logs para explorar ou consultar eventos registrados.

Exemplo de análise

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 dados gerados por invocações de função nas tabelas a seguir:

Table Description
vestígios Logs criados pelo tempo de execução, controlador de escala e rastreamentos do código da função. Para hospedagem do plano Flex Consumption, traces também inclui logs criados durante a implantação do código.
pedidos Uma solicitação para cada chamada de função.
exceções Quaisquer exceções lançadas pelo tempo de execução.
customMetrics A contagem de invocações bem-sucedidas e fracassadas, taxa de sucesso e duração.
customEvents Eventos rastreados pelo tempo de execução, por exemplo: solicitações HTTP que acionam uma função.
contadores de desempenho 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 de cliente e navegador. Você pode implementar telemetria personalizada para adicionar dados a eles.

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

traces 
| where customDimensions.LogLevel == "Error"

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

Invocações de função de consulta

A cada invocação de função é atribuído um ID exclusivo. 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

Logs de diferentes funções podem ser correlacionados usando operation_Ido . 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

Percentagem de amostragem

A configuração de amostragem pode ser utilizada para reduzir o volume da telemetria. Use a consulta a seguir para determinar se a amostragem está operacional ou não. Se vir que RetainedPercentage para qualquer tipo é inferior a 100, esse tipo de telemetria estará em amostragem.

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

Logs do controlador de escala de consulta

Este recurso está em pré-visualização.

Depois de habilitar o log do controlador de escala e a integração do Application Insights, você pode usar a pesquisa de log do Application Insights para consultar os logs do controlador de escala emitidos. Os logs do controlador de escala são salvos na traces coleção na categoria ScaleControllerLogs .

A consulta a seguir pode ser usada para pesquisar todos os logs do controlador de escala para o aplicativo de função atual dentro do período de tempo especificado:

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

A consulta a seguir expande a consulta anterior para mostrar como obter apenas logs indicando 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

Consultar logs de implantação de código do Flex Consumption

Importante

O plano Flex Consumption está atualmente em pré-visualização.

A consulta a seguir pode ser usada para pesquisar todos os logs de implantação de código para o aplicativo de função atual dentro do período de tempo especificado:

traces
| extend deploymentId = customDimensions.deploymentId
| where deploymentId != ''
| project timestamp, deploymentId, message, severityLevel, customDimensions, appName

Métricas específicas do plano de consumo

Ao executar em um plano de consumo, o custo de execução de uma única função é medido em GB-segundos. O custo de execução é calculado combinando o uso da memória com o tempo de execução. Para saber mais, consulte Estimativa de custos do plano de consumo.

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

Determinar o uso da memória

Em Monitoramento, selecione Logs (Analytics), copie a seguinte consulta de telemetria e cole-a na janela de consulta e selecione Executar. Esta consulta retorna o uso total de memória em cada momento amostrado.

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

Os resultados são semelhantes ao exemplo a seguir:

carimbo de data/hora [UTC] nome valor
12/09/2019, 01:05:14.947 Bytes privados 209,932,288
12/09/2019, 01:06:14.994 Bytes privados 212,189,184
12/09/2019, 01:06:30.010 Bytes privados 231,714,816
12/09/2019, 01:07:15.040 Bytes privados 210,591,744
12/09/2019, 01:12:16.285 Bytes privados 216,285,184
12/09/2019, 01:12:31.376 Bytes privados 235,806,720

Determinar a duração

O Azure Monitor rastreia métricas no nível de recurso, que para o Functions é o aplicativo de função. A integração do Application Insights emite métricas por 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
nome médiaDuraçãoMilésimos de segundo
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

Próximos passos

Saiba mais sobre como monitorar o Azure Functions: