Monitorar execuções no Azure Functions

O Azure Functions oferece integração interna com o Azure Application Insights para monitorar execuções de funções. Este artigo fornece uma visão geral das funcionalidades de monitoramento fornecidas pelo Azure para monitorar o Azure Functions.

O Application Insights coleta dados de log, desempenho e erros. Detectando automaticamente anomalias de desempenho e apresentando avançadas ferramentas de análise, você pode diagnosticar problemas com mais facilidade e entender melhor como suas funções são usadas. Essas ferramentas foram projetadas para ajudar você a aprimorar continuamente o desempenho e a usabilidade de suas funções. Você pode até mesmo usar Application Insights durante o desenvolvimento do projeto de aplicativo de funções local. Para obter mais informações, confira O que é o Application Insights?.

Como a instrumentação do Application Insights é incorporada ao Azure Functions, você precisa de uma chave de instrumentação válida para conectar seu aplicativo de funções a um recurso de Application Insights. A chave de instrumentação é adicionada às suas configurações de aplicativo conforme você cria seu recurso do aplicativo de funções no Azure. Se seu aplicativo de funções ainda não tiver essa chave, você poderá defini-la manualmente.

Você também pode monitorar o aplicativo de funções usando o Azure Monitor. Para saber mais, confira Monitoramento do Azure Functions com o Azure Monitor.

Preços e limites do Application Insights

Você pode experimentar a integração do Application Insights ao Azure Functions gratuitamente, apresentando um limite diário para a quantidade de dados processada gratuitamente.

Se você habilitar o Application Insights durante o desenvolvimento, poderá atingir esse limite durante o teste. O Azure fornece o portal e notificações por email quando está se aproximando do limite diário. Mas, se você perder esses alertas e atingir o limite, nenhum log novo aparecerá para as consultas do Application Insights. Lembre-se do limite para evitar desperdiçar tempo com solução de problemas. Para obter mais informações, confira Cobrança do Application Insights.

Importante

O Application Insights tem um recurso de amostragem que pode protegê-lo contra a produção de excesso de dados de telemetria em execuções concluídas em horários de pico de carregamento. A amostragem é habilitada por padrão. Se parecer que faltam dados, talvez seja necessário ajustar as configurações de amostragem para se adequarem ao seu cenário de monitoramento específico. Para obter mais informações, consulte Configurar amostragem.

A lista completa de recursos de Application Insights disponíveis para seu aplicativo de funções é detalhada em Recursos suportados do Application Insights para o Azure Functions.

Integração do Application Insights

Normalmente, você cria uma instância do Application Insights quando cria seu aplicativo de funções. Nesse caso, a chave de instrumentação necessária para a integração já está definida como uma configuração de aplicativo chamada APPINSIGHTS_INSTRUMENTATIONKEY. Se, por algum motivo, seu aplicativo de funções não tiver a chave de instrumentação definida, você precisará habilitar a integração do Application Insights.

Importante

Nuvens soberanas, como o Azure Governamental, exigem o uso da cadeia de conexão Application Insights (APPLICATIONINSIGHTS_CONNECTION_STRING) em vez da chave de instrumentação. Para saber mais, consulte a referência APPLICATIONINSIGHTS_CONNECTION_STRING.

A seguinte tabela detalha os recursos compatíveis do Application Insights disponíveis para monitorar seus aplicativos de funções:

Versão do Azure Functions Runtime 1.x 2.x ou superior
Coleta automática de
• Solicitações
• Exceções
• Contadores de desempenho
• Dependências
   — HTTP
   – Barramento de Serviço
   – Hubs de Eventos
   – SQL*
Recursos compatíveis
• QuickPulse/LiveMetrics Sim Sim
   — Canal de controle seguro Yes
• Amostragem Sim Sim
• Pulsações Sim
Correlação
• Barramento de Serviço Sim
• Hubs de Evento Sim
Configurável
Totalmente configurável Sim

* Para habilitar a coleta de texto da cadeia de caracteres de consulta SQL, confira Habilitar coleta de consultas SQL.

Coletar dados telemétricos

Com a integração do Application Insights habilitada, os dados telemétricos são enviados para sua instância do Application Insights conectada. Esses dados incluem logs gerados pelo host do Functions, rastreamentos gravados do seu código de funções e dados de desempenho.

Observação

Além dos dados de suas funções e do host do Functions, você também pode coletar dados do controlador de escala do Functions.

Níveis de log e categorias

Ao gravar rastreamentos do código do aplicativo, você deve atribuir um nível de log aos rastreamentos. Os níveis de log fornecem uma forma de limitar a quantidade de dados coletados de seus rastreamentos.

Um nível de log é atribuído a cada log. O valor é um inteiro que indica a importância relativa:

LogLevel Código Descrição
Trace 0 Logs que contêm as mensagens mais detalhadas. Essas mensagens podem conter dados confidenciais do aplicativo. Essas mensagens são desabilitadas por padrão e nunca devem ser habilitadas em um ambiente de produção.
Depurar 1 Logs que são usados para investigação interativa durante o desenvolvimento. Esses logs devem conter principalmente informações úteis para depuração e não têm valor de longo prazo.
Informações 2 Logs que rastreiam o fluxo geral do aplicativo. Esses logs devem ter valor de longo prazo.
Aviso 3 Logs que realçam um evento anormal ou inesperado no fluxo do aplicativo, mas não fazem com que a execução do aplicativo pare.
Erro 4 Logs que realçam quando o fluxo de execução atual é interrompido por causa de a uma falha. Eles erros devem indicar uma falha na atividade atual, não uma falha em todo o aplicativo.
Crítico 5 Logs que descrevem uma falha irrecuperável do aplicativo ou do sistema ou uma falha catastrófica que exige atenção imediata.
Nenhum 6 Desabilita o registro em log para a categoria especificada.

A configuração doarquivohost.jsondetermina quanto registro em log um aplicativo de funções envia ao Application Insights.

Para saber mais sobre os níveis de log, confira Configurar níveis de log.

Ao atribuir itens registrados a uma categoria, você tem mais controle sobre a telemetria gerada de fontes específicas em seu aplicativo de funções. As categorias facilitam a execução da análise sobre os dados coletados. Os rastreamentos gravados do seu código de função são atribuídos a categorias individuais com base no nome da função. Para saber mais sobre categorias, confira Configurar categorias.

Dados telemétricos personalizados

Em C#, JavaScript e Python, você pode usar um SDK do Application Insights para gravar dados telemétricos personalizados.

Dependências

Da versão 2.x em diante do Functions, o Application Insights coleta automaticamente dados sobre dependências para associações que usam determinados SDKs de cliente. Atualmente, não há suporte para o rastreamento distribuído e o acompanhamento de dependência do Application Insights para aplicativos C# em execução em um processo de trabalho isolado. O Application Insights coleta dados sobre as seguintes dependências:

  • Azure Cosmos DB
  • Hubs de eventos do Azure
  • Barramento de Serviço do Azure
  • Serviços de Armazenamento do Azure (Blob, Fila e Tabela)

Solicitações HTTP e chamadas de banco de dados usando SqlClient também são capturadas. Para obter a lista completa de dependências com suporte no Application Insights, confira dependências rastreadas automaticamente.

O Application Insights gera um mapa do aplicativo dos dados de dependência coletados. Veja a seguir um exemplo de um mapa do aplicativo de uma função de gatilho HTTP com uma associação de saída de armazenamento de fila.

Application map with dependency

As dependências são gravadas no nível Information. Se você filtrar Warning ou acima, não verá os dados de dependência. Além disso, a coleta automática de dependências ocorre em um escopo que não é de usuário. Para capturar dados de dependência, verifique se o nível está definido como pelo menos Information fora do escopo do usuário (Function.<YOUR_FUNCTION_NAME>.User) em seu host.

Além da coleta automática de dados de dependência, você também pode usar um dos SDKs do Application Insights específicos a uma linguagem para gravar informações de dependência personalizadas nos logs. Para obter um exemplo de como escrever dependências personalizadas, confira um dos seguintes exemplos específicos a uma linguagem:

Contadores de desempenho

Não há suporte para a coleta automática de Contadores de Desempenho ao executar no Linux.

Fazer gravação em logs

A maneira como você faz a gravação nos logs e as APIs que você usa dependem da linguagem do seu projeto de aplicativo de funções.
Confira o guia do desenvolvedor da sua linguagem para saber mais sobre como gravar logs de suas funções.

Analisar dados

Por padrão, os dados coletados do seu 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. Você pode analisar logs de erros e consultar métricas e eventos. Para saber mais, incluindo exemplos básicos de como ver e consultar os dados coletados, confira Analisar a telemetria do Azure Functions no Application Insights.

Logs de streaming

Ao desenvolver um aplicativo, muitas vezes você quer ver o que está sendo gravado nos logs quase em tempo real quando executado no Azure.

Há duas maneiras de ver um fluxo dos dados de log que está sendo gerado por suas execuções de funções.

  • Streaming de log interno: a plataforma do Serviço de Aplicativo permite exibir um fluxo dos arquivos de log do aplicativo. Esse fluxo é equivalente à saída que aparece ao depurar suas funções durante o desenvolvimento local e ao usar a guia Teste no portal. Todas as informações baseadas em log são exibidas. Para obter mais informações, consulte Streaming de logs. Esse método de streaming é compatível com apenas uma única instância e não pode ser usado com um aplicativo executado no Linux em um plano de Consumo.

  • Live Metrics Stream: quando seu aplicativo de funções está conectado ao Application Insights, você pode ver dados de log e outras métricas quase em tempo real no portal do Azure usando Live Metrics Stream. Use esse método ao monitorar funções em execução em várias instâncias ou no Linux em um plano de Consumo. Esse método usa dados amostrados.

Os fluxos de log podem ser exibidos no portal e na maioria dos ambientes de desenvolvimento local. Para saber como habilitar fluxos de log, confira Habilitar logs de execução de streaming no Azure Functions.

Logs de diagnóstico

O Application Insights permite exportar dados telemétricos para o armazenamento de longo prazo ou outros serviços de análise.

Como o Functions também se integram com o Azure Monitor, você também pode usar as configurações de diagnóstico para enviar dados telemétricos para vários destinos, incluindo logs do Azure Monitor. Para saber mais, confira Monitoramento do Azure Functions com Logs do Azure Monitor.

Logs do controlador de escala

O controlador de escala do Azure Functions monitora instâncias do host do Azure Functions no qual seu aplicativo é executado. Esse controlador toma decisões sobre quando adicionar ou remover instâncias com base no desempenho atual. Você pode fazer com que o controlador de escala emita logs para o Application Insights a fim de entender melhor as decisões que o controlador de escala está tomando para o seu aplicativo de funções. Você também pode armazenar os logs gerados no Armazenamento de Blobs para análise por outro serviço.

Para habilitar esse recurso, adicione uma configuração de aplicativo chamada SCALE_CONTROLLER_LOGGING_ENABLED às configurações do aplicativo de funções. Para saber como, confira Configurar logs do controlador de escala.

Métricas do Azure Monitor

Além dos dados telemétricos baseados em log coletados pelo Application Insights, também é possível obter dados sobre como o aplicativo de funções está sendo executado nas Métricas do Azure Monitor. Para saber mais, confira Monitoramento com o Azure Monitor.

Relatar problemas

Para relatar um problema com a integração do Application Insights em Functions ou para fazer sugestões ou uma solicitação, crie um problema no GitHub.

Próximas etapas

Para saber mais, consulte os recursos a seguir: