Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
Consulte as diretrizes de suporte do SDK do Application Insights para obter nossa política de suporte do SDK da API clássica.
Atenção
Recomendamos a Distro OpenTelemetry do Azure Monitor para novos aplicativos ou clientes para potencializar o Azure Monitor Application Insights. A Distro OpenTelemetry do Azure Monitor oferece uma funcionalidade e experiência semelhantes às do SDK do Application Insights. É possível migrar do SDK do Application Insights usando os guias de migração para .NET, Node.js e Python, mas ainda estamos trabalhando para adicionar mais alguns recursos para compatibilidade com versões anteriores.
Este artigo explica como habilitar e configurar o Application Insights para .NET (ASP.NET, ASP.NET Core e Worker Service) e aplicativos Node.js. O Application Insights pode coletar a seguinte telemetria de seus aplicativos:
- Requests
- Dependências
- Exceptions
- Contadores de desempenho
- Registos (Logs)
- Batimentos cardíacos
- Eventos personalizados e métricas (requer instrumentação manual)
- Visualizações de página (requer JavaScript SDK para páginas da Web)
- Testes de disponibilidade (requer a configuração manual de testes de disponibilidade)
Cenários suportados
| Suportado | ASP.NET | ASP.NET Core | Serviço ao Trabalhador |
|---|---|---|---|
| Sistema Operativo | Windows | Windows, Linux ou macOS | Windows, Linux ou macOS |
| Método de hospedagem | Em processo interno (IIS ou IIS Express) | Em processo ou fora de processo | Console ou serviço em segundo plano (executa-se como um processo, normalmente via dotnet CLI ou como um daemon Windows/Linux) |
| Método de implantação | Web Deploy, MSI ou cópia manual de arquivos | Dependente da estrutura ou auto-suficiente | Dependente da estrutura ou auto-suficiente |
| Servidor Web | Serviços de Informações da Internet (IIS) | Internet Information Server (IIS) ou Kestrel | Não aplicável (sem servidor Web; projetado para cargas de trabalho não-HTTP, como mensagens, tarefas em segundo plano e aplicativos de console) |
| Plataforma de alojamento | Serviço de Aplicativo do Azure (Windows), Máquinas Virtuais do Azure ou servidores locais | O recurso Aplicativos Web do Serviço de Aplicativo do Azure, Máquinas Virtuais do Azure, Docker e Serviço Kubernetes do Azure (AKS) | Máquinas Virtuais do Azure, Serviço Kubernetes do Azure (AKS), contêineres ou qualquer ambiente onde o .NET Core seja suportado |
| Versão .NET | .NET Framework 4.6.1 e posterior | Todas as versões .NET oficialmente suportadas que não estão em pré-visualização | Todas as versões .NET oficialmente suportadas que não estão em pré-visualização |
| IDE | Visual Studio | Visual Studio, Visual Studio Code ou linha de comando | Visual Studio, Visual Studio Code ou linha de comando |
O SDK do Serviço de Trabalho não faz nenhuma coleta de telemetria por si só. Em vez disso, ele traz outros coletores automáticos do Application Insights, como DependencyCollector, PerfCounterCollector e ApplicationInsightsLoggingProvider. Este SDK expõe métodos de extensão em `IServiceCollection` para habilitar e configurar a recolha de telemetria.
Observação
Um serviço de trabalho é um aplicativo em segundo plano de longa execução que executa tarefas fora de um pipeline de solicitação/resposta HTTP. O SDK do Application Insights para Serviço de Trabalho pode ser usado no recém-introduzido .NET Core Worker Service, em tarefas em segundo plano no ASP.NET Core e em aplicativos de console como o .NET Core e o .NET Framework.
Adicionar informações de aplicativos
Pré-requisitos
- Uma assinatura do Azure. Se ainda não tiver uma, crie uma conta gratuita do Azure.
- Um recurso baseado em espaço de trabalho do Application Insights.
- Uma aplicação funcional. Se você ainda não tiver um, consulte Criar um aplicativo Web básico.
- A versão mais recente do Visual Studio com as seguintes cargas de trabalho:
- Desenvolvimento ASP.NET e Web
- Desenvolvimento do Azure
Criar um aplicativo Web básico
Se você ainda não tiver um aplicativo Web em funcionamento, poderá usar as orientações a seguir para criar um.
ASP.NET
- Abra o Visual Studio.
- Selecione Criar um novo projeto.
- Escolha ASP.NET Aplicativo Web (.NET Framework) com C# e selecione Avançar.
- Insira um nome de projeto e selecione Criar.
- Escolha MVC e, em seguida, selecione Criar.
ASP.NET Core
- Abra o Visual Studio.
- Selecione Criar um novo projeto.
- Escolha ASP.NET Core Web App (Razor Pages) com C# e selecione Next.
- Insira um nome de projeto e selecione Criar.
- Escolha uma estrutura (LTS ou STS) e, em seguida, selecione Criar.
Adicionar o Application Insights automaticamente (Visual Studio)
Esta seção orienta você pela adição automática do Application Insights a um aplicativo Web baseado em modelo.
ASP.NET
Observação
Existe um problema conhecido no Visual Studio 2019: armazenar a chave de instrumentação ou a cadeia de conexão num segredo de utilizador não funciona em aplicações baseadas no .NET Framework. Em última análise, a chave tem que ser codificada no arquivo Applicationinsights.config para contornar esse bug.
De dentro do seu projeto de aplicativo Web ASP.NET no Visual Studio:
Selecione Projeto>Adicionar Telemetria do Application Insights>Application Insights SDK (local)>Próximo>Concluir>Fechar.
Abra o arquivo ApplicationInsights.config .
Antes da tag de fechamento
</ApplicationInsights>, adicione uma linha que contenha a cadeia de conexão para o recurso do Application Insights. Encontre sua cadeia de conexão no painel de visão geral do recurso do Application Insights recém-criado.<ConnectionString>Copy connection string from Application Insights Resource Overview</ConnectionString>Selecione Project>> Em seguida, atualize cada
Microsoft.ApplicationInsightspacote NuGet para a versão estável mais recente.Execute seu aplicativo selecionando IIS Express. Um aplicativo ASP.NET básico é aberto. À medida que você navega pelas páginas do site, a telemetria é enviada para o Application Insights.
ASP.NET Core
Observação
Se você quiser usar o provedor ILogger autônomo para seu aplicativo ASP.NET, use Microsoft.Extensions.Logging.ApplicationInsight.
Importante
Para Visual Studio para macOS, use a orientação manual. Apenas a versão Windows do Visual Studio suporta este procedimento.
De dentro do seu projeto de aplicativo Web ASP.NET no Visual Studio:
Vá para Project>Add Application Insights Telemetry.
Selecione Azure Application Insights>Next.
Escolha sua assinatura e a instância do Application Insights. Ou você pode criar uma nova instância com Create new. Selecione Avançar.
Adicione ou confirme sua cadeia de conexão do Application Insights. Ele deve ser pré-preenchido com base na sua seleção na etapa anterior. Selecione Concluir.
Depois de adicionar o Application Insights ao seu projeto, verifique se você está usando a versão estável mais recente do SDK. Vá para Project>Manage NuGet Packages>Microsoft.ApplicationInsights.AspNetCore. Se precisar, selecione Atualizar.
Adicionar o Application Insights manualmente (sem Visual Studio)
Esta seção orienta você pela adição manual do Application Insights a um aplicativo Web baseado em modelo.
ASP.NET
Adicione os seguintes pacotes NuGet e suas dependências ao seu projeto:
Em alguns casos, o arquivo ApplicationInsights.config é criado para você automaticamente. Se o ficheiro já estiver presente, avance para o passo 4.
Crie você mesmo, se estiver faltando. No diretório raiz de um aplicativo ASP.NET, crie um novo arquivo chamado ApplicationInsights.config.
Copie a seguinte configuração XML para o arquivo recém-criado:
Expandir para visualizar a configuração
<?xml version="1.0" encoding="utf-8"?> <ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings"> <TelemetryInitializers> <Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureRoleEnvironmentTelemetryInitializer, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.BuildInfoConfigComponentVersionTelemetryInitializer, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.Web.WebTestTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.SyntheticUserAgentTelemetryInitializer, Microsoft.AI.Web"> <!-- Extended list of bots: search|spider|crawl|Bot|Monitor|BrowserMob|BingPreview|PagePeeker|WebThumb|URL2PNG|ZooShot|GomezA|Google SketchUp|Read Later|KTXN|KHTE|Keynote|Pingdom|AlwaysOn|zao|borg|oegp|silk|Xenu|zeal|NING|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|Java|JNLP|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|vortex|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|voyager|archiver|Icarus6j|mogimogi|Netvibes|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|wsr-agent|http client|Python-urllib|AppEngine-Google|semanticdiscovery|facebookexternalhit|web/snippet|Google-HTTP-Java-Client--> <Filters>search|spider|crawl|Bot|Monitor|AlwaysOn</Filters> </Add> <Add Type="Microsoft.ApplicationInsights.Web.ClientIpHeaderTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.AzureAppServiceRoleNameFromHostNameHeaderInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.OperationNameTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.UserTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.AuthenticatedUserIdTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.AccountIdTelemetryInitializer, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.SessionTelemetryInitializer, Microsoft.AI.Web" /> </TelemetryInitializers> <TelemetryModules> <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector"> <ExcludeComponentCorrelationHttpHeadersOnDomains> <!-- Requests to the following hostnames will not be modified by adding correlation headers. Add entries here to exclude additional hostnames. NOTE: this configuration will be lost upon NuGet upgrade. --> <Add>core.windows.net</Add> <Add>core.chinacloudapi.cn</Add> <Add>core.cloudapi.de</Add> <Add>core.usgovcloudapi.net</Add> </ExcludeComponentCorrelationHttpHeadersOnDomains> <IncludeDiagnosticSourceActivities> <Add>Microsoft.Azure.EventHubs</Add> <Add>Azure.Messaging.ServiceBus</Add> </IncludeDiagnosticSourceActivities> </Add> <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector"> <!-- Use the following syntax here to collect additional performance counters: <Counters> <Add PerformanceCounter="\Process(??APP_WIN32_PROC??)\Handle Count" ReportAs="Process handle count" /> ... </Counters> PerformanceCounter must be either \CategoryName(InstanceName)\CounterName or \CategoryName\CounterName NOTE: performance counters configuration will be lost upon NuGet upgrade. The following placeholders are supported as InstanceName: ??APP_WIN32_PROC?? - instance name of the application process for Win32 counters. ??APP_W3SVC_PROC?? - instance name of the application IIS worker process for IIS/ASP.NET counters. ??APP_CLR_PROC?? - instance name of the application CLR process for .NET counters. --> </Add> <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryModule, Microsoft.AI.PerfCounterCollector" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.AppServicesHeartbeatTelemetryModule, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureInstanceMetadataTelemetryModule, Microsoft.AI.WindowsServer"> <!-- Remove individual fields collected here by adding them to the ApplicationInsighs.HeartbeatProvider with the following syntax: <Add Type="Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights"> <ExcludedHeartbeatProperties> <Add>osType</Add> <Add>location</Add> <Add>name</Add> <Add>offer</Add> <Add>platformFaultDomain</Add> <Add>platformUpdateDomain</Add> <Add>publisher</Add> <Add>sku</Add> <Add>version</Add> <Add>vmId</Add> <Add>vmSize</Add> <Add>subscriptionId</Add> <Add>resourceGroupName</Add> <Add>placementGroupId</Add> <Add>tags</Add> <Add>vmScaleSetName</Add> </ExcludedHeartbeatProperties> </Add> NOTE: exclusions will be lost upon upgrade. --> </Add> <Add Type="Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.UnhandledExceptionTelemetryModule, Microsoft.AI.WindowsServer" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.UnobservedExceptionTelemetryModule, Microsoft.AI.WindowsServer"> <!--</Add> <Add Type="Microsoft.ApplicationInsights.WindowsServer.FirstChanceExceptionStatisticsTelemetryModule, Microsoft.AI.WindowsServer">--> </Add> <Add Type="Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule, Microsoft.AI.Web"> <Handlers> <!-- Add entries here to filter out additional handlers: NOTE: handler configuration will be lost upon NuGet upgrade. --> <Add>Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.RequestDataHttpHandler</Add> <Add>System.Web.StaticFileHandler</Add> <Add>System.Web.Handlers.AssemblyResourceLoader</Add> <Add>System.Web.Optimization.BundleHandler</Add> <Add>System.Web.Script.Services.ScriptHandlerFactory</Add> <Add>System.Web.Handlers.TraceHandler</Add> <Add>System.Web.Services.Discovery.DiscoveryRequestHandler</Add> <Add>System.Web.HttpDebugHandler</Add> </Handlers> </Add> <Add Type="Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModule, Microsoft.AI.Web" /> <Add Type="Microsoft.ApplicationInsights.Web.AspNetDiagnosticTelemetryModule, Microsoft.AI.Web" /> </TelemetryModules> <ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights" /> <TelemetrySinks> <Add Name="default"> <TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse.QuickPulseTelemetryProcessor, Microsoft.AI.PerfCounterCollector" /> <Add Type="Microsoft.ApplicationInsights.Extensibility.AutocollectedMetricsExtractor, Microsoft.ApplicationInsights" /> <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> <ExcludedTypes>Event</ExcludedTypes> </Add> <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> <IncludedTypes>Event</IncludedTypes> </Add> <!-- Adjust the include and exclude examples to specify the desired semicolon-delimited types. (Dependency, Event, Exception, PageView, Request, Trace) --> </TelemetryProcessors> <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel" /> </Add> </TelemetrySinks> <!-- Learn more about Application Insights configuration with ApplicationInsights.config here: http://go.microsoft.com/fwlink/?LinkID=513840 --> <ConnectionString>Copy the connection string from your Application Insights resource</ConnectionString> </ApplicationInsights>Adicione a cadeia de conexão, o que pode ser feito de duas maneiras:
(Recomendado) Defina a cadeia de conexão na configuração.
Antes da tag de fechamento
</ApplicationInsights>em ApplicationInsights.config, adicione a cadeia de conexão para seu recurso do Application Insights. Você pode encontrar sua cadeia de conexão no painel de visão geral do recurso do Application Insights recém-criado.<ConnectionString>Copy the connection string from your Application Insights resource</ConnectionString>Defina a cadeia de conexão no código.
Forneça uma cadeia de conexão em sua classe program.cs .
var configuration = new TelemetryConfiguration { ConnectionString = "Copy the connection string from your Application Insights resource" };
No mesmo nível do seu projeto que o arquivo ApplicationInsights.config , crie uma pasta chamada ErrorHandler com um novo arquivo C# chamado AiHandleErrorAttribute.cs. O conteúdo do arquivo tem esta aparência:
using System; using System.Web.Mvc; using Microsoft.ApplicationInsights; namespace WebApplication10.ErrorHandler //namespace will vary based on your project name { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class AiHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null) { //If customError is Off, then AI HTTPModule will report the exception if (filterContext.HttpContext.IsCustomErrorEnabled) { var ai = new TelemetryClient(); ai.TrackException(filterContext.Exception); } } base.OnException(filterContext); } } }Na pasta App_Start, abra o arquivo FilterConfig.cs e altere-o para corresponder ao exemplo:
using System.Web; using System.Web.Mvc; namespace WebApplication10 //Namespace will vary based on project name { public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new ErrorHandler.AiHandleErrorAttribute()); } } }Se Web.config já estiver atualizado, ignore esta etapa. Caso contrário, atualize o arquivo da seguinte maneira:
Expandir para visualizar a configuração
<?xml version="1.0" encoding="utf-8"?> <!-- For more information on how to configure your ASP.NET application, please visit https://go.microsoft.com/fwlink/?LinkId=301880 --> <configuration> <appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.7.2" /> <httpRuntime targetFramework="4.7.2" /> <!-- Code added for Application Insights start --> <httpModules> <add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" /> <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" /> </httpModules> <!-- Code added for Application Insights end --> </system.web> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" /> <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-5.2.7.0" newVersion="5.2.7.0" /> </dependentAssembly> <!-- Code added for Application Insights start --> <dependentAssembly> <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" /> </dependentAssembly> <!-- Code added for Application Insights end --> </assemblyBinding> </runtime> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" /> </compilers> </system.codedom> <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <!-- Code added for Application Insights start --> <modules> <remove name="TelemetryCorrelationHttpModule" /> <add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" preCondition="managedHandler" /> <remove name="ApplicationInsightsWebTracking" /> <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" /> </modules> <!-- Code added for Application Insights end --> </system.webServer> </configuration>
Neste ponto, você configurou com êxito o monitoramento de aplicativos do lado do servidor. Se você executar seu aplicativo Web, verá a telemetria começar a aparecer no Application Insights.
ASP.NET Core
Instale o pacote NuGet do Application Insights SDK para ASP.NET Core.
Recomendamos que você sempre use a versão estável mais recente. Encontre as notas de versão completas do SDK no repositório GitHub de código aberto.
O exemplo de código a seguir mostra as alterações a serem adicionadas ao arquivo .csproj do seu projeto:
<ItemGroup> <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" /> </ItemGroup>Adicione
AddApplicationInsightsTelemetry()à sua classe program.cs .Adicione
builder.Services.AddApplicationInsightsTelemetry();após oWebApplication.CreateBuilder()método, como neste exemplo:// This method gets called by the runtime. Use this method to add services to the container. var builder = WebApplication.CreateBuilder(args); // The following line enables Application Insights telemetry collection. builder.Services.AddApplicationInsightsTelemetry(); // This code adds other services for your application. builder.Services.AddMvc(); var app = builder.Build();Adicione a cadeia de conexão, o que pode ser feito de três maneiras:
(Recomendado) Defina a cadeia de conexão na configuração.
Defina a cadeia de conexão em appsettings.json e verifique se o arquivo de configuração é copiado para a pasta raiz do aplicativo durante a publicação.
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "ApplicationInsights": { "ConnectionString": "<YOUR-CONNECTION-STRING>" } }Defina a
APPLICATIONINSIGHTS_CONNECTION_STRINGcadeia de conexão na variável de ambiente ouApplicationInsights:ConnectionStringno arquivo de configuração JSON.Por exemplo:
SET ApplicationInsights:ConnectionString = <Copy connection string from Application Insights Resource Overview>SET APPLICATIONINSIGHTS_CONNECTION_STRING = <Copy connection string from Application Insights Resource Overview>- Normalmente,
APPLICATIONINSIGHTS_CONNECTION_STRINGé usado em aplicativos Web. Ele também pode ser usado em todos os lugares onde este SDK é suportado.
Observação
Uma cadeia de conexão especificada no código ganha sobre a variável
APPLICATIONINSIGHTS_CONNECTION_STRINGde ambiente , que ganha sobre outras opções.Defina a cadeia de conexão no código.
Forneça uma cadeia de conexão como parte do
ApplicationInsightsServiceOptionsargumento paraAddApplicationInsightsTelemetryem sua classe program.cs .
Segredos de usuário e outros provedores de configuração
Se quiser armazenar a cadeia de conexão em ASP.NET segredos de usuário principais ou recuperá-la de outro provedor de configuração, você pode usar a sobrecarga com um Microsoft.Extensions.Configuration.IConfiguration parâmetro. Um parâmetro de exemplo é services.AddApplicationInsightsTelemetry(Configuration);.
Na Microsoft.ApplicationInsights.AspNetCore versão 2.15.0 e posterior, a chamada services.AddApplicationInsightsTelemetry() lê automaticamente a cadeia de conexão do Microsoft.Extensions.Configuration.IConfiguration aplicativo. Não há necessidade de fornecer IConfigurationexplicitamente .
Se IConfiguration a configuração for carregada de vários provedores, priorizará services.AddApplicationInsightsTelemetry a configuração de appsettings.json, independentemente da ordem em que os provedores forem adicionados. Use o método services.AddApplicationInsightsTelemetry(IConfiguration) para ler a configuração de IConfiguration sem esse tratamento preferencial para appsettings.json.
Serviço ao Trabalhador
Nesta secção
- Usar o SDK do Application Insights para o Worker Service
- Aplicativo .NET Core Worker Service
- ASP.NET Core tarefas em segundo plano com serviços hosteados
- Aplicativo de console do .NET Core/.NET Framework
Usar o SDK do Application Insights para o Serviço do Trabalhador
Instale o pacote Microsoft.ApplicationInsights.WorkerService no aplicativo.
O trecho a seguir mostra as alterações que devem ser adicionadas ao arquivo
.csprojdo seu projeto:<ItemGroup> <PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" /> </ItemGroup>Configure a cadeia de conexão na
APPLICATIONINSIGHTS_CONNECTION_STRINGvariável de ambiente ou na configuração (appsettings.json).Recupere uma
ILoggerinstância ouTelemetryClientinstância do contêiner DI (Injeção de Dependência) chamandoserviceProvider.GetRequiredService<TelemetryClient>();ou usando a Injeção do Construtor. Esta etapa aciona a configuração de módulos deTelemetryConfiguratione de autocoleta.
As instruções específicas para cada tipo de aplicação são descritas nas secções seguintes.
Aplicativo .NET Core Worker Service
O exemplo completo é compartilhado no site do NuGet.
Crie um novo projeto do Serviço de Trabalho usando um novo modelo de projeto do Visual Studio ou a linha
dotnet new workerde comando.Adicione o pacote Microsoft.ApplicationInsights.WorkerService ao aplicativo.
Adicione
services.AddApplicationInsightsTelemetryWorkerService();aoCreateHostBuilder()método em suaProgram.csclasse, como neste exemplo:public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); services.AddApplicationInsightsTelemetryWorkerService(); });Modifique o seu
Worker.csde acordo com o exemplo a seguir:using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.DataContracts; public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; private TelemetryClient _telemetryClient; private static HttpClient _httpClient = new HttpClient(); public Worker(ILogger<Worker> logger, TelemetryClient tc) { _logger = logger; _telemetryClient = tc; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); using (_telemetryClient.StartOperation<RequestTelemetry>("operation")) { _logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights"); _logger.LogInformation("Calling bing.com"); var res = await _httpClient.GetAsync("https://bing.com"); _logger.LogInformation("Calling bing completed with status:" + res.StatusCode); _telemetryClient.TrackEvent("Bing call event completed"); } await Task.Delay(1000, stoppingToken); } } }Defina a cadeia de conexão.
Observação
Recomendamos que você especifique a cadeia de conexão na configuração. O exemplo de código a seguir mostra como especificar uma cadeia de conexão no
appsettings.json. Certifique-se de queappsettings.jsoné copiado para a pasta raiz do aplicativo durante a publicação.{ "ApplicationInsights": { "ConnectionString" : "<YOUR-CONNECTION-STRING>" }, "Logging": { "LogLevel": { "Default": "Warning" } } }
Como alternativa, especifique a cadeia de conexão na APPLICATIONINSIGHTS_CONNECTION_STRING variável de ambiente.
Normalmente, APPLICATIONINSIGHTS_CONNECTION_STRING especifica a cadeia de conexão para aplicações implantadas em aplicações Web como tarefas Web.
Observação
Uma cadeia de conexão especificada no código tem precedência sobre a variável APPLICATIONINSIGHTS_CONNECTION_STRINGde ambiente , que tem precedência sobre outras opções.
ASP.NET Principais tarefas em segundo plano com serviços hospedados
Este documento descreve como criar tarefas em segundo plano em um aplicativo ASP.NET Core.
O exemplo completo é compartilhado nesta página do GitHub.
Instale o pacote Microsoft.ApplicationInsights.WorkerService no aplicativo.
Adicione
services.AddApplicationInsightsTelemetryWorkerService();aoConfigureServices()método, como neste exemplo:public static async Task Main(string[] args) { var host = new HostBuilder() .ConfigureAppConfiguration((hostContext, config) => { config.AddJsonFile("appsettings.json", optional: true); }) .ConfigureServices((hostContext, services) => { services.AddLogging(); services.AddHostedService<TimedHostedService>(); // connection string is read automatically from appsettings.json services.AddApplicationInsightsTelemetryWorkerService(); }) .UseConsoleLifetime() .Build(); using (host) { // Start the host await host.StartAsync(); // Wait for the host to shutdown await host.WaitForShutdownAsync(); } }O código a seguir é para
TimedHostedService, onde reside a lógica da tarefa em segundo plano:using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.DataContracts; public class TimedHostedService : IHostedService, IDisposable { private readonly ILogger _logger; private Timer _timer; private TelemetryClient _telemetryClient; private static HttpClient httpClient = new HttpClient(); public TimedHostedService(ILogger<TimedHostedService> logger, TelemetryClient tc) { _logger = logger; this._telemetryClient = tc; } public Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation("Timed Background Service is starting."); _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(1)); return Task.CompletedTask; } private void DoWork(object state) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); using (_telemetryClient.StartOperation<RequestTelemetry>("operation")) { _logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights"); _logger.LogInformation("Calling bing.com"); var res = httpClient.GetAsync("https://bing.com").GetAwaiter().GetResult(); _logger.LogInformation("Calling bing completed with status:" + res.StatusCode); _telemetryClient.TrackEvent("Bing call event completed"); } } }Defina a cadeia de conexão. Use o mesmo
appsettings.jsondo exemplo anterior do .NET Worker Service.
Aplicativo de console do .NET Core/.NET Framework
Como mencionado no início deste artigo, o novo pacote pode ser usado para habilitar a telemetria do Application Insights até mesmo de um aplicativo de console comum. Este pacote destina-se netstandard2.0, para que possa ser usado em aplicativos de console no .NET Core ou superior e .NET Framework ou superior.
O exemplo completo é compartilhado nesta página do GitHub.
Instale o pacote Microsoft.ApplicationInsights.WorkerService no aplicativo.
Modifique Program.cs conforme mostrado no exemplo a seguir:
using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.WorkerService; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; using System.Net.Http; using System.Threading.Tasks; namespace WorkerSDKOnConsole { class Program { static async Task Main(string[] args) { // Create the DI container. IServiceCollection services = new ServiceCollection(); // Being a regular console app, there is no appsettings.json or configuration providers enabled by default. // Hence connection string and any changes to default logging level must be specified here. services.AddLogging(loggingBuilder => loggingBuilder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>("Category", LogLevel.Information)); services.AddApplicationInsightsTelemetryWorkerService((ApplicationInsightsServiceOptions options) => options.ConnectionString = "<YOUR-CONNECTION-STRING>"); // To pass a connection string // - aiserviceoptions must be created // - set connectionstring on it // - pass it to AddApplicationInsightsTelemetryWorkerService() // Build ServiceProvider. IServiceProvider serviceProvider = services.BuildServiceProvider(); // Obtain logger instance from DI. ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>(); // Obtain TelemetryClient instance from DI, for additional manual tracking or to flush. var telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>(); var httpClient = new HttpClient(); while (true) // This app runs indefinitely. Replace with actual application termination logic. { logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); // Replace with a name which makes sense for this operation. using (telemetryClient.StartOperation<RequestTelemetry>("operation")) { logger.LogWarning("A sample warning message. By default, logs with severity Warning or higher is captured by Application Insights"); logger.LogInformation("Calling bing.com"); var res = await httpClient.GetAsync("https://bing.com"); logger.LogInformation("Calling bing completed with status:" + res.StatusCode); telemetryClient.TrackEvent("Bing call event completed"); } await Task.Delay(1000); } // Explicitly call Flush() followed by sleep is required in console apps. // This is to ensure that even if application terminates, telemetry is sent to the back-end. telemetryClient.Flush(); Task.Delay(5000).Wait(); } } }
Este aplicativo de console também usa o mesmo padrão TelemetryConfiguration. Ele pode ser personalizado da mesma forma que os exemplos nas seções anteriores.
Verificar se o Application Insights recebe telemetria
ASP.NET & ASP.NET Núcleo
Execute seu aplicativo e faça solicitações para ele. A telemetria agora deve fluir para o Application Insights. O SDK do Application Insights coleta automaticamente as solicitações da Web de entrada para seu aplicativo, juntamente com a telemetria a seguir.
Serviço ao Trabalhador
Execute seu aplicativo. Os trabalhadores de todos os exemplos anteriores fazem uma chamada HTTP a cada segundo para bing.com e também emitem poucos logs usando ILogger. Essas linhas são encapsuladas dentro da StartOperation invocação de TelemetryClient, que é usada para criar uma operação. Neste exemplo, RequestTelemetry é chamado de "operação".
O Application Insights coleta esses logs ILogger, com uma severidade de Aviso ou superior por padrão, e dependências. Eles estão correlacionados RequestTelemetry com uma relação entre pais e filhos. A correlação também funciona através dos limites do processo/rede. Por exemplo, se a chamada foi feita para outro componente monitorado, ela também está correlacionada a esse pai.
Esta operação personalizada de RequestTelemetry pode ser vista como equivalente a um pedido web de entrada num aplicativo web típico. Não é necessário usar uma operação, mas ela se encaixa melhor com o modelo de dados de correlação do Application Insights.
RequestTelemetry atua como a operação pai e cada telemetria gerada dentro da iteração do trabalhador é tratada como logicamente pertencente à mesma operação.
Essa abordagem também garante que a telemetria gerada, tanto automática quanto manual, tenha o mesmo operation_id. Como a amostragem é baseada no operation_id, o algoritmo de amostragem mantém ou descarta toda a telemetria de uma única iteração.
Coleta de dados de telemetria
Nesta secção
- Métricas em tempo real
- Vestígios (logs)
- Rastreio distribuído
- Dependências
- Exceções
- Métricas personalizadas
- Operações personalizadas
- Contadores
- Coleção de instantâneos
Métricas em tempo real
As métricas em tempo real podem ser usadas para verificar rapidamente se o monitoramento de aplicativos com o Application Insights está configurado corretamente. A telemetria pode levar alguns minutos para aparecer no portal do Azure, mas o painel de métricas ao vivo mostra o uso da CPU do processo em execução quase em tempo real. Ele também pode mostrar outras telemetrias, como solicitações, dependências e rastreamentos.
Observação
As métricas em tempo real são habilitadas por padrão quando você as integra usando as instruções recomendadas para aplicativos .NET.
Habilite métricas ao vivo usando código para qualquer aplicativo .NET
ASP.NET
Para configurar manualmente as métricas em tempo real:
Instale o pacote NuGet Microsoft.ApplicationInsights.PerfCounterCollector.
O código de aplicativo de console de exemplo a seguir mostra a configuração de métricas ao vivo:
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;
using System;
using System.Threading.Tasks;
namespace LiveMetricsDemo
{
class Program
{
static void Main(string[] args)
{
// Create a TelemetryConfiguration instance.
TelemetryConfiguration config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "<YOUR-CONNECTION-STRING>";
QuickPulseTelemetryProcessor quickPulseProcessor = null;
config.DefaultTelemetrySink.TelemetryProcessorChainBuilder
.Use((next) =>
{
quickPulseProcessor = new QuickPulseTelemetryProcessor(next);
return quickPulseProcessor;
})
.Build();
var quickPulseModule = new QuickPulseTelemetryModule();
// Secure the control channel.
// This is optional, but recommended.
quickPulseModule.AuthenticationApiKey = "<YOUR-API-KEY>";
quickPulseModule.Initialize(config);
quickPulseModule.RegisterTelemetryProcessor(quickPulseProcessor);
// Create a TelemetryClient instance. It is important
// to use the same TelemetryConfiguration here as the one
// used to set up live metrics.
TelemetryClient client = new TelemetryClient(config);
// This sample runs indefinitely. Replace with actual application logic.
while (true)
{
// Send dependency and request telemetry.
// These will be shown in live metrics.
// CPU/Memory Performance counter is also shown
// automatically without any additional steps.
client.TrackDependency("My dependency", "target", "http://sample",
DateTimeOffset.Now, TimeSpan.FromMilliseconds(300), true);
client.TrackRequest("My Request", DateTimeOffset.Now,
TimeSpan.FromMilliseconds(230), "200", true);
Task.Delay(1000).Wait();
}
}
}
}
ASP.NET Core
Para configurar manualmente as métricas em tempo real:
Instale o pacote NuGet Microsoft.ApplicationInsights.PerfCounterCollector.
O código de aplicativo de console de exemplo a seguir mostra a configuração de métricas ao vivo:
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;
// Create a TelemetryConfiguration instance.
TelemetryConfiguration config = TelemetryConfiguration.CreateDefault();
config.ConnectionString = "<YOUR-CONNECTION-STRING>";
QuickPulseTelemetryProcessor quickPulseProcessor = null;
config.DefaultTelemetrySink.TelemetryProcessorChainBuilder
.Use((next) =>
{
quickPulseProcessor = new QuickPulseTelemetryProcessor(next);
return quickPulseProcessor;
})
.Build();
var quickPulseModule = new QuickPulseTelemetryModule();
// Secure the control channel.
// This is optional, but recommended.
quickPulseModule.AuthenticationApiKey = "<YOUR-API-KEY>";
quickPulseModule.Initialize(config);
quickPulseModule.RegisterTelemetryProcessor(quickPulseProcessor);
// Create a TelemetryClient instance. It is important
// to use the same TelemetryConfiguration here as the one
// used to set up live metrics.
TelemetryClient client = new TelemetryClient(config);
// This sample runs indefinitely. Replace with actual application logic.
while (true)
{
// Send dependency and request telemetry.
// These will be shown in live metrics.
// CPU/Memory Performance counter is also shown
// automatically without any additional steps.
client.TrackDependency("My dependency", "target", "http://sample",
DateTimeOffset.Now, TimeSpan.FromMilliseconds(300), true);
client.TrackRequest("My Request", DateTimeOffset.Now,
TimeSpan.FromMilliseconds(230), "200", true);
Task.Delay(1000).Wait();
}
O exemplo anterior é para um aplicativo de console, mas o mesmo código pode ser usado em qualquer aplicativo .NET.
Importante
Se quaisquer outros módulos de telemetria estiverem habilitados para coletar telemetria automaticamente, certifique-se de que a mesma configuração usada para inicializar esses módulos seja usada para o módulo de métricas em tempo real.
Observação
A configuração padrão coleta ILoggerWarning logs e logs mais severos. Para obter mais informações, consulte Como personalizar a coleção de logs do ILogger?.
Serviço ao Trabalhador
Os logs emitidos via ILogger com a gravidade de Aviso ou superior são capturados automaticamente. Para alterar este comportamento, substitua explicitamente a configuração de registo para o fornecedor ApplicationInsights, conforme mostrado no código seguinte. A configuração a seguir permite que o Application Insights capture todos os Information logs e logs mais severos.
{
"Logging": {
"LogLevel": {
"Default": "Warning"
},
"ApplicationInsights": {
"LogLevel": {
"Default": "Information"
}
}
}
}
É importante observar que o exemplo a seguir não faz com que o provedor do Application Insights capture Information logs. Não o captura porque o SDK adiciona um filtro de log padrão que instrui ApplicationInsights a capturar apenas logs Warning e logs mais severos. O Application Insights requer uma substituição explícita.
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
}
}
Observação
O Application Insights respeita os níveis de log configurados via ConfigureLogging(...) no código. Se apenas appsettings.json for usado e ConfigureLogging não for substituído explicitamente, o nível de log padrão será Warning.
Para obter mais informações, siga os documentos do ILogger para personalizar quais níveis de log são capturados pelo Application Insights.
Vestígios (logs)
Esta seção explica como enviar logs de rastreamento de diagnóstico de aplicativos ASP.NET ou ASP.NET Core para o Application Insights e, em seguida, explorar/pesquisar esses logs no portal.
Você pode usar logs de rastreamento para identificar rastreamentos associados a cada solicitação de usuário e correlacioná-los com outros eventos e relatórios de exceções.
Application Insights captura logs de ASP.NET Core e de outros aplicativos .NET utilizando o ILogger, e de ASP.NET clássico (.NET Framework) através do SDK e adaptadores clássicos.
Observação
Por padrão, o provedor do Application Insights só envia logs com severidade igual
Warningou superior. Para incluirInformationou logs de nível inferior, atualize as configurações de nível de log emappsettings.json.O
Microsoft.ApplicationInsights.WorkerServicepacote NuGet, usado para habilitar o Application Insights para serviços em segundo plano, está fora do escopo.Para rever as perguntas mais frequentes (FAQ), consulte Logging with .NET FAQ.
Instalar o registo na sua aplicação
ASP.NET
Escolha uma abordagem de registo de logs para emitir logs de diagnóstico que o Application Insights possa coletar.
Para aplicativos ASP.NET clássicos que usam o rastreamento System.Diagnostics , configure um Application Insights TraceListener na configuração.
Adicionar um ouvinte a web.config ou app.config:
<configuration>
<system.diagnostics>
<trace>
<listeners>
<add name="myAppInsightsListener"
type="Microsoft.ApplicationInsights.TraceListener.ApplicationInsightsTraceListener, Microsoft.ApplicationInsights.TraceListener" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Observação
O módulo de captura de log é um adaptador útil para registradores de terceiros. No entanto, se você ainda não estiver usando NLog, log4Net ou System.Diagnostics.Trace, considere chamar o Application Insights TrackTrace() diretamente.
Configurar o Application Insights para recolher logs
Opção 1: Adicione o Application Insights ao seu projeto, caso ainda não o tenha feito. Ao adicionar o Application Insights no Visual Studio, há uma opção para incluir o coletor de log.
Opção 2: Clique com o botão direito do mouse em seu projeto no Gerenciador de Soluções para Configurar o Application Insights. Selecione a opção Configurar coleta de rastreamento .
Observação
Se você estiver perdendo o menu do Application Insights ou a opção de coletor de log, consulte o artigo dedicado à solução de problemas.
ASP.NET Core
O SDK do Application Insights para ASP.NET Core já coleta logs do ILogger por padrão. Se você usar o SDK, normalmente não precisará também chamar builder.Logging.AddApplicationInsights() e pode ignorar as seguintes instruções de instalação do ILogger.
Se precisar apenas do reencaminhamento de logs e não da pilha completa de telemetria, poderá usar o pacote do fornecedor Microsoft.Extensions.Logging.ApplicationInsights para capturar logs.
Instalação manual
Use esse método se o tipo de projeto não for suportado pelo instalador do Application Insights (por exemplo, alguns cenários de desktop/console) ou se preferir o controle explícito no nível do pacote.
No Gerenciador de Soluções, clique com o botão direito do mouse em seu projeto e selecione Gerenciar Pacotes NuGet.
Pesquise por Application Insights.
Selecione um dos seguintes pacotes:
-
ILogger: Microsoft.Extensions.Logging.ApplicationInsights
-
System.Diagnostics: Microsoft.ApplicationInsights.TraceListener
-
log4net: Microsoft.ApplicationInsights.Log4NetAppender
-
NLog: Microsoft.ApplicationInsights.NLogTarget
-
Microsoft.ApplicationInsights.EventSourceListener
-
Microsoft.ApplicationInsights.DiagnosticSourceListener
-
Banner Microsoft.ApplicationInsights.EtwCollector
-
ILogger: Microsoft.Extensions.Logging.ApplicationInsights
O pacote NuGet instala os assemblies necessários e modifica o web.config ou app.config, se aplicável.
Instruções de instalação:
Observação
Expanda qualquer uma das seções abaixo para obter instruções de instalação específicas do pacote.
ILogger
Adicionar
ApplicationInsightsLoggerProvider:
using Microsoft.Extensions.Logging.ApplicationInsights;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Logging.AddApplicationInsights(
configureTelemetryConfiguration: (config) =>
config.ConnectionString = builder.Configuration.GetConnectionString("APPLICATIONINSIGHTS_CONNECTION_STRING"),
configureApplicationInsightsLoggerOptions: (options) => { }
);
builder.Logging.AddFilter<ApplicationInsightsLoggerProvider>("your-category", LogLevel.Trace);
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Com o pacote NuGet instalado e o provedor sendo registrado com injeção de dependência, o aplicativo está pronto para registrar. Com a injeção do construtor, é necessária ou ILogger ou a alternativa genérica do tipo ILogger<TCategoryName>. Quando essas implementações são resolvidas, ApplicationInsightsLoggerProvider fornece-as. Mensagens registradas ou exceções são enviadas para o Application Insights.
Considere o seguinte exemplo de controlador:
public class ValuesController : ControllerBase
{
private readonly ILogger _logger;
public ValuesController(ILogger<ValuesController> logger)
{
_logger = logger;
}
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
_logger.LogWarning("An example of a Warning trace..");
_logger.LogError("An example of an Error level message");
return new string[] { "value1", "value2" };
}
}
Para obter mais informações, consulte Fazendo login no ASP.NET Core e Qual tipo de telemetria do Application Insights é produzido a partir de logs ILogger? Onde posso ver os logs do ILogger no Application Insights?.
Inserir chamadas de log de diagnóstico (System.Diagnostics.Trace / log4net / NLog)
Se tu usares System.Diagnostics.Trace, uma chamada típica seria:
System.Diagnostics.Trace.TraceWarning("Slow response - database01");
Se preferir log4net ou NLog, utilize:
logger.Warn("Slow response - database01");
Usar eventos EventSource
Você pode configurar eventos System.Diagnostics.Tracing.EventSource para serem enviados ao Application Insights como rastreamentos.
Instale o pacote NuGet
Microsoft.ApplicationInsights.EventSourceListener.Edite a
TelemetryModulesseção do arquivo ApplicationInsights.config :<Add Type="Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule, Microsoft.ApplicationInsights.EventSourceListener"> <Sources> <Add Name="MyCompany" Level="Verbose" /> </Sources> </Add>
Para cada fonte, você pode definir os seguintes parâmetros:
- Name especifica o nome do EventSource a ser coletado.
- Level especifica o nível de log a ser recolhido: Crítico, Erro, Informacional, LogAlways, Detalhado ou Aviso.
- Palavras-chave (opcional) especificam o valor inteiro das combinações de palavras-chave a serem usadas.
Usar eventos DiagnosticSource
Você pode configurar eventos System.Diagnostics.DiagnosticSource para serem enviados ao Application Insights como rastreamentos.
Instale o pacote NuGet
Microsoft.ApplicationInsights.DiagnosticSourceListener.Edite a
TelemetryModulesseção do arquivo ApplicationInsights.config :<Add Type="Microsoft.ApplicationInsights.DiagnosticSourceListener.DiagnosticSourceTelemetryModule, Microsoft.ApplicationInsights.DiagnosticSourceListener"> <Sources> <Add Name="MyDiagnosticSourceName" /> </Sources> </Add>
Para cada fonte de diagnóstico que você deseja rastrear, adicione uma entrada com o Name atributo definido para o nome da sua fonte de diagnóstico.
Utilizar eventos ETW
Você pode configurar eventos de Rastreamento de Eventos para Windows (ETW) a serem enviados ao Application Insights como rastreamentos.
Instale o pacote NuGet
Microsoft.ApplicationInsights.EtwCollector.Edite a seção "TelemetryModules" do arquivo ApplicationInsights.config :
Observação
Os eventos ETW só podem ser coletados se o processo que hospeda o SDK for executado sob uma identidade que seja membro de "Performance Log Users" ou "Administradores".
<Add Type="Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModule, Microsoft.ApplicationInsights.EtwCollector">
<Sources>
<Add ProviderName="MyCompanyEventSourceName" Level="Verbose" />
</Sources>
</Add>
Para cada fonte, você pode definir os seguintes parâmetros:
- ProviderName é o nome do provedor ETW a ser coletado.
-
ProviderGuid especifica o GUID do provedor ETW que deve ser coletado. Pode ser usado em vez de
ProviderName. - Level define o nível de log a ser coletado. Pode ser Crítico, Erro, Informativo, LogAlways, Verbose ou Aviso.
- Palavras-chave (opcional) definem o valor inteiro das combinações de palavras-chave a serem usadas.
Use a API de rastreamento diretamente
Você pode chamar a API de rastreamento do Application Insights diretamente. Os adaptadores de log usam essa API. Por exemplo:
TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Slow response - database01");
Uma vantagem de TrackTrace é que se podem colocar dados relativamente longos na mensagem. Por exemplo, você pode codificar dados POST lá.
Você também pode adicionar um nível de gravidade à sua mensagem. E, como outra telemetria, podes adicionar valores de propriedade para ajudar a filtrar ou procurar diferentes conjuntos de rastos. Por exemplo:
TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Slow database response",
SeverityLevel.Warning,
new Dictionary<string, string> { { "database", "db.ID" } });
Agora pode facilmente filtrar em Pesquisa todas as mensagens de um determinado nível de gravidade que estejam relacionadas com uma base de dados específica.
Aplicação de consola
Para adicionar o log do Application Insights aos aplicativos de console, primeiro instale os seguintes pacotes NuGet:
O exemplo a seguir usa o Microsoft.Extensions.Logging.ApplicationInsights pacote e demonstra o comportamento padrão para um aplicativo de console. O Microsoft.Extensions.Logging.ApplicationInsights pacote deve ser usado em um aplicativo de console ou sempre que você quiser uma implementação mínima do Application Insights sem o conjunto completo de recursos, como métricas, rastreamento distribuído, amostragem e inicializadores de telemetria.
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using var channel = new InMemoryChannel();
try
{
IServiceCollection services = new ServiceCollection();
services.Configure<TelemetryConfiguration>(config => config.TelemetryChannel = channel);
services.AddLogging(builder =>
{
// Only Application Insights is registered as a logger provider
builder.AddApplicationInsights(
configureTelemetryConfiguration: (config) => config.ConnectionString = "<YourConnectionString>",
configureApplicationInsightsLoggerOptions: (options) => { }
);
});
IServiceProvider serviceProvider = services.BuildServiceProvider();
ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Logger is working...");
}
finally
{
// Explicitly call Flush() followed by Delay, as required in console apps.
// This ensures that even if the application terminates, telemetry is sent to the back end.
channel.Flush();
await Task.Delay(TimeSpan.FromMilliseconds(1000));
}
Para obter mais informações, consulte Qual tipo de telemetria do Application Insights é produzido a partir de logs ILogger? Onde posso ver os logs do ILogger no Application Insights?.
Escopos de registro em log
Observação
As diretrizes a seguir se aplicam a cenários ILogger (somente ASP.NET Core e console). Não se aplica aos ASP.NET clássicos.
ApplicationInsightsLoggingProvider Suporta escopos de log, que são habilitados por padrão.
Se o escopo for do tipo IReadOnlyCollection<KeyValuePair<string,object>>, cada par chave/valor na coleção será adicionado à telemetria do Application Insights como propriedades personalizadas. No exemplo a seguir, os logs são capturados como TraceTelemetry e têm ("MyKey", "MyValue") em propriedades.
using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
_logger.LogError("An example of an Error level message");
}
Se qualquer outro tipo for usado como escopo, ele será armazenado sob a propriedade Scope na telemetria do Application Insights. No exemplo a seguir, TraceTelemetry tem uma propriedade chamada Scope que contém o escopo.
using (_logger.BeginScope("hello scope"))
{
_logger.LogError("An example of an Error level message");
}
Encontre os seus registos
Execute seu aplicativo no modo de depuração ou implante-o ao vivo.
Explorar na Pesquisa
No painel de visão geral da sua aplicação no portal Application Insights, selecione Pesquisar onde pode:
- Filtre em rastreamentos de log ou em itens com propriedades específicas.
- Inspecione um item específico em detalhes.
- Encontre outros dados de log do sistema relacionados à mesma solicitação do usuário (tem o mesmo ID de operação).
- Salve a configuração de uma página como favorita.
Observação
Se seu aplicativo enviar grandes quantidades de dados e você estiver usando o SDK do Application Insights para ASP.NET versão 2.0.0-beta3 ou posterior, o recurso de amostragem adaptável poderá operar e enviar apenas uma parte de sua telemetria. Saiba mais sobre amostragem.
Explorar nos logs do Azure Monitor
Os logs do ILogger aparecem como telemetria de rastreamento (tabela traces no Application Insights e AppTraces no Log Analytics).
Exemplo
No portal do Azure, vá para Application Insights e execute:
traces
| where severityLevel >= 2 // 2=Warning, 1=Information, 0=Verbose
| take 50
Rastreio distribuído
As arquiteturas modernas de nuvem e microsserviços permitiram serviços simples e implantáveis de forma independente que reduzem custos e, ao mesmo tempo, aumentam a disponibilidade e a taxa de transferência. No entanto, torna mais difícil compreender e depurar os sistemas em geral. O rastreamento distribuído resolve este problema fornecendo um perfil de desempenho que funciona como pilhas de chamadas funcionais para arquiteturas de nuvem e microsserviços.
O Azure Monitor fornece duas experiências para consumir dados de rastreamento distribuídos: a exibição de diagnóstico de transação para uma única transação/solicitação e a exibição de mapa do aplicativo para mostrar como os sistemas interagem.
O Application Insights pode monitorar cada componente separadamente e detetar qual componente é responsável por falhas ou degradação do desempenho usando a correlação de telemetria distribuída. Este artigo explica o modelo de dados, técnicas de propagação de contexto, protocolos e implementação de táticas de correlação em diferentes linguagens e plataformas usadas pelo Application Insights.
Ative o rastreamento distribuído através do Application Insights por meio de autoinstrumentação ou SDKs.
Os agentes e SDKs do Application Insights para .NET, .NET Core, Java, Node.jse JavaScript suportam rastreamento distribuído nativamente.
Com o SDK adequado do Application Insights instalado e configurado, as informações de rastreamento são coletadas automaticamente para estruturas, bibliotecas e tecnologias populares pelos autocolectores de dependências do SDK. A lista completa de tecnologias suportadas está disponível na documentação de coleta automática de dependência.
Qualquer tecnologia também pode ser rastreada manualmente com uma chamada para TrackDependency no TelemetryClient.
Modelo de dados para correlação de telemetria
O Application Insights define um modelo de dados para correlação de telemetria distribuída. Para associar a telemetria a uma operação lógica, cada item de telemetria tem um campo de contexto chamado operation_Id. Cada item de telemetria no rastreamento distribuído compartilha esse identificador. Portanto, mesmo que você perca a telemetria de uma única camada, ainda poderá associar a telemetria relatada por outros componentes.
Uma operação lógica distribuída normalmente consiste em um conjunto de operações menores que são solicitações processadas por um dos componentes.
A telemetria de solicitação define essas operações. Cada item de telemetria de solicitação tem seu próprio id que o identifica de forma única e global. E todos os itens de telemetria (como rastreamentos e exceções) associados à solicitação devem definir o valor de operation_parentId para o valor de id da solicitação.
A telemetria de dependência representa cada operação de saída, como uma chamada HTTP para outro componente. Ele também define o seu próprio id que é globalmente único. A telemetria de solicitação, iniciada por esta chamada de dependência, usa este id como seu operation_parentId.
Você pode criar uma exibição da operação lógica distribuída usando operation_Id, operation_parentIde request.id com dependency.id. Esses campos também definem a ordem de causalidade das chamadas de telemetria.
Em um ambiente de microsserviços, os rastreamentos de componentes podem ir para diferentes itens de armazenamento. Cada componente pode ter sua própria cadeia de conexão no Application Insights. Para obter telemetria para a operação lógica, o Application Insights consulta dados de cada item de armazenamento.
Quando o número de itens de armazenamento é grande, você precisa de uma dica sobre onde procurar em seguida. O modelo de dados do Application Insights define dois campos para resolver esse problema: request.source e dependency.target. O primeiro campo identifica o componente que iniciou a solicitação de dependência. O segundo campo identifica qual componente retornou a resposta da chamada de dependência.
Para obter informações sobre como consultar várias instâncias diferentes, consulte Consultar dados em espaços de trabalho, aplicativos e recursos do Log Analytics no Azure Monitor.
Example
Vejamos um exemplo. Um aplicativo chamado Stock Prices mostra o preço de mercado atual de uma ação usando uma API externa chamada Stock. O aplicativo Preços de Ações tem uma página chamada Página de Estoque que o navegador da Web do cliente abre usando GET /Home/Stock. O aplicativo consulta a API de estoque usando a chamada GET /api/stock/valueHTTP .
Você pode analisar a telemetria resultante executando uma consulta:
(requests | union dependencies | union pageViews)
| where operation_Id == "STYz"
| project timestamp, itemType, name, id, operation_ParentId, operation_Id
Nos resultados, todos os itens de telemetria compartilham a raiz operation_Id. Quando uma chamada Ajax é feita a partir da página, um novo ID exclusivo (qJSXU) é atribuído à telemetria de dependência e o ID do pageView é usado como operation_ParentId. Em seguida, a solicitação do servidor usa o ID do Ajax como operation_ParentId.
| Tipo de item | nome | ID | operation_ParentId | Identificador_de_operacao |
|---|---|---|---|---|
| visualização de página | Página de stock | STYz |
STYz |
|
| dependência | GET /Home/Stock | qJSXU |
STYz |
STYz |
| pedido | GET Casa/Inventário | KqKwlrSt9PA= |
qJSXU |
STYz |
| dependência | GET /api/stock/valor | bBrf2L7mm2g= |
KqKwlrSt9PA= |
STYz |
Quando a chamada GET /api/stock/value é feita para um serviço externo, você precisa saber a identidade desse servidor para poder definir o dependency.target campo adequadamente. Quando o serviço externo não oferece suporte ao monitoramento, target é definido como o nome do host do serviço. Um exemplo é stock-prices-api.com. Mas se o serviço se identificar retornando um cabeçalho HTTP predefinido, target conterá a identidade do serviço que permite que o Application Insights crie um rastreamento distribuído consultando a telemetria desse serviço.
Cabeçalhos de correlação usando W3C TraceContext
O Application Insights está em transição para o W3C Trace-Context, que define:
-
traceparent: Carrega o ID de operação globalmente exclusivo e o identificador exclusivo da chamada. -
tracestate: Carrega o contexto de rastreio específico do sistema.
A versão mais recente do SDK do Application Insights suporta o protocolo Trace-Context, mas talvez seja necessário optar por ele. (A manutenção da compatibilidade retroativa com o protocolo de correlação anterior suportado pelo SDK do Application Insights é assegurada.)
O protocolo HTTP de correlação, também chamado de Request-Id, está sendo preterido. Este protocolo define dois cabeçalhos:
-
Request-Id: Carrega o ID globalmente exclusivo da chamada. -
Correlation-Context: Carrega a coleção de pares nome-valor das propriedades de rastreamento distribuído.
O Application Insights também define a extensão para o protocolo HTTP de correlação. Ele usa Request-Context pares nome-valor para propagar a coleção de propriedades usadas pelo chamador ou destinatário imediato. O SDK do Application Insights usa esse cabeçalho para definir os dependency.target campos e request.source .
Os modelos de dados do W3C Trace-Context e Application Insights são mapeados da seguinte maneira:
| Application Insights | W3C TraceContext |
|---|---|
Id de Request e Dependency |
ID do pai |
Operation_Id |
ID de trace |
Operation_ParentId |
parent-id do span pai deste span. Este campo deve estar vazio se for uma extensão de raiz. |
Para obter mais informações, consulte Modelo de dados de telemetria do Application Insights.
Habilite o suporte ao rastreamento distribuído do W3C
O rastreamento distribuído baseado em TraceContext do W3C é habilitado por padrão em todos os SDKs recentes do .NET Framework/.NET Core, juntamente com a compatibilidade com versões anteriores do protocolo herdado Request-Id .
Correlação de telemetria
A correlação é tratada por padrão ao integrar um aplicativo. Não são necessárias ações especiais.
O runtime do .NET oferece capacidades para operações distribuídas com a ajuda de Activity e DiagnosticSource
O SDK do .NET do Application Insights usa DiagnosticSource e Activity para coletar e correlacionar telemetria.
Dependências
Dependências rastreadas automaticamente
Os SDKs do Application Insights para .NET e .NET Core são fornecidos com DependencyTrackingTelemetryModuleo , que é um módulo de telemetria que coleta automaticamente dependências. O módulo DependencyTrackingTelemetryModule é fornecido como o pacote NuGet Microsoft.ApplicationInsights.DependencyCollector e trazido automaticamente quando você usa o Microsoft.ApplicationInsights.Web pacote NuGet ou o Microsoft.ApplicationInsights.AspNetCore pacote NuGet.
Atualmente, DependencyTrackingTelemetryModule rastreia as seguintes dependências automaticamente:
| Dependências | Detalhes |
|---|---|
| HTTP/HTTPS | Chamadas HTTP/HTTPS locais ou remotas. |
| Chamadas WCF | Somente rastreado automaticamente se forem usadas ligações baseadas em HTTP. |
| SQL | Chamadas feitas com SqlClient. Consulte a seção Acompanhamento SQL avançado para obter consulta SQL completa para capturar consultas SQL. |
| Armazenamento de Blobs do Azure, Armazenamento de Tabelas ou Armazenamento de Filas | Chamadas feitas com o cliente de Armazenamento do Azure. |
| SDK do cliente dos Hubs de Eventos do Azure | Use o pacote mais recente: https://nuget.org/packages/Azure.Messaging.EventHubs. |
| SDK do cliente do Azure Service Bus | Use o pacote mais recente: https://nuget.org/packages/Azure.Messaging.ServiceBus. |
| Azure Cosmos DB | Rastreado automaticamente se HTTP/HTTPS for usado. O rastreamento de operações em modo direto com TCP é capturado automaticamente usando o pacote >de visualização = 3.33.0-preview. Para obter mais detalhes, visite a documentação. |
Se a dependência não for recolhida automaticamente, pode rastreá-la manualmente com uma chamada de monitorização de dependência.
Para obter mais informações sobre como funciona o controle de dependência, consulte Controle de dependência no Application Insights.
Configurar o controlo automático de dependências em aplicações de consola
Para controlar automaticamente as dependências dos aplicativos de console .NET, instale o pacote Microsoft.ApplicationInsights.DependencyCollector NuGet e inicialize DependencyTrackingTelemetryModule:
DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
depModule.Initialize(TelemetryConfiguration.Active);
Observação
Para aplicativos de console .NET Core, TelemetryConfiguration.Active está obsoleto.
Rastreando dependências manualmente
Os seguintes exemplos de dependências, que não são coletadas automaticamente, exigem rastreamento manual:
- O Azure Cosmos DB é automaticamente rastreado apenas quando se utiliza HTTP/HTTPS. O modo TCP não é capturado automaticamente pelo Application Insights para versões do SDK anteriores ao
2.22.0-Beta1. - Redis
Para essas dependências não coletadas automaticamente pelo SDK, você pode rastreá-las manualmente usando a API TrackDependency usada pelos módulos de coleta automática padrão.
Exemplo
Se você criar seu código com um assembly que você mesmo não escreveu, você pode cronometrar todas as chamadas para ele. Este cenário permitir-lhe-ia descobrir qual a sua contribuição para os seus tempos de resposta.
Para que esses dados sejam exibidos nos gráficos de dependência no Application Insights, envie-os usando TrackDependency:
var startTime = DateTime.UtcNow;
var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
// making dependency call
success = dependency.Call();
}
finally
{
timer.Stop();
telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData", startTime, timer.Elapsed, success);
}
Como alternativa, TelemetryClient fornece os métodos de extensão StartOperation e StopOperation, que podem ser usados para controlar manualmente as dependências conforme mostrado em Rastreamento de dependências de saída.
Desativando o módulo de controle de dependência padrão
Para obter mais informações, consulte Módulos de telemetria.
Acompanhamento SQL avançado para obter consulta SQL completa
Para chamadas SQL, o nome do servidor e do banco de dados é sempre coletado e armazenado como o nome do arquivo DependencyTelemetry. Outro campo, chamado dados, pode conter o texto completo da consulta SQL.
Observação
O Azure Functions requer configurações separadas para habilitar a coleção de texto SQL. Para obter mais informações, consulte Habilitar a coleta de consultas SQL.
ASP.NET
Para aplicações ASP.NET, o texto completo da consulta SQL é coletado através da instrumentação de código byte, que requer o uso do motor de instrumentação ou do pacote NuGet Microsoft.Data.SqlClient, em vez da biblioteca System.Data.SqlClient. As etapas específicas da plataforma para habilitar a coleção completa de Consultas SQL são descritas na tabela a seguir.
| Platform | Etapas necessárias para obter uma consulta SQL completa |
|---|---|
| Aplicativos Web no Serviço de Aplicativo do Azure | No painel de controle do aplicativo Web, abra o painel Application Insights e habilite os Comandos SQL em .NET. |
| Servidor IIS (Máquinas Virtuais do Azure, no local e assim por diante) | Pode usar o pacote NuGet Microsoft.Data.SqlClient ou o módulo PowerShell do Agente de Informações de Aplicações para instalar o motor de instrumentação e reiniciar o IIS. |
| Serviços Cloud do Azure | Adicione uma tarefa de inicialização para instalar o StatusMonitor. Seu aplicativo deve ser integrado ao SDK do ApplicationInsights no momento da compilação, instalando pacotes NuGet para aplicativos ASP.NET ou ASP.NET Core. |
| IIS Express | Use o pacote NuGet Microsoft.Data.SqlClient. |
| WebJobs no Serviço de Aplicativo do Azure | Use o pacote NuGet Microsoft.Data.SqlClient. |
Além das etapas específicas da plataforma anteriores, você também deve optar explicitamente por habilitar a coleta de comandos SQL modificando o ApplicationInsights.config arquivo com o seguinte código:
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
<EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
</Add>
ASP.NET Core
Para aplicativos ASP.NET Core, é necessário optar pela coleção SQL Text usando:
services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });
Nos casos anteriores, a maneira correta de validar que o mecanismo de instrumentação está instalado corretamente é validando que a versão SDK do coletado DependencyTelemetry é rddp. O uso de ou rdddsd indica que as dependências são coletadas por meio rddf de retornos DiagnosticSource de EventSource chamada, portanto, a consulta SQL completa não é capturada.
Exceptions
Exceções em aplicativos Web podem ser relatadas com o Application Insights. Você pode correlacionar solicitações com falha com exceções e outros eventos no cliente e no servidor para que possa diagnosticar rapidamente as causas. Nesta seção, você aprenderá a configurar relatórios de exceções, relatar exceções explicitamente, diagnosticar falhas e muito mais.
Configurar o relatório de exceções
Você pode configurar o Application Insights para relatar exceções que ocorrem no servidor ou no cliente. Dependendo da plataforma da qual seu aplicativo depende, você precisa da extensão ou SDK apropriado.
Server-side
Para que as exceções sejam relatadas do seu aplicativo do lado do servidor, considere os seguintes cenários:
- Adicione a extensão do Application Insights para aplicativos Web do Azure.
- Adicione a Extensão de Monitoramento de Aplicativo para VMs do Azure e a escala da máquina virtual do Azure define aplicativos hospedados no IIS.
- Adicione o SDK do Application Insights ao código do seu aplicativo, execute o Application Insights Agent para servidores Web IIS ou habilite o agente Java para aplicativos Web Java.
Lado do cliente
O JavaScript SDK fornece a capacidade de relatórios do lado do cliente de exceções que ocorrem em navegadores da Web. Para configurar relatórios de exceção no cliente, consulte Application Insights para páginas da Web.
Estruturas de aplicação
Com algumas estruturas de aplicativos, mais configuração é necessária. Considere as seguintes tecnologias:
Importante
Esta seção é focada em aplicativos .NET Framework de uma perspetiva de exemplo de código. Alguns dos métodos que funcionam para o .NET Framework são obsoletos no SDK do .NET Core.
Diagnosticar falhas e exceções
portal do Azure
O Application Insights vem com uma experiência de gerenciamento de desempenho de aplicativos selecionada para ajudá-lo a diagnosticar falhas em seus aplicativos monitorados.
Para obter instruções detalhadas, consulte Investigar falhas, desempenho e transações com o Application Insights.
Visual Studio
Abra a solução de aplicativo no Visual Studio. Execute o aplicativo, no servidor ou na máquina de desenvolvimento, usando F5. Recrie a exceção.
Abra a janela de telemetria Pesquisa do Application Insights no Visual Studio. Durante a depuração, selecione a caixa suspensa Application Insights .
Selecione um relatório de exceção para mostrar seu rastreamento de pilha. Para abrir o arquivo de código relevante, selecione uma referência de linha no rastreamento de pilha.
Se o CodeLens estiver habilitado, você verá dados sobre as exceções:
Rastreamento personalizado e dados de log
Para obter dados de diagnóstico específicos para seu aplicativo, você pode inserir código para enviar seus próprios dados de telemetria. Seus dados personalizados de telemetria ou log são exibidos na pesquisa de diagnóstico ao lado da solicitação, da visualização de página e de outros dados coletados automaticamente.
Usando o Microsoft.VisualStudio.ApplicationInsights.TelemetryClient, você tem várias APIs disponíveis:
- TelemetryClient.TrackEvent é normalmente usado para monitorar padrões de uso, mas os dados enviados também aparecem em Eventos personalizados na pesquisa de diagnóstico. Os eventos são nomeados e podem carregar propriedades de cadeia de caracteres e métricas numéricas nas quais você pode filtrar suas pesquisas de diagnóstico.
- TelemetryClient.TrackTrace permite enviar dados mais longos, como informações POST.
- TelemetryClient.TrackException envia detalhes de exceção, como rastreamentos de pilha para o Application Insights.
Para ver esses eventos, no menu à esquerda, abra Pesquisar. Selecione o menu suspenso Tipos de evento e escolha Evento personalizado, Rastreamento ou Exceção.
Observação
Se seu aplicativo gerar grandes quantidades de telemetria, o módulo de amostragem adaptável reduzirá automaticamente o volume enviado para o portal enviando apenas uma fração representativa de eventos. Os eventos que fazem parte da mesma operação são selecionados ou desmarcados como um grupo para que você possa navegar entre eventos relacionados. Para obter mais informações, consulte Amostragem no Application Insights.
Ver pedido de dados POST
Os detalhes da solicitação não incluem os dados enviados para seu aplicativo em uma chamada POST. Para que estes dados sejam comunicados:
- Adicione o SDK do Application Insights ao código do seu aplicativo.
- Insira o código em seu aplicativo para chamar Microsoft.ApplicationInsights.TrackTrace(). Envie os dados POST no parâmetro message. Há um limite para o tamanho permitido, então você deve tentar enviar apenas os dados essenciais.
- Ao investigar uma solicitação com falha, localize os rastreamentos associados.
Capturar exceções e dados de diagnóstico relacionados
Por padrão, nem todas as exceções que causam falhas em seu aplicativo aparecem no portal. Se você usar o SDK JavaScript em suas páginas da Web, verá exceções do navegador. No entanto, a maioria das exceções do lado do servidor são intercetadas pelo IIS, portanto, você precisa adicionar algum código para capturá-las e relatá-las.
É possível:
- Registre exceções explicitamente inserindo código em manipuladores de exceção para relatar as exceções.
- Capture exceções automaticamente configurando sua estrutura ASP.NET. Os aditamentos necessários são diferentes para diferentes tipos de quadros.
Comunicar exceções explicitamente
A maneira mais simples de relatar é inserir uma chamada para trackException() em um manipulador de exceções.
C#
var telemetry = new TelemetryClient();
try
{
// ...
}
catch (Exception ex)
{
var properties = new Dictionary<string, string>
{
["Game"] = currentGame.Name
};
var measurements = new Dictionary<string, double>
{
["Users"] = currentGame.Users.Count
};
// Send the exception telemetry:
telemetry.TrackException(ex, properties, measurements);
}
JavaScript
try
{
// ...
}
catch (ex)
{
appInsights.trackException(ex, "handler loc",
{
Game: currentGame.Name,
State: currentGame.State.ToString()
});
}
Os parâmetros de propriedades e medidas são opcionais, mas são úteis para filtrar e adicionar informações extras. Por exemplo, se tiver uma aplicação que possa executar vários jogos, poderá encontrar os relatórios de exceção relacionados com um jogo específico. Você pode adicionar quantos itens quiser a cada dicionário.
Exceções do navegador
A maioria das exceções do navegador são relatadas.
Se sua página da Web incluir arquivos de script de redes de distribuição de conteúdo ou outros domínios, verifique se a marca de script tem o atributo crossorigin="anonymous" e se o servidor envia cabeçalhos CORS. Esse comportamento permite que você obtenha um rastreamento de pilha e detalhes para exceções JavaScript não tratadas desses recursos.
Reutilize seu cliente de telemetria
Observação
Recomendamos que você instancie o TelemetryClient uma vez e o reutilize durante toda a vida útil de um aplicativo.
Com a Injeção de Dependência (DI) no .NET, o SDK do .NET apropriado e a configuração correta do Application Insights for DI, você pode exigir o TelemetryClient parâmetro as a constructor.
public class ExampleController : ApiController
{
private readonly TelemetryClient _telemetryClient;
public ExampleController(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}
}
No exemplo anterior, o TelemetryClient é injetado ExampleController na classe.
Formulários Web
Para formulários da Web, o módulo HTTP é capaz de coletar as exceções quando não há redirecionamentos configurados com CustomErrors. No entanto, quando você tiver redirecionamentos ativos, adicione as seguintes linhas à Application_Error função no Global.asax.cs.
void Application_Error(object sender, EventArgs e)
{
if (HttpContext.Current.IsCustomErrorEnabled &&
Server.GetLastError () != null)
{
_telemetryClient.TrackException(Server.GetLastError());
}
}
No exemplo anterior, o _telemetryClient é uma variável de escopo de classe do tipo TelemetryClient.
MVC
A partir do Application Insights Web SDK versão 2.6 (beta 3 e posterior), o Application Insights coleta automaticamente exceções não tratadas lançadas nos métodos de controladores MVC 5+. Se você adicionou anteriormente um manipulador personalizado para controlar essas exceções, poderá removê-lo para evitar o rastreamento duplo de exceções.
Há vários cenários em que um filtro de exceção não pode lidar corretamente com erros quando exceções são lançadas:
- De construtores de controladores
- De manipuladores de mensagens
- Durante o encaminhamento
- Durante a serialização do conteúdo de resposta
- Durante o arranque da aplicação
- Em tarefas em segundo plano
Todas as exceções tratadas pelo aplicativo ainda precisam ser rastreadas manualmente. Exceções não tratadas originadas de controladores normalmente resultam em uma resposta 500 "Erro interno do servidor". Se essa resposta for construída manualmente como resultado de uma exceção manipulada, ou nenhuma exceção, ela será rastreada na telemetria de solicitação correspondente com ResultCode 500. No entanto, o SDK do Application Insights não consegue controlar uma exceção correspondente.
Suporte a versões anteriores
Se você usar o MVC 4 (e anterior) do Application Insights Web SDK 2.5 (e anterior), consulte os exemplos a seguir para controlar exceções.
Expandir para ver instruções para versões anteriores
Se a configuração CustomErrors for Off, exceções estarão disponíveis para o módulo HTTP coletar. No entanto, se estiver definida como RemoteOnly (padrão) ou On, a exceção será desmarcada e não estará disponível para o Application Insights coletar automaticamente. Você pode corrigir esse comportamento substituindo a classe System.Web.Mvc.HandleErrorAttribute e aplicando a classe substituída, conforme mostrado para as diferentes versões do MVC aqui (consulte a fonte do GitHub):
using System;
using System.Web.Mvc;
using Microsoft.ApplicationInsights;
namespace MVC2App.Controllers
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AiHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null)
{
//The attribute should track exceptions only when CustomErrors setting is On
//if CustomErrors is Off, exceptions will be caught by AI HTTP Module
if (filterContext.HttpContext.IsCustomErrorEnabled)
{ //Or reuse instance (recommended!). See note above.
var ai = new TelemetryClient();
ai.TrackException(filterContext.Exception);
}
}
base.OnException(filterContext);
}
}
}
MVC 2
Substitua o atributo HandleError pelo novo atributo em seus controladores:
namespace MVC2App.Controllers
{
[AiHandleError]
public class HomeController : Controller
{
// Omitted for brevity
}
}
MVC 3
Registe-se AiHandleErrorAttribute como um filtro global em Global.asax.cs:
public class MyMvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AiHandleErrorAttribute());
}
}
MVC 4, MVC 5
Registe-se AiHandleErrorAttribute como um filtro global em FilterConfig.cs:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// Default replaced with the override to track unhandled exceptions
filters.Add(new AiHandleErrorAttribute());
}
}
Web API
A partir do SDK da Web do Application Insights versão 2.6 (beta 3 e posterior), o Application Insights coleta exceções não tratadas lançadas nos métodos do controlador automaticamente para a API Web 2+. Se você adicionou anteriormente um manipulador personalizado para controlar essas exceções, conforme descrito nos exemplos a seguir, poderá removê-lo para evitar o controle duplo de exceções.
Há vários casos que os filtros de exceção não podem lidar. Por exemplo:
- Exceções lançadas de construtores de controlador.
- Exceções lançadas de manipuladores de mensagens.
- Exceções lançadas durante o roteamento.
- Exceções lançadas durante a serialização do conteúdo de resposta.
- Exceção lançada durante a inicialização do aplicativo.
- Exceção lançada em tarefas em segundo plano.
Todas as exceções tratadas pelo aplicativo ainda precisam ser rastreadas manualmente. Exceções não tratadas originadas de controladores normalmente resultam em uma resposta 500 "Erro interno do servidor". Se essa resposta for construída manualmente como resultado de uma exceção manipulada, ou nenhuma exceção, ela será rastreada em uma telemetria de solicitação correspondente com ResultCode 500. No entanto, o SDK do Application Insights não pode rastrear uma exceção correspondente.
Suporte a versões anteriores
Se você usar a API Web 1 (e anteriores) do Application Insights Web SDK 2.5 (e anteriores), consulte os exemplos a seguir para controlar exceções.
Expandir para ver instruções para versões anteriores
API Web 1.x
Substituir System.Web.Http.Filters.ExceptionFilterAttribute:
using System.Web.Http.Filters;
using Microsoft.ApplicationInsights;
namespace WebAPI.App_Start
{
public class AiExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext != null && actionExecutedContext.Exception != null)
{ //Or reuse instance (recommended!). See note above.
var ai = new TelemetryClient();
ai.TrackException(actionExecutedContext.Exception);
}
base.OnException(actionExecutedContext);
}
}
}
Você pode adicionar esse atributo substituído a controladores específicos ou adicioná-lo à configuração de filtro global na WebApiConfig classe:
using System.Web.Http;
using WebApi1.x.App_Start;
namespace WebApi1.x
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
// ...
config.EnableSystemDiagnosticsTracing();
// Capture exceptions for Application Insights:
config.Filters.Add(new AiExceptionFilterAttribute());
}
}
}
API Web 2.x
Adicione uma implementação de IExceptionLogger:
using System.Web.Http.ExceptionHandling;
using Microsoft.ApplicationInsights;
namespace ProductsAppPureWebAPI.App_Start
{
public class AiExceptionLogger : ExceptionLogger
{
public override void Log(ExceptionLoggerContext context)
{
if (context != null && context.Exception != null)
{
//or reuse instance (recommended!). see note above
var ai = new TelemetryClient();
ai.TrackException(context.Exception);
}
base.Log(context);
}
}
}
Adicione este trecho aos serviços em WebApiConfig:
using System.Web.Http;
using System.Web.Http.ExceptionHandling;
using ProductsAppPureWebAPI.App_Start;
namespace WebApi2WithMVC
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
config.Services.Add(typeof(IExceptionLogger), new AiExceptionLogger());
}
}
}
Como alternativa, você pode:
- Substitua a única
ExceptionHandlerinstância por uma implementação personalizada doIExceptionHandler. Esse manipulador de exceção só é chamado quando a estrutura ainda é capaz de escolher qual mensagem de resposta enviar, não quando a conexão é abortada, por exemplo. - Use filtros de exceção, conforme descrito na seção anterior sobre controladores da API Web 1.x, que não são chamados em todos os casos.
WCF
Adicione uma classe que estenda Attribute e implemente IErrorHandler e IServiceBehavior.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.Web;
using Microsoft.ApplicationInsights;
namespace WcfService4.ErrorHandling
{
public class AiLogExceptionAttribute : Attribute, IErrorHandler, IServiceBehavior
{
public void AddBindingParameters(ServiceDescription serviceDescription,
System.ServiceModel.ServiceHostBase serviceHostBase,
System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,
System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
System.ServiceModel.ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher disp in serviceHostBase.ChannelDispatchers)
{
disp.ErrorHandlers.Add(this);
}
}
public void Validate(ServiceDescription serviceDescription,
System.ServiceModel.ServiceHostBase serviceHostBase)
{
}
bool IErrorHandler.HandleError(Exception error)
{//or reuse instance (recommended!). see note above
var ai = new TelemetryClient();
ai.TrackException(error);
return false;
}
void IErrorHandler.ProvideFault(Exception error,
System.ServiceModel.Channels.MessageVersion version,
ref System.ServiceModel.Channels.Message fault)
{
}
}
}
Adicione o atributo às implementações de serviço:
namespace WcfService4
{
[AiLogException]
public class Service1 : IService1
{
// Omitted for brevity
}
}
Contadores de desempenho de exceção
Se você instalou o Azure Monitor Application Insights Agent em seu servidor, poderá obter um gráfico da taxa de exceções medida pelo .NET. As exceções do .NET manipuladas e não tratadas estão incluídas.
Abra uma guia do explorador de métricas e adicione um novo gráfico. Em Contadores de Desempenho, selecione Taxa de exceção.
O .NET Framework calcula a taxa contando o número de exceções em um intervalo e dividindo pelo comprimento do intervalo.
Essa contagem é diferente da contagem de exceções calculada pelos relatórios de contagem TrackException do portal do Application Insights. Os intervalos de amostragem são diferentes e o SDK não envia TrackException relatórios para todas as exceções tratadas e não tratadas.
Coleta de métricas personalizadas
Os SDKs .NET e .NET Core do Azure Monitor Application Insights têm dois métodos diferentes de coleta de métricas personalizadas:
- O
TrackMetric()método, que carece de preagregação. - O
GetMetric()método, que tem pré-agregação.
Recomendamos o uso da agregação, portantoTrackMetric(), não é mais o método preferido de coleta de métricas personalizadas. Este artigo orienta você sobre o uso do GetMetric() método e alguns dos fundamentos por trás de como ele funciona.
Expanda para saber mais sobre a API de pré-agregação versus API não pré-agregada
O TrackMetric() método envia telemetria bruta denotando uma métrica. É ineficiente enviar um único item de telemetria para cada valor. O TrackMetric() método também é ineficiente em termos de desempenho porque todos TrackMetric(item) passam pelo pipeline SDK completo de inicializadores e processadores de telemetria.
Ao contrário TrackMetric()do , GetMetric() lida com a pré-agregação local para você e, em seguida, envia apenas uma métrica de resumo agregado em um intervalo fixo de um minuto. Se você precisar monitorar de perto alguma métrica personalizada no segundo ou até mesmo milissegundo nível, poderá fazê-lo incorrendo apenas no custo de armazenamento e tráfego de rede de monitorar apenas a cada minuto. Esse comportamento também reduz muito o risco de ocorrência de limitação porque o número total de itens de telemetria que precisam ser enviados para uma métrica agregada é muito reduzido.
No Application Insights, as métricas personalizadas coletadas por meio TrackMetric()GetMetric() e não estão sujeitas a amostragem. A amostragem de métricas importantes pode levar a cenários em que os alertas criados em torno dessas métricas se tornam não confiáveis. Ao nunca fazer a amostragem de suas métricas personalizadas, você geralmente pode ter certeza de que, quando seus limites de alerta são violados, um alerta é acionado. Como as métricas personalizadas não são amostradas, há algumas preocupações potenciais.
O acompanhamento de tendências em uma métrica a cada segundo, ou em um intervalo ainda mais granular, pode resultar em:
- Aumento dos custos de armazenamento de dados. Há um custo associado à quantidade de dados que você envia para o Azure Monitor. Quanto mais dados você enviar, maior será o custo geral do monitoramento.
- Aumento do tráfego de rede ou sobrecarga de desempenho. Em alguns cenários, essa sobrecarga pode ter um custo monetário e de desempenho do aplicativo.
- Risco de limitação da ingestão. O Azure Monitor descarta ("limita") pontos de dados quando seu aplicativo envia uma alta taxa de telemetria em um curto intervalo de tempo.
A limitação é uma preocupação porque pode levar a alertas perdidos. A condição para disparar um alerta pode ocorrer localmente e, em seguida, ser descartada no ponto de extremidade de ingestão devido ao envio de muitos dados. Não recomendamos o uso TrackMetric() para .NET e .NET Core, a menos que você implemente sua própria lógica de agregação local. Se você estiver tentando rastrear todas as instâncias em que um evento ocorre durante um determinado período de tempo, talvez ache que TrackEvent() é uma opção melhor. Lembre-se de que, ao contrário das métricas personalizadas, os eventos personalizados estão sujeitos a amostragem. Você ainda pode usar TrackMetric() mesmo sem escrever sua própria pré-agregação local. Mas se o fizer, esteja ciente das armadilhas.
Em resumo, recomendamos GetMetric() porque faz pré-agregação, acumula valores de todas as Track() chamadas e envia um resumo/agregado uma vez a cada minuto. O GetMetric() método pode reduzir significativamente o custo e a sobrecarga de desempenho enviando menos pontos de dados enquanto ainda coleta todas as informações relevantes.
Introdução ao GetMetric
Para nossos exemplos, vamos usar um aplicativo de serviço de trabalho .NET Core 3.1 básico. Se você quiser replicar o ambiente de teste usado com esses exemplos, siga as etapas 1 a 6 em Aplicativo .NET Core Worker Service. Estas etapas adicionam o Application Insights a um modelo de projeto de serviço de trabalho básico. Os conceitos se aplicam a qualquer aplicativo geral em que o SDK possa ser usado, incluindo aplicativos Web e aplicativos de console.
Enviar métricas
Substitua o conteúdo do arquivo worker.cs pelo seguinte código:
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.ApplicationInsights;
namespace WorkerService3
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private TelemetryClient _telemetryClient;
public Worker(ILogger<Worker> logger, TelemetryClient tc)
{
_logger = logger;
_telemetryClient = tc;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{ // The following line demonstrates usages of GetMetric API.
// Here "computersSold", a custom metric name, is being tracked with a value of 42 every second.
while (!stoppingToken.IsCancellationRequested)
{
_telemetryClient.GetMetric("ComputersSold").TrackValue(42);
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}
}
}
Quando você executa o código de exemplo, você vê o while loop repetidamente em execução sem telemetria sendo enviada na janela de saída do Visual Studio. Um único item de telemetria é enviado em torno da marca de 60 segundos, que em nosso teste se parece com:
Application Insights Telemetry: {"name":"Microsoft.ApplicationInsights.Dev.00000000-0000-0000-0000-000000000000.Metric", "time":"2019-12-28T00:54:19.0000000Z",
"ikey":"00000000-0000-0000-0000-000000000000",
"tags":{"ai.application.ver":"1.0.0.0",
"ai.cloud.roleInstance":"Test-Computer-Name",
"ai.internal.sdkVersion":"m-agg2c:2.12.0-21496",
"ai.internal.nodeName":"Test-Computer-Name"},
"data":{"baseType":"MetricData",
"baseData":{"ver":2,"metrics":[{"name":"ComputersSold",
"kind":"Aggregation",
"value":1722,
"count":41,
"min":42,
"max":42,
"stdDev":0}],
"properties":{"_MS.AggregationIntervalMs":"42000",
"DeveloperMode":"true"}}}}
Este único item de telemetria representa um agregado de 41 medições métricas distintas. Como estávamos enviando o mesmo valor repetidamente, temos um desvio padrão (stDev) com 0 valores máximos (max) e mínimos (min) idênticos. A value propriedade representa uma soma de todos os valores individuais que foram agregados.
Observação
O GetMetric método não suporta o rastreamento do último valor (por exemplo, gauge) ou o rastreamento de histogramas ou distribuições.
Se examinarmos nosso recurso do Application Insights na experiência de Logs (Analytics), o item de telemetria individual se parecerá com a captura de tela a seguir.
Observação
Embora o item de telemetria bruta não contenha uma propriedade/campo de soma explícita uma vez ingerido, criamos um para você. Neste caso, tanto o como a valuevalueSum propriedade representam a mesma coisa.
Você também pode acessar sua telemetria métrica personalizada na seção Métricas do portal como uma métrica baseada em log e personalizada. A captura de tela a seguir é um exemplo de uma métrica baseada em log.
Referência de métrica de cache para uso de alta taxa de transferência
Os valores métricos podem ser observados com frequência em alguns casos. Por exemplo, um serviço de alta taxa de transferência que processa 500 solicitações por segundo pode querer emitir 20 métricas de telemetria para cada solicitação. O resultado significa rastrear 10.000 valores por segundo. Nesses cenários de alta taxa de transferência, os usuários podem precisar ajudar o SDK evitando algumas pesquisas.
Por exemplo, o exemplo anterior realizou uma pesquisa de um identificador para a métrica ComputersSold e, em seguida, rastreou um valor observado de 42. Em vez disso, o identificador pode ser armazenado em cache para várias invocações de faixa:
//...
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
// This is where the cache is stored to handle faster lookup
Metric computersSold = _telemetryClient.GetMetric("ComputersSold");
while (!stoppingToken.IsCancellationRequested)
{
computersSold.TrackValue(42);
computersSold.TrackValue(142);
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(50, stoppingToken);
}
}
Além de armazenar em cache o identificador de métrica, o exemplo anterior também foi reduzido Task.Delay para 50 milissegundos para que o loop fosse executado com mais frequência. O resultado são 772 TrackValue() invocações.
Métricas multidimensionais
Os exemplos na seção anterior mostram métricas de dimensão zero. As métricas também podem ser multidimensionais. Atualmente suportamos até 10 dimensões.
Aqui está um exemplo de como criar uma métrica unidimensional:
//...
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
// This is an example of a metric with a single dimension.
// FormFactor is the name of the dimension.
Metric computersSold= _telemetryClient.GetMetric("ComputersSold", "FormFactor");
while (!stoppingToken.IsCancellationRequested)
{
// The number of arguments (dimension values)
// must match the number of dimensions specified while GetMetric.
// Laptop, Tablet, etc are values for the dimension "FormFactor"
computersSold.TrackValue(42, "Laptop");
computersSold.TrackValue(20, "Tablet");
computersSold.TrackValue(126, "Desktop");
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(50, stoppingToken);
}
}
A execução do código de exemplo por pelo menos 60 segundos resulta no envio de três itens de telemetria distintos para o Azure. Cada item representa a agregação de um dos três fatores forma. Como antes, você pode examinar mais detalhadamente na visualização Logs (Analytics ).
No explorador de métricas:
Observe que você não pode dividir a métrica pela nova dimensão personalizada ou exibir sua dimensão personalizada com a visualização de métricas.
Por padrão, as métricas multidimensionais no explorador de métricas não são ativadas nos recursos do Application Insights.
Habilite métricas multidimensionais
Para habilitar métricas multidimensionais para um recurso do Application Insights, selecione Uso e custos> estimadosMétricas> personalizadasHabilitar alertas sobre dimensões> métricas personalizadasOK. Para obter mais informações, consulte Dimensões e agregação de métricas personalizadas.
Depois de fazer essa alteração e enviar uma nova telemetria multidimensional, você pode selecionar Aplicar divisão.
Observação
Somente métricas recém-enviadas depois que o recurso foi ativado no portal têm dimensões armazenadas.
Visualize suas agregações métricas para cada FormFactor dimensão.
Use MetricIdentifier quando houver mais de três dimensões
Atualmente, 10 dimensões são suportadas. A utilização de mais de três dimensões requer a utilização de MetricIdentifier:
// Add "using Microsoft.ApplicationInsights.Metrics;" to use MetricIdentifier
// MetricIdentifier id = new MetricIdentifier("[metricNamespace]","[metricId],"[dim1]","[dim2]","[dim3]","[dim4]","[dim5]");
MetricIdentifier id = new MetricIdentifier("CustomMetricNamespace","ComputerSold", "FormFactor", "GraphicsCard", "MemorySpeed", "BatteryCapacity", "StorageCapacity");
Metric computersSold = _telemetryClient.GetMetric(id);
computersSold.TrackValue(110,"Laptop", "Nvidia", "DDR4", "39Wh", "1TB");
Configuração métrica personalizada
Se quiser alterar a configuração da métrica, você deve fazer alterações no local onde a métrica é inicializada.
Nomes de dimensões especiais
As métricas não usam o contexto de telemetria do TelemetryClient usado para acessá-las. Usar nomes de dimensões especiais disponíveis como constantes na MetricDimensionNames classe é a melhor solução alternativa para essa limitação.
As agregações métricas enviadas pela métrica a seguir Special Operation Request Sizenão estão Context.Operation.Name definidas como Special Operation. O TrackMetric() método ou qualquer outro TrackXXX() método foi OperationName definido corretamente como Special Operation.
//...
TelemetryClient specialClient;
private static int GetCurrentRequestSize()
{
// Do stuff
return 1100;
}
int requestSize = GetCurrentRequestSize()
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//...
specialClient.Context.Operation.Name = "Special Operation";
specialClient.GetMetric("Special Operation Request Size").TrackValue(requestSize);
//...
}
}
Nessa circunstância, use os nomes de dimensão especiais listados na MetricDimensionNames classe para especificar os TelemetryContext valores.
Por exemplo, quando a métrica agregada resultante da próxima instrução é enviada para o ponto de extremidade na nuvem do Application Insights, seu Context.Operation.Name campo de dados é definido como Special Operation:
_telemetryClient.GetMetric("Request Size", MetricDimensionNames.TelemetryContext.Operation.Name).TrackValue(requestSize, "Special Operation");
O valor desta dimensão especial é copiado e TelemetryContext não é usado como uma dimensão normal . Se você quiser também manter uma dimensão de operação para exploração métrica normal, precisará criar uma dimensão separada para essa finalidade:
_telemetryClient.GetMetric("Request Size", "Operation Name", MetricDimensionNames.TelemetryContext.Operation.Name).TrackValue(requestSize, "Special Operation", "Special Operation");
Dimensionamento e limite de séries cronológicas
Para evitar que o subsistema de telemetria use acidentalmente seus recursos, você pode controlar o número máximo de séries de dados por métrica. Os limites padrão não são mais de 1.000 séries de dados totais por métrica e não mais de 100 valores diferentes por dimensão.
Importante
Use valores cardeais baixos para dimensões para evitar limitação.
No contexto da limitação de dimensões e séries temporais, usamos Metric.TrackValue(..) para garantir que os limites sejam observados. Se os limites já foram atingidos, Metric.TrackValue(..) retorna False e o valor não é rastreado. Caso contrário, ele retornará True. Esse comportamento é útil se os dados de uma métrica se originarem da entrada do usuário.
O MetricConfiguration construtor usa algumas opções sobre como gerenciar séries diferentes dentro da respetiva métrica e um objeto de uma implementação IMetricSeriesConfiguration de classe que especifica o comportamento de agregação para cada série individual da métrica:
var metConfig = new MetricConfiguration(seriesCountLimit: 100, valuesPerDimensionLimit:2,
new MetricSeriesConfigurationForMeasurement(restrictToUInt32Values: false));
Metric computersSold = _telemetryClient.GetMetric("ComputersSold", "Dimension1", "Dimension2", metConfig);
// Start tracking.
computersSold.TrackValue(100, "Dim1Value1", "Dim2Value1");
computersSold.TrackValue(100, "Dim1Value1", "Dim2Value2");
// The following call gives 3rd unique value for dimension2, which is above the limit of 2.
computersSold.TrackValue(100, "Dim1Value1", "Dim2Value3");
// The above call doesn't track the metric, and returns false.
-
seriesCountLimité o número máximo de séries temporais de dados que uma métrica pode conter. Quando esse limite é atingido, as chamadas paraTrackValue()isso normalmente resultariam em um retornofalsede nova série. -
valuesPerDimensionLimitlimita o número de valores distintos por dimensão de forma semelhante. -
restrictToUInt32ValuesDetermina se apenas valores inteiros não negativos devem ou não ser rastreados.
Eis um exemplo de como enviar uma mensagem para saber se os limites máximos são excedidos:
if (! computersSold.TrackValue(100, "Dim1Value1", "Dim2Value3"))
{
// Add "using Microsoft.ApplicationInsights.DataContract;" to use SeverityLevel.Error
_telemetryClient.TrackTrace("Metric value not tracked as value of one of the dimension exceeded the cap. Revisit the dimensions to ensure they are within the limits",
SeverityLevel.Error);
}
Acompanhamento de operações personalizadas
Os SDKs do Application Insights rastreiam automaticamente solicitações HTTP de entrada e chamadas para serviços dependentes, como solicitações HTTP e consultas SQL. O rastreamento e a correlação de solicitações e dependências oferecem visibilidade sobre a capacidade de resposta e a confiabilidade de todo o aplicativo em todos os microsserviços que combinam esse aplicativo.
Há uma classe de padrões de aplicativos que não podem ser suportados genericamente. O monitoramento adequado de tais padrões requer instrumentação manual de código. Esta seção aborda alguns padrões que podem exigir instrumentação manual, como processamento de fila personalizado e execução de tarefas em segundo plano de longa execução.
Esta seção fornece orientação sobre como controlar operações personalizadas com o SDK do Application Insights.
Visão geral
Uma operação é uma parte lógica do trabalho executado por um aplicativo. Ele tem um nome, hora de início, duração, resultado e um contexto de execução como nome de usuário, propriedades e resultado. Se a operação A foi iniciada pela operação B, então a operação B é definida como pai para A. Uma operação pode ter apenas um dos pais, mas pode ter muitas operações filhas. Para obter mais informações sobre operações e correlação de telemetria, consulte Correlação de telemetria do Application Insights.
No SDK do Application Insights .NET, a operação é descrita pela classe abstrata OperationTelemetry e seus descendentes RequestTelemetry e DependencyTelemetry.
Acompanhamento de operações de entrada
O SDK da Web do Application Insights coleta automaticamente solicitações HTTP para aplicativos ASP.NET executados em um pipeline do IIS e todos os aplicativos ASP.NET Core. Existem soluções suportadas pela comunidade para outras plataformas e estruturas. Se o aplicativo não for suportado por nenhuma das soluções padrão ou suportadas pela comunidade, você poderá instrumentá-lo manualmente.
Outro exemplo que requer acompanhamento personalizado é o trabalhador que recebe itens da fila. Para algumas filas, a chamada para adicionar uma mensagem a essa fila é rastreada como uma dependência. A operação de alto nível que descreve o processamento de mensagens não é coletada automaticamente.
Vamos ver como essas operações poderiam ser rastreadas.
Em um alto nível, a tarefa é criar RequestTelemetry e definir propriedades conhecidas. Depois que a operação for concluída, você rastreia a telemetria. O exemplo a seguir demonstra essa tarefa.
Solicitação HTTP no aplicativo auto-hospedado Owin
Neste exemplo, o contexto de rastreamento é propagado de acordo com o protocolo HTTP para correlação. Você deve esperar receber cabeçalhos descritos lá.
Expandir para visualizar o código
public class ApplicationInsightsMiddleware : OwinMiddleware
{
// You may create a new TelemetryConfiguration instance, reuse one you already have,
// or fetch the instance created by Application Insights SDK.
private readonly TelemetryConfiguration telemetryConfiguration = TelemetryConfiguration.CreateDefault();
private readonly TelemetryClient telemetryClient = new TelemetryClient(telemetryConfiguration);
public ApplicationInsightsMiddleware(OwinMiddleware next) : base(next) {}
public override async Task Invoke(IOwinContext context)
{
// Let's create and start RequestTelemetry.
var requestTelemetry = new RequestTelemetry
{
Name = $"{context.Request.Method} {context.Request.Uri.GetLeftPart(UriPartial.Path)}"
};
// If there is a Request-Id received from the upstream service, set the telemetry context accordingly.
if (context.Request.Headers.ContainsKey("Request-Id"))
{
var requestId = context.Request.Headers.Get("Request-Id");
// Get the operation ID from the Request-Id (if you follow the HTTP Protocol for Correlation).
requestTelemetry.Context.Operation.Id = GetOperationId(requestId);
requestTelemetry.Context.Operation.ParentId = requestId;
}
// StartOperation is a helper method that allows correlation of
// current operations with nested operations/telemetry
// and initializes start time and duration on telemetry items.
var operation = telemetryClient.StartOperation(requestTelemetry);
// Process the request.
try
{
await Next.Invoke(context);
}
catch (Exception e)
{
requestTelemetry.Success = false;
requestTelemetry.ResponseCode;
telemetryClient.TrackException(e);
throw;
}
finally
{
// Update status code and success as appropriate.
if (context.Response != null)
{
requestTelemetry.ResponseCode = context.Response.StatusCode.ToString();
requestTelemetry.Success = context.Response.StatusCode >= 200 && context.Response.StatusCode <= 299;
}
else
{
requestTelemetry.Success = false;
}
// Now it's time to stop the operation (and track telemetry).
telemetryClient.StopOperation(operation);
}
}
public static string GetOperationId(string id)
{
// Returns the root ID from the '|' to the first '.' if any.
int rootEnd = id.IndexOf('.');
if (rootEnd < 0)
rootEnd = id.Length;
int rootStart = id[0] == '|' ? 1 : 0;
return id.Substring(rootStart, rootEnd - rootStart);
}
}
O protocolo HTTP para correlação também declara o Correlation-Context cabeçalho. É omitido aqui por simplicidade.
Instrumentação de fila
O Contexto de Rastreamento do W3C e o Protocolo HTTP para Correlação passam detalhes de correlação com solicitações HTTP, mas cada protocolo de fila precisa definir como os mesmos detalhes são passados ao longo da mensagem de fila. Alguns protocolos de fila, como o AMQP, permitem a passagem de mais metadados. Outros protocolos, como a Fila de Armazenamento do Azure, exigem que o contexto seja codificado na carga útil da mensagem.
Observação
O rastreamento entre componentes ainda não é suportado para filas.
Com o HTTP, se o produtor e o consumidor enviarem telemetria para diferentes recursos do Application Insights, a experiência de diagnóstico de transações e o Mapa de aplicativos mostrarão transações e mapearão de ponta a ponta. Para filas, esse recurso ainda não é suportado.
Fila do Service Bus
Para obter informações de rastreamento, consulte Rastreamento distribuído e correlação por meio de mensagens do Barramento de Serviço do Azure.
Fila de armazenamento do Azure
O exemplo a seguir mostra como controlar as operações de fila do Armazenamento do Azure e correlacionar a telemetria entre o produtor, o consumidor e o Armazenamento do Azure.
A fila de armazenamento tem uma API HTTP. Todas as chamadas para a fila são rastreadas pelo Application Insights Dependency Collector para solicitações HTTP. Ele é configurado por padrão em aplicativos ASP.NET e ASP.NET Core. Com outros tipos de aplicativos, consulte a documentação de aplicativos de console.
Você também pode querer correlacionar o ID da operação do Application Insights com o ID da solicitação de armazenamento. Para obter informações sobre como definir e obter um cliente de solicitação de armazenamento e uma ID de solicitação de servidor, consulte Monitorar, diagnosticar e solucionar problemas do Armazenamento do Azure.
Enfileiramento
Como as filas de armazenamento suportam a API HTTP, todas as operações com a fila são rastreadas automaticamente pelo Application Insights. Em muitos casos, esta instrumentação deve ser suficiente. Para correlacionar rastreamentos do lado do consumidor com rastreamentos do produtor, você deve passar algum contexto de correlação de forma semelhante à forma como fazemos isso no Protocolo HTTP para Correlação.
Este exemplo mostra como controlar a Enqueue operação. É possível:
-
Correlacione novas tentativas (se houver): todas elas têm um pai comum que é a
Enqueueoperação. Caso contrário, eles serão rastreados como filhos da solicitação recebida. Se houver várias solicitações lógicas para a fila, pode ser difícil encontrar qual chamada resultou em tentativas. - Correlacione os logs de armazenamento (se e quando necessário): eles estão correlacionados com a telemetria do Application Insights.
A Enqueue operação é filha de uma operação pai. Um exemplo é uma solicitação HTTP de entrada. A chamada de dependência HTTP é filha da Enqueue operação e neta da solicitação de entrada.
public async Task Enqueue(CloudQueue queue, string message)
{
var operation = telemetryClient.StartOperation<DependencyTelemetry>("enqueue " + queue.Name);
operation.Telemetry.Type = "Azure queue";
operation.Telemetry.Data = "Enqueue " + queue.Name;
// MessagePayload represents your custom message and also serializes correlation identifiers into payload.
// For example, if you choose to pass payload serialized to JSON, it might look like
// {'RootId' : 'some-id', 'ParentId' : '|some-id.1.2.3.', 'message' : 'your message to process'}
var jsonPayload = JsonConvert.SerializeObject(new MessagePayload
{
RootId = operation.Telemetry.Context.Operation.Id,
ParentId = operation.Telemetry.Id,
Payload = message
});
CloudQueueMessage queueMessage = new CloudQueueMessage(jsonPayload);
// Add operation.Telemetry.Id to the OperationContext to correlate Storage logs and Application Insights telemetry.
OperationContext context = new OperationContext { ClientRequestID = operation.Telemetry.Id};
try
{
await queue.AddMessageAsync(queueMessage, null, null, new QueueRequestOptions(), context);
}
catch (StorageException e)
{
operation.Telemetry.Properties.Add("AzureServiceRequestID", e.RequestInformation.ServiceRequestID);
operation.Telemetry.Success = false;
operation.Telemetry.ResultCode = e.RequestInformation.HttpStatusCode.ToString();
telemetryClient.TrackException(e);
}
finally
{
// Update status code and success as appropriate.
telemetryClient.StopOperation(operation);
}
}
Para reduzir a quantidade de telemetria que seu aplicativo relata ou se você não quiser acompanhar a Enqueue operação por outros motivos, use a Activity API diretamente:
- Crie (e inicie) um novo
Activityem vez de iniciar a operação do Application Insights. Você não precisa atribuir nenhuma propriedade nele, exceto o nome da operação. - Serialize
yourActivity.Idna carga útil da mensagem em vez deoperation.Telemetry.Id. Você também pode usarActivity.Current.Id.
Retirar fila
Da mesma forma que Enqueue, uma solicitação HTTP real para a fila de armazenamento é rastreada automaticamente pelo Application Insights. A Enqueue operação presumivelmente acontece no contexto pai, como um contexto de solicitação de entrada. Os SDKs do Application Insights correlacionam automaticamente essa operação, e sua parte HTTP, com a solicitação pai e outra telemetria relatada no mesmo escopo.
A Dequeue operação é complicada. O SDK do Application Insights rastreia automaticamente as solicitações HTTP. Mas não sabe o contexto da correlação até que a mensagem seja analisada. Não é possível correlacionar a solicitação HTTP para obter a mensagem com o resto da telemetria, especialmente quando mais de uma mensagem é recebida.
public async Task<MessagePayload> Dequeue(CloudQueue queue)
{
var operation = telemetryClient.StartOperation<DependencyTelemetry>("dequeue " + queue.Name);
operation.Telemetry.Type = "Azure queue";
operation.Telemetry.Data = "Dequeue " + queue.Name;
try
{
var message = await queue.GetMessageAsync();
}
catch (StorageException e)
{
operation.telemetry.Properties.Add("AzureServiceRequestID", e.RequestInformation.ServiceRequestID);
operation.telemetry.Success = false;
operation.telemetry.ResultCode = e.RequestInformation.HttpStatusCode.ToString();
telemetryClient.TrackException(e);
}
finally
{
// Update status code and success as appropriate.
telemetryClient.StopOperation(operation);
}
return null;
}
Processo
No exemplo a seguir, uma mensagem de entrada é rastreada de maneira semelhante a uma solicitação HTTP de entrada:
public async Task Process(MessagePayload message)
{
// After the message is dequeued from the queue, create RequestTelemetry to track its processing.
RequestTelemetry requestTelemetry = new RequestTelemetry { Name = "process " + queueName };
// It might also make sense to get the name from the message.
requestTelemetry.Context.Operation.Id = message.RootId;
requestTelemetry.Context.Operation.ParentId = message.ParentId;
var operation = telemetryClient.StartOperation(requestTelemetry);
try
{
await ProcessMessage();
}
catch (Exception e)
{
telemetryClient.TrackException(e);
throw;
}
finally
{
// Update status code and success as appropriate.
telemetryClient.StopOperation(operation);
}
}
Da mesma forma, outras operações de fila podem ser instrumentadas. Uma operação de visualização deve ser instrumentada de forma semelhante a uma operação de retirada de fila. Não é necessário instrumentar operações de gerenciamento de filas. O Application Insights rastreia operações como HTTP e, na maioria dos casos, é suficiente.
Ao instrumentar a exclusão de mensagens, certifique-se de definir os identificadores de operação (correlação). Como alternativa, você pode usar a Activity API. Em seguida, você não precisa definir identificadores de operação nos itens de telemetria porque o SDK do Application Insights faz isso por você:
- Crie um novo
Activitydepois de ter um item da fila. - Use
Activity.SetParentId(message.ParentId)para correlacionar logs de consumidores e produtores. - Inicie o
Activityarquivo . - Rastreie operações de dequeue, processe e delete usando
Start/StopOperationauxiliares. Faça isso a partir do mesmo fluxo de controle assíncrono (contexto de execução). Desta forma, eles são correlacionados corretamente. - Pare o
Activityarquivo . - Use
Start/StopOperationou chameTracka telemetria manualmente.
Tipos de dependência
O Application Insights usa o tipo de dependência para personalizar experiências de interface do usuário. Para filas, ele reconhece os seguintes tipos que melhoram a experiência de diagnóstico de DependencyTelemetrytransações:
-
Azure queuepara filas de Armazenamento do Azure -
Azure Event Hubspara Hubs de Eventos do Azure -
Azure Service Buspara o Barramento de Serviço do Azure
Processamento em lotes
Com algumas filas, você pode retirar várias mensagens da fila com uma solicitação. O processamento dessas mensagens é presumivelmente independente e pertence às diferentes operações lógicas. Não é possível correlacionar a Dequeue operação a uma mensagem específica que está sendo processada.
Cada mensagem deve ser processada em seu próprio fluxo de controle assíncrono. Para obter mais informações, consulte a seção Controle de dependências de saída .
Tarefas em segundo plano de longa execução
Alguns aplicativos iniciam operações de longa duração que podem ser causadas por solicitações do usuário. Do ponto de vista do traçado/instrumentação, não é diferente da instrumentação de solicitação ou dependência:
async Task BackgroundTask()
{
var operation = telemetryClient.StartOperation<DependencyTelemetry>(taskName);
operation.Telemetry.Type = "Background";
try
{
int progress = 0;
while (progress < 100)
{
// Process the task.
telemetryClient.TrackTrace($"done {progress++}%");
}
// Update status code and success as appropriate.
}
catch (Exception e)
{
telemetryClient.TrackException(e);
// Update status code and success as appropriate.
throw;
}
finally
{
telemetryClient.StopOperation(operation);
}
}
Neste exemplo, telemetryClient.StartOperation cria DependencyTelemetry e preenche o contexto de correlação. Digamos que você tenha uma operação pai que foi criada por solicitações de entrada que agendaram a operação. Desde que BackgroundTask seja iniciado no mesmo fluxo de controle assíncrono de uma solicitação de entrada, ele está correlacionado com essa operação pai.
BackgroundTask e todos os itens de telemetria aninhados são automaticamente correlacionados com a solicitação que a causou, mesmo após o término da solicitação.
Quando a tarefa começa a partir do thread em segundo plano que não tem nenhuma operação (Activity) associada a ela, BackgroundTask não tem nenhum pai. No entanto, ele pode ter operações aninhadas. Todos os itens de telemetria relatados da tarefa são correlacionados com o DependencyTelemetry criado em BackgroundTask.
Rastreamento de dependências de saída
Você pode rastrear seu próprio tipo de dependência ou uma operação que não é suportada pelo Application Insights.
O Enqueue método na fila do Service Bus ou na fila de armazenamento pode servir como exemplos para esse rastreamento personalizado.
A abordagem geral para o rastreamento de dependência personalizada é:
- Chame o método (extensão) que preenche as propriedades necessárias para correlação
TelemetryClient.StartOperatione algumas outras propriedades, como início, carimboDependencyTelemetryde data/hora e duração. - Defina outras propriedades personalizadas no
DependencyTelemetry, como o nome e qualquer outro contexto necessário. - Faça uma chamada de dependência e aguarde.
- Pare a operação quando
StopOperationela terminar. - Lidar com exceções.
public async Task RunMyTaskAsync()
{
using (var operation = telemetryClient.StartOperation<DependencyTelemetry>("task 1"))
{
try
{
var myTask = await StartMyTaskAsync();
// Update status code and success as appropriate.
}
catch(...)
{
// Update status code and success as appropriate.
}
}
}
Eliminar uma operação faz com que a operação pare, pelo que poderá fazê-lo em vez de chamar StopOperation.
Advertência
Em alguns casos, uma exceção não entregue pode impedirfinally que seja chamada, portanto, as operações podem não ser rastreadas.
Processamento e rastreamento de operações paralelas
A chamada StopOperation apenas interrompe a operação que foi iniciada. Se a operação em execução atual não corresponder àquela que você deseja parar, StopOperation não fará nada. Essa situação pode acontecer se você iniciar várias operações em paralelo no mesmo contexto de execução.
var firstOperation = telemetryClient.StartOperation<DependencyTelemetry>("task 1");
var firstTask = RunMyTaskAsync();
var secondOperation = telemetryClient.StartOperation<DependencyTelemetry>("task 2");
var secondTask = RunMyTaskAsync();
await firstTask;
// FAILURE!!! This will do nothing and will not report telemetry for the first operation
// as currently secondOperation is active.
telemetryClient.StopOperation(firstOperation);
await secondTask;
Certifique-se de sempre chamar StartOperation e processar a operação no mesmo método assíncrono para isolar as operações em execução em paralelo. Se a operação for síncrona (ou não assíncrona), envolva o processo e acompanhe com Task.Run.
public void RunMyTask(string name)
{
using (var operation = telemetryClient.StartOperation<DependencyTelemetry>(name))
{
Process();
// Update status code and success as appropriate.
}
}
public async Task RunAllTasks()
{
var task1 = Task.Run(() => RunMyTask("task 1"));
var task2 = Task.Run(() => RunMyTask("task 2"));
await Task.WhenAll(task1, task2);
}
Operações do ApplicationInsights vs. System.Diagnostics.Activity
System.Diagnostics.Activity representa o contexto de rastreamento distribuído e é usado por estruturas e bibliotecas para criar e propagar contexto dentro e fora do processo e correlacionar itens de telemetria.
Activity funciona em conjunto com System.Diagnostics.DiagnosticSource o mecanismo de notificação entre a estrutura/biblioteca para notificar eventos interessantes, como solicitações e exceções recebidas ou enviadas.
As atividades são funcionalidades principais no Application Insights. A dependência automática e a coleta de solicitações dependem muito deles, juntamente com DiagnosticSource os eventos. Se você criou Activity em seu aplicativo, isso não resultaria na criação da telemetria do Application Insights. O Application Insights precisa receber DiagnosticSource eventos e conhecer os nomes de eventos e cargas úteis para traduzir Activity em telemetria.
Cada operação do Application Insights (solicitação ou dependência) envolve Activityo . Quando StartOperation é chamado, cria-se Activity por baixo.
StartOperation é a maneira recomendada de rastrear telemetrias de solicitação ou dependência manualmente e garantir que tudo esteja correlacionado.
Counters
O Application Insights oferece suporte a contadores de desempenho e contadores de eventos. Este guia fornece uma visão geral de ambos, incluindo sua finalidade, configuração e uso em aplicativos .NET.
Os contadores de desempenho são incorporados ao sistema operacional Windows e oferecem métricas predefinidas, como uso da CPU, consumo de memória e atividade do disco. Esses contadores são ideais para monitorar métricas de desempenho padrão com configuração mínima. Eles ajudam a controlar a utilização de recursos ou solucionar gargalos no nível do sistema em aplicativos baseados no Windows, mas não oferecem suporte a métricas personalizadas específicas de aplicativos.
Os contadores de eventos funcionam em várias plataformas, incluindo Windows, Linux e macOS. Eles permitem que os desenvolvedores definam e monitorem métricas leves e personalizáveis específicas do aplicativo, fornecendo mais flexibilidade do que os contadores de desempenho. Os contadores de eventos são úteis quando as métricas do sistema são insuficientes ou quando a telemetria detalhada é necessária em aplicativos multiplataforma. Eles exigem implementação e configuração explícitas, o que torna a configuração mais trabalhosa.
Contadores de desempenho
O Windows fornece vários contadores de desempenho, como aqueles usados para coletar estatísticas de uso do processador, da memória e do disco. Você também pode definir seus próprios contadores de desempenho.
Seu aplicativo oferece suporte à coleta de contadores de desempenho se for executado no Internet Information Server (IIS) em um host local ou em uma máquina virtual com acesso administrativo. Os aplicativos executados como Aplicativos Web do Azure não podem acessar diretamente os contadores de desempenho, mas o Application Insights coleta um subconjunto de contadores disponíveis.
Sugestão
Como outras métricas, você pode definir um alerta para avisar se um contador sair de um limite especificado. Para definir um alerta, abra o painel Alertas e selecione Adicionar alerta.
Pré-requisitos
Conceda permissão à conta de serviço do pool de aplicativos para monitorar contadores de desempenho adicionando-a ao grupo Usuários do Monitor de Desempenho .
net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"
Ver contadores
O painel Métricas mostra o conjunto padrão de contadores de desempenho.
ASP.NET
Contadores padrão para ASP.NET aplicativos Web:
- % Processo\Tempo do processador
- % Processo\Tempo do processador normalizado
- Memória\Bytes disponíveis
- ASP.NET pedidos/seg
- Exceções CLR (Common Language Runtime) do .NET lançadas/s
- ASP.NET AplicaçõesSolicitar Tempo de Execução
- Processo\Bytes privados
- Processar\Bytes de dados de E/S/s
- ASP.NET Aplicativos\Solicitações na fila de aplicativos
- Processador(_Total)\% Tempo do processador
ASP.NET Core
Contadores padrão para aplicativos Web ASP.NET Core:
- % Processo\Tempo do processador
- % Processo\Tempo do processador normalizado
- Memória\Bytes disponíveis
- Processo\Bytes privados
- Processar\Bytes de dados de E/S/s
- Processador(_Total)\% Tempo do processador
Observação
O suporte para contadores de desempenho no ASP.NET Core é limitado:
- As versões 2.4.1 e posteriores do SDK coletam contadores de desempenho se o aplicativo estiver sendo executado nos Aplicativos Web do Azure (Windows).
- As versões 2.7.1 e posteriores do SDK coletam contadores de desempenho se o aplicativo estiver sendo executado no Windows e de destino
NETSTANDARD2.0ou posterior. - Para aplicativos destinados ao .NET Framework, todas as versões do SDK suportam contadores de desempenho.
- As versões 2.8.0 e posteriores do SDK suportam o contador CPU/Memória no Linux. Nenhum outro contador é suportado no Linux. Para obter contadores de sistema no Linux (e em outros ambientes que não sejam Windows), use contadores de eventos.
Adicionar contadores
Se o contador de desempenho desejado não estiver incluído na lista de métricas, você poderá adicioná-lo.
ASP.NET
Opção 1: Configuração no ApplicationInsights.config
Descubra quais contadores estão disponíveis em seu servidor usando este comando do PowerShell no servidor local:
Get-Counter -ListSet *Para obter mais informações, consulte
Get-Counter.Abra
ApplicationInsights.config.Se você adicionou o Application Insights ao seu aplicativo durante o desenvolvimento:
- Edite
ApplicationInsights.configno seu projeto. - Reimplante-o em seus servidores.
- Edite
Edite a diretiva do coletor de desempenho:
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector"> <Counters> <Add PerformanceCounter="\Objects\Processes"/> <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/> </Counters> </Add>
Você captura contadores padrão e contadores que você mesmo implementa.
\Objects\Processes é um exemplo de um contador padrão que está disponível em todos os sistemas Windows.
\Sales(photo)\# Items Sold é um exemplo de um contador personalizado que pode ser implementado em um serviço Web.
O formato é \Category(instance)\Counter, ou para categorias que não têm instâncias, apenas \Category\Counter.
O ReportAs parâmetro é necessário para nomes de contadores que não correspondem ao [a-zA-Z()/-_ \.]+.
Se você especificar uma instância, ela se tornará uma dimensão CounterInstanceName da métrica relatada.
Opção 2: Configuração no código
Consulte a secção seguinte.
ASP.NET Core
Configure PerformanceCollectorModule após o WebApplication.CreateBuilder() método em Program.cs:
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
// The following configures PerformanceCollectorModule.
builder.Services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
{
// The application process name could be "dotnet" for ASP.NET Core self-hosted applications.
module.Counters.Add(new PerformanceCounterCollectionRequest(@"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
});
var app = builder.Build();
Coletar contadores de desempenho em código para aplicativos Web ASP.NET ou aplicativos de console .NET/.NET Core
Para coletar contadores de desempenho do sistema e enviá-los para o Application Insights, você pode adaptar o seguinte trecho:
var perfCollectorModule = new PerformanceCollectorModule();
perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
@"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
perfCollectorModule.Initialize(TelemetryConfiguration.Active);
Ou você pode fazer a mesma coisa com métricas personalizadas que você criou:
var perfCollectorModule = new PerformanceCollectorModule();
perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
@"\Sales(photo)\# Items Sold", "Photo sales"));
perfCollectorModule.Initialize(TelemetryConfiguration.Active);
Contadores de desempenho para aplicativos executados em Aplicativos Web do Azure e contêineres do Windows no Serviço de Aplicativo do Azure
Os aplicativos ASP.NET e ASP.NET Core implantados nos Aplicativos Web do Azure são executados em um ambiente de área restrita especial. Os aplicativos implantados no Serviço de Aplicativo do Azure podem utilizar um contêiner do Windows ou ser hospedados em um ambiente de área restrita. Se o aplicativo for implantado em um contêiner do Windows, todos os contadores de desempenho padrão estarão disponíveis na imagem do contêiner.
O ambiente de área restrita não permite acesso direto aos contadores de desempenho do sistema. No entanto, um subconjunto limitado de contadores é exposto como variáveis de ambiente, conforme descrito em Contadores de Perf expostos como variáveis de ambiente. Apenas um subconjunto de contadores está disponível neste ambiente. Para obter a lista completa, consulte Contadores Perf expostos como variáveis de ambiente.
O SDK do Application Insights para ASP.NET e ASP.NET Core deteta se o código é implantado em um aplicativo Web ou em um contêiner que não seja do Windows. A deteção determina se ele coleta contadores de desempenho em um ambiente de área restrita ou utiliza o mecanismo de coleta padrão quando hospedado em um contêiner do Windows ou máquina virtual.
Consultas do Log Analytics para contadores de desempenho
Você pode pesquisar e exibir relatórios do contador de desempenho no Log Analytics.
O esquema performanceCounters expõe o categorycounter , nome e instance nome de cada contador de desempenho. Na telemetria de cada aplicativo, você vê apenas os contadores desse aplicativo. Por exemplo, para ver quais contadores estão disponíveis:
performanceCounters | summarize count(), avg(value) by category, instance, counter
Aqui, Instance refere-se à instância do contador de desempenho, não à função ou à instância da máquina do servidor. O nome da instância do contador de desempenho normalmente segmenta os contadores, como o tempo do processador, pelo nome do processo ou aplicativo.
Para obter um gráfico de memória disponível durante o período recente:
performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart
Como outras telemetrias, performanceCounters também tem uma coluna cloud_RoleInstance que indica a identidade da instância do servidor host na qual seu aplicativo está sendo executado. Por exemplo, para comparar o desempenho do seu aplicativo nas diferentes máquinas:
performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)
Perguntas frequentes sobre contadores de desempenho
Para rever as perguntas frequentes (FAQ), consulte Perguntas frequentes sobre contadores de desempenho.
Contadores de eventos
EventCounter é o mecanismo .NET/.NET Core para publicar e consumir contadores ou estatísticas. Os EventCounters são suportados em todas as plataformas de SO - Windows, Linux e macOS. Ele pode ser pensado como um equivalente multiplataforma para PerformanceCounters que só são suportados em sistemas Windows.
Embora os usuários possam publicar quaisquer contadores de eventos personalizados para atender às suas necessidades, o .NET publica um conjunto desses contadores por padrão. Este documento percorre as etapas necessárias para coletar e exibir contadores de eventos (definidos pelo sistema ou pelo usuário) no Azure Application Insights.
Sugestão
Como outras métricas, você pode definir um alerta para avisar se um contador sair de um limite especificado. Para definir um alerta, abra o painel Alertas e selecione Adicionar alerta.
Usando o Application Insights para coletar EventCounters
O Application Insights oferece suporte à coleta EventCounters com seu EventCounterCollectionModule, que faz parte do recém-lançado pacote NuGet Microsoft.ApplicationInsights.EventCounterCollector.
EventCounterCollectionModule é ativado automaticamente ao usar AspNetCore ou WorkerService.
EventCounterCollectionModule Recolhe contadores com uma frequência de recolha não configurável de 60 segundos. Não há permissões especiais necessárias para coletar EventCounters. Para aplicativos ASP.NET Core, você também deseja adicionar o pacote Microsoft.ApplicationInsights.AspNetCore .
dotnet add package Microsoft.ApplicationInsights.EventCounterCollector
dotnet add package Microsoft.ApplicationInsights.AspNetCore
Contadores padrão coletados
A partir da versão 2.15.0 do AspNetCore SDK ou do WorkerService SDK, nenhum contador é coletado por padrão. O módulo em si está ativado, para que os usuários possam adicionar os contadores desejados para coletá-los.
Para obter uma lista de contadores conhecidos publicados pelo .NET Runtime, consulte Documento Contadores disponíveis .
Personalização de contadores a serem coletados
O exemplo a seguir mostra como adicionar/remover contadores. Essa personalização seria feita como parte da configuração do serviço de aplicativo depois que a coleta de telemetria do Application Insights fosse habilitada usando um ou AddApplicationInsightsTelemetry()AddApplicationInsightsWorkerService(). A seguir está um exemplo de código de um aplicativo ASP.NET Core. Para outros tipos de aplicativos, consulte Configurar módulos de telemetria.
using Microsoft.ApplicationInsights.Extensibility.EventCounterCollector;
using Microsoft.Extensions.DependencyInjection;
builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>(
(module, o) =>
{
// Removes all default counters, if any.
module.Counters.Clear();
// Adds a user defined counter "MyCounter" from EventSource named "MyEventSource"
module.Counters.Add(
new EventCounterCollectionRequest("MyEventSource", "MyCounter"));
// Adds the system counter "gen-0-size" from "System.Runtime"
module.Counters.Add(
new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
}
);
Desativando o módulo de coleta EventCounter
EventCounterCollectionModule pode ser desativado usando ApplicationInsightsServiceOptions.
O exemplo a seguir usa o ASP.NET Core SDK.
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;
var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);
Uma abordagem semelhante também pode ser usada para o SDK do Serviço de Trabalho, mas o namespace deve ser alterado conforme mostrado no exemplo a seguir.
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.Extensions.DependencyInjection;
var applicationInsightsServiceOptions = new ApplicationInsightsServiceOptions();
applicationInsightsServiceOptions.EnableEventCounterCollectionModule = false;
builder.Services.AddApplicationInsightsTelemetry(applicationInsightsServiceOptions);
Consultas do Log Analytics para contadores de eventos
Você pode pesquisar e exibir relatórios do contador de eventos no Log Analytics, na tabela customMetrics .
Por exemplo, execute a seguinte consulta para ver quais contadores são coletados e estão disponíveis para consulta:
customMetrics | summarize avg(value) by name
Para obter um gráfico de um contador específico (por exemplo: ThreadPool Completed Work Item Count) durante o período recente, execute a seguinte consulta.
customMetrics
| where name contains "System.Runtime|ThreadPool Completed Work Item Count"
| where timestamp >= ago(1h)
| summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart
Como outras telemetrias, customMetrics também tem uma coluna cloud_RoleInstance que indica a identidade da instância do servidor host na qual seu aplicativo está sendo executado. A consulta anterior mostra o valor do contador por instância e pode ser usada para comparar o desempenho de diferentes instâncias do servidor.
Perguntas frequentes sobre contadores de eventos
Para rever as perguntas mais frequentes (FAQ), consulte Perguntas frequentes sobre contadores de eventos.
Coleção de instantâneos
Para saber como configurar a coleta de instantâneos para aplicativos ASP.NET e ASP.NET Core, consulte Habilitar o depurador de instantâneo para aplicativos .NET no Azure Service Fabric, Serviços de Nuvem e Máquinas Virtuais.
Telemetria de processamento e filtragem
Nesta secção
- Telemetria de filtro e pré-processo
- Inicializadores de telemetria
- Processador de telemetria
- Amostragem
- Enriqueça dados através de HTTP
Filtrar e pré-processar telemetria
Você pode escrever código para filtrar, modificar ou enriquecer sua telemetria antes que ela seja enviada do SDK. O processamento inclui dados enviados dos módulos padrão de telemetria, como a recolha de pedidos HTTP e a recolha de dependências.
A filtragem pode modificar ou descartar a telemetria antes de ser enviada do SDK ao implementar
ITelemetryProcessor. Por exemplo, você pode reduzir o volume de telemetria excluindo solicitações de robôs. Ao contrário da amostragem, você tem controle total sobre o que é enviado ou descartado, mas isso afeta qualquer métrica baseada em logs agregados. Dependendo de como você descarta itens, você também pode perder a capacidade de navegar entre itens relacionados.pt-PT: Adicione ou modifique propriedades a qualquer telemetria enviada da sua aplicação implementando um
ITelemetryInitializer. Por exemplo, você pode adicionar valores calculados ou números de versão para filtrar os dados no portal.A amostragem reduz o volume de telemetria sem afetar suas estatísticas. Ele mantém juntos pontos de dados relacionados para que você possa navegar entre eles quando diagnosticar um problema. No portal, as contagens totais são multiplicadas para compensar pela amostragem.
Observação
A API do SDK é usada para enviar eventos e métricas personalizados.
Filtering
Essa técnica oferece controle direto sobre o que está incluído ou excluído do fluxo de telemetria. A filtragem pode ser usada para impedir que itens de telemetria sejam enviados para o Application Insights. Você pode usar a filtragem com amostragem ou separadamente.
Para filtrar a telemetria, escreva um processador de telemetria e registe-o com TelemetryConfiguration. Toda a telemetria passa pelo seu processador. Você pode optar por soltá-lo do fluxo ou entregá-lo ao próximo processador na cadeia. A telemetria dos módulos padrão, como o coletor de solicitação HTTP e o coletor de dependência, e a telemetria que você mesmo rastreou estão incluídas. Por exemplo, é possível filtrar a telemetria sobre solicitações de robôs ou chamadas de dependência bem-sucedidas.
Advertência
Filtrar a telemetria enviada do SDK usando processadores pode distorcer as estatísticas que você vê no portal e dificultar o acompanhamento de itens relacionados.
Em vez disso, considere o uso de amostragem.
ITelemetryProcessor e ITelemetryInitializer
Qual é a diferença entre processadores de telemetria e inicializadores de telemetria?
- Existem algumas sobreposições no que você pode fazer com eles. Ambos podem ser usados para adicionar ou modificar propriedades de telemetria, embora recomendemos que você use inicializadores para essa finalidade.
- Os inicializadores de telemetria sempre são executados antes dos processadores de telemetria.
- Os inicializadores de telemetria podem ser chamados mais de uma vez. Por convenção, eles não configuram nenhuma propriedade que já estava configurada.
- Os processadores de telemetria permitem substituir ou descartar completamente um item de telemetria.
- Todos os inicializadores de telemetria registrados são chamados para cada item de telemetria. Para processadores de telemetria, o SDK assegura a invocação do primeiro processador de telemetria. Se o resto dos processadores são chamados ou não é decidido pelos processadores de telemetria anteriores.
- Use inicializadores de telemetria para enriquecer a telemetria com mais propriedades ou substituir uma existente. Use um processador de telemetria para filtrar a telemetria.
Adicionar/modificar propriedades
Use inicializadores de telemetria para enriquecer a telemetria com informações adicionais ou para substituir as propriedades de telemetria definidas pelos módulos de telemetria padrão.
Por exemplo, o Application Insights para um pacote web recolhe telemetria sobre solicitações HTTP. Por padrão, ele sinaliza qualquer solicitação com um código >de resposta =400 como falha. Se, em vez disso, quiser tratar 400 como um sucesso, você pode fornecer um inicializador de telemetria que define a propriedade success.
Se você fornecer um inicializador de telemetria, ele será chamado sempre que qualquer um dos métodos Track*() for chamado. Este inicializador inclui métodos Track() chamados pelos módulos padrão de telemetria. Por convenção, esses módulos não definem nenhuma propriedade que já tenha sido definida por um inicializador. Os inicializadores de telemetria são chamados antes de chamar os processadores de telemetria, portanto, qualquer enriquecimento feito pelos inicializadores é visível para os processadores.
Inicializadores de telemetria
Para enriquecer a telemetria com informações adicionais ou substituir as propriedades de telemetria definidas pelos módulos de telemetria padrão, use inicializadores de telemetria.
Os inicializadores de telemetria definem propriedades de contexto que são enviadas junto com cada item de telemetria. Você pode escrever seus próprios inicializadores para definir propriedades de contexto.
Os inicializadores padrão são todos definidos pelos pacotes NuGet da Web ou do WindowsServer:
| Inicializador | Description |
|---|---|
AccountIdTelemetryInitializer |
Define a AccountId propriedade. |
AuthenticatedUserIdTelemetryInitializer |
Define a AuthenticatedUserId propriedade como definida pelo JavaScript SDK. |
AzureRoleEnvironmentTelemetryInitializer |
Atualiza as RoleName propriedades e RoleInstance do contexto para todos os itens de telemetria Device com informações extraídas do ambiente de tempo de execução do Azure. |
BuildInfoConfigComponentVersionTelemetryInitializer |
Atualiza a VersionComponent propriedade do contexto para todos os itens de telemetria com o valor extraído do BuildInfo.config arquivo produzido pelo MS Build. |
ClientIpHeaderTelemetryInitializer |
Atualiza a Ip propriedade do Location contexto de todos os itens de telemetria X-Forwarded-For com base no cabeçalho HTTP da solicitação. |
DeviceTelemetryInitializer |
Atualiza as seguintes propriedades do contexto para todos os itens de Device telemetria:Type• está definido como PC.Id• está definido como o nome de domínio do computador onde a aplicação Web está a ser executada.OemName• é definido como o valor extraído do Win32_ComputerSystem.Manufacturer campo usando WMI.Model• é definido como o valor extraído do Win32_ComputerSystem.Model campo usando WMI.NetworkType• é definido para o valor extraído da NetworkInterface propriedade.Language• está definido como o nome da CurrentCulture propriedade. |
DomainNameRoleInstanceTelemetryInitializer |
Atualiza a RoleInstanceDevice propriedade do contexto para todos os itens de telemetria com o nome de domínio do computador onde o aplicativo Web está sendo executado. |
OperationNameTelemetryInitializer |
Atualiza a Name propriedade e RequestTelemetry a NameOperation propriedade do contexto de todos os itens de telemetria com base no método HTTP e os nomes do controlador MVC ASP.NET e da ação invocada para processar a solicitação. |
OperationIdTelemetryInitializer ou OperationCorrelationTelemetryInitializer |
Atualiza a Operation.Id propriedade context de todos os itens de telemetria rastreados durante o tratamento de uma solicitação com o arquivo RequestTelemetry.Id. |
SessionTelemetryInitializer |
Atualiza a Id propriedade do contexto para todos os itens de telemetria Session com valor extraído do ai_session cookie gerado pelo ApplicationInsights código de instrumentação JavaScript em execução no navegador do usuário. |
SyntheticTelemetryInitializer ou SyntheticUserAgentTelemetryInitializer |
Atualiza as Userpropriedades , Sessione Operation contexto de todos os itens de telemetria rastreados ao lidar com uma solicitação de uma fonte sintética, como um teste de disponibilidade ou bot de mecanismo de pesquisa. Por padrão, o explorador de métricas não exibe telemetria sintética.O <Filters> conjunto de propriedades de identificação das solicitações. |
UserTelemetryInitializer |
Atualiza as Id propriedades e AcquisitionDate do User contexto para todos os itens de telemetria com valores extraídos do ai_user cookie gerado pelo código de instrumentação JavaScript do Application Insights em execução no navegador do usuário. |
WebTestTelemetryInitializer |
Define o ID do usuário, o ID da sessão e as propriedades de origem sintética para solicitações HTTP provenientes de testes de disponibilidade. O <Filters> conjunto de propriedades de identificação das solicitações. |
Observação
Para aplicativos .NET em execução no Azure Service Fabric, você pode incluir o Microsoft.ApplicationInsights.ServiceFabric pacote NuGet. Este pacote inclui uma FabricTelemetryInitializer propriedade, que adiciona propriedades do Service Fabric a itens de telemetria. Para obter mais informações, consulte a página do GitHub sobre as propriedades adicionadas por este pacote NuGet.
Adicionar ITelemetryInitializer
Este blog descreve um projeto para diagnosticar problemas de dependência enviando automaticamente pings regulares para dependências.
Defina o inicializador
using System; using Microsoft.ApplicationInsights.Channel; using Microsoft.ApplicationInsights.DataContracts; using Microsoft.ApplicationInsights.Extensibility; namespace MvcWebRole.Telemetry { /* * Custom TelemetryInitializer that overrides the default SDK * behavior of treating response codes >= 400 as failed requests * */ public class MyTelemetryInitializer : ITelemetryInitializer { public void Initialize(ITelemetry telemetry) { var requestTelemetry = telemetry as RequestTelemetry; // Is this a TrackRequest() ? if (requestTelemetry == null) return; int code; bool parsed = Int32.TryParse(requestTelemetry.ResponseCode, out code); if (!parsed) return; if (code >= 400 && code < 500) { // If we set the Success property, the SDK won't change it: requestTelemetry.Success = true; // Allow us to filter these requests in the portal: requestTelemetry.Properties["Overridden400s"] = "true"; } // else leave the SDK to set the Success property } } }Carregue o inicializador
ASP.NET
Opção 1: Configuração no código
protected void Application_Start()
{
// ...
TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
}
Opção 2: Configuração no ApplicationInsights.config
<ApplicationInsights>
<TelemetryInitializers>
<!-- Fully qualified type name, assembly name: -->
<Add Type="MvcWebRole.Telemetry.MyTelemetryInitializer, MvcWebRole"/>
...
</TelemetryInitializers>
</ApplicationInsights>
Veja mais deste exemplo.
Observação
Verifique se o arquivo applicationinsights.config está no diretório de saída e contém as alterações recentes.
ASP.NET Core
Adicionar um inicializador usando
ApplicationInsights.configouTelemetryConfiguration.Activenão é válido para aplicativos ASP.NET Core.
Para aplicativos escritos usando o ASP.NET Core, a adição de um novo inicializador de telemetria é feita adicionando-o DependencyInjection ao contêiner, conforme mostrado. Execute este passo no método Startup.ConfigureServices.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
var app = builder.Build();
Observação
builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>(); Funciona para inicializadores simples. Para outros, builder.Services.AddSingleton(new MyCustomTelemetryInitializer() { fieldName = "myfieldName" }); é obrigatório.
Remover inicializadores de telemetria
Por padrão, os inicializadores de telemetria estão presentes. Para remover todos os inicializadores de telemetria ou específicos, use o código de exemplo a seguir depois de executar .
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
// Remove a specific built-in telemetry initializer
var tiToRemove = builder.Services.FirstOrDefault<ServiceDescriptor>
(t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
if (tiToRemove != null)
{
builder.Services.Remove(tiToRemove);
}
// Remove all initializers
// This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
builder.Services.RemoveAll(typeof(ITelemetryInitializer));
var app = builder.Build();
Serviço ao Trabalhador
Adicionar um inicializador usando
ApplicationInsights.configouTelemetryConfiguration.Activenão é válido para o SDK do Serviço de Trabalho.
Para aplicações escritas usando o Serviço de Trabalho, a adição de um novo inicializador de telemetria é feita ao adicioná-lo ao contêiner DependencyInjection, conforme mostrado. Execute este passo no método Startup.ConfigureServices.
using Microsoft.ApplicationInsights.Extensibility;
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
services.AddApplicationInsightsTelemetryWorkerService();
}
Remover inicializadores de telemetria
Os inicializadores de telemetria estão presentes por padrão. Para remover todos os inicializadores de telemetria ou específicos, use o código de exemplo a seguir depois de executar .
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetryWorkerService();
// Remove a specific built-in telemetry initializer.
var tiToRemove = services.FirstOrDefault<ServiceDescriptor>
(t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
if (tiToRemove != null)
{
services.Remove(tiToRemove);
}
// Remove all initializers.
// This requires importing namespace by using Microsoft.Extensions.DependencyInjection.Extensions;
services.RemoveAll(typeof(ITelemetryInitializer));
}
Exemplo de ITelemetryInitializers
Adicionar uma propriedade personalizada
O inicializador de exemplo a seguir adiciona uma propriedade personalizada a cada telemetria controlada.
public void Initialize(ITelemetry item)
{
var itemProperties = item as ISupportProperties;
if(itemProperties != null && !itemProperties.Properties.ContainsKey("customProp"))
{
itemProperties.Properties["customProp"] = "customValue";
}
}
Adicionar um nome de função de nuvem e uma instância de função de nuvem
Etapa 1: Escreva Inicializador de Telemetria personalizado
O inicializador de exemplo a seguir define o nome da função de nuvem para cada telemetria rastreada.
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
namespace CustomInitializer.Telemetry
{
public class MyTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName))
{
//set custom role name here
telemetry.Context.Cloud.RoleName = "Custom RoleName";
telemetry.Context.Cloud.RoleInstance = "Custom RoleInstance";
}
}
}
}
Etapa 2: Carregar um inicializador para TelemetryConfiguration
ASP.NET
No ficheiro ApplicationInsights.config :
<ApplicationInsights>
<TelemetryInitializers>
<!-- Fully qualified type name, assembly name: -->
<Add Type="CustomInitializer.Telemetry.MyTelemetryInitializer, CustomInitializer"/>
...
</TelemetryInitializers>
</ApplicationInsights>
Um método alternativo para ASP.NET aplicativos Web é instanciar o inicializador no código. O exemplo a seguir mostra o código no arquivo Global.aspx.cs :
using Microsoft.ApplicationInsights.Extensibility;
using CustomInitializer.Telemetry;
protected void Application_Start()
{
// ...
TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
}
ASP.NET Core
Para adicionar uma nova TelemetryInitializer instância, adicione-a ao contêiner de injeção de dependência. O exemplo a seguir mostra essa abordagem. Adicione este código no ConfigureServices método da sua Startup.cs classe.
using Microsoft.ApplicationInsights.Extensibility;
using CustomInitializer.Telemetry;
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}
Controle o endereço IP do cliente usado para mapeamentos de geolocalização
O inicializador de exemplo a seguir define o IP do cliente, que é usado para mapeamento de geolocalização, em vez do endereço IP do soquete do cliente, durante a ingestão de telemetria.
public void Initialize(ITelemetry telemetry)
{
var request = telemetry as RequestTelemetry;
if (request == null) return true;
request.Context.Location.Ip = "{client ip address}"; // Could utilize System.Web.HttpContext.Current.Request.UserHostAddress;
return true;
}
Processadores de telemetria
Os processadores de telemetria podem filtrar e modificar cada item de telemetria antes de ser enviado do SDK para o portal.
Implementar ITelemetryProcessor
Os processadores de telemetria constroem uma cadeia de processamento. Quando você instancia um processador de telemetria, obtém uma referência ao próximo processador na cadeia. Quando um ponto de dados de telemetria é passado para o método de processo, ele faz seu trabalho e, em seguida, chama (ou não chama) o próximo processador de telemetria na cadeia.
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.DataContracts;
public class SuccessfulDependencyFilter : ITelemetryProcessor
{
private ITelemetryProcessor Next { get; set; }
// next will point to the next TelemetryProcessor in the chain.
public SuccessfulDependencyFilter(ITelemetryProcessor next)
{
this.Next = next;
}
public void Process(ITelemetry item)
{
// To filter out an item, return without calling the next processor.
if (!OKtoSend(item)) { return; }
this.Next.Process(item);
}
// Example: replace with your own criteria.
private bool OKtoSend (ITelemetry item)
{
var dependency = item as DependencyTelemetry;
if (dependency == null) return true;
return dependency.Success != true;
}
}
Adicione o seu processador
ASP.NET
Insira este trecho em ApplicationInsights.config:
<TelemetryProcessors>
<Add Type="WebApplication9.SuccessfulDependencyFilter, WebApplication9">
<!-- Set public property -->
<MyParamFromConfigFile>2-beta</MyParamFromConfigFile>
</Add>
</TelemetryProcessors>
Você pode passar valores de string do arquivo .config fornecendo propriedades nomeadas públicas na sua classe.
Advertência
Tenha cuidado ao corresponder o nome do tipo e quaisquer nomes de propriedade no ficheiro .config aos nomes de classe e propriedade no código. Se o arquivo .config fizer referência a um tipo ou propriedade inexistente, o SDK poderá silenciosamente falhar ao enviar qualquer telemetria.
Como alternativa, você pode inicializar o filtro no código. Em uma classe de inicialização adequada, por exemplo, AppStart em Global.asax.cs, insira o seu processador numa cadeia:
Observação
O exemplo de código a seguir é obsoleto, mas é disponibilizado aqui para a posteridade. Considere começar a usar o OpenTelemetry ou migrar para o OpenTelemetry.
var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
builder.Use((next) => new SuccessfulDependencyFilter(next));
// If you have more processors:
builder.Use((next) => new AnotherProcessor(next));
builder.Build();
Os clientes de telemetria criados após este ponto usam seus processadores.
Processador de telemetria de amostragem adaptável (da versão 2.0.0-beta3)
Esta funcionalidade está ativada por predefinição. Se o seu aplicativo enviar uma telemetria considerável, esse processador removerá parte dela.
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
</Add>
</TelemetryProcessors>
O parâmetro fornece o destino que o algoritmo tenta alcançar. Cada instância do SDK funciona de forma independente. Assim, se o seu servidor for um cluster de várias máquinas, o volume real de telemetria será multiplicado de acordo.
Saiba mais sobre amostragem.
Processador de telemetria de amostragem de taxa fixa (a partir de 2.0.0-beta1)
Há também um processador de telemetria de amostragem padrão (a partir da versão 2.0.1):
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.SamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<!-- Set a percentage close to 100/N where N is an integer. -->
<!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) -->
<SamplingPercentage>10</SamplingPercentage>
</Add>
</TelemetryProcessors>
ASP.NET Core
Observação
Adicionar um processador usando ApplicationInsights.config ou TelemetryConfiguration.Active não é válido para aplicativos ASP.NET Core ou se você estiver usando o SDK Microsoft.ApplicationInsights.WorkerService.
Para ASP.NET Core, a adição de um novo processador de telemetria é feita usando o AddApplicationInsightsTelemetryProcessor método de extensão em IServiceCollection, conforme mostrado. Este método é chamado no ConfigureServices método da sua Startup.cs classe.
var builder = WebApplication.CreateBuilder(args);
// ...
builder.Services.AddApplicationInsightsTelemetry();
builder.Services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();
// If you have more processors:
builder.Services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();
var app = builder.Build();
Para registrar processadores de telemetria que precisam de parâmetros no ASP.NET Core, crie uma classe personalizada implementando ITelemetryProcessorFactory. Chame o construtor com os parâmetros desejados no método Create e, em seguida, use AddSingleton<ITelemetryProcessorFactory, MyTelemetryProcessorFactory>().
Serviço ao Trabalhador
Observação
Adicionar um processador usando ApplicationInsights.config ou TelemetryConfiguration.Active não é válido para aplicativos ASP.NET Core ou se você estiver usando o SDK Microsoft.ApplicationInsights.WorkerService.
Para o Serviço Worker, adicionar um novo processador de telemetria é feito usando o método de extensão AddApplicationInsightsTelemetryProcessor em IServiceCollection, conforme mostrado. Este método é chamado no ConfigureServices método da sua Startup.cs classe.
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetryWorkerService();
services.AddApplicationInsightsTelemetryProcessor<MyFirstCustomTelemetryProcessor>();
// If you have more processors:
services.AddApplicationInsightsTelemetryProcessor<MySecondCustomTelemetryProcessor>();
}
Exemplos de filtros
Pedidos sintéticos
Filtre os bots e testes da web. Embora o Metrics Explorer ofereça a opção de filtrar fontes sintéticas, essa opção reduz o tráfego e o tamanho da ingestão filtrando-os no próprio SDK.
public void Process(ITelemetry item)
{
if (!string.IsNullOrEmpty(item.Context.Operation.SyntheticSource)) {return;}
// Send everything else:
this.Next.Process(item);
}
Falha na autenticação
Filtre as solicitações com uma resposta "401".
public void Process(ITelemetry item)
{
var request = item as RequestTelemetry;
if (request != null &&
request.ResponseCode.Equals("401", StringComparison.OrdinalIgnoreCase))
{
// To filter out an item, return without calling the next processor.
return;
}
// Send everything else
this.Next.Process(item);
}
Filtrar chamadas rápidas de dependência remota
Se você quiser diagnosticar apenas chamadas que são lentas, filtre as rápidas.
Observação
Essa filtragem distorce as estatísticas que você vê no portal.
public void Process(ITelemetry item)
{
var request = item as DependencyTelemetry;
if (request != null && request.Duration.TotalMilliseconds < 100)
{
return;
}
this.Next.Process(item);
}
Amostragem
Para saber como configurar a amostragem para aplicativos ASP.NET e ASP.NET Core, consulte Amostragem no Application Insights.
Serviço ao Trabalhador
O SDK do Application Insights for Worker Service oferece suporte à amostragem de taxa fixa e à amostragem adaptável. A amostragem adaptável está habilitada por padrão. A amostragem pode ser desabilitada usando a EnableAdaptiveSampling opção em ApplicationInsightsServiceOptions.
Para definir outras configurações de amostragem, você pode usar o seguinte exemplo:
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
// Using adaptive sampling
telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);
// Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
// telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
});
builder.Services.AddApplicationInsightsTelemetryWorkerService(new ApplicationInsightsServiceOptions
{
EnableAdaptiveSampling = false,
});
var app = builder.Build();
Enriqueça dados através de HTTP
ASP.NET
var requestTelemetry = HttpContext.Current?.Items["Microsoft.ApplicationInsights.RequestTelemetry"] as RequestTelemetry;
if (requestTelemetry != null)
{
requestTelemetry.Properties["myProp"] = "someData";
}
ASP.NET Core
HttpContext.Features.Get<RequestTelemetry>().Properties["myProp"] = someData
Configuração do SDK
Nesta secção
- Canais de telemetria
- Módulos de telemetria
- Desativar telemetria
- Cadeia de conexão
- Provedor ApplicationId
Você pode personalizar o SDK do Application Insights para ASP.NET, ASP.NET Core e Serviço de Trabalho para alterar a configuração padrão.
ASP.NET
O SDK do .NET do Application Insights consiste em muitos pacotes NuGet. O pacote principal fornece a API para enviar telemetria para o Application Insights. Mais pacotes fornecem módulos de telemetria e inicializadores para rastrear automaticamente a telemetria do seu aplicativo e seu contexto. Ajustando o arquivo de configuração, você pode habilitar ou desabilitar módulos de telemetria e inicializadores. Você também pode definir parâmetros para alguns deles.
O arquivo de configuração é nomeado ApplicationInsights.config ou ApplicationInsights.xml. O nome depende do tipo do seu pedido. Ele é adicionado automaticamente ao seu projeto quando você instala a maioria das versões do SDK.
Por padrão, quando você usa a experiência automatizada dos projetos de modelo do Visual Studio que oferecem suporte a Telemetria Add>Application Insights, o ApplicationInsights.config arquivo é criado na pasta raiz do projeto. Depois de compilar, ele é copiado para a pasta bin. Ele também é adicionado a um aplicativo Web pelo Application Insights Agent em um servidor IIS.
Importante
O arquivo de configuração será ignorado se a extensão para sites do Azure ou a extensão para VMs do Azure e conjuntos de escala de máquina virtual do Azure for usada.
Não há um arquivo equivalente para controlar o SDK em uma página da Web.
ASP.NET Core
Em aplicativos ASP.NET Core, todas as alterações de configuração são feitas no ConfigureServices() método de sua classe Startup.cs , a menos que indicado de outra forma.
Observação
Em aplicativos ASP.NET Core, não há suporte para alterar a configuração modificando TelemetryConfiguration.Active .
Serviço ao Trabalhador
O padrão TelemetryConfiguration utilizado pelo SDK do Serviço do Trabalhador é semelhante à configuração utilizada automaticamente em uma aplicação ASP.NET ou ASP.NET Core, à exceção dos inicializadores de telemetria que são usados para melhorar a telemetria do HttpContext.
Você pode personalizar o SDK do Application Insights para o Serviço de Trabalho para alterar a configuração padrão. Os usuários do SDK do Application Insights ASP.NET Core podem estar familiarizados com a alteração da configuração usando a injeção de dependência interna do ASP.NET Core. O SDK do Serviço de Trabalho também se baseia em princípios semelhantes. Faça quase todas as alterações de configuração na ConfigureServices() seção chamando os métodos apropriados no IServiceCollection, conforme detalhado na próxima seção.
Observação
Quando você usa o SDK do Serviço de Trabalho, não há suporte para alterar a configuração modificando TelemetryConfiguration.Active e as alterações não serão refletidas.
Canais de telemetria
Os canais de telemetria são parte integrante dos SDKs do Application Insights. Eles gerenciam o buffer e a transmissão de telemetria para o serviço Application Insights. As versões .NET e .NET Core dos SDKs têm dois canais de telemetria internos: InMemoryChannel e ServerTelemetryChannel. Esta seção descreve cada canal e mostra como personalizar o comportamento do canal.
Observação
Para rever as perguntas frequentes (FAQ), consulte Perguntas frequentes sobre canais de telemetria
O que são canais de telemetria?
Os canais de telemetria são responsáveis por armazenar itens de telemetria em buffer e enviá-los para o serviço Application Insights, onde são armazenados para consulta e análise. Um canal de telemetria é qualquer classe que implementa a Microsoft.ApplicationInsights.ITelemetryChannel interface.
O Send(ITelemetry item) método de um canal de telemetria é chamado depois que todos os inicializadores de telemetria e processadores de telemetria são chamados. Assim, qualquer item descartado por um processador de telemetria não chega ao canal. Normalmente Send() , o método não envia os itens para o back-end instantaneamente. Normalmente, ele os armazena em buffer na memória e os envia em lotes para uma transmissão eficiente.
Evite ligar Flush() , a menos que seja fundamental enviar telemetria em buffer imediatamente. Use-o somente em cenários como desligamento de aplicativos, tratamento de exceções ou ao usar processos de curta duração, como trabalhos em segundo plano ou ferramentas de linha de comando. Em aplicativos Web ou serviços de longa execução, o SDK lida com o envio de telemetria automaticamente. Chamar Flush() desnecessariamente pode causar problemas de desempenho.
Live Metrics Stream também tem um canal personalizado que alimenta a transmissão ao vivo de telemetria. Este canal é independente do canal de telemetria regular, e este documento não se aplica a ele.
Canais de telemetria integrados
Os SDKs .NET e .NET Core do Application Insights são fornecidos com dois canais internos:
InMemoryChannel: Um canal leve que armazena itens em buffer na memória até que eles sejam enviados. Os itens são armazenados em buffer na memória e liberados uma vez a cada 30 segundos ou sempre que 500 itens são armazenados em buffer. Este canal oferece garantias mínimas de confiabilidade porque não tenta enviar telemetria novamente após uma falha. Este canal também não mantém itens no disco. Assim, todos os itens não enviados são perdidos permanentemente após o desligamento do aplicativo, seja ele gracioso ou não. Esse canal implementa um
Flush()método que pode ser usado para forçar a liberação de quaisquer itens de telemetria na memória de forma síncrona. Este canal é adequado para aplicações de curta duração onde uma descarga síncrona é ideal.Esse canal faz parte do pacote NuGet maior do Microsoft.ApplicationInsights e é o canal padrão que o SDK usa quando nada mais é configurado.
ServerTelemetryChannel: Um canal mais avançado que tem políticas de repetição e a capacidade de armazenar dados em um disco local. Este canal tenta novamente enviar telemetria se ocorrerem erros transitórios. Esse canal também usa armazenamento em disco local para manter itens no disco durante interrupções de rede ou altos volumes de telemetria. Devido a esses mecanismos de repetição e armazenamento em disco local, esse canal é considerado mais confiável. Recomendamos para todos os cenários de produção. Este canal é o padrão para aplicativos ASP.NET e ASP.NET Core que são configurados de acordo com a documentação oficial. Esse canal é otimizado para cenários de servidor com processos de longa execução. O
Flush()método implementado por este canal não é síncrono.Esse canal é fornecido como o pacote NuGet Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel e é adquirido automaticamente quando você usa o pacote NuGet Microsoft.ApplicationInsights.Web ou Microsoft.ApplicationInsights.AspNetCore.
Configurar um canal de telemetria
Configure um canal de telemetria definindo-o para a configuração de telemetria ativa. Para aplicativos ASP.NET, a configuração envolve definir a instância do canal de telemetria para TelemetryConfiguration.Active ou modificando ApplicationInsights.config. Para aplicativos ASP.NET Core, a configuração envolve a adição do canal ao contêiner de injeção de dependência.
As seções a seguir mostram exemplos de configuração da StorageFolder configuração para o canal em vários tipos de aplicativos.
StorageFolder é apenas uma das configurações configuráveis. Para obter a lista completa de definições de configuração, consulte a seção Configurações configuráveis em canais mais adiante neste artigo.
ASP.NET
Opção 1: Configuração no código
O código a seguir configura uma ServerTelemetryChannel instância com StorageFolder definido para um local personalizado. Adicione esse código no início do aplicativo, normalmente no Application_Start() método em Global.aspx.cs.
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
protected void Application_Start()
{
var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
}
Opção 2: Configuração no ApplicationInsights.config
A seção a seguir do ApplicationInsights.config mostra o ServerTelemetryChannel canal configurado com StorageFolder definido para um local personalizado:
<TelemetrySinks>
<Add Name="default">
<TelemetryProcessors>
<!-- Telemetry processors omitted for brevity -->
</TelemetryProcessors>
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">
<StorageFolder>d:\temp\applicationinsights</StorageFolder>
</TelemetryChannel>
</Add>
</TelemetrySinks>
ASP.NET Core
Modifique o ConfigureServicesStartup.cs método da classe como mostrado aqui:
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
public void ConfigureServices(IServiceCollection services)
{
// This sets up ServerTelemetryChannel with StorageFolder set to a custom location.
services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel() {StorageFolder = @"d:\temp\applicationinsights" });
services.AddApplicationInsightsTelemetry();
}
Importante
A configuração do canal usando TelemetryConfiguration.Active não é suportada para aplicativos ASP.NET Core.
Substituindo ServerTelemetryChannel
O canal de telemetria padrão é ServerTelemetryChannel. O exemplo a seguir mostra como substituí-lo.
using Microsoft.ApplicationInsights.Channel;
var builder = WebApplication.CreateBuilder(args);
// Use the following to replace the default channel with InMemoryChannel.
// This can also be applied to ServerTelemetryChannel.
builder.Services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });
builder.Services.AddApplicationInsightsTelemetry();
var app = builder.Build();
Observação
Se pretender libertar a memória intermédia, consulte Libertar dados. Por exemplo, talvez seja necessário liberar o buffer se estiver usando o SDK em um aplicativo que é desligado.
Serviço ao Trabalhador
O canal padrão é ServerTelemetryChannel. Você pode substituí-lo como mostra o exemplo a seguir:
using Microsoft.ApplicationInsights.Channel;
public void ConfigureServices(IServiceCollection services)
{
// Use the following to replace the default channel with InMemoryChannel.
// This can also be applied to ServerTelemetryChannel.
services.AddSingleton(typeof(ITelemetryChannel), new InMemoryChannel() {MaxTelemetryBufferCapacity = 19898 });
services.AddApplicationInsightsTelemetryWorkerService();
}
Configuração em código para aplicativos de console
Para aplicativos de console, o código é o mesmo para .NET e .NET Core:
var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
Detalhes operacionais do ServerTelemetryChannel
ServerTelemetryChannel armazena os itens que chegam em um buffer na memória. Os itens são serializados, compactados e armazenados em uma Transmission instância uma vez a cada 30 segundos ou quando 500 itens são armazenados em buffer. Uma única Transmission instância contém até 500 itens e representa um lote de telemetria que é enviado por uma única chamada HTTPS para o serviço Application Insights.
Por padrão, um máximo de 10 Transmission instâncias podem ser enviadas em paralelo. Se a telemetria estiver chegando a taxas mais rápidas, ou se a rede ou o back-end do Application Insights estiver lento, Transmission as instâncias serão armazenadas na memória. A capacidade padrão desse buffer na memória Transmission é de 5 MB. Quando a capacidade na memória é excedida, Transmission as instâncias são armazenadas no disco local até um limite de 50 MB.
Transmission As instâncias são armazenadas no disco local também quando há problemas de rede. Somente os itens armazenados em um disco local sobrevivem a uma falha de aplicativo. Eles são enviados sempre que o aplicativo é reiniciado. Se os problemas de rede persistirem, ServerTelemetryChannel usa uma lógica de backoff exponencial que varia de 10 segundos a 1 hora antes de tentar enviar novamente a telemetria.
Configurações configuráveis em canais
Para obter a lista completa de configurações configuráveis para cada canal, consulte:
- InMemoryChannel
- ServerTelemetryChannel
Aqui estão as configurações mais usadas para ServerTelemetryChannel:
MaxTransmissionBufferCapacity: A quantidade máxima de memória, em bytes, usada pelo canal para buffer transmissões na memória. Quando essa capacidade é atingida, novos itens são armazenados diretamente no disco local. O valor padrão é 5 MB. Definir um valor mais alto leva a menos uso do disco, mas lembre-se de que os itens na memória são perdidos se o aplicativo falhar.MaxTransmissionSenderCapacity: O número máximo deTransmissioninstâncias que são enviadas para o Application Insights ao mesmo tempo. O valor padrão é 10. Essa configuração pode ser configurada para um número maior, o que recomendamos quando um grande volume de telemetria é gerado. O volume elevado ocorre normalmente durante o teste de carga ou quando a amostragem está desligada.StorageFolder: A pasta usada pelo canal para armazenar itens no disco conforme necessário. No Windows, %LOCALAPPDATA% ou %TEMP% é usado se nenhum outro caminho for especificado explicitamente. Em ambientes diferentes do Windows, por padrão, os seguintes locais são usados (na ordem): %TMPDIR%, /var/tmp/ ou /tmp/.
Que canal devo utilizar?
Recomendamos ServerTelemetryChannel para a maioria dos cenários de produção que envolvem aplicativos de longa execução. Para obter mais informações sobre a telemetria de lavagem, leia sobre como usar Flush()o .
Quando utilizar Flush()
O Flush() método envia qualquer telemetria em buffer imediatamente. No entanto, só deve ser utilizado em cenários específicos.
Utilize Flush() quando:
- O aplicativo está prestes a ser desligado e você deseja garantir que a telemetria seja enviada antes de sair.
- Você está em um manipulador de exceções e precisa garantir que a telemetria seja entregue.
- Você está escrevendo um processo de curta duração, como um trabalho em segundo plano ou uma ferramenta CLI que sai rapidamente.
Evite usar Flush() em aplicativos de longa execução, como serviços Web. O SDK gerencia automaticamente o buffer e a transmissão. Ligar Flush() desnecessariamente pode causar problemas de desempenho e não garante que todos os dados sejam enviados, especialmente ao usar ServerTelemetryChannelo , que não é liberado de forma síncrona.
Módulos de telemetria
O Application Insights coleta automaticamente telemetria sobre cargas de trabalho específicas sem exigir rastreamento manual pelo usuário.
Por padrão, os seguintes módulos de coleta automática estão habilitados. Você pode desativá-los ou configurá-los para alterar seu comportamento padrão.
ASP.NET
Cada módulo de telemetria coleta um tipo específico de dados e usa a API principal para enviar os dados. Os módulos são instalados por diferentes pacotes NuGet, que também adicionam as linhas necessárias ao arquivo .config.
| Area | Description |
|---|---|
| Acompanhamento de pedidos | Coleta telemetria de solicitação (tempo de resposta, código de resultado) para solicitações da Web recebidas. Módulo: Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModuleNuGet:Microsoft.ApplicationInsights.Web |
| Acompanhamento de dependência | Coleta telemetria sobre dependências de saída (chamadas HTTP, chamadas SQL). Para trabalhar no IIS, instale o Application Insights Agent. Você também pode escrever controle de dependência personalizado usando a API TrackDependency. Suporta autoinstrumentação com App Service e o monitoramento de VMs e conjuntos de escalonamento de máquinas virtuais. Módulo: Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModuleNuGet:Microsoft.ApplicationInsights.DependencyCollector |
| Contadores de desempenho | Coleta contadores de desempenho do Windows (CPU, memória, carga de rede de instalações do IIS). Especifique quais contadores (incluindo os personalizados). Para obter mais informações, consulte Coleta contadores de desempenho do sistema. Módulo: Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModuleNuGet:Microsoft.ApplicationInsights.PerfCounterCollector |
| Contadores de eventos | Coleta .NET EventCounters. Recomendado para ASP.NET Core e multiplataforma no lugar de contadores de desempenho do Windows. Módulo: EventCounterCollectionModule (SDK ≥ 2.8.0) |
| Métricas ao vivo (QuickPulse) | Coleta telemetria para o painel Métricas em tempo real. Módulo: QuickPulseTelemetryModule |
| Batimentos cardíacos (Serviço de Aplicativo) | Envia pulsações e métricas personalizadas para o ambiente do Serviço de Aplicativo. Módulo: AppServicesHeartbeatTelemetryModule |
| Pulsações (VMs e conjuntos de dimensionamento de máquinas virtuais) | Envia pulsações e métricas personalizadas para o ambiente de VM do Azure. Módulo: AzureInstanceMetadataTelemetryModule |
| Telemetria de diagnóstico | Relata erros no código de instrumentação do Application Insights (por exemplo, contadores ausentes, ITelemetryInitializer exceções). A telemetria de rastreamento aparece na Pesquisa de Diagnóstico.Módulo: Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModuleNuGet:Microsoft.ApplicationInsights Observação: Se você instalar apenas este pacote, o arquivo ApplicationInsights.config não será criado automaticamente. |
| Modo de desenvolvedor (depurador anexado) | Força TelemetryChannel a enviar itens imediatamente quando o depurador é anexado. Reduz a latência, mas aumenta a sobrecarga de CPU/rede.Módulo: Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModuleNuGet:Application Insights Windows Server |
| Rastreamento de exceções (Web) | Rastreia exceções não tratadas em aplicativos Web. Consulte Falhas e exceções. Módulo: Microsoft.ApplicationInsights.Web.ExceptionTrackingTelemetryModuleNuGet:Microsoft.ApplicationInsights.Web |
| Rastreamento de exceções (não observado/não tratado) | Rastreia exceções de tarefas não observadas e exceções não tratadas para funções de trabalho, serviços do Windows e aplicativos de console. Módulos: • Microsoft.ApplicationInsights.WindowsServer.UnobservedExceptionTelemetryModule• Microsoft.ApplicationInsights.WindowsServer.UnhandledExceptionTelemetryModuleNuGet:Microsoft.ApplicationInsights.WindowsServer |
| Monitorização do EventSource | Envia eventos EventSource configurados para o Application Insights como rastreamentos. Módulo: Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModuleNuGet:Microsoft.ApplicationInsights.EventSourceListener |
| Coletor ETW | Envia eventos do provedor ETW configurados para o Application Insights como rastreamentos. Módulo: Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModuleNuGet:Microsoft.ApplicationInsights.EtwCollector |
| API principal (não um módulo) |
API principal usada por outros componentes de telemetria e para telemetria personalizada. Módulo: Microsoft.ApplicationInsights packageNuGet:Microsoft.ApplicationInsights Observação: Se você instalar apenas este pacote, o arquivo ApplicationInsights.config não será criado automaticamente. |
ASP.NET Core
| Area | Description |
|---|---|
| Acompanhamento de pedidos | Acompanhamento de solicitações integrado por meio da integração do ASP.NET Core Application Insights. Módulo:Nenhuma classe de módulo separada. NuGet:Microsoft.ApplicationInsights.AspNetCore |
| Acompanhamento de dependência | Via Coletor de Dependência. NuGet:Microsoft.ApplicationInsights.DependencyCollector |
| Contadores de desempenho | Apenas para Windows! Em plataformas cruzadas, use EventCounterCollectionModule (veja a próxima linha).NuGet:Microsoft.ApplicationInsights.PerfCounterCollector |
| Contadores de eventos | Coleta .NET EventCounters. Recomendado para ASP.NET Core e multiplataforma no lugar de contadores de desempenho do Windows. Módulo: EventCounterCollectionModule (SDK 2.8.0 e superior)NuGet:Microsoft.ApplicationInsights.EventCounterCollector |
| Métricas ao vivo (QuickPulse) | Métricas em tempo real ativadas na integração do ASP.NET Core Application Insights. Módulo:Nenhuma classe de módulo separada. NuGet:Microsoft.ApplicationInsights.AspNetCore |
| Coletor de pulsações (Serviço de Aplicativo) | Envia pulsações (como métricas personalizadas) com detalhes sobre o ambiente do Serviço de Aplicativo. Integrado via SDK base quando hospedado no Serviço de Aplicativo. Módulo:Nenhuma classe de módulo separada. NuGet:Microsoft.ApplicationInsights.AspNetCore |
| Coletor de pulsações (VMs e conjuntos de dimensionamento de máquinas virtuais) | Envia pulsações (como métricas personalizadas) com detalhes sobre o ambiente de VM do Azure. Incorporado através do SDK base quando alojado em VMs do Azure e conjuntos de escalonamento de máquinas virtuais do Azure. Módulo:Nenhuma classe de módulo separada. NuGet:Microsoft.ApplicationInsights.AspNetCore |
| Telemetria de diagnóstico | Relata erros no próprio código de instrumentação do Application Insights (por exemplo, não é possível acessar contadores de desempenho, ITelemetryInitializer gera uma exceção). A telemetria de rastreamento aparece na Pesquisa de Diagnóstico.Módulo: Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModuleNuGet:Microsoft.ApplicationInsights |
| Modo de desenvolvedor (depurador anexado) | Mesmo comportamento disponível; class faz parte do pacote do Windows Server. Módulo: Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModuleNuGet:Microsoft.ApplicationInsights.WindowsServer |
| Rastreamento de exceções (Web) | Rastreamento automático de exceções na integração do ASP.NET Core Application Insights Módulo:Nenhuma classe de módulo separada. NuGet:Microsoft.ApplicationInsights.AspNetCore |
| Rastreamento de exceções (não observado/não tratado) | Comportamento semelhante via tempo de execução/integração do ASP.NET Core; os nomes de classe são específicos do Windows Server. NuGet:Microsoft.ApplicationInsights.WindowsServer |
| Monitorização do EventSource | Envia eventos EventSource configurados para o Application Insights como rastreamentos. Módulo: Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModuleNuGet:Microsoft.ApplicationInsights.EventSourceListener |
| Coletor ETW | Somente Windows (ETW). Envia eventos do provedor ETW configurados para o Application Insights como rastreamentos. Módulo: Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModuleNuGet:Microsoft.ApplicationInsights.EtwCollector |
| API principal (não um módulo) | API principal usada por outros componentes de telemetria e para telemetria personalizada. Módulo: Microsoft.ApplicationInsights packageNuGet:Microsoft.ApplicationInsights |
Configurar módulos de telemetria
ASP.NET
Use a TelemetryModules seção no ApplicationInsights.config para configurar, adicionar ou remover módulos. Os seguintes exemplos:
- Configure
DependencyTrackingTelemetryModule(ative a injeção de cabeçalho W3C). - Configurar
EventCounterCollectionModule(limpar padrões e adicionar um único contador). - Desative a coleta perf-counter removendo
PerformanceCollectorModuleo .
<ApplicationInsights>
<TelemetryModules>
<!-- Dependency tracking -->
<Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
<!-- Match Core example: enable W3C header injection -->
<EnableW3CHeadersInjection>true</EnableW3CHeadersInjection>
</Add>
<!-- EventCounterCollectionModule: add a single counter (if you use event counters) -->
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.EventCounterCollectionModule, Microsoft.AI.PerfCounterCollector">
<Counters>
<!-- Mirrors Core example: only collect 'gen-0-size' from System.Runtime -->
<Add ProviderName="System.Runtime" CounterName="gen-0-size" />
</Counters>
</Add>
<!-- PerformanceCollectorModule (classic Windows performance counters).
To DISABLE perf-counter collection, do NOT include this module.
If it already exists in your file, remove or comment it out.
Example of the line you would remove:
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector" />
-->
</TelemetryModules>
</ApplicationInsights>
Observação
O conjunto exato de módulos presentes no seu ApplicationInsights.config depende de quais pacotes SDK você instalou.
ASP.NET Core
Opção 1: Configurar módulos de telemetria usando ConfigureTelemetryModule
Para configurar qualquer padrão TelemetryModule, use o método ConfigureTelemetryModule<T> extension no IServiceCollection, conforme mostrado no exemplo a seguir:
using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
// The following configures DependencyTrackingTelemetryModule.
// Similarly, any other default modules can be configured.
builder.Services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) =>
{
module.EnableW3CHeadersInjection = true;
});
// The following removes all default counters from EventCounterCollectionModule, and adds a single one.
builder.Services.ConfigureTelemetryModule<EventCounterCollectionModule>((module, o) =>
{
module.Counters.Add(new EventCounterCollectionRequest("System.Runtime", "gen-0-size"));
});
// The following removes PerformanceCollectorModule to disable perf-counter collection.
// Similarly, any other default modules can be removed.
var performanceCounterService = builder.Services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationType == typeof(PerformanceCollectorModule));
if (performanceCounterService != null)
{
builder.Services.Remove(performanceCounterService);
}
var app = builder.Build();
Opção 2: Configurar módulos de telemetria usando ApplicationInsightsServiceOptions
Nas versões 2.12.2 e posteriores do SDK, você pode modificar algumas configurações comuns passando ApplicationInsightsServiceOptions para AddApplicationInsightsTelemetry, como neste exemplo:
var builder = WebApplication.CreateBuilder(args);
var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
// Disables adaptive sampling.
aiOptions.EnableAdaptiveSampling = false;
// Disables live metrics (also known as QuickPulse).
aiOptions.EnableQuickPulseMetricStream = false;
builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();
Esta tabela tem a lista completa de ApplicationInsightsServiceOptions configurações:
| Configuração | Description | Predefinido |
|---|---|---|
| HabilitarMóduloDeColeçãoDeContadoresDeDesempenho | Ativar/Desativar PerformanceCounterCollectionModule. |
Verdade |
| MóduloDeTelemetriaDeSeguimentoDePedidosAtivado | Ativar/Desativar RequestTrackingTelemetryModule. |
Verdade |
| AtivarMóduloDeColetaDeContadoresDeEventos (EnableEventCounterCollectionModule) | Ativar/Desativar EventCounterCollectionModule. |
Verdade |
| ModuloDeTelemetriaDeRastreamentoDeDependenciasHabilitado | Ativar/Desativar DependencyTrackingTelemetryModule. |
Verdade |
| MóduloDeTelemetriaDeBatimentosDeServiçosDeAplicações | Ativar/Desativar AppServicesHeartbeatTelemetryModule. |
Verdade |
| Ativar o módulo de telemetria de metadados da instância do Azure | Ativar/Desativar AzureInstanceMetadataTelemetryModule. |
Verdade |
| AtivarFluxoMétricoPulsoRápido | Ativar/desativar o recurso LiveMetrics. | Verdade |
| Ativar Amostragem Adaptativa | Ativar/desativar a amostragem adaptável. | Verdade |
| AtivarBatimentoCardíaco | Ativar/desativar o recurso de pulsações. Ele envia periodicamente (padrão de 15 minutos) uma métrica personalizada nomeada HeartbeatState com informações sobre o tempo de execução, como a versão do .NET e as informações do ambiente do Azure, se aplicável. |
Verdade |
| AddAutoCollectedMetricExtractor (Adicionar Extrator de Métrica Coletada Automaticamente) | Ativar/desativar o AutoCollectedMetrics extractorarquivo . Esse processador de telemetria envia métricas pré-agregadas sobre solicitações/dependências antes que a amostragem ocorra. |
Verdade |
| OpçõesDeColeçãoDeSolicitações.TrackExceptions | Habilitar/desabilitar relatórios de rastreamento de exceções não tratadas pelo módulo de coleta de solicitações. | False in netstandard2.0 (porque as exceções são rastreadas com ApplicationInsightsLoggerProvider). Caso contrário. |
| AtivarMóduloDeTelemetriaDeDiagnóstico | Ativar/Desativar DiagnosticsTelemetryModule. A desativação faz com que as seguintes configurações sejam ignoradas: EnableHeartbeat, EnableAzureInstanceMetadataTelemetryModulee EnableAppServicesHeartbeatTelemetryModule. |
Verdade |
Para obter a lista mais atual, consulte as configurações configuráveis em ApplicationInsightsServiceOptions.
Recomendação de configuração para Microsoft.ApplicationInsights.AspNetCore SDK 2.15.0 e posterior
Em Microsoft.ApplicationInsights.AspNetCore SDK versão 2.15.0 e posterior, configure todas as configurações disponíveis no ApplicationInsightsServiceOptions, incluindo ConnectionString. Use a instância do IConfiguration aplicativo. As configurações devem estar na seção ApplicationInsights, conforme mostrado no exemplo a seguir. A seção a seguir do appsettings.json configura a cadeia de conexão e desabilita a amostragem adaptativa e a coleta do contador de desempenho.
{
"ApplicationInsights": {
"ConnectionString": "<YOUR-CONNECTION-STRING>",
"EnableAdaptiveSampling": false,
"EnablePerformanceCounterCollectionModule": false
}
}
Se builder.Services.AddApplicationInsightsTelemetry(aiOptions) for usado para ASP.NET Core 6.0 ou services.AddApplicationInsightsTelemetry(aiOptions) para ASP.NET Core 3.1 e versões anteriores, ele substituirá as configurações do Microsoft.Extensions.Configuration.IConfiguration.
Serviço ao Trabalhador
Opção 1: Configurar módulos de telemetria usando ConfigureTelemetryModule
O Application Insights usa módulos de telemetria para coletar automaticamente telemetria sobre cargas de trabalho específicas sem exigir rastreamento manual.
Os seguintes módulos de coleta automática são habilitados por padrão. Estes módulos são responsáveis pela recolha automática da telemetria. Você pode desativá-los ou configurá-los para alterar seu comportamento padrão.
DependencyTrackingTelemetryModulePerformanceCollectorModuleQuickPulseTelemetryModule-
AppServicesHeartbeatTelemetryModule(Atualmente, há um problema envolvendo este módulo de telemetria. Para obter uma solução temporária, consulte GitHub Issue 1689.) AzureInstanceMetadataTelemetryModule
Para configurar qualquer módulo de telemetria padrão, use o método de extensão ConfigureTelemetryModule em IServiceCollection, conforme mostrado no exemplo a seguir.
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse;
using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetryWorkerService();
// The following configures QuickPulseTelemetryModule.
// Similarly, any other default modules can be configured.
services.ConfigureTelemetryModule<QuickPulseTelemetryModule>((module, o) =>
{
module.AuthenticationApiKey = "<YOUR-API-KEY-HERE>";
});
// The following removes PerformanceCollectorModule to disable perf-counter collection.
// Similarly, any other default modules can be removed.
var performanceCounterService = services.FirstOrDefault<ServiceDescriptor>
(t => t.ImplementationType == typeof(PerformanceCollectorModule));
if (performanceCounterService != null)
{
services.Remove(performanceCounterService);
}
}
Opção 2: Configurar módulos de telemetria usando ApplicationInsightsServiceOptions
Você pode modificar algumas configurações comuns passando ApplicationInsightsServiceOptions para AddApplicationInsightsTelemetryWorkerService, como neste exemplo:
using Microsoft.ApplicationInsights.WorkerService;
public void ConfigureServices(IServiceCollection services)
{
var aiOptions = new ApplicationInsightsServiceOptions();
// Disables adaptive sampling.
aiOptions.EnableAdaptiveSampling = false;
// Disables live metrics (also known as QuickPulse).
aiOptions.EnableQuickPulseMetricStream = false;
services.AddApplicationInsightsTelemetryWorkerService(aiOptions);
}
O ApplicationInsightsServiceOptions neste SDK está no namespace Microsoft.ApplicationInsights.WorkerService em oposição ao Microsoft.ApplicationInsights.AspNetCore.Extensions SDK do ASP.NET Core.
A tabela a seguir lista as configurações mais usadas no ApplicationInsightsServiceOptions.
| Configuração | Description | Predefinido |
|---|---|---|
| AtivarFluxoMétricoPulsoRápido | Ativar/desativar o recurso de métricas ao vivo. | Verdade |
| Ativar Amostragem Adaptativa | Ativar/desativar a amostragem adaptável. | Verdade |
| AtivarBatimentoCardíaco | Habilite/desabilite o recurso Heartbeats, que periodicamente (padrão de 15 minutos) envia uma métrica personalizada chamada "HeartBeatState" com informações sobre o tempo de execução, como a versão .NET e o ambiente do Azure, se aplicável. | Verdade |
| AddAutoCollectedMetricExtractor (Adicionar Extrator de Métrica Coletada Automaticamente) | Habilite/desabilite o extrator AutoCollectedMetrics, que é um processador de telemetria que envia métricas pré-agregadas sobre solicitações/dependências antes que a amostragem ocorra. | Verdade |
| AtivarMóduloDeTelemetriaDeDiagnóstico | Ativar/Desativar DiagnosticsTelemetryModule. A desativação dessa configuração faz com que as seguintes configurações sejam ignoradas: EnableHeartbeat, EnableAzureInstanceMetadataTelemetryModulee EnableAppServicesHeartbeatTelemetryModule. |
Verdade |
Para obter a lista mais atualizada, consulte as definições configuráveis em ApplicationInsightsServiceOptions.
Desativar telemetria
ASP.NET
Há um nó no arquivo de configuração para cada módulo. Para desativar um módulo, exclua o nó ou comente-o.
ASP.NET Core
Se quiser desativar a telemetria de forma condicional e dinâmica, pode resolver a instância TelemetryConfiguration usando um contentor de injeção de dependência ASP.NET Core em qualquer parte do código e definir o sinalizador DisableTelemetry na instância.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
// any custom configuration can be done here:
builder.Services.Configure<TelemetryConfiguration>(x => x.DisableTelemetry = true);
var app = builder.Build();
O exemplo de código anterior impede o envio de telemetria para o Application Insights. Isso não impede que nenhum módulo de coleta automática colete telemetria. Se quiser remover um módulo de coleta automática específico, consulte Módulos de telemetria.
Serviço ao Trabalhador
Se quiser desativar a telemetria de forma condicional e dinâmica, pode resolver a instância TelemetryConfiguration usando um contentor de injeção de dependência ASP.NET Core em qualquer parte do código e definir o sinalizador DisableTelemetry na instância.
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetryWorkerService();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
{
configuration.DisableTelemetry = true;
...
}
Cadeia de ligação
Essa configuração determina o recurso do Application Insights no qual seus dados aparecem. Normalmente, você cria um recurso separado, com uma cadeia de conexão separada, para cada um dos seus aplicativos.
Consulte Cadeias de conexão no Application Insights para obter exemplos de código.
Se você quiser definir a cadeia de conexão dinamicamente, por exemplo, para enviar resultados do seu aplicativo para recursos diferentes, você pode omitir a cadeia de conexão do arquivo de configuração e defini-la no código.
ASP.NET
Para definir a cadeia de conexão para todas as instâncias do , incluindo módulos de telemetria padrão, execute esta etapa em um método de TelemetryClientinicialização, como global.aspx.cs em um serviço ASP.NET:
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights;
protected void Application_Start()
{
TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
configuration.ConnectionString = "<YOUR-CONNECTION-STRING>";
var telemetryClient = new TelemetryClient(configuration);
Se quiser enviar um conjunto específico de eventos para um recurso diferente, você pode definir a chave para um cliente de telemetria específico:
var tc = new TelemetryClient();
tc.Context.ConnectionString = "<YOUR-CONNECTION-STRING>";
tc.TrackEvent("myEvent");
// ...
Para obter uma nova cadeia de conexão, crie um novo recurso no portal do Application Insights.
ASP.NET Core
No ASP.NET Core, configure a cadeia de conexão durante Program.cs a inicialização do aplicativo usando o TelemetryConfiguration contêiner do DI (injeção de dependência):
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights;
var builder = WebApplication.CreateBuilder(args);
// Add Application Insights
builder.Services.AddApplicationInsightsTelemetry();
var app = builder.Build();
// Resolve TelemetryConfiguration from DI and set the connection string
var config = app.Services.GetRequiredService<TelemetryConfiguration>();
config.ConnectionString = "<YOUR-CONNECTION-STRING>";
app.Run();
Se quiser enviar um conjunto específico de eventos para um recurso diferente, você pode criar uma nova TelemetryClient instância e definir sua cadeia de conexão explicitamente:
using Microsoft.ApplicationInsights;
var tc = new TelemetryClient();
tc.Context.ConnectionString = "<YOUR-CONNECTION-STRING>";
tc.TrackEvent("myEvent");
// ...
Provedor ApplicationId
Observação
Por ASP.NET, este provedor está disponível a partir do SDK v2.6.0*.
O objetivo desse provedor é pesquisar uma ID de aplicativo com base em uma cadeia de conexão. O ID do aplicativo é incluído e RequestTelemetryDependencyTelemetry usado para determinar a correlação no portal.
Esta funcionalidade está disponível através da definição TelemetryConfiguration.ApplicationIdProvider.
Interface: IApplicationIdProvider
public interface IApplicationIdProvider
{
bool TryGetApplicationId(string connectionString, out string applicationId);
}
Fornecemos duas implementações no SDK do Microsoft.ApplicationInsights : ApplicationInsightsApplicationIdProvider e DictionaryApplicationIdProvider.
ApplicationInsightsApplicationIdProvider
Este wrapper é para a nossa API de perfil. Ele acelera solicitações e resultados de cache. Esse provedor é incluído automaticamente quando você instala Microsoft.ApplicationInsights.DependencyCollector ou Microsoft.ApplicationInsights.Web.
A classe expõe uma propriedade opcional chamada ProfileQueryEndpoint. Por padrão, ele é definido como https://dc.services.visualstudio.com/api/profiles/{0}/appId.
Se você precisar configurar um proxy, recomendamos fazer proxy do endereço base e garantir que o caminho inclua /api/profiles/{0}/appId. Em tempo de execução, {0} é substituída pela string de ligação de cada pedido.
ASP.NET
Exemplo de configuração via ApplicationInsights.config
<ApplicationInsights>
...
<ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights">
<ProfileQueryEndpoint>https://dc.services.visualstudio.com/api/profiles/{0}/appId</ProfileQueryEndpoint>
</ApplicationIdProvider>
...
</ApplicationInsights>
Exemplo de configuração via código
TelemetryConfiguration.Active.ApplicationIdProvider = new ApplicationInsightsApplicationIdProvider();
ASP.NET Core
Observação
No ASP.NET Core, não há nenhum arquivo ApplicationInsights.config . A configuração é feita através de injeção de dependência (DI) em Program.cs ou Startup.cs.
Você pode substituir o provedor padrão ou personalizar seu ProfileQueryEndpointarquivo .
using Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId;
var builder = WebApplication.CreateBuilder(args);
// Add Application Insights
builder.Services.AddApplicationInsightsTelemetry();
// Replace default provider with custom configuration
builder.Services.AddSingleton<IApplicationIdProvider>(sp =>
new ApplicationInsightsApplicationIdProvider
{
ProfileQueryEndpoint = "https://custom-proxy/api/profiles/{0}/appId"
});
var app = builder.Build();
app.Run();
DictionaryApplicationIdProvider
Este fornecedor estático baseia-se nos pares de strings de ligação configurados/ID de aplicação.
Esta classe tem a propriedade Defined, que é um conjunto de pares de string de conexão/ID de aplicação Dictionary<string,string>.
Essa classe tem a propriedade Nextopcional , que pode ser usada para configurar outro provedor a ser usado quando uma cadeia de conexão é solicitada que não existe em sua configuração.
ASP.NET
Exemplo de configuração via ApplicationInsights.config
<ApplicationInsights>
...
<ApplicationIdProvider Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.DictionaryApplicationIdProvider, Microsoft.ApplicationInsights">
<Defined>
<Type key="ConnectionString_1" value="ApplicationId_1"/>
<Type key="ConnectionString_2" value="ApplicationId_2"/>
</Defined>
<Next Type="Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId.ApplicationInsightsApplicationIdProvider, Microsoft.ApplicationInsights" />
</ApplicationIdProvider>
...
</ApplicationInsights>
Exemplo de configuração via código
TelemetryConfiguration.Active.ApplicationIdProvider = new DictionaryApplicationIdProvider{
Defined = new Dictionary<string, string>
{
{"ConnectionString_1", "ApplicationId_1"},
{"ConnectionString_2", "ApplicationId_2"}
}
};
ASP.NET Core
using Microsoft.ApplicationInsights.Extensibility.Implementation.ApplicationId;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddApplicationInsightsTelemetry();
// Register DictionaryApplicationIdProvider
builder.Services.AddSingleton<IApplicationIdProvider>(sp =>
new DictionaryApplicationIdProvider
{
Defined = new Dictionary<string, string>
{
{ "ConnectionString_1", "ApplicationId_1" },
{ "ConnectionString_2", "ApplicationId_2" }
},
Next = new ApplicationInsightsApplicationIdProvider() // optional fallback
});
var app = builder.Build();
app.Run();
Adicionar a monitorização do lado do cliente
As seções anteriores forneceram orientação sobre métodos para configurar automática e manualmente o monitoramento do lado do servidor. Para adicionar monitorização do lado do cliente, use o SDK de JavaScript do lado do cliente. Você pode monitorar as transações do lado do cliente de qualquer página da Web adicionando um JavaScript (Web) SDK Loader Script antes da tag de fechamento </head> do HTML da página.
Embora seja possível adicionar manualmente o JavaScript (Web) SDK Loader Script ao cabeçalho de cada página HTML, recomendamos que você adicione o JavaScript (Web) SDK Loader Script a uma página primária. Essa ação injeta o JavaScript (Web) SDK Loader Script em todas as páginas de um site.
ASP.NET
Para o aplicativo MVC de ASP.NET baseado em modelo deste artigo, o arquivo que você precisa editar é _Layout.cshtml. Você pode encontrá-lo em Visualizações>compartilhadas. Para adicionar monitoramento do lado do cliente, abra _Layout.cshtml e siga as instruções de configuração baseadas em script do JavaScript (Web) SDK Loader do artigo sobre a configuração do JavaScript SDK do lado do cliente.
ASP.NET Core
Se o seu aplicativo tiver componentes do lado do cliente, siga os próximos passos para começar a coletar telemetria de uso através da injeção do Script Loader do SDK de JavaScript (Web) por configuração.
Em _ViewImports.cshtml, adicione injeção:
@inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippetEm _Layout.cshtml, insira
HtmlHelperno final da<head>seção, mas antes de qualquer outro script. Se você quiser relatar qualquer telemetria JavaScript personalizada da página, injete-a após este trecho:@Html.Raw(JavaScriptSnippet.FullScript) </head>
Como alternativa ao uso FullScriptdo , ScriptBody está disponível a partir do SDK do Application Insights para ASP.NET Core versão 2.14. Use ScriptBody se precisar controlar a <script> tag para definir uma Política de Segurança de Conteúdo:
<script> // apply custom changes to this script tag.
@Html.Raw(JavaScriptSnippet.ScriptBody)
</script>
Os nomes de arquivo .cshtml mencionados anteriormente são de um modelo de aplicativo MVC padrão. Em última análise, se você quiser habilitar corretamente o monitoramento do lado do cliente para seu aplicativo, o JavaScript (Web) SDK Loader Script deve aparecer na <head> seção de cada página do seu aplicativo que você deseja monitorar. Adicione o JavaScript (Web) SDK Loader Script ao _Layout.cshtml em um modelo de aplicativo para habilitar o monitoramento do lado do cliente.
Se seu projeto não incluir _Layout.cshtml, você ainda poderá adicionar monitoramento do lado do cliente adicionando o JavaScript (Web) SDK Loader Script a um arquivo equivalente que controla todas <head> as páginas do seu aplicativo. Como alternativa, você pode adicionar o JavaScript (Web) SDK Loader Script a várias páginas, mas não o recomendamos.
Observação
A injeção de JavaScript fornece uma experiência de configuração padrão. Se você precisar de configuração além de definir a cadeia de conexão, será necessário remover a injeção automática conforme descrito e adicionar manualmente o JavaScript SDK.
API principal para eventos e métricas personalizados
Insira algumas linhas de código em seu aplicativo para descobrir o que os usuários estão fazendo com ele ou para ajudar a diagnosticar problemas. Você pode enviar telemetria de aplicativos de dispositivo e desktop, clientes da Web e servidores da Web. Use a API de telemetria principal do Application Insights para enviar eventos e métricas personalizados e suas próprias versões de telemetria padrão. Essa API é a mesma que os coletores de dados padrão do Application Insights usam.
Resumo da API
A API principal é uniforme em todas as plataformas, com exceção de algumas variações, como GetMetric (somente .NET).
| Método | Usado para |
|---|---|
TrackPageView |
Páginas, telas, painéis ou formulários. |
TrackEvent |
Ações do usuário e outros eventos. Usado para rastrear o comportamento do usuário ou para monitorar o desempenho. |
GetMetric |
Métricas zero e multidimensionais, agregação configurada centralmente, somente C#. |
TrackMetric |
Medições de desempenho, como comprimentos de fila não relacionados a eventos específicos. |
TrackException |
Registro de exceções para diagnóstico. Examine onde ocorrem em relação a outros eventos e examine os stack traces. |
TrackRequest |
Registro da frequência e duração das solicitações do servidor para análise de desempenho. |
TrackTrace |
Mensagens de log de diagnóstico de recursos. Você também pode capturar logs de terceiros. |
TrackDependency |
Registrar a duração e a frequência das chamadas para componentes externos dos quais seu aplicativo depende. |
Você pode anexar propriedades e métricas à maioria dessas chamadas de telemetria.
Pré-requisitos
Se ainda não tiveres uma referência ao SDK do Application Insights:
Adicione o SDK do Application Insights ao seu projeto.
No seu dispositivo ou código do servidor Web, inclua:
Obter uma instância de TelemetryClient
Obtenha uma instância de TelemetryClient:
Observação
Se você usa o Azure Functions v2+ ou o Azure WebJobs v3+, consulte Monitorar o Azure Functions.
Observação
Para aplicações ASP.NET Core e Non-HTTP/Worker para .NET/.NET Core, obtenha uma instância de TelemetryClient a partir do contêiner de injeção de dependência, conforme explicado na respetiva documentação.
private TelemetryClient telemetry = new TelemetryClient();
Se você vir uma mensagem informando que esse método está obsoleto, consulte microsoft/ApplicationInsights-dotnet#1152 para obter mais informações.
As solicitações HTTP recebidas são capturadas automaticamente. Talvez queiras criar mais instâncias de TelemetryClient para outros módulos da tua aplicação. Por exemplo, você pode ter uma TelemetryClient instância em sua classe middleware para relatar eventos de lógica de negócios. Você pode definir propriedades como UserId e DeviceId para identificar a máquina. Essas informações são anexadas a todos os eventos enviados pela instância.
TelemetryClient.Context.User.Id = "...";
TelemetryClient.Context.Device.Id = "...";
Observação
TelemetryClient é seguro para threads.
TrackEvent
No Application Insights, um evento personalizado é um ponto de dados que pode mostrar no Explorador de Métricas como uma contagem agregada e na Pesquisa como ocorrências individuais. (Não está relacionado com MVC ou outros "eventos" de estrutura.)
Insira TrackEvent chamadas no seu código para contar vários eventos. Por exemplo, talvez você queira acompanhar a frequência com que os usuários escolhem um recurso específico. Ou você pode querer saber com que frequência eles atingem certos objetivos ou cometem tipos específicos de erros.
Por exemplo, em um aplicativo de jogo, envie um evento sempre que um usuário ganhar o jogo:
Eventos personalizados no Log Analytics
A telemetria customEvents está disponível na tabela na guia de Logs do Application Insights ou na experiência de utilização. Os eventos podem vir de trackEvent(..) ou do plug-in Click Analytics Autocollection.
Se a amostragem estiver em operação, a propriedade mostrará itemCount um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackEvent(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de eventos personalizados, use um código como customEvents | summarize sum(itemCount).
Observação
itemCount tem um valor mínimo de um; o próprio registo representa uma entrada.
GetMetric
Para saber como usar efetivamente a GetMetric() chamada para capturar métricas pré-agregadas localmente para aplicativos .NET e .NET Core, consulte Coleção de métricas personalizadas no .NET e no .NET Core.
TrackMetric
Observação
Microsoft.ApplicationInsights.TelemetryClient.TrackMetric não é o método preferido para enviar métricas. As métricas devem ser sempre pré-agregadas ao longo de um período de tempo antes de serem enviadas. Use uma das GetMetric(..) sobrecargas para obter um objeto de métrica para acessar os recursos de pré-agregação do SDK.
Se você estiver implementando sua própria lógica de pré-agregação, poderá usar o TrackMetric() método para enviar as agregações resultantes. Se seu aplicativo exigir o envio de um item de telemetria separado em todas as ocasiões sem agregação ao longo do tempo, você provavelmente terá um caso de uso para telemetria de eventos. Consulte TelemetryClient.TrackEvent(Microsoft.ApplicationInsights.DataContracts.EventTelemetry).
O Application Insights pode traçar métricas que não estão anexadas a eventos específicos. Por exemplo, você pode monitorar o comprimento de uma fila em intervalos regulares. Com métricas, as medições individuais são de menor interesse do que as variações e tendências, e por isso os gráficos estatísticos são úteis.
Para enviar métricas para o Application Insights, você pode usar a TrackMetric(..) API. Há duas maneiras de enviar uma métrica:
Valor único. Toda vez que você executa uma medição em seu aplicativo, envia o valor correspondente para o Application Insights.
Por exemplo, suponha que você tenha uma métrica que descreva o número de itens em um contêiner. Durante um período de tempo específico, você primeiro coloca três itens no contêiner e, em seguida, remove dois itens. Assim, você ligaria
TrackMetricduas vezes. Primeiro, você passaria o valor3e, em seguida, passaria o valor-2. O Application Insights armazena ambos os valores para você.Agregação. Quando você trabalha com métricas, cada medição raramente é de interesse. Em vez disso, é importante um resumo do que aconteceu durante um determinado período de tempo. Esse resumo é chamado agregação.
No exemplo anterior, a soma métrica agregada para esse período de tempo é
1e a contagem dos valores métricos é2. Ao usar a abordagem de agregação, você invocaTrackMetricapenas uma vez por período de tempo e envia os valores agregados. Recomendamos essa abordagem porque ela pode reduzir significativamente a sobrecarga de custo e desempenho enviando menos pontos de dados para o Application Insights, enquanto ainda coleta todas as informações relevantes.
Exemplos de valor único
Para enviar um único valor de métrica:
var sample = new MetricTelemetry();
sample.Name = "queueLength";
sample.Sum = 42.3;
telemetryClient.TrackMetric(sample);
Métricas personalizadas no Log Analytics
A telemetria customMetrics está disponível na tabela em Application Insights Analytics. Cada linha representa uma chamada para trackMetric(..) no seu aplicativo.
-
valueSum: A soma das medidas. Para obter o valor médio, divida porvalueCount. -
valueCount: O número de medições que foram agregadas nestatrackMetric(..)chamada.
Observação
valueCount tem um valor mínimo de um; o próprio registo representa uma entrada.
Visualizações de página
Em um dispositivo ou aplicativo de página da Web, a telemetria de exibição de página é enviada por padrão quando cada tela ou página é carregada. Mas você pode alterar o padrão para controlar visualizações de página em momentos mais ou diferentes. Por exemplo, em um aplicativo que exibe guias ou painéis, talvez você queira acompanhar uma página sempre que o usuário abrir um novo painel.
Os dados do usuário e da sessão são enviados como propriedades junto com as visualizações de página, para que os gráficos de usuário e sessão ganhem vida quando houver telemetria de exibição de página.
Visualizações de página personalizadas
Telemetria de página no Log Analytics
No Log Analytics, duas tabelas mostram dados de operações do navegador:
-
pageViews: Contém dados sobre o URL e o título da página. -
browserTimings: Contém dados sobre o desempenho do cliente, como o tempo necessário para processar os dados de entrada.
Para saber quanto tempo o navegador demora a processar páginas diferentes:
browserTimings
| summarize avg(networkDuration), avg(processingDuration), avg(totalDuration) by name
Para descobrir a popularidade de diferentes navegadores:
pageViews
| summarize count() by client_Browser
Para associar visualizações de página a chamadas AJAX, combine com dependências:
pageViews
| join (dependencies) on operation_Id
TrackRequest
O SDK do servidor usa TrackRequest para registrar solicitações HTTP.
Você também pode chamá-lo você mesmo se quiser simular solicitações em um contexto em que não tenha o módulo de serviço Web em execução.
A maneira recomendada de enviar telemetria de solicitação é quando a solicitação atua como um contexto de operação.
Contexto da operação
Você pode correlacionar itens de telemetria associando-os ao contexto da operação. O módulo de controle de solicitações padrão faz isso para exceções e outros eventos que são enviados enquanto uma solicitação HTTP está sendo processada. No Search and Analytics, você pode encontrar facilmente quaisquer eventos associados à solicitação usando seu ID de operação.
Quando você controla a telemetria manualmente, a maneira mais fácil de garantir a correlação de telemetria é usando este padrão:
// Establish an operation context and associated telemetry item:
using (var operation = telemetryClient.StartOperation<RequestTelemetry>("operationName"))
{
// Telemetry sent in here uses the same operation ID.
...
telemetryClient.TrackTrace(...); // or other Track* calls
...
// Set properties of containing telemetry item--for example:
operation.Telemetry.ResponseCode = "200";
// Optional: explicitly send telemetry item:
telemetryClient.StopOperation(operation);
} // When operation is disposed, telemetry item is sent.
Para obter mais informações sobre correlação, consulte Correlação de telemetria no Application Insights.
Além de definir um contexto de operação, StartOperation cria um item de telemetria do tipo que você especificar. Ele envia o item de telemetria quando você descarta a operação ou se você chama StopOperationexplicitamente . Se você usar RequestTelemetry como o tipo de telemetria, sua duração será definida como o intervalo cronometrado entre iniciar e parar.
Os itens de telemetria reportados dentro de um escopo de operação tornam-se filhos de tal operação. Os contextos de operação podem ser aninhados.
Em Pesquisar, o contexto da operação é usado para criar a lista Itens Relacionados .
Para obter mais informações sobre o acompanhamento de operações personalizadas, consulte Controlar operações personalizadas com o SDK do .NET do Application Insights.
Solicitações no Log Analytics
No Application Insights Analytics, as solicitações aparecem na requests tabela.
Se a amostragem estiver em operação, a propriedade mostrará itemCount um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackRequest(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de solicitações e duração média segmentada por nomes de solicitação, use códigos como:
requests
| summarize count = sum(itemCount), avgduration = avg(duration) by name
TrackException
Envie exceções para o Application Insights:
- Para contá-los como indicação da frequência de um problema.
- Examinar ocorrências individuais.
Os relatórios incluem stack traces.
Os SDKs capturam muitas exceções automaticamente, para que você nem sempre precise chamar TrackException explicitamente.
Exceções no Log Analytics
No Application Insights Analytics, as exceções aparecem na exceptions tabela.
Se a amostragem estiver em operação, a propriedade mostrará itemCount um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackException(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de exceções segmentadas por tipo de exceção, use códigos como:
exceptions
| summarize sum(itemCount) by type
A maioria das informações importantes da pilha já é extraída em variáveis separadas, mas você pode separar a details estrutura para obter mais. Como essa estrutura é dinâmica, você deve converter o resultado para o tipo esperado. Por exemplo:
exceptions
| extend method2 = tostring(details[0].parsedStack[1].method)
Para associar exceções às solicitações relacionadas, use uma associação:
exceptions
| join (requests) on operation_Id
Rastreio
Use TrackTrace para ajudar a diagnosticar problemas enviando uma "trilha de navegação" para o Application Insights. Pode enviar pedaços de dados de diagnóstico e inspecioná-los na Pesquisa.
Em adaptadores de log .NET, use esta API para enviar logs de terceiros para o portal.
telemetry.TrackTrace(message, SeverityLevel.Warning, properties);
Registe um evento de diagnóstico, como a entrada ou saída de um método.
| Parâmetro | Description |
|---|---|
message |
Dados de diagnóstico. Pode ser muito mais longo do que um nome. |
properties |
Mapa de string para string. Mais dados são usados para filtrar exceções no portal. O padrão é vazio. |
severityLevel |
Valores suportados: SeverityLevel.ts. |
Você pode pesquisar no conteúdo da mensagem, mas, ao contrário dos valores de propriedade, não pode filtrá-lo.
O limite de tamanho de message é muito maior do que o limite de propriedades. Uma vantagem de TrackTrace é que se podem colocar dados relativamente longos na mensagem. Por exemplo, você pode codificar dados POST lá.
Você também pode adicionar um nível de gravidade à sua mensagem. E, como outras telemetrias, é possível adicionar valores de propriedade para ajudar a filtrar ou pesquisar diferentes conjuntos de rastreamentos. Por exemplo:
var telemetry = new Microsoft.ApplicationInsights.TelemetryClient();
telemetry.TrackTrace("Slow database response",
SeverityLevel.Warning,
new Dictionary<string,string> { {"database", db.ID} });
Na Pesquisa, você pode filtrar facilmente todas as mensagens de um determinado nível de gravidade relacionadas a um determinado banco de dados.
Rastreamentos no Log Analytics
No Application Insights Analytics, as chamadas para TrackTrace aparecem na tabela traces.
Se a amostragem estiver em operação, a propriedade mostrará itemCount um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackTrace(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de chamadas de rastreamento, use um código como traces | summarize sum(itemCount).
TrackDependency
Utilize a chamada TrackDependency para monitorizar os tempos de resposta e as taxas de sucesso das chamadas para um bloco de código externo. Os resultados aparecem nos gráficos de dependência no portal. O trecho de código a seguir deve ser adicionado sempre que uma chamada de dependência for feita.
Observação
Para .NET e .NET Core, você pode alternativamente usar o TelemetryClient.StartOperation método (extensão) que preenche as propriedades necessárias para correlação DependencyTelemetry e algumas outras propriedades, como a hora de início e a duração, para que você não precise criar um temporizador personalizado como nos exemplos a seguir. Para obter mais informações, consulte a seção sobre rastreamento de dependência de saída em Controlar operações personalizadas com o SDK do .NET do Application Insights.
var success = false;
var startTime = DateTime.UtcNow;
var timer = System.Diagnostics.Stopwatch.StartNew();
try
{
success = dependency.Call();
}
catch(Exception ex)
{
success = false;
telemetry.TrackException(ex);
throw new Exception("Operation went wrong", ex);
}
finally
{
timer.Stop();
telemetry.TrackDependency("DependencyType", "myDependency", "myCall", startTime, timer.Elapsed, success);
}
Lembre-se de que os SDKs de servidor incluem um módulo de dependência que descobre e rastreia determinadas chamadas de dependência automaticamente, por exemplo, para bancos de dados e APIs REST. Você tem que instalar um agente no seu servidor para fazer o módulo funcionar.
Você usa essa chamada se quiser rastrear chamadas que o rastreamento automatizado não deteta.
Para desativar o módulo de controle de dependência padrão em C#, editeApplicationInsights.config e exclua a referência a DependencyCollector.DependencyTrackingTelemetryModule.
Dependências no Log Analytics
No Application Insights Analytics, trackDependency as chamadas aparecem na dependencies tabela.
Se a amostragem estiver em operação, a itemCount propriedade mostra um valor maior que 1. Por exemplo, itemCount==10 significa que de 10 chamadas para trackDependency(), o processo de amostragem transmitiu apenas uma delas. Para obter uma contagem correta de dependências segmentadas por componente de destino, use um código como:
dependencies
| summarize sum(itemCount) by target
Para associar dependências às solicitações relacionadas, use uma associação:
dependencies
| join (requests) on operation_Id
Limpeza de dados
Normalmente, o SDK envia dados em intervalos fixos, normalmente 30 segundos, ou sempre que o buffer está cheio, o que normalmente é de 500 itens. Em alguns casos, poderás querer esvaziar o buffer. Um exemplo é se você estiver usando o SDK em um aplicativo que é desligado.
Quando utiliza Flush(), recomendamos este padrão:
telemetry.Flush();
// Allow some time for flushing before shutdown.
System.Threading.Thread.Sleep(5000);
Quando utiliza FlushAsync(), recomendamos este padrão:
await telemetryClient.FlushAsync()
// No need to sleep
Recomendamos sempre o despejo como parte do encerramento da aplicação para garantir que a telemetria não seja perdida.
Observação
Revise a configuração do Autoflush: habilitar o autoflush em seu web.config arquivo pode levar à degradação do desempenho em aplicativos .NET instrumentados com o Application Insights. Com o autoflush ativado, cada invocação de métodos resulta em itens de telemetria individuais sendo enviados como solicitações Web distintas para o serviço de ingestão. Isso pode potencialmente causar esgotamento da rede e do armazenamento em seus servidores Web. Para melhorar o desempenho, recomenda-se desativar o autoflush e também utilizar o ServerTelemetryChannel, projetado para uma transmissão de dados de telemetria mais eficaz.
A função é assíncrona para o canal de telemetria do servidor.
Usuários autenticados
Numa aplicação Web, os utilizadores são identificados por cookies por predefinição. Um utilizador pode ser contado mais do que uma vez se aceder à sua aplicação a partir de uma máquina ou navegador diferente, ou se eliminar cookies.
Se os utilizadores iniciarem sessão na sua aplicação, pode obter uma contagem mais precisa definindo o ID de utilizador autenticado no código do browser. Não é necessário usar o nome de login real do usuário. Só tem de ser um ID exclusivo para esse utilizador. Não deve incluir espaços ou qualquer um dos caracteres ,;=|.
O ID de utilizador também é definido num cookie de sessão e enviado para o servidor. Se o SDK do servidor estiver instalado, o ID do usuário autenticado será enviado como parte das propriedades de contexto da telemetria do cliente e do servidor. Você pode então filtrar e pesquisar nele.
Se o seu aplicativo agrupar usuários em contas, você também poderá passar um identificador para a conta. Aplicam-se as mesmas restrições de caracteres.
No Metrics Explorer, pode criar um gráfico que conte os Utilizadores, Autenticados e as Contas de Utilizador.
Você também pode pesquisar pontos de dados do cliente com nomes de usuário e contas específicos.
Observação
A propriedade EnableAuthenticationTrackingJavaScript na classe ApplicationInsightsServiceOptions no SDK do .NET Core simplifica a configuração JavaScript necessária para injetar o nome de usuário como a ID de autenticação para cada rastreamento enviado pelo SDK JavaScript do Application Insights.
Quando essa propriedade é definida como true, o nome de usuário do usuário no ASP.NET Core é impresso junto com a telemetria do lado do cliente. Por esse motivo, a adição appInsights.setAuthenticatedUserContext manual não é mais necessária porque já é injetada pelo SDK para ASP.NET Core. O ID de autenticação também é enviado para o servidor onde o SDK no .NET Core o identifica e o usa para qualquer telemetria do lado do servidor, conforme descrito na referência da API JavaScript.
Para aplicativos JavaScript que não funcionam da mesma forma que o MVC ASP.NET Core, como aplicativos Web SPA, você ainda precisa adicionar appInsights.setAuthenticatedUserContext manualmente.
Filtrar, pesquisar e segmentar seus dados usando propriedades
Você pode anexar propriedades e medidas aos seus eventos, métricas, visualizações de página, exceções e outros dados de telemetria.
As propriedades são valores de cadeia de caracteres que você pode usar para filtrar sua telemetria nos relatórios de uso. Por exemplo, se a sua aplicação fornecer vários jogos, pode anexar o nome do jogo a cada evento para ver quais os jogos mais populares.
Há um limite de 8.192 no comprimento da corda. Se você quiser enviar grandes blocos de dados, use o parâmetro message de TrackTrace.
As métricas são valores numéricos que podem ser apresentados graficamente. Por exemplo, você pode querer ver se há um aumento gradual nas pontuações que seus jogadores alcançam. Os gráficos podem ser segmentados pelas propriedades que são enviadas com o evento para que você possa obter gráficos separados ou empilhados para jogos diferentes.
Os valores métricos devem ser maiores ou iguais a 0 para serem exibidos corretamente.
Há alguns limites no número de propriedades, valores de propriedade e métricas que você pode usar.
// Set up some properties and metrics:
var properties = new Dictionary <string, string>
{{"game", currentGame.Name}, {"difficulty", currentGame.Difficulty}};
var metrics = new Dictionary <string, double>
{{"Score", currentGame.Score}, {"Opponents", currentGame.OpponentCount}};
// Send the event:
telemetry.TrackEvent("WinGame", properties, metrics);
Importante
Certifique-se de que não regista informações de identificação pessoal nas propriedades.
Maneira alternativa de definir propriedades e métricas
Se for mais conveniente, você pode coletar os parâmetros de um evento em um objeto separado:
var event = new EventTelemetry();
event.Name = "WinGame";
event.Metrics["processingTime"] = stopwatch.Elapsed.TotalMilliseconds;
event.Properties["game"] = currentGame.Name;
event.Properties["difficulty"] = currentGame.Difficulty;
event.Metrics["Score"] = currentGame.Score;
event.Metrics["Opponents"] = currentGame.Opponents.Length;
telemetry.TrackEvent(event);
Advertência
Não reutilize a mesma instância de item de telemetria (event neste exemplo) para chamar Track*() várias vezes. Essa prática pode fazer com que a telemetria seja enviada com configuração incorreta.
Medidas e propriedades personalizadas no Log Analytics
No Log Analytics, métricas e propriedades personalizadas são exibidas nos atributos customMeasurements e customDimensions de cada registro de telemetria.
Por exemplo, se você adicionar uma propriedade chamada "jogo" à telemetria de solicitação, essa consulta contará as ocorrências de diferentes valores de "jogo" e mostrará a média da métrica personalizada "score":
requests
| summarize sum(itemCount), avg(todouble(customMeasurements.score)) by tostring(customDimensions.game)
Observe que:
- Quando você extrai um valor do
customDimensionsoucustomMeasurementsJSON, ele tem tipo dinâmico, então você deve convertê-lotostringoutodouble. - Para ter em conta a possibilidade de amostragem, utilizar
sum(itemCount)e nãocount().
Eventos de cronometragem
Às vezes, você quer mapear quanto tempo leva para executar uma ação. Por exemplo, você pode querer saber quanto tempo os usuários levam para considerar as escolhas em um jogo. Para obter essas informações, use o parâmetro de medição.
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
// ... perform the timed action ...
stopwatch.Stop();
var metrics = new Dictionary <string, double>
{{"processingTime", stopwatch.Elapsed.TotalMilliseconds}};
// Set up some properties:
var properties = new Dictionary <string, string>
{{"signalSource", currentSignalSource.Name}};
// Send the event:
telemetry.TrackEvent("SignalProcessed", properties, metrics);
Propriedades padrão para telemetria personalizada
Se você quiser definir valores de propriedade padrão para alguns dos eventos personalizados que você escreve, defina-os em uma TelemetryClient instância. Eles são anexados a cada item de telemetria enviado por esse cliente.
using Microsoft.ApplicationInsights.DataContracts;
var gameTelemetry = new TelemetryClient();
gameTelemetry.Context.GlobalProperties["Game"] = currentGame.Name;
// Now all telemetry is automatically sent with the context property:
gameTelemetry.TrackEvent("WinGame");
Chamadas de telemetria individuais podem substituir os valores padrão em seus dicionários de propriedade.
Para adicionar propriedades a toda a telemetria, incluindo os dados de módulos de coleta padrão, implemente ITelemetryInitializer.
Desativar telemetria
Para parar e iniciar dinamicamente a recolha e transmissão de telemetria:
using Microsoft.ApplicationInsights.Extensibility;
TelemetryConfiguration.Active.DisableTelemetry = true;
Modo de desenvolvedor
Durante a depuração, é útil ter a sua telemetria apressada através da linha de processamento para que possa ver os resultados imediatamente. Você também recebe outras mensagens que o ajudam a rastrear quaisquer problemas com a telemetria. Desligue-o na produção porque pode tornar a sua aplicação mais lenta.
Definir a chave de instrumentação para telemetria personalizada selecionada
var telemetry = new TelemetryClient();
telemetry.InstrumentationKey = "---my key---";
// ...
Cadeia de conexão dinâmica
Para evitar misturar telemetria de ambientes de desenvolvimento, teste e produção, você pode criar recursos separados do Application Insights e alterar suas chaves, dependendo do ambiente.
Em vez de obter a chave de instrumentação do arquivo de configuração, você pode defini-la em seu código. Defina a chave em um método de inicialização, como global.aspx.cs em um serviço ASP.NET:
protected void Application_Start()
{
Microsoft.ApplicationInsights.Extensibility.
TelemetryConfiguration.Active.InstrumentationKey =
// - for example -
WebConfigurationManager.Settings["ikey"];
...
}
Contexto de Telemetria
TelemetryClient tem uma propriedade Context, que contém valores que são enviados junto com todos os dados de telemetria. Eles são normalmente definidos pelos módulos de telemetria padrão, mas você também pode defini-los por conta própria. Por exemplo:
telemetry.Context.Operation.Name = "MyOperationName";
Se você mesmo definir qualquer um desses valores, considere remover a linha relevante do ApplicationInsights.config para que seus valores e os valores padrão não fiquem confusos.
- Componente: O aplicativo e sua versão.
- Dispositivo: dados sobre o dispositivo em que o aplicativo está sendo executado. Em aplicativos Web, é do servidor ou dispositivo cliente que a telemetria é enviada.
- InstrumentationKey: O recurso do Application Insights no Azure onde a telemetria aparece. Geralmente é obtido a partir de ApplicationInsights.config.
- Localização: A localização geográfica do dispositivo.
-
Operação: Em aplicativos Web, a solicitação HTTP atual. Em outros tipos de aplicativo, você pode definir esse valor para agrupar eventos.
- ID: um valor gerado que correlaciona eventos diferentes para que, ao inspecionar qualquer evento na Pesquisa de Diagnóstico, você possa encontrar itens relacionados.
- Nome: um identificador, geralmente a URL da solicitação HTTP.
- SyntheticSource: Se não for nulo ou vazio, uma cadeia de caracteres que indica que a origem da solicitação foi identificada como um robô ou teste da Web. Por padrão, ele é excluído dos cálculos no Metrics Explorer.
- Sessão: A sessão do usuário. O ID é definido como um valor gerado, que é alterado quando o usuário não está ativo há algum tempo.
- Usuário: Informações do usuário.
Limits
Existem alguns limites no número de métricas e eventos por aplicação, ou seja, por cadeia de ligação. Os limites dependem do plano de preços que escolher.
| Resource | Limite predefinido | Limite máximo | Observações |
|---|---|---|---|
| Total de dados por dia | 100 GB | Contacte o suporte. | Você pode definir um limite para reduzir os dados. Se precisar de mais dados, pode aumentar o limite no portal, até 1.000 GB. Para capacidades superiores a 1.000 GB, envie um e-mail para AIDataCap@microsoft.com. |
| Throttling | 32.000 eventos/segundo | Contacte o suporte. | O limite é medido durante um minuto. |
| Registos de retenção de dados | 30 a 730 dias | 730 dias | Este recurso é para Logs. |
| Métricas de retenção de dados | 90 dias | 90 dias | Este recurso é para o Metrics Explorer. |
| Disponibilidade, teste em várias etapas, retenção detalhada de resultados | 90 dias | 90 dias | Este recurso fornece resultados detalhados de cada passo. |
| Tamanho máximo do item de telemetria | 64 KB | 64 KB | |
| Máximo de itens de telemetria por lote | 64,000 | 64,000 | |
| Comprimento dos nomes de propriedade e métrica | 150 | 150 | Consulte esquemas de tipo. |
| Comprimento da cadeia de valor da propriedade | 8,192 | 8,192 | Consulte esquemas de tipo. |
| Comprimento da mensagem de rastreio e exceção | 32,768 | 32,768 | Consulte esquemas de tipo. |
| Contagem de testes de disponibilidade por recurso do Application Insights | 100 | 100 | |
| Contagem de testes de disponibilidade por grupo de recursos | 800 | 800 | Consulte Azure Resource Manager |
| Testes de disponibilidade: redirecionamentos máximos por teste | 10 | 10 | |
| Frequência mínima para testes de disponibilidade | 300 segundos | Frequências de teste personalizadas ou frequências inferiores a 5 minutos requerem implementações personalizadas de TrackAvailability . | |
| Retenção de dados do .NET Profiler e do Depurador de Instantâneos | Duas semanas | Contacte o suporte. O limite máximo de retenção é de seis meses. | |
| Dados do .NET Profiler enviados por dia | Sem limite | Sem limite. | |
| Depurador de Instantâneos dados enviados por dia | 30 instantâneos por dia por aplicativo monitorado | Sem limite. | O número de snapshots coletados por aplicativo pode ser modificado por meio da configuração. |
Para obter mais informações sobre preços e cotas, consulte Faturamento do Application Insights.
Para evitar atingir o limite de taxa de transferência de dados, use a amostragem.
Para determinar por quanto tempo os dados são mantidos, consulte Retenção de dados e privacidade.
Exemplos de aplicações
Aplicativo de console .NET Core: use este exemplo se estiver usando um aplicativo de console escrito em .NET Core (2.0 ou superior) ou .NET Framework (4.7.2 ou superior).
ASP.NET Core tarefas em segundo plano com HostedServices: Use este exemplo se estiver no ASP.NET Core e criando tarefas em segundo plano de acordo com as orientações oficiais.
.NET Core Worker Service: Use este exemplo se você tiver um aplicativo .NET Worker Service de acordo com as diretrizes oficiais.
Solução de problemas
Consulte os artigos dedicados de solução de problemas para .NET e Node.js.
Testar a conectividade entre o host do aplicativo e o serviço de ingestão
SDKs e agentes do Application Insights enviam telemetria, que é processada como chamadas REST para os nossos endpoints de ingestão. Pode testar a conectividade entre o seu servidor web ou a máquina anfitriã da aplicação e os pontos de extremidade do serviço de ingestão, utilizando clientes REST de baixo nível através de comandos PowerShell ou curl. Consulte Resolução de problemas de telemetria de aplicações ausentes no Azure Monitor Application Insights.
SDK de código aberto
Leia e contribua para o código para .NET e Node.js.
Notas de lançamento
- Notas de versão do Application Insights
- Versões do SDK do .NET no GitHub
- Lançamentos do SDK do Node.js no GitHub
As Atualizações de Serviço também resumem as principais melhorias do Application Insights.
Próximos passos
- Valide se você está executando uma versão suportada do SDK do Application Insights.
- Consulte o modelo de dados para tipos e modelo de dados do Application Insights.
- Consulte o Guia do Usuário System.Diagnostics.Activity para ver como correlacionamos a telemetria.
- Para rever as perguntas frequentes (FAQ), consulte: