Monitorar Azure FunctionsMonitor Azure Functions

O Azure Functions oferece integração interna com informações de aplicativo Azure para monitorar funções.Azure Functions offers built-in integration with Azure Application Insights to monitor functions. Este artigo mostra como configurar Azure Functions para enviar arquivos de log gerados pelo sistema para Application Insights.This article shows you how to configure Azure Functions to send system-generated log files to Application Insights.

É recomendável usar Application Insights porque coleta dados de log, desempenho e erro.We recommend using Application Insights because it collects log, performance, and error data. Ele detecta automaticamente anomalias de desempenho e inclui poderosas ferramentas de análise para ajudá-lo a diagnosticar problemas e a entender como suas funções são usadas.It automatically detects performance anomalies and includes powerful analytics tools to help you diagnose issues and to understand how your functions are used. Ele foi projetado para ajudar você a aprimorar continuamente o desempenho e a usabilidade do seu aplicativo.It's designed to help you continuously improve performance and usability. Você pode até mesmo usar Application Insights durante o desenvolvimento do projeto de aplicativo de função local.You can even use Application Insights during local function app project development. Para obter mais informações, consulte o que é Application insights?.For more information, see What is Application Insights?.

Como a instrumentação de Application Insights necessária é incorporada ao Azure Functions, tudo o que você precisa é de uma chave de instrumentação válida para conectar seu aplicativo de funções a um recurso de Application Insights.As the required Application Insights instrumentation is built into Azure Functions, all you need is a valid instrumentation key to connect your function app to an Application Insights resource.

Preços e limites do Application InsightsApplication Insights pricing and limits

Você pode testar a integração do Application Insights aos Aplicativos de Funções gratuitamente.You can try out Application Insights integration with Function Apps for free. Há um limite diário para a quantidade de dados que pode ser processada gratuitamente.There's a daily limit to how much data can be processed for free. Você pode atingir esse limite durante o teste.You might hit this limit during testing. O Azure fornece o portal e notificações por email quando está se aproximando do limite diário.Azure provides portal and email notifications when you're approaching your daily limit. Se você perder esses alertas e atingir o limite, novos logs não aparecerão em Application Insights consultas.If you miss those alerts and hit the limit, new logs won't appear in Application Insights queries. Esteja ciente do limite para evitar o tempo de solução de problemas desnecessário.Be aware of the limit to avoid unnecessary troubleshooting time. Para obter mais informações, consulte Gerenciar o preço e o volume de dados no Application Insights.For more information, see Manage pricing and data volume in Application Insights.

A lista completa de recursos de Application Insights disponíveis para seu aplicativo de funções é detalhada em Application insights para Azure Functions recursos com suporte.The full list of Application Insights features available to your function app is detailed in Application Insights for Azure Functions supported features.

Habilitar a integração do Application InsightsEnable Application Insights integration

Para um aplicativo de funções enviar dados ao Application Insights, ele precisa saber a chave de instrumentação de um recurso do Application Insights.For a function app to send data to Application Insights, it needs to know the instrumentation key of an Application Insights resource. A chave deve estar em uma configuração de aplicativo chamada APPINSIGHTS_INSTRUMENTATIONKEY.The key must be in an app setting named APPINSIGHTS_INSTRUMENTATIONKEY.

Novo aplicativo de funções no portalNew function app in the portal

Quando você cria seu aplicativo de funções no portal do Azure, aintegração Application insights é habilitada por padrão.When you create your function app in the Azure portal, Application Insights integration is enabled by default. O recurso Application Insights tem o mesmo nome que seu aplicativo de funções e é criado na mesma região ou na região mais próxima.The Application Insights resource has the same name as your function app, and it's created either in the same region or in nearest region.

Para examinar a Application Insights recurso que está sendo criado, selecione-o para expandir a janela Application insights .To review the Application Insights resource being created, select it to expand the Application Insights window. Você pode alterar o nome do novo recurso ou escolher um local diferente em uma Geografia do Azure onde você deseja armazenar seus dados.You can change the New resource name or choose a different Location in an Azure geography where you want to store your data.

Habilitar o Application Insights ao criar um aplicativo de funções

Quando você escolhe criar, um recurso de Application insights é criado com seu aplicativo de funções, que tem a APPINSIGHTS_INSTRUMENTATIONKEY definida nas configurações do aplicativo.When you choose Create, an Application Insights resource is created with your function app, which has the APPINSIGHTS_INSTRUMENTATIONKEY set in application settings. Tudo está pronto para começar.Everything is ready to go.

Adicionar a um aplicativo de funções existenteAdd to an existing function app

Ao criar um aplicativo de funções usando o CLI do Azure, o Visual Studioou o Visual Studio Code, você deve criar o recurso de Application insights.When you create a function app using the Azure CLI, Visual Studio, or Visual Studio Code, you must create the Application Insights resource. Em seguida, você pode adicionar a chave de instrumentação a partir desse recurso como uma configuração de aplicativo em seu aplicativo de funções.You can then add the instrumentation key from that resource as an application setting in your function app.

As funções facilitam a adição da integração do Application Insights a um aplicativo de funções do portal do Azure.Functions makes it easy to add Application Insights integration to a function app from the Azure portal.

  1. No portal, selecione Todos os serviços > Aplicativos de Funções, selecione o aplicativo de funções e, em seguida, selecione a faixa do Application Insights na parte superior da janelaIn the portal, select All services > Function Apps, select your function app, and then select the Application Insights banner at the top of the window

    Habilitar o Application Insights no portal

  2. Crie um recurso do Application Insights usando as configurações especificadas na tabela abaixo da imagem.Create an Application Insights resource by using the settings specified in the table below the image.

    Criar um recurso do Application Insights

    ConfiguraçãoSetting Valor sugeridoSuggested value DescriçãoDescription
    NomeName Nome de aplicativo exclusivoUnique app name É mais fácil usar o mesmo nome que seu aplicativo de funções, que deve ser exclusivo em sua assinatura.It's easiest to use the same name as your function app, which must be unique in your subscription.
    LocalidadeLocation Europa OcidentalWest Europe Se possível, use a mesma região que seu aplicativo de funções ou uma região próxima dela.If possible, use the same region as your function app, or one that's close to that region.
  3. Selecione OK.Select OK. O recurso do Application Insights é criado no mesmo grupo de recursos e assinatura que seu aplicativo de funções.The Application Insights resource is created in the same resource group and subscription as your function app. Depois que o recurso for criado, feche a janela do Application Insights.After the resource is created, close the Application Insights window.

  4. No aplicativo de funções, selecione Configurações do aplicativo e role para baixo até Configurações do aplicativo.Back in your function app, select Application settings, and then scroll down to Application settings. Se você vir uma configuração chamada APPINSIGHTS_INSTRUMENTATIONKEY, isso significa que a integração do Application Insights está habilitada para seu aplicativo de funções em execução no Azure.If you see a setting named APPINSIGHTS_INSTRUMENTATIONKEY, Application Insights integration is enabled for your function app running in Azure.

As versões anteriores das funções usavam o monitoramento interno, o que não é mais recomendado.Early versions of Functions used built-in monitoring, which is no longer recommended. Ao habilitar a integração de Application Insights para esse aplicativo de funções, você também deve desabilitar o registro em log interno.When enabling Application Insights integration for such a function app, you must also disable built-in logging.

Exibir telemetria na guia MonitorView telemetry in Monitor tab

Com a integração do Application insights habilitada, você pode exibir dados de telemetria na guia monitorar .With Application Insights integration enabled, you can view telemetry data in the Monitor tab.

  1. Na página do aplicativo de funções, selecione uma função que tenha sido executada pelo menos uma vez depois que Application Insights foi configurada.In the function app page, select a function that has run at least once after Application Insights was configured. Em seguida, selecione a guia Monitor .Then select the Monitor tab.

    Selecionar a guia Monitor

  2. Selecione Atualizar periodicamente, até que a lista de invocações de função seja exibida.Select Refresh periodically, until the list of function invocations appears.

    Pode levar até cinco minutos para que a lista seja exibida enquanto o cliente de telemetria batche dados para transmissão para o servidor.It can take up to five minutes for the list to appear while the telemetry client batches data for transmission to the server. (O atraso não se aplica ao Live Metrics Stream.(The delay doesn't apply to the Live Metrics Stream. Esse serviço se conecta ao host de Funções quando você carrega a página, logo os logs são transmitidos diretamente para a página.)That service connects to the Functions host when you load the page, so logs are streamed directly to the page.)

    Lista de invocações

  3. Para ver os logs de uma invocação de função específica, selecione o link da coluna Data para a invocação.To see the logs for a particular function invocation, select the Date column link for that invocation.

    Link de detalhes da Invocação

    A saída de logs para essa invocação aparece em uma nova página.The logging output for that invocation appears in a new page.

    Detalhes da Invocação

Você pode ver que ambas as páginas têm uma execução no Application insights link para a consulta Application insights Analytics que recupera os dados.You can see that both pages have a Run in Application Insights link to the Application Insights Analytics query that retrieves the data.

Executar no Application Insights

A consulta a seguir é exibida.The following query is displayed. Você pode ver que a lista de invocação está limitada aos últimos 30 dias.You can see that the invocation list is limited to the last 30 days. A lista mostra no máximo 20 linhas (where timestamp > ago(30d) | take 20).The list shows no more than 20 rows (where timestamp > ago(30d) | take 20). A lista de detalhes de invocação é para os últimos 30 dias sem nenhum limite.The invocation details list is for the last 30 days with no limit.

Lista de invocações de Análise do Application Insights

Para obter mais informações, consulte Dados de telemetria da consulta a seguir neste artigo.For more information, see Query telemetry data later in this article.

Exibir a telemetria no Application InsightsView telemetry in Application Insights

Para abrir Application Insights de um aplicativo de funções no portal do Azure, vá para a página visão geral do aplicativo de funções.To open Application Insights from a function app in the Azure portal, go to the function app's Overview page. Em recursos configurados, selecione Application insights.Under Configured features, select Application Insights.

Abrir Application Insights na página Visão geral do aplicativo de funções

Para obter informações sobre como usar o Application Insights, consulte a documentação do o Application Insights.For information about how to use Application Insights, see the Application Insights documentation. Esta seção mostra alguns exemplos de como exibir dados no Application Insights.This section shows some examples of how to view data in 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.If you're already familiar with Application Insights, you can go directly to the sections about how to configure and customize the telemetry data.

Guia de visão geral do Application Insights

As áreas de Application Insights a seguir podem ser úteis ao avaliar o comportamento, o desempenho e os erros em suas funções:The following areas of Application Insights can be helpful when evaluating the behavior, performance, and errors in your functions:

TabTab DescriçãoDescription
SucediFailures Crie gráficos e alertas com base em falhas de função e exceções de servidor.Create charts and alerts based on function failures and server exceptions. O Nome da Operação é o nome da função.The Operation Name is the function name. Falhas em dependências não são mostradas a menos que você implemente telemetria personalizada para dependências.Failures in dependencies aren't shown unless you implement custom telemetry for dependencies.
DesempenhoPerformance Analisar problemas de desempenho.Analyze performance issues.
ServidoresServers Exibir a utilização de recursos e a taxa de transferência por servidor.View resource utilization and throughput per server. Esses dados podem ser úteis para cenários de depuração em que as funções estão travando seus recursos subjacentes.This data can be useful for debugging scenarios where functions are bogging down your underlying resources. Servidores são chamados de Instâncias de função de nuvem.Servers are referred to as Cloud role instances.
MétricaMetrics Crie gráficos e alertas baseados em métricas.Create charts and alerts that are based on metrics. As métricas incluem o número de invocações de função, tempo de execução e taxas de sucesso.Metrics include the number of function invocations, execution time, and success rates.
Live Metrics StreamLive Metrics Stream Exiba os dados de métricas conforme eles são criados em tempo real.View metrics data as it's created in real time.

Dados de telemetria da consultaQuery telemetry data

Application insights Analytics fornece acesso a todos os dados de telemetria na forma de tabelas em um banco de dados.Application Insights Analytics gives you access to all telemetry data in the form of tables in a database. A Análise fornece uma linguagem de consulta para extrair, manipular e visualizar os dados.Analytics provides a query language for extracting, manipulating, and visualizing the data.

Selecionar análise

Exemplo de análise

Veja um exemplo de consulta que mostra a distribuição de solicitações por trabalhador nos últimos 30 minutos.Here's a query example that shows the distribution of requests per worker over the last 30 minutes.

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.The tables that are available are shown in the Schema tab on the left. Você pode encontrar os dados gerados por invocações de função nas tabelas a seguir:You can find data generated by function invocations in the following tables:

TabelaTable DescriçãoDescription
rastreamentostraces Logs criados pelo tempo de execução e por código de função.Logs created by the runtime and by function code.
requestsrequests Uma solicitação para cada invocação de função.One request for each function invocation.
exceptionsexceptions Todas as exceções geradas pelo tempo de execução.Any exceptions thrown by the runtime.
customMetricscustomMetrics A contagem de invocações bem-sucedidas e com falha, taxa de êxito e duração.The count of successful and failing invocations, success rate, and duration.
customEventscustomEvents Eventos rastreados pelo tempo de execução, por exemplo: solicitações HTTP que disparam uma função.Events tracked by the runtime, for example: HTTP requests that trigger a function.
performanceCountersperformanceCounters Informações sobre o desempenho dos servidores em que as funções estão sendo executadas.Information about the performance of the servers that the functions are running on.

As outras tabelas são para testes de disponibilidade e telemetria de cliente e navegador.The other tables are for availability tests, and client and browser telemetry. Você pode implementar a telemetria personalizada para adicionar dados a ela.You can implement custom telemetry to add data to them.

Dentro de cada tabela, alguns dos dados específicos do Functions estão em um campo customDimensions.Within each table, some of the Functions-specific data is in a customDimensions field. Por exemplo, a consulta a seguir recupera todos os rastreamentos que têm o nível de log Error.For example, the following query retrieves all traces that have log level Error.

traces 
| where customDimensions.LogLevel == "Error"

O tempo de execução fornece os campos customDimensions.LogLevel e customDimensions.Category.The runtime provides the customDimensions.LogLevel and customDimensions.Category fields. Você pode fornecer campos adicionais nos logs que você escreve em seu código de função.You can provide additional fields in logs that you write in your function code. Consulte Registro em log estruturado mais adiante neste artigo.See Structured logging later in this article.

Configurar categorias e níveis de logConfigure categories and log levels

Você pode usar Application Insights sem nenhuma configuração personalizada.You can use Application Insights without any custom configuration. A configuração padrão pode resultar em grandes volumes de dados.The default configuration can result in high volumes of data. Se você estiver usando uma assinatura do Azure do Visual Studio, poderá ter atingido o limite de dados para o Application Insights.If you're using a Visual Studio Azure subscription, you might hit your data cap for Application Insights. Posteriormente neste artigo, você aprenderá a configurar e personalizar os dados que suas funções enviam para Application Insights.Later in this article, you learn how to configure and customize the data that your functions send to Application Insights. Para um aplicativo de funções, o registro em log é configurado no arquivo host. JSON .For a function app, logging is configured in the host.json file.

CategoriasCategories

O agente do Azure Functions inclui uma categoria para cada log.The Azure Functions logger includes a category for every log. A categoria indica qual parte do código de runtime ou do seu código de função gravou o log.The category indicates which part of the runtime code or your function code wrote the log.

O tempo de execução do Functions cria logs com uma categoria que começa com "host".The Functions runtime creates logs with a category that begin with "Host." Na versão 1. x, os logs function started, function executede function completed têm a categoria Host.Executor.In version 1.x, the function started, function executed, and function completed logs have the category Host.Executor. A partir da versão 2. x, esses logs têm a categoria Function.<YOUR_FUNCTION_NAME>.Starting in version 2.x, these logs have the category Function.<YOUR_FUNCTION_NAME>.

Se você gravar logs em seu código de função, a categoria será Function na versão 1. x do tempo de execução do functions.If you write logs in your function code, the category is Function in version 1.x of the Functions runtime. Na versão 2. x, a categoria é Function.<YOUR_FUNCTION_NAME>.User.In version 2.x, the category is Function.<YOUR_FUNCTION_NAME>.User.

Níveis de logLog levels

O agente de Azure Functions também inclui um nível de log com cada log.The Azure Functions logger also includes a log level with every log. LogLevel é uma enumeração e o código inteiro indica a importância relativa:LogLevel is an enumeration, and the integer code indicates relative importance:

LogLevelLogLevel CodificarCode
RastreamentoTrace 00
DepuraçãoDebug 11
InformaçõesInformation 22
AvisoWarning 33
ErroError 44
CríticoCritical 55
NenhumNone 66

Nível de log None é explicado na próxima seção.Log level None is explained in the next section.

Configuração de log em host. JSONLog configuration in host.json

O arquivo host. JSON configura quanto registro em log um aplicativo de função envia ao Application Insights.The host.json file configures how much logging a function app sends to Application Insights. Para cada categoria, você deve indicar o nível de log mínimo para enviar.For each category, you indicate the minimum log level to send. Há dois exemplos: o primeiro exemplo tem como destino a versão 2. x e posterior do tempo de execução do Functions (com o .NET Core) e o segundo exemplo é para o tempo de execução da versão 1. x.There are two examples: the first example targets version 2.x and later of the Functions runtime (with .NET Core), and the second example is for the version 1.x runtime.

Versão 2. x e superiorVersion 2.x and higher

A versão v2. x e versões posteriores do tempo de execução do Functions usam a hierarquia de filtro de log do .NET Core.Version v2.x and later versions of the Functions runtime use the .NET Core logging filter hierarchy.

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host.Results": "Error",
      "Function": "Error",
      "Host.Aggregator": "Trace"
    }
  }
}

Versão 1.xVersion 1.x

{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "Information",
      "categoryLevels": {
        "Host.Results": "Error",
        "Function": "Error",
        "Host.Aggregator": "Trace"
      }
    }
  }
}

Este exemplo configura as seguintes regras:This example sets up the following rules:

  • Para logs com categoria Host.Results ou Function, envie somente Error nível e acima para Application Insights.For logs with category Host.Results or Function, send only Error level and above to Application Insights. Os logs para o nível Warning e abaixo são ignorados.Logs for Warning level and below are ignored.
  • Para logs com a categoria Host.Aggregator, enviar todos os logs para o Application Insights.For logs with category Host.Aggregator, send all logs to Application Insights. O Trace nível de log é o mesmo que o que chamo de alguns agentes Verbose, mas usar Trace no host. JSON arquivo.The Trace log level is the same as what some loggers call Verbose, but use Trace in the host.json file.
  • Para todos os outros logs, envie somente o nível Information e acima ao Application Insights.For all other logs, send only Information level and above to Application Insights.

O valor de categoria em host. JSON controla o registro em log para todas as categorias que começam com o mesmo valor.The category value in host.json controls logging for all categories that begin with the same value. Host no host. JSON controla o registro em log para Host.General, Host.Executor, Host.Resultse assim por diante.Host in host.json controls logging for Host.General, Host.Executor, Host.Results, and so on.

Se host. JSON incluir várias categorias que comecem com a mesma cadeia de caracteres, será feito primeiro a correspondência com as mais longas.If host.json includes multiple categories that start with the same string, the longer ones are matched first. Suponha que você queira tudo do tempo de execução, exceto Host.Aggregator para fazer logon no nível de Error, mas deseja que Host.Aggregator faça o log no nível de Information:Suppose you want everything from the runtime except Host.Aggregator to log at Error level, but you want Host.Aggregator to log at the Information level:

Versão 2. x e posteriorVersion 2.x and later

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host": "Error",
      "Function": "Error",
      "Host.Aggregator": "Information"
    }
  }
}

Versão 1.xVersion 1.x

{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "Information",
      "categoryLevels": {
        "Host": "Error",
        "Function": "Error",
        "Host.Aggregator": "Information"
      }
    }
  }
}

Para suprimir todos os logs para uma categoria, você pode usar o nível de log None.To suppress all logs for a category, you can use log level None. Nenhum log é gravado com essa categoria e não há nenhum nível de registro acima dele.No logs are written with that category and there's no log level above it.

As seções a seguir descrevem as principais categorias de logs que o runtime cria.The following sections describe the main categories of logs that the runtime creates.

Categoria Host.ResultsCategory Host.Results

Esses logs aparecem como "solicitações" no Application Insights.These logs show as "requests" in Application Insights. Elas indicam o sucesso ou a falha de uma função.They indicate success or failure of a function.

Gráfico de solicitações

Todos esses logs são gravados no nível de Information.All of these logs are written at Information level. Se você filtrar em Warning ou acima, não verá nenhum desses dados.If you filter at Warning or above, you won't see any of this data.

Categoria Host.AggregatorCategory Host.Aggregator

Esses logs fornecem contagens e médias de chamadas de função sobre um período configurável.These logs provide counts and averages of function invocations over a configurable period of time. O período padrão é de 30 segundos ou 1.000 resultados, o que ocorrer primeiro.The default period is 30 seconds or 1,000 results, whichever comes first.

Os logs estão disponíveis na tabela customMetrics no Application Insights.The logs are available in the customMetrics table in Application Insights. Os exemplos são o número de execuções, a taxa de sucesso e a duração.Examples are the number of runs, success rate, and duration.

consulta de customMetrics

Todos esses logs são gravados no nível de Information.All of these logs are written at Information level. Se você filtrar em Warning ou acima, não verá nenhum desses dados.If you filter at Warning or above, you won't see any of this data.

Outras categoriasOther categories

Todos os logs para categorias diferentes daquelas já listadas estão disponíveis na tabela traces no Application Insights.All logs for categories other than the ones already listed are available in the traces table in Application Insights.

consulta de rastreamentos

Todos os logs com categorias que começam com Host são gravados pelo tempo de execução do functions.All logs with categories that begin with Host are written by the Functions runtime. Os logs "função iniciada" e "função concluída" têm Host.Executorde categoria.The "Function started" and "Function completed" logs have category Host.Executor. Para execuções bem-sucedidas, esses logs são Information nível.For successful runs, these logs are Information level. As exceções são registradas no nível de Error.Exceptions are logged at Error level. O runtime também cria logs de nível Warning, por exemplo: mensagens de fila enviadas para a fila de suspeita.The runtime also creates Warning level logs, for example: queue messages sent to the poison queue.

Os logs gravados por seu código de função têm a categoria Function e podem ser qualquer nível de log.Logs written by your function code have category Function and can be any log level.

Configurar o agregadorConfigure the aggregator

Conforme observado na seção anterior, o runtime agrega dados sobre as execuções de função em um período.As noted in the previous section, the runtime aggregates data about function executions over a period of time. O período padrão é de 30 segundos ou 1.000 execuções, o que ocorrer primeiro.The default period is 30 seconds or 1,000 runs, whichever comes first. Você pode definir essa configuração no arquivo host. JSON.You can configure this setting in the host.json file. Aqui está um exemplo:Here's an example:

{
    "aggregator": {
      "batchSize": 1000,
      "flushTimeout": "00:00:30"
    }
}

Configurar a amostragemConfigure sampling

O Application Insights tem um recurso de amostragem que pode protegê-lo de produzir dados de telemetria demais em execuções concluídas em momentos de pico de carga.Application Insights has a sampling feature that can protect you from producing too much telemetry data on completed executions at times of peak load. Quando a taxa de execuções de entrada excede um limite especificado, Application Insights começa a ignorar aleatoriamente algumas das execuções de entrada.When the rate of incoming executions exceeds a specified threshold, Application Insights starts to randomly ignore some of the incoming executions. A configuração padrão para o número máximo de execuções por segundo é 20 (cinco na versão 1. x).The default setting for maximum number of executions per second is 20 (five in version 1.x). Você pode configurar a amostragem em host. JSON.You can configure sampling in host.json. Aqui está um exemplo:Here's an example:

Versão 2. x e posteriorVersion 2.x and later

{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20
      }
    }
  }
}

Versão 1.xVersion 1.x

{
  "applicationInsights": {
    "sampling": {
      "isEnabled": true,
      "maxTelemetryItemsPerSecond" : 5
    }
  }
}

Observação

Amostragem é habilitado por padrão.Sampling is enabled by default. Se parecer que faltam dados, talvez seja necessário ajustar as configurações de amostragem para que se ajustem ao seu cenário de monitoramento específico.If you appear to be missing data, you might need to adjust the sampling settings to fit your particular monitoring scenario.

Gravar logs em funções C#Write logs in C# functions

Você pode gravar logs no seu código de função que apareçam como rastreamentos no Application Insights.You can write logs in your function code that appear as traces in Application Insights.

ILoggerILogger

Use um parâmetro ILogger em funções, em vez de um parâmetro TraceWriter.Use an ILogger parameter in your functions instead of a TraceWriter parameter. Os logs criados usando TraceWriter vão para Application Insights, mas ILogger permite que você faça o registro em log estruturado.Logs created by using TraceWriter go to Application Insights, but ILogger lets you do structured logging.

Com um objeto ILogger, você chama os Log<level> métodos de extensão no ILogger para criar logs.With an ILogger object, you call Log<level> extension methods on ILogger to create logs. O código a seguir grava Information logs com a categoria "função".The following code writes Information logs with category "Function."

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger logger)
{
    logger.LogInformation("Request for item with key={itemKey}.", id);

Registro em log estruturadoStructured logging

A ordem dos espaços reservados, não seus nomes, determina quais parâmetros são usados na mensagem de log.The order of placeholders, not their names, determines which parameters are used in the log message. Suponha que você tenha o seguinte código:Suppose you have the following code:

string partitionKey = "partitionKey";
string rowKey = "rowKey";
logger.LogInformation("partitionKey={partitionKey}, rowKey={rowKey}", partitionKey, rowKey);

Se você mantiver a mesma cadeia de caracteres de mensagem e inverter a ordem dos parâmetros, o texto da mensagem resultante terá os valores nos locais errados.If you keep the same message string and reverse the order of the parameters, the resulting message text would have the values in the wrong places.

Os espaços reservados são tratados dessa forma para que você possa fazer registro em log estruturado.Placeholders are handled this way so that you can do structured logging. Application Insights armazena os pares nome-valor do parâmetro e a cadeia de caracteres da mensagem.Application Insights stores the parameter name-value pairs and the message string. O resultado é que os argumentos da mensagem tornam-se campos que você pode consultar.The result is that the message arguments become fields that you can query on.

Se a chamada do método de agente for semelhante ao exemplo anterior, você poderá consultar o campo customDimensions.prop__rowKey.If your logger method call looks like the previous example, you can query the field customDimensions.prop__rowKey. O prefixo de prop__ é adicionado para garantir que não haja colisões entre os campos que o tempo de execução adiciona e os campos que o código de função adiciona.The prop__ prefix is added to ensure there are no collisions between fields the runtime adds and fields your function code adds.

Você também pode consultar a cadeia de caracteres da mensagem original referenciando o campo customDimensions.prop__{OriginalFormat}.You can also query on the original message string by referencing the field customDimensions.prop__{OriginalFormat}.

Aqui está uma representação JSON de exemplo de dados customDimensions:Here's a sample JSON representation of customDimensions data:

{
  customDimensions: {
    "prop__{OriginalFormat}":"C# Queue trigger function processed: {message}",
    "Category":"Function",
    "LogLevel":"Information",
    "prop__message":"c9519cbf-b1e6-4b9b-bf24-cb7d10b1bb89"
  }
}

Log de métricas personalizadasCustom metrics logging

Em funções de script C#, você pode usar o método de extensão LogMetric em ILogger para criar métricas personalizadas no Application Insights.In C# script functions, you can use the LogMetric extension method on ILogger to create custom metrics in Application Insights. Aqui está um exemplo de chamada de método:Here's a sample method call:

logger.LogMetric("TestMetric", 1234);

Esse código é uma alternativa para chamar TrackMetric usando a API do Application Insights para .NET.This code is an alternative to calling TrackMetric by using the Application Insights API for .NET.

Gravar logs em funções de JavaScriptWrite logs in JavaScript functions

Em funções do Node.js, use context.log para gravar logs.In Node.js functions, use context.log to write logs. O log estruturado não está habilitado.Structured logging isn't enabled.

context.log('JavaScript HTTP trigger function processed a request.' + context.invocationId);

Log de métricas personalizadasCustom metrics logging

Quando você está executando na versão 1. x do tempo de execução do functions, as funções do node. js podem usar o método context.log.metric para criar métricas personalizadas no Application insights.When you're running on version 1.x of the Functions runtime, Node.js functions can use the context.log.metric method to create custom metrics in Application Insights. Atualmente, esse método não tem suporte na versão 2. x e posterior.This method isn't currently supported in version 2.x and later. Aqui está um exemplo de chamada de método:Here's a sample method call:

context.log.metric("TestMetric", 1234);

Esse código é uma alternativa para chamar trackMetric usando o SDK do node. js para Application Insights.This code is an alternative to calling trackMetric by using the Node.js SDK for Application Insights.

Registrar telemetria personalizada C# em funçõesLog custom telemetry in C# functions

Você pode usar o pacote do NuGet Microsoft.ApplicationInsights para enviar dados de telemetria personalizados ao Application Insights.You can use the Microsoft.ApplicationInsights NuGet package to send custom telemetry data to Application Insights. O exemplo C# a seguir usa a API de telemetria personalizada.The following C# example uses the custom telemetry API. O exemplo é para uma biblioteca de classes do .NET, mas o código do Application Insights é o mesmo para o script C#.The example is for a .NET class library, but the Application Insights code is the same for C# script.

Versão 2. x e posteriorVersion 2.x and later

A versão 2. x e versões posteriores do tempo de execução usam recursos mais recentes no Application Insights para correlacionar automaticamente a telemetria com a operação atual.Version 2.x and later versions of the runtime use newer features in Application Insights to automatically correlate telemetry with the current operation. Não é necessário definir manualmente a operação Id, ParentIdou Name campos.There's no need to manually set the operation Id, ParentId, or Name fields.

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace functionapp0915
{
    public class HttpTrigger2
    {
        private readonly TelemetryClient telemetryClient;

        /// Using dependency injection will guarantee that you use the same configuration for telemetry collected automatically and manually.
        public HttpTrigger2(TelemetryConfiguration telemetryConfiguration)
        {
            this.telemetryClient = new TelemetryClient(telemetryConfiguration);
        }

        [FunctionName("HttpTrigger2")]
        public Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
            HttpRequest req, ExecutionContext context, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            DateTime start = DateTime.UtcNow;

            // Parse query parameter
            string name = req.Query
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            // Track an Event
            var evt = new EventTelemetry("Function called");
            evt.Context.User.Id = name;
            this.telemetryClient.TrackEvent(evt);

            // Track a Metric
            var metric = new MetricTelemetry("Test Metric", DateTime.Now.Millisecond);
            metric.Context.User.Id = name;
            this.telemetryClient.TrackMetric(metric);

            // Track a Dependency
            var dependency = new DependencyTelemetry
            {
                Name = "GET api/planets/1/",
                Target = "swapi.co",
                Data = "https://swapi.co/api/planets/1/",
                Timestamp = start,
                Duration = DateTime.UtcNow - start,
                Success = true
            };
            dependency.Context.User.Id = name;
            this.telemetryClient.TrackDependency(dependency);

            return Task.FromResult<IActionResult>(new OkResult());
        }
    }
}

Versão 1.xVersion 1.x

using System;
using System.Net;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Azure.WebJobs;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.Linq;

namespace functionapp0915
{
    public static class HttpTrigger2
    {
        private static string key = TelemetryConfiguration.Active.InstrumentationKey = 
            System.Environment.GetEnvironmentVariable(
                "APPINSIGHTS_INSTRUMENTATIONKEY", EnvironmentVariableTarget.Process);

        private static TelemetryClient telemetryClient = 
            new TelemetryClient() { InstrumentationKey = key };

        [FunctionName("HttpTrigger2")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
            HttpRequestMessage req, ExecutionContext context, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            DateTime start = DateTime.UtcNow;

            // Parse query parameter
            string name = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            // Get request body
            dynamic data = await req.Content.ReadAsAsync<object>();

            // Set name to query string or body data
            name = name ?? data?.name;
         
            // Track an Event
            var evt = new EventTelemetry("Function called");
            UpdateTelemetryContext(evt.Context, context, name);
            telemetryClient.TrackEvent(evt);
            
            // Track a Metric
            var metric = new MetricTelemetry("Test Metric", DateTime.Now.Millisecond);
            UpdateTelemetryContext(metric.Context, context, name);
            telemetryClient.TrackMetric(metric);
            
            // Track a Dependency
            var dependency = new DependencyTelemetry
                {
                    Name = "GET api/planets/1/",
                    Target = "swapi.co",
                    Data = "https://swapi.co/api/planets/1/",
                    Timestamp = start,
                    Duration = DateTime.UtcNow - start,
                    Success = true
                };
            UpdateTelemetryContext(dependency.Context, context, name);
            telemetryClient.TrackDependency(dependency);
        }
        
        // Correlate all telemetry with the current Function invocation
        private static void UpdateTelemetryContext(TelemetryContext context, ExecutionContext functionContext, string userName)
        {
            context.Operation.Id = functionContext.InvocationId.ToString();
            context.Operation.ParentId = functionContext.InvocationId.ToString();
            context.Operation.Name = functionContext.FunctionName;
            context.User.Id = userName;
        }
    }    
}

Não chame TrackRequest ou StartOperation<RequestTelemetry> porque você verá solicitações duplicadas para uma invocação de função.Don't call TrackRequest or StartOperation<RequestTelemetry> because you'll see duplicate requests for a function invocation. O runtime do Functions controla automaticamente as solicitações.The Functions runtime automatically tracks requests.

Não definir telemetryClient.Context.Operation.Id.Don't set telemetryClient.Context.Operation.Id. Essa configuração global causa correlação incorreta quando muitas funções são executadas simultaneamente.This global setting causes incorrect correlation when many functions are running simultaneously. Em vez disso, crie uma nova instância de telemetria (DependencyTelemetry, EventTelemetry) e modifique a propriedade Context.Instead, create a new telemetry instance (DependencyTelemetry, EventTelemetry) and modify its Context property. Em seguida, passe a instância de telemetria para o método Track correspondente em TelemetryClient (TrackDependency(), TrackEvent()).Then pass in the telemetry instance to the corresponding Track method on TelemetryClient (TrackDependency(), TrackEvent()). Esse método garante que a telemetria tenha os detalhes de correlação corretos para a invocação de função atual.This method ensures that the telemetry has the correct correlation details for the current function invocation.

Registrar telemetria personalizada em funções JavaScriptLog custom telemetry in JavaScript functions

Aqui está um trecho de código de exemplo que envia telemetria personalizada com o Application insights SDK do node. js:Here is a sample code snippet that sends custom telemetry with the Application Insights Node.js SDK:

const appInsights = require("applicationinsights");
appInsights.setup();
const client = appInsights.defaultClient;

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    client.trackEvent({name: "my custom event", tagOverrides:{"ai.operation.id": context.invocationId}, properties: {customProperty2: "custom property value"}});
    client.trackException({exception: new Error("handled exceptions can be logged with this method"), tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackMetric({name: "custom metric", value: 3, tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackTrace({message: "trace message", tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL", tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true, tagOverrides:{"ai.operation.id": context.invocationId}});

    context.done();
};

O parâmetro tagOverrides define o operation_Id para a ID de invocação da função.The tagOverrides parameter sets the operation_Id to the function's invocation ID. Essa configuração permite que você correlacione toda a telemetria gerada automaticamente e a telemetria personalizada para uma dada invocação de função.This setting enables you to correlate all of the automatically generated and custom telemetry for a given function invocation.

DependênciasDependencies

As funções v2 coletam automaticamente as dependências para solicitações HTTP, ServiceBus e SQL.Functions v2 automatically collects dependencies for HTTP requests, ServiceBus, and SQL.

Você pode escrever código personalizado para mostrar as dependências.You can write custom code to show the dependencies. Para obter exemplos, consulte o código de exemplo na C# seção telemetria personalizada.For examples, see the sample code in the C# custom telemetry section. O código de exemplo resulta em um mapa de aplicativo em Application insights semelhante à imagem a seguir:The sample code results in an application map in Application Insights that looks like the following image:

Mapa do aplicativo

Relatar problemasReport issues

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.To report an issue with Application Insights integration in Functions, or to make a suggestion or request, create an issue in GitHub.

Logs de streamingStreaming Logs

Ao desenvolver um aplicativo, muitas vezes você deseja ver o que está sendo gravado nos logs em tempo quase real durante a execução no Azure.While developing an application, you often want to see what's being written to the logs in near-real time when running in Azure.

Há duas maneiras de exibir um fluxo de arquivos de log que está sendo gerado por suas execuções de função.There are two ways to view a stream of log files being generated by your function executions.

  • Streaming de log interno: a plataforma do serviço de aplicativo permite que você exiba um fluxo dos arquivos de log do aplicativo.Built-in log streaming: the App Service platform lets you view a stream of your application log files. Isso é equivalente à saída vista quando você depura suas funções durante o desenvolvimento local e quando você usa a guia teste no Portal.This is equivalent to the output seen when you debug your functions during local development and when you use the Test tab in the portal. Todas as informações baseadas em log são exibidas.All log-based information is displayed. Para obter mais informações, consulte Stream logs.For more information, see Stream logs. Esse método de streaming dá suporte a apenas uma única instância e não pode ser usado com um aplicativo em execução no Linux em um plano de consumo.This streaming method supports only a single instance, and can't be used with an app running on Linux in a Consumption plan.

  • Live Metrics Stream: quando seu aplicativo de funções está conectado ao Application insights, você pode exibir dados de log e outras métricas quase em tempo real no portal do Azure usando Live Metrics Stream.Live Metrics Stream: when your function app is connected to Application Insights, you can view log data and other metrics in near-real time in the Azure portal using 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.Use this method when monitoring functions running on multiple-instances or on Linux in a Consumption plan. Esse método usa dados de amostra.This method uses sampled data.

Os fluxos de log podem ser exibidos no portal e na maioria dos ambientes de desenvolvimento locais.Log streams can be viewed both in the portal and in most local development environments.

PortalPortal

Você pode exibir os dois tipos de fluxos de log no Portal.You can view both types of log streams in the portal.

Streaming de log internoBuilt-in log streaming

Para exibir os logs de streaming no portal, selecione a guia recursos da plataforma em seu aplicativo de funções.To view streaming logs in the portal, select the Platform features tab in your function app. Em seguida, em monitoramento, escolha streaming de log.Then, under Monitoring, choose Log streaming.

Habilitar logs de streaming no portal

Isso conecta seu aplicativo ao serviço de streaming de log e os logs de aplicativo são exibidos na janela.This connects your app to the log streaming service and application logs are displayed in the window. Você pode alternar entre logs do aplicativo e logs do servidor Web.You can toggle between Application logs and Web server logs.

Exibir logs de streaming no portal

Live Metrics StreamLive Metrics Stream

Para exibir o Live Metrics Stream para seu aplicativo, selecione a guia visão geral do seu aplicativo de funções.To view the Live Metrics Stream for your app, select the Overview tab of your function app. Quando Application Insights habilita, você verá um link de Application insights em recursos configurados.When you have Application Insights enables, you see an Application Insights link under Configured features. Esse link leva você até a página de Application Insights para seu aplicativo.This link takes you to the Application Insights page for your app.

Em Application Insights, selecione Live Metrics Stream.In Application Insights, select Live Metrics Stream. As entradas de log de amostra são exibidas em telemetria de exemplo.Sampled log entries are displayed under Sample Telemetry.

Exibir Live Metrics Stream no portal

Código do Visual StudioVisual Studio Code

Para ativar os logs de streaming para seu aplicativo de funções no Azure:To turn on the streaming logs for your function app in Azure:

  1. Selecione F1 para abrir a paleta de comandos e, em seguida, pesquise e execute o comando Azure Functions: Inicie os logsde streaming.Select F1 to open the command palette, and then search for and run the command Azure Functions: Start Streaming Logs.

  2. Selecione seu aplicativo de funções no Azure e, em seguida, selecione Sim para habilitar o log de aplicativo para o aplicativo de funções.Select your function app in Azure, and then select Yes to enable application logging for the function app.

  3. Dispare suas funções no Azure.Trigger your functions in Azure. Observe que os dados de log são exibidos na janela saída no Visual Studio Code.Notice that log data is displayed in the Output window in Visual Studio Code.

  4. Quando terminar, lembre-se de executar o comando Azure Functions: Interrompa os logs de streaming para desabilitar o registro em log para o aplicativo de funções.When you're done, remember to run the command Azure Functions: Stop Streaming Logs to disable logging for the function app.

Ferramentas principaisCore Tools

Streaming de log internoBuilt-in log streaming

Use a logstream opção para começar a receber logs de streaming de um aplicativo de funções específico em execução no Azure, como no exemplo a seguir:Use the logstream option to start receiving streaming logs of a specific function app running in Azure, as in the following example:

func azure functionapp logstream <FunctionAppName>

Live Metrics StreamLive Metrics Stream

Você também pode exibir o Live Metrics Stream para seu aplicativo de funções em uma nova janela do navegador, --browser incluindo a opção, como no exemplo a seguir:You can also view the Live Metrics Stream for your function app in a new browser window by including the --browser option, as in the following example:

func azure functionapp logstream <FunctionAppName> --browser

Azure CLIAzure CLI

Você pode habilitar os logs de streaming usando o CLI do Azure.You can enable streaming logs by using the Azure CLI. Use os comandos a seguir para entrar, escolher sua assinatura e transmitir arquivos de log:Use the following commands to sign in, choose your subscription, and stream log files:

az login
az account list
az account set --subscription <subscriptionNameOrId>
az webapp log tail --resource-group <RESOURCE_GROUP_NAME> --name <FUNCTION_APP_NAME>

Azure PowerShellAzure PowerShell

Você pode habilitar os logs de streaming usando Azure PowerShell.You can enable streaming logs by using Azure PowerShell. Para o PowerShell, use os seguintes comandos para adicionar sua conta do Azure, escolha sua assinatura e transmita os arquivos de log:For PowerShell, use the following commands to add your Azure account, choose your subscription, and stream log files:

Add-AzAccount
Get-AzSubscription
Get-AzSubscription -SubscriptionName "<subscription name>" | Select-AzSubscription
Get-AzWebSiteLog -Name <FUNCTION_APP_NAME> -Tail

Desabilitar o registro em log internoDisable built-in logging

Ao habilitar Application Insights, desabilite o log interno que usa o armazenamento do Azure.When you enable Application Insights, disable the built-in logging that uses Azure Storage. O registro em log interno é útil para testes com cargas de trabalho leves, mas não se destina ao uso de produção de alta carga.The built-in logging is useful for testing with light workloads, but isn't intended for high-load production use. Para o monitoramento de produção, recomendamos Application Insights.For production monitoring, we recommend Application Insights. Se o registro em log interno for usado na produção, o registro de log poderá estar incompleto devido à limitação no armazenamento do Azure.If built-in logging is used in production, the logging record might be incomplete because of throttling on Azure Storage.

Para desabilitar o registro em log interno, exclua a configuração de aplicativo AzureWebJobsDashboard.To disable built-in logging, delete the AzureWebJobsDashboard app setting. Para obter informações sobre como excluir configurações do aplicativo no portal do Azure, consulte a seção Configurações do aplicativo em Como gerenciar um aplicativo de funções.For information about how to delete app settings in the Azure portal, see the Application settings section of How to manage a function app. Antes de excluir a configuração do aplicativo, certifique-se de que nenhuma função existente no mesmo aplicativo de funções use a configuração para gatilhos ou associações do armazenamento do Azure.Before you delete the app setting, make sure no existing functions in the same function app use the setting for Azure Storage triggers or bindings.

Próximos passosNext steps

Para saber mais, consulte os recursos a seguir:For more information, see the following resources: