Monitorar o Azure Functions com o Application Insights do Azure Monitor
O Azure Functions oferece integração interna com o Application Insights para monitorar funções. Para linguagens diferentes de .NET e .NETCore, são necessárias extensões/funções de trabalho adicionais específicas à linguagem para obter todos os benefícios do rastreamento distribuído.
O Application Insights coleta dados de log, desempenho e erro e detecta automaticamente anomalias de desempenho. O Application Insights inclui ferramentas de análise poderosas para ajudar você a diagnosticar problemas e a entender como suas funções são usadas. Quando você tiver a visibilidade dos dados do aplicativo, poderá melhorar continuamente o desempenho e a usabilidade. Você pode até mesmo usar Application Insights durante o desenvolvimento do projeto de aplicativo de funções local.
A instrumentação do Application Insights necessária é incorporada ao Azure Functions. Tudo o que você precisa é de uma cadeia de conexão válida para conectar seu aplicativo de funções a um recurso do Application Insights. A cadeia de conexão deve ser adicionada às configurações do aplicativo quando o recurso do aplicativo de funções é criado no Azure. Se o seu aplicativo de funções ainda não tiver uma cadeia de conexão, você poderá defini-la manualmente. Para obter mais informações, confira Monitorar execuções no Azure Functions e Cadeias de conexão.
Observação
Em 31 de março de 31, 2025, o suporte à ingestão de chave de instrumentação será encerrado. A ingestão de chave de instrumentação continuará funcionando, mas não forneceremos mais atualizações ou suporte para o recurso. Transição para cadeias de conexão para aproveitar as novas funcionalidades.
Para ver a lista de cenários de instrumentação automática com suporte, confira Ambientes, linguagens e provedores de recursos com suporte.
Rastreamento distribuído para aplicativos Java
Observação
Esse recurso costumava ter uma implicação de inicialização a frio de 8 a 9 segundos, que foi reduzida para menos de 1 segundo. Se você foi um dos primeiros a adotar esse recurso (por exemplo, antes de fevereiro de 2023), examine a seção "Solução de problemas" a fim de atualizar para a versão atual e se beneficiar da nova inicialização mais rápida.
Para exibir mais dados de seus aplicativos do Azure Functions baseados em Java do que os coletados por padrão, habilite o agente Java 3.x do Application Insights. Esse agente permite que o Application Insights colete e correlacione automaticamente dependências, logs e métricas de bibliotecas populares e SDKs (Software Development Kit) do Azure. Essa telemetria se soma à telemetria de solicitação já capturada pelo Functions.
Usando o mapa do aplicativo e tendo uma exibição mais completa das transações de ponta a ponta, você pode diagnosticar melhor os problemas. Você tem uma visão topológica de como os sistemas interagem junto com os dados em taxas médias de desempenho e erro. Você também tem mais dados para diagnósticos de ponta a ponta. Você pode usar o mapa do aplicativo para encontrar facilmente a causa raiz de problemas de confiabilidade e gargalos de desempenho por solicitação.
Para casos de uso mais avançados, você pode modificar a telemetria adicionando intervalos, atualizando o status do intervalo e adicionando atributos de intervalo. Você também pode enviar telemetria personalizada usando APIs padrão.
Habilitar o rastreamento distribuído para aplicativos de funções Java
No painel de aplicativo de funções Visão Geral, vá para Application Insights. Em Nível de Coleção, selecione Recomendado.
Configuração
Para configurar esse recurso para um aplicativo de funções do Azure que não está em um plano de consumo, adicione variáveis de ambiente em Configurações de aplicativo. Para ver as configurações disponíveis, confira Opções de configuração: Application Insights do Azure Monitor para Java.
Para o Azure Functions em um plano de consumo, as opções de configuração disponíveis são limitadas a APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL e APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL. Para fazer configurações adicionais em uma função de plano de consumo ou implantar seu próprio agente, consulte Agente de Rastreamento Distribuído Personalizado para Funções Java.
Implantar um agente próprio resulta em uma implicação de início frio mais longa para funções do plano de consumo.
Solução de problemas
Suas funções Java podem demorar mais para inicializar se você tiver adotado esse recurso antes de fevereiro de 2023. No painel Visão geral do aplicativo de funções, acesse Configuração no menu de navegação do lado esquerdo. Em seguida, selecione Configurações do aplicativo e siga as etapas a seguir para corrigir o problema.
Windows
Verifique se as seguintes configurações existem e as remova:
XDT_MicrosoftApplicationInsights_Java -> 1 ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
Habilite a versão mais recente adicionando essa configuração:
APPLICATIONINSIGHTS_ENABLE_AGENT: true
Linux Dedicado/Premium
Verifique se as seguintes configurações existem e as remova:
ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
Habilite a versão mais recente adicionando essa configuração:
APPLICATIONINSIGHTS_ENABLE_AGENT: true
Observação
Se a versão mais recente do agente Java do Application Insights não estiver disponível no Azure Functions, carregue-a manualmente seguindo estas instruções.
Testar a conectividade entre o host do aplicativo e o serviço de ingestão
Os SDKs e agentes do Application Insights enviam telemetria para serem ingeridos como chamadas REST para nossos pontos de extremidade de ingestão. Você pode testar a conectividade do servidor Web ou do computador host do aplicativo para os pontos de extremidade do serviço de ingestão usando clientes REST brutos do PowerShell ou comandos curl. Confira Solucionar problemas de telemetria de aplicativo ausente no Application Insights do Azure Monitor.
Logs duplicados
Se estiver usando log4j
ou logback
para registrar em log no console, o rastreamento distribuído para funções Java cria logs duplicados. Esses logs duplicados são enviados para o Application Insights. Para evitar esse comportamento, use as seguintes soluções alternativas.
Log4j
Adicione o seguinte filtro ao log4j.xml:
<Filters>
<ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
Exemplo:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Filters>
<ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Logback
Adicione o seguinte filtro ao logback.xml:
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>OFF</level>
</filter>
Exemplo:
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>OFF</level>
</filter>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Rastreamento distribuído para aplicativos de funções Node.js
Para exibir mais dados dos seus aplicativos Node do Azure Functions do que são coletados por padrão, instrumente sua função usando a Distribuição OpenTelemetry do Azure Monitor.
Rastreamento distribuído para aplicativos de funções Python
Para coletar a telemetria de serviços, como Requests, urllib3, httpx
, PsycoPG2, entre outros, use a Distribuição do OpenTelemetry do Azure Monitor. As solicitações de entrada rastreadas que chegam ao aplicativo Python hospedado no Azure Functions não são correlacionadas automaticamente com a telemetria que está sendo rastreada dentro dele. Obtenha a correlação de rastreamento de modo manual extraindo o TraceContext diretamente, conforme mostrado abaixo:
import azure.functions as func
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.propagate import extract
# Configure Azure monitor collection telemetry pipeline
configure_azure_monitor()
def main(req: func.HttpRequest, context) -> func.HttpResponse:
...
# Store current TraceContext in dictionary format
carrier = {
"traceparent": context.trace_context.Traceparent,
"tracestate": context.trace_context.Tracestate,
}
tracer = trace.get_tracer(__name__)
# Start a span using the current context
with tracer.start_as_current_span(
"http_trigger_span",
context=extract(carrier),
):
...
Próximas etapas
- Leia mais instruções e informações sobre o monitoramento do Azure Functions.
- Obtenha uma visão geral do rastreamento distribuído.
- Veja o que o Mapa do Aplicativo pode fazer por sua empresa.
- Leia sobre solicitações e dependências para aplicativos Java.
- Saiba mais sobre o Azure Monitor e o Application Insights.