Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Atenção
- O SDK 2.x da API Node.js Application Insights Classic está retirado.
- O SDK 2.x da API .NET Application Insights Classic está desatualizado e retira-se a 31/03/2027.
- Para se manter suportado, migre para um SDK 3.x baseado em OpenTelemetry ou, preferencialmente, para a distribuição OpenTelemetry.
- Para detalhes da política de apoio, consulte a orientação de suporte do SDK Application Insights.
Importante
Para novas aplicações, utilize a Distribuição Azure Monitor OpenTelemetry.
Este artigo explica como ativar e configurar Application Insights para aplicações .NET (ASP.NET, ASP.NET Core e Worker Service) e Node.js. O Application Insights pode coletar a seguinte telemetria de seus aplicativos:
- Pedidos
- Dependências
- Exceções
- 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 | Consola ou serviço em segundo plano (funciona como um processo, normalmente via CLI dotnet ou como um serviço Windows/daemon 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 | Azure App Service (Windows), Azure Virtual Machines, ou servidores on-premises | A funcionalidade Web Apps do Azure App Service, Azure Virtual Machines, Docker e Azure Kubernetes Service (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 |
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
Nesta secção
- Prerequisites
- Instrumente a sua aplicação com o SDK Application Insights
- Implementar o Agente de Insights de Aplicações
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.
Instrumente a sua aplicação com o SDK Application Insights
Esta secção guia-o na adição de Application Insights a uma aplicação web baseada em template.
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 uma aplicação ASP.NET, crie um novo ficheiro 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 etiqueta de fecho
</ApplicationInsights>em ApplicationInsights.config, adicione a connection string do seu recurso 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 SDK Application Insights 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 string de conexão na variável de ambiente
APPLICATIONINSIGHTS_CONNECTION_STRINGou no ficheiro de configuração JSONApplicationInsights:ConnectionString.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 aplicações 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 tem prioridade sobre a variável de ambiente
APPLICATIONINSIGHTS_CONNECTION_STRING, que por sua vez tem prioridade sobre outras opções.Defina a cadeia de conexão no código.
Forneça uma "connection string" como parte do argumento
ApplicationInsightsServiceOptionsparaAddApplicationInsightsTelemetryna sua classe program.cs.
Segredos de usuário e outros provedores de configuração
Se quiser armazenar a cadeia de conexão nos segredos de utilizador do ASP.NET Core ou recuperá-la de outro provedor de configuração, pode usar a sobrecarga com o parâmetro Microsoft.Extensions.Configuration.IConfiguration. 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 de fundo com serviços hospedados
- Aplicativo de console do .NET Core/.NET Framework
Usar o SDK do Application Insights para o Worker Service
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.
Aplicação .NET Core Worker Service
O exemplo completo é compartilhado no site do NuGet.
Crie um novo projeto de Serviço ao Trabalhador, seja usando um modelo Visual Studio novo projeto ou a linha de comandos
dotnet new worker.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); } } }Configura 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.
Tarefas em segundo plano do ASP.NET Core com serviços alojados
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"); } } }Configura 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 tem como objetivo netstandard2.0, para poder ser usado em aplicações de consola em .NET Core ou superior, e .NET Framework ou superiores.
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.
Implementar o Application Insights Agent para servidores on-premises
Nesta secção
- Comece - Para começar com exemplos de código concisos.
- Instruções detalhadas - Para uma análise aprofundada de como começar.
- Referências API - Para referência à API PowerShell.
O Application Insights Agent é um módulo do PowerShell publicado na Galeria do PowerShell. Ele substitui o Status Monitor. A telemetria é enviada para o portal do Azure, onde você pode monitorar seu aplicativo.
Para obter uma lista completa dos cenários de autoinstrumentação suportados, consulte Ambientes suportados, idiomas e provedores de recursos.
Observação
Atualmente, o módulo suporta instrumentação sem código para aplicações web ASP.NET e ASP.NET Core alojadas com Internet Information Server (IIS). Use um SDK para instrumentar aplicativos Java e Node.js.
Observação
O monitoramento do lado do cliente é habilitado por padrão para aplicativos ASP.NET Core. Se você quiser desabilitar o monitoramento do lado do cliente, defina uma variável de ambiente no servidor com as seguintes informações:
-
Designação:
APPINSIGHTS_JAVASCRIPT_ENABLED -
Valor:
false
Como Começar
Esta secção contém os comandos de início rápido que se espera funcionem na maioria dos ambientes. As instruções dependem do PowerShell Gallery para distribuir as atualizações. Esses comandos dão suporte ao parâmetro PowerShell -Proxy .
Para obter uma explicação desses comandos, instruções de personalização e informações sobre solução de problemas, consulte as instruções detalhadas.
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Opção 1: Descarregar e instalar o Application Insights Agent através da PowerShell Gallery
Observação
Para os pré-requisitos de que possa precisar, veja suporte de Segurança da Camada de Transporte (TLS) da PowerShell Gallery.
Instala o módulo (executa como administrador):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force Set-PSRepository -Name "PSGallery" -InstallationPolicy Trusted Install-Module -Name PowerShellGet -ForceInstalar o Application Insights Agent (executar como administrador):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force Install-Module -Name Az.ApplicationMonitor -AllowPrerelease -AcceptLicenseObservação
A
AllowPrereleaseopção no cmdlet permite aInstall-Moduleinstalação da versão beta.Para obter mais informações, consulte Install-Module.
Permitir monitorização:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/'
Opção 2: Descarregar e instalar manualmente o agente Application Insights (opção offline)
Descarregue manualmente a versão mais recente do módulo a partir de PowerShell Gallery.
Descompactar e instalar o Application Insights Agent:
$pathToNupkg = "C:\Users\t\Desktop\Az.ApplicationMonitor.0.3.0-alpha.nupkg" $pathToZip = ([io.path]::ChangeExtension($pathToNupkg, "zip")) $pathToNupkg | rename-item -newname $pathToZip $pathInstalledModule = "$Env:ProgramFiles\WindowsPowerShell\Modules\Az.ApplicationMonitor" Expand-Archive -LiteralPath $pathToZip -DestinationPath $pathInstalledModulePermitir monitorização:
Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/'
Instruções detalhadas
Esta secção descreve como integrar a PowerShell Gallery e descarregar o módulo ApplicationMonitor. Estão incluídos os parâmetros mais comuns que você precisa para começar. Também fornecemos instruções de download manual caso você não tenha acesso à internet.
Executar o PowerShell como Administrador com uma política de execução elevada
Importante
O PowerShell precisa de permissões de nível de administrador para fazer alterações no seu computador.
Política de execução
- Descrição: Por padrão, a execução de scripts do PowerShell está desabilitada. Recomendamos permitir scripts RemoteSigned apenas para o escopo Atual.
- Referência: Sobre Políticas de Execução e Set-ExecutionPolicy.
- Comando:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process. - Parâmetro opcional:
-
-Force. Ignora o prompt de confirmação.
-
Exemplos de erros
Install-Module : The 'Install-Module' command was found in the module 'PowerShellGet', but the module could not be
loaded. For more information, run 'Import-Module PowerShellGet'.
Import-Module : File C:\Program Files\WindowsPowerShell\Modules\PackageManagement\1.3.1\PackageManagement.psm1 cannot
be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
Pré-requisitos para o PowerShell
Audite sua instância do PowerShell executando o $PSVersionTable comando.
Este comando produz a seguinte saída:
Name Value
---- -----
PSVersion 5.1.17763.316
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17763.316
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Estas instruções foram escritas e testadas num computador com o Windows 10 e as versões seguintes.
Pré-requisitos para a Galeria do PowerShell
Estas etapas preparam seu servidor para baixar módulos da Galeria do PowerShell.
Observação
A Galeria do PowerShell é suportada no Windows 10, Windows Server 2016 e PowerShell 6+. Para obter informações sobre versões anteriores, consulte Instalando o PowerShellGet.
Execute o PowerShell como Administrador com uma política de execução elevada.
Instale o provedor de pacotes NuGet.
- Descrição: você precisa desse provedor para interagir com repositórios baseados em NuGet, como a Galeria do PowerShell.
- Referência: Install-PackageProvider.
- Comando:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201. - Parâmetros opcionais:
-
-Proxy. Especifica um servidor proxy para a solicitação. -
-Force. Ignora o prompt de confirmação.
-
Você receberá esta solicitação se o NuGet não estiver configurado:
NuGet provider is required to continue PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or 'C:\Users\t\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import the NuGet provider now? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"):Configure o PowerShell Gallery como um repositório de confiança.
- Descrição: Por padrão, a Galeria do PowerShell é um repositório não confiável.
- Referência: Set-PSRepository.
- Comando:
Set-PSRepository -Name "PSGallery" -InstallationPolicy Trusted. - Parâmetro opcional:
-
-Proxy. Especifica um servidor proxy para a solicitação.
-
Você recebe este prompt se o PowerShell Gallery não é considerado confiável:
Untrusted repository You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"):Você pode confirmar essa alteração e auditar tudo
PSRepositoriesexecutando oGet-PSRepositorycomando.Instale a versão mais recente do PowerShellGet.
- Descrição: Este módulo contém as ferramentas usadas para obter outros módulos da Galeria do PowerShell. A versão 1.0.0.1 é fornecida com o Windows 10 e o Windows Server. É necessária a versão 1.6.0 ou superior. Para determinar qual versão está instalada, execute o
Get-Command -Module PowerShellGetcomando. - Referência: Instalando o PowerShellGet.
- Comando:
Install-Module -Name PowerShellGet. - Parâmetros opcionais:
-
-Proxy. Especifica um servidor proxy para a solicitação. -
-Force. Ignora o aviso "já instalado" e instala a versão mais recente.
-
Você recebe esse erro se não estiver usando a versão mais recente do PowerShellGet:
Install-Module : A parameter cannot be found that matches parameter name 'AllowPrerelease'. At line:1 char:20 Install-Module abc -AllowPrerelease ~~~~~~~~~~~~~~~~ CategoryInfo : InvalidArgument: (:) [Install-Module], ParameterBindingException FullyQualifiedErrorId : NamedParameterNotFound,Install-Module- Descrição: Este módulo contém as ferramentas usadas para obter outros módulos da Galeria do PowerShell. A versão 1.0.0.1 é fornecida com o Windows 10 e o Windows Server. É necessária a versão 1.6.0 ou superior. Para determinar qual versão está instalada, execute o
Reinicie o PowerShell. Não é possível carregar a nova versão na sessão atual. Novas sessões do PowerShell carregam a versão mais recente do PowerShellGet.
Opção 1: Descarregar e instalar o módulo através da PowerShell Gallery
Estas etapas baixam o módulo Az.ApplicationMonitor da Galeria do PowerShell.
- Certifique-se de que todos os pré-requisitos para o PowerShell Gallery são cumpridos.
- Execute o PowerShell como Administrador com uma política de execução elevada.
- Instale o módulo Az.ApplicationMonitor.
- Referência: Install-Module.
- Comando:
Install-Module -Name Az.ApplicationMonitor. - Parâmetros opcionais:
-
-Proxy. Especifica um servidor proxy para a solicitação. -
-AllowPrerelease. Permite a instalação de versões alfa e beta. -
-AcceptLicense. Ignora o prompt "Aceitar licença" -
-Force. Ignora o aviso "Repositório não confiável".
-
Opção 2: Descarregar e instalar o módulo manualmente (opção offline)
Se, por qualquer motivo, você não puder se conectar ao módulo PowerShell, poderá baixar e instalar manualmente o módulo Az.ApplicationMonitor.
Baixe manualmente o arquivo nupkg mais recente
- Aceda a https://www.powershellgallery.com/packages/Az.ApplicationMonitor.
- Selecione a versão mais recente do arquivo na tabela Histórico de versões.
- Em Opções de Instalação, selecione Download Manual.
Opção 2.1: Instalar num diretório de módulos PowerShell
Instale o módulo do PowerShell baixado manualmente em um diretório do PowerShell para que ele possa ser descoberto por sessões do PowerShell. Para obter mais informações, consulte Instalando um módulo do PowerShell.
Descompactar o nupkg como ficheiro zip usando Expand-Archive (v1.0.1.0)
Descrição: A versão base do Microsoft.PowerShell.Archive (v1.0.1.0) não pode descompactar arquivos nupkg. Renomeie o arquivo com a extensão .zip.
Referência: Expand-Archive.
Comando:
$pathToNupkg = "C:\az.applicationmonitor.0.3.0-alpha.nupkg" $pathToZip = ([io.path]::ChangeExtension($pathToNupkg, "zip")) $pathToNupkg | rename-item -newname $pathToZip $pathInstalledModule = "$Env:ProgramFiles\WindowsPowerShell\Modules\az.applicationmonitor" Expand-Archive -LiteralPath $pathToZip -DestinationPath $pathInstalledModule
Descomprimir o nupkg usando Expand-Archive (v1.1.0.0)
Descrição: Use uma versão atual do Expand-Archive para descompactar arquivos nupkg sem alterar a extensão.
Referência: Expand-Archive e Microsoft.PowerShell.Archive.
Comando:
$pathToNupkg = "C:\az.applicationmonitor.0.2.1-alpha.nupkg" $pathInstalledModule = "$Env:ProgramFiles\WindowsPowerShell\Modules\az.applicationmonitor" Expand-Archive -LiteralPath $pathToNupkg -DestinationPath $pathInstalledModule
Opção 2.2: Descompactar e importar manualmente o nupkg
Instale o módulo do PowerShell baixado manualmente em um diretório do PowerShell para que ele possa ser descoberto por sessões do PowerShell. Para obter mais informações, consulte Instalando um módulo do PowerShell.
Se você estiver instalando o módulo em qualquer outro diretório, importe manualmente o módulo usando Import-Module.
Importante
As bibliotecas de vínculo dinâmico (DLLs) são instaladas por caminhos relativos. Armazene o conteúdo do pacote no diretório de tempo de execução pretendido e confirme se as permissões de acesso permitem leitura, mas não gravação.
- Altere a extensão para ".zip" e extraia o conteúdo do pacote para o diretório de instalação pretendido.
- Encontre o caminho do arquivo Az.ApplicationMonitor.psd1.
- Execute o PowerShell como Administrador com uma política de execução elevada.
- Carregue o módulo usando o
Import-Module Az.ApplicationMonitor.psd1comando.
Encaminhar o tráfego através de um proxy
Quando você monitora um computador em sua intranet privada, você precisa rotear o tráfego HTTP através de um proxy.
Os comandos do PowerShell para descarregar e instalar o Az.ApplicationMonitor a partir do PowerShell Gallery suportam um parâmetro -Proxy.
Reveja as instruções anteriores quando escrever os scripts de instalação.
O SDK do Application Insights precisa enviar a telemetria do seu aplicativo para a Microsoft. Recomendamos que você defina as configurações de proxy para seu aplicativo em seu arquivo web.config. Para obter mais informações, consulte Como faço para obter passagem de proxy?.
Ativar monitorização
Use o Enable-ApplicationInsightsMonitoring comando para habilitar a monitorização.
Consulte a referência da API para obter uma descrição detalhada de como usar esse cmdlet.
Referência da API
Importante
- Os seguintes cmdlets requerem uma sessão PowerShell com permissões de administrador e uma política de execução elevada. Para obter mais informações, consulte Executar o PowerShell como administrador com uma política de execução elevada.
- Os seguintes conselhos exigem que reveja e aceite a nossa licença e declaração de privacidade.
- O mecanismo de instrumentação adiciona mais sobrecarga e está desligado por padrão.
Esta secção descreve os seguintes cmdlets, que são membros do módulo PowerShell do Az.ApplicationMonitor:
Observação
Expanda qualquer uma das secções abaixo para mais informações, incluindo exemplos, parâmetros e resultados.
Enable-InstrumentationEngine
Habilita o motor de instrumentação ao definir algumas chaves do Registo. Reinicie o IIS para que as alterações entrem em vigor.
O motor de instrumentação pode complementar os dados recolhidos pelos Kits de Desenvolvimento de Software (SDKs) .NET. Ele coleta eventos e mensagens que descrevem a execução de um processo gerenciado. Esses eventos e mensagens incluem códigos de resultado de dependência, verbos HTTP e texto de comando SQL.
Ative o mecanismo de instrumentação se:
- Você já habilitou o monitoramento com o
Enablecmdlet, mas não habilitou o mecanismo de instrumentação. - Instrumentaste manualmente a tua aplicação com os SDKs .NET e queres recolher telemetria extra.
Exemplos
Enable-InstrumentationEngine
Parâmetros
| Parâmetro | Descrição |
|---|---|
| -AceitarLicença | Opcional. Use esta opção para aceitar a licença e a declaração de privacidade em instalações sem cabeça. |
| -Verbose | Parâmetro comum. Use essa opção para gerar logs detalhados. |
Output
Exemplo de resultado ao ativar com sucesso o motor de instrumentação:
Configuring IIS Environment for instrumentation engine...
Configuring registry for instrumentation engine...
Enable-ApplicationInsightsMonitoring
Permite a anexação sem código para a monitorização de aplicações IIS num computador de destino.
Este cmdlet modifica o applicationHost.config do IIS e define algumas chaves do Registro. Ele cria um arquivo applicationinsights.ikey.config, que define a chave de instrumentação usada por cada aplicativo. O IIS carrega o RedfieldModule na inicialização, que injeta o SDK do Application Insights em aplicativos à medida que os aplicativos são iniciados. Reinicie o IIS para que as alterações entrem em vigor.
Depois de ativar o monitoramento, recomendamos que você use o Live Metrics para verificar rapidamente se seu aplicativo está nos enviando telemetria.
Exemplos
Exemplo com uma única cadeia de conexão
Neste exemplo, todos os aplicativos no computador atual são fornecidos com uma única cadeia de conexão.
Enable-ApplicationInsightsMonitoring -ConnectionString 'InstrumentationKey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/'
Exemplo com uma única chave de instrumentação
Neste exemplo, todos os aplicativos no computador atual são fornecidos com uma única chave de instrumentação.
Enable-ApplicationInsightsMonitoring -InstrumentationKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Exemplo com um mapa de teclas de instrumentação
Neste exemplo:
-
MachineFiltercorresponde ao computador atual usando o curinga'.*'. -
AppFilter='WebAppExclude'fornece umanullchave de instrumentação. O aplicativo especificado não é instrumentado. -
AppFilter='WebAppOne'atribui ao aplicativo especificado uma chave de instrumentação exclusiva. -
AppFilter='WebAppTwo'atribui ao aplicativo especificado uma chave de instrumentação exclusiva. -
AppFilterusa o wildcard'.*'para corresponder a quaisquer aplicativos Web que não foram anteriormente correspondidos e atribui uma chave de instrumentação padrão. - São adicionados espaços para facilitar a leitura.
Enable-ApplicationInsightsMonitoring -InstrumentationKeyMap `
` @(@{MachineFilter='.*';AppFilter='WebAppExclude'},
` @{MachineFilter='.*';AppFilter='WebAppOne';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx1'}},
` @{MachineFilter='.*';AppFilter='WebAppTwo';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx2'}},
` @{MachineFilter='.*';AppFilter='.*';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxdefault'}})
-
MachineFilter é um regex C# necessário do nome do computador ou da máquina virtual (VM).
- '.*' corresponde a tudo
- 'ComputerName' corresponde apenas a computadores com o nome exato especificado.
-
AppFilter é uma expressão regular C# necessária do Nome do Site do IIS. Você pode obter uma lista de sites em seu servidor executando o comando get-iissite.
- '.*' corresponde a tudo
- 'SiteName' corresponde apenas ao Site do IIS com o nome exato especificado.
-
InstrumentationKey é necessário para habilitar o monitoramento de aplicativos que correspondem aos dois filtros anteriores.
- Deixe esse valor nulo se quiser definir regras para excluir o monitoramento.
Parâmetros
| Parâmetro | Descrição |
|---|---|
| -AtivarMotorDeInstrumentação | Opcional. Use essa opção para permitir que o mecanismo de instrumentação colete eventos e mensagens sobre o que está acontecendo durante a execução de um processo gerenciado. Esses eventos e mensagens incluem códigos de resultado de dependência, verbos HTTP e texto de comando SQL. O mecanismo de instrumentação adiciona sobrecarga e está desligado por padrão. |
| -AceitarLicença | Opcional. Use esta opção para aceitar a licença e a declaração de privacidade em instalações sem cabeça. |
| -IgnoreSharedConfig | Quando você tem um cluster de servidores Web, você pode estar usando uma configuração compartilhada. O HttpModule não pode ser injetado nesta configuração compartilhada. Esse script falha com a mensagem de que etapas de instalação adicionais são necessárias. Use essa opção para ignorar essa verificação e continuar instalando os pré-requisitos. Para obter mais informações, consulte conflito-conhecido-com-configuração-partilhada-do-iis |
| -Verbose | Parâmetro comum. Use essa opção para exibir logs detalhados. |
| -WhatIf | Parâmetro comum. Use essa opção para testar e validar seus parâmetros de entrada sem realmente habilitar o monitoramento. |
Output
Exemplo de saída de uma habilitação bem-sucedida
Initiating Disable Process
Applying transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config'
'C:\Windows\System32\inetsrv\config\applicationHost.config' backed up to 'C:\Windows\System32\inetsrv\config\applicationHost.config.backup-2019-03-26_08-59-52z'
in :1,237
No element in the source document matches '/configuration/location[@path='']/system.webServer/modules/add[@name='ManagedHttpModuleHelper']'
Not executing RemoveAll (transform line 1, 546)
Transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config' was successfully applied. Operation: 'disable'
GAC Module will not be removed, since this operation might cause IIS instabilities
Configuring IIS Environment for codeless attach...
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]
Configuring IIS Environment for instrumentation engine...
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]
Configuring registry for instrumentation engine...
Successfully disabled Application Insights Agent
Installing GAC module 'C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\0.2.0\content\Runtime\Microsoft.AppInsights.IIS.ManagedHttpModuleHelper.dll'
Applying transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config'
Found GAC module Microsoft.AppInsights.IIS.ManagedHttpModuleHelper.ManagedHttpModuleHelper, Microsoft.AppInsights.IIS.ManagedHttpModuleHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
'C:\Windows\System32\inetsrv\config\applicationHost.config' backed up to 'C:\Windows\System32\inetsrv\config\applicationHost.config.backup-2019-03-26_08-59-52z_1'
Transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config' was successfully applied. Operation: 'enable'
Configuring IIS Environment for codeless attach...
Configuring IIS Environment for instrumentation engine...
Configuring registry for instrumentation engine...
Updating app pool permissions...
Successfully enabled Application Insights Agent
Disable-InstrumentationEngine
Desativa o mecanismo de instrumentação removendo algumas chaves do Registro. Reinicie o IIS para que as alterações entrem em vigor.
Exemplos
Disable-InstrumentationEngine
Parâmetros
| Parâmetro | Descrição |
|---|---|
| -Verbose | Parâmetro comum. Use essa opção para gerar logs detalhados. |
Output
Exemplo de saída da desativação bem-sucedida do mecanismo de instrumentação
Configuring IIS Environment for instrumentation engine...
Registry: removing 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]'
Registry: removing 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]'
Registry: removing 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]'
Configuring registry for instrumentation engine...
Disable-ApplicationInsightsMonitoring
Desabilita o monitoramento no computador de destino. Este cmdlet remove edições no applicationHost.config do IIS e remove chaves do Registro.
Exemplos
Disable-ApplicationInsightsMonitoring
Parâmetros
| Parâmetro | Descrição |
|---|---|
| -Verbose | Parâmetro comum. Use essa opção para exibir logs detalhados. |
Output
Exemplo de saída da desativação bem-sucedida do monitoramento
Initiating Disable Process
Applying transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config'
'C:\Windows\System32\inetsrv\config\applicationHost.config' backed up to 'C:\Windows\System32\inetsrv\config\applicationHost.config.backup-2019-03-26_08-59-00z'
in :1,237
No element in the source document matches '/configuration/location[@path='']/system.webServer/modules/add[@name='ManagedHttpModuleHelper']'
Not executing RemoveAll (transform line 1, 546)
Transformation to 'C:\Windows\System32\inetsrv\config\applicationHost.config' was successfully applied. Operation: 'disable'
GAC Module will not be removed, since this operation might cause IIS instabilities
Configuring IIS Environment for codeless attach...
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]
Configuring IIS Environment for instrumentation engine...
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IISADMIN[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC[Environment]
Registry: skipping non-existent 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WAS[Environment]
Configuring registry for instrumentation engine...
Successfully disabled Application Insights Agent
Get-ApplicationInsightsMonitoringConfig
Obtém o arquivo de configuração e imprime os valores no console.
Exemplos
Get-ApplicationInsightsMonitoringConfig
Parâmetros
Nenhum parâmetro necessário.
Output
Exemplo de saída da leitura do arquivo de configuração
RedfieldConfiguration:
Filters:
0)InstrumentationKey: AppFilter: WebAppExclude MachineFilter: .*
1)InstrumentationKey: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx2 AppFilter: WebAppTwo MachineFilter: .*
2)InstrumentationKey: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxdefault AppFilter: .* MachineFilter: .*
Get-ApplicationInsightsMonitoringStatus
Este cmdlet fornece informações de solução de problemas sobre o Application Insights Agent. Use este cmdlet para investigar o status de monitoramento, a versão do Módulo PowerShell e inspecionar o processo em execução. Este cmdlet relata informações de versão e informações sobre os principais arquivos necessários para o monitoramento.
Exemplos
Exemplo: Estado da candidatura
Execute o comando Get-ApplicationInsightsMonitoringStatus para exibir o status de monitoramento de sites.
Get-ApplicationInsightsMonitoringStatus
IIS Websites:
SiteName : Default Web Site
ApplicationPoolName : DefaultAppPool
SiteId : 1
SiteState : Stopped
SiteName : DemoWebApp111
ApplicationPoolName : DemoWebApp111
SiteId : 2
SiteState : Started
ProcessId : not found
SiteName : DemoWebApp222
ApplicationPoolName : DemoWebApp222
SiteId : 3
SiteState : Started
ProcessId : 2024
Instrumented : true
InstrumentationKey : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx123
SiteName : DemoWebApp333
ApplicationPoolName : DemoWebApp333
SiteId : 4
SiteState : Started
ProcessId : 5184
AppAlreadyInstrumented : true
Neste exemplo:
O Identificador de Máquina é um ID anónimo utilizado para identificar exclusivamente o seu servidor. Se você criar uma solicitação de suporte, precisamos dessa ID para encontrar logs para o seu servidor.
Site Web Padrão está parado no IIS
O IIS mostra o DemoWebApp111 como iniciado, mas o aplicativo não recebe nenhuma solicitação. O relatório não mostra nenhum processo em execução (ProcessId: não encontrado).
DemoWebApp222 está em execução e está sendo monitorado (Instrumentado: true). Com base na configuração do utilizador, a Chave de Instrumentação xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx123 foi associada a este site.
O DemoWebApp333 é instrumentado manualmente usando o SDK do Application Insights. O Application Insights Agent deteta o SDK e não monitora este site.
A presença de
AppAlreadyInstrumented : truesignifica que o agente do Application Insights identificou uma DLL conflitante carregada na aplicação web, assumiu que a aplicação web é instrumentada manualmente, e o agente recuou e não está a instrumentar este processo.Instrumented : trueindica que o agente do Application Insights instrumentou com êxito o aplicativo Web em execução no processo de w3wp.exe especificado.
Exemplo: informações do módulo PowerShell
Execute o comando Get-ApplicationInsightsMonitoringStatus -PowerShellModule para exibir informações sobre o módulo atual:
Get-ApplicationInsightsMonitoringStatus -PowerShellModule
PowerShell Module version:
0.4.0-alpha
Application Insights SDK version:
2.9.0.3872
Executing PowerShell Module Assembly:
Microsoft.ApplicationInsights.Redfield.Configurator.PowerShell, Version=2.8.14.11432, Culture=neutral, PublicKeyToken=31bf3856ad364e35
PowerShell Module Directory:
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\0.2.2\content\PowerShell
Runtime Paths:
ParentDirectory (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content
ConfigurationPath (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\applicationInsights.ikey.config
ManagedHttpModuleHelperPath (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AppInsights.IIS.ManagedHttpModuleHelper.dll
RedfieldIISModulePath (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.RedfieldIISModule.dll
InstrumentationEngine86Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation32\MicrosoftInstrumentationEngine_x86.dll
InstrumentationEngine64Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\MicrosoftInstrumentationEngine_x64.dll
InstrumentationEngineExtensionHost86Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation32\Microsoft.ApplicationInsights.ExtensionsHost_x86.dll
InstrumentationEngineExtensionHost64Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\Microsoft.ApplicationInsights.ExtensionsHost_x64.dll
InstrumentationEngineExtensionConfig86Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation32\Microsoft.InstrumentationEngine.Extensions.config
InstrumentationEngineExtensionConfig64Path (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\Microsoft.InstrumentationEngine.Extensions.config
ApplicationInsightsSdkPath (Exists: True)
C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.dll
Exemplo: Estado do tempo de execução
Você pode inspecionar o processo no computador instrumentado para ver se todas as DLLs estão carregadas. Se o monitoramento estiver funcionando, pelo menos 12 DLLs devem ser carregadas.
Execute o comando Get-ApplicationInsightsMonitoringStatus -InspectProcess:
Get-ApplicationInsightsMonitoringStatus -InspectProcess
iisreset.exe /status
Status for IIS Admin Service ( IISADMIN ) : Running
Status for Windows Process Activation Service ( WAS ) : Running
Status for Net.Msmq Listener Adapter ( NetMsmqActivator ) : Running
Status for Net.Pipe Listener Adapter ( NetPipeActivator ) : Running
Status for Net.Tcp Listener Adapter ( NetTcpActivator ) : Running
Status for World Wide Web Publishing Service ( W3SVC ) : Running
handle64.exe -accepteula -p w3wp
BF0: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.ServerTelemetryChannel.dll
C58: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.AzureAppServices.dll
C68: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.DependencyCollector.dll
C78: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.WindowsServer.dll
C98: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.Web.dll
CBC: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.PerfCounterCollector.dll
DB0: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.AI.Agent.Intercept.dll
B98: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.RedfieldIISModule.dll
BB4: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.RedfieldIISModule.Contracts.dll
BCC: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.Redfield.Lightup.dll
BE0: File (R-D) C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.dll
listdlls64.exe -accepteula w3wp
0x0000000019ac0000 0x127000 C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\MicrosoftInstrumentationEngine_x64.dll
0x00000000198b0000 0x4f000 C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\Microsoft.ApplicationInsights.ExtensionsHost_x64.dll
0x000000000c460000 0xb2000 C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Instrumentation64\Microsoft.ApplicationInsights.Extensions.Base_x64.dll
0x000000000ad60000 0x108000 C:\Windows\TEMP\2.4.0.0.Microsoft.ApplicationInsights.Extensions.Intercept_x64.dll
Parâmetros
Por padrão, esse cmdlet relata o status de monitoramento de aplicativos Web. Use esta opção para verificar se seu aplicativo foi instrumentado com êxito. Você também pode verificar qual Chave de Instrumentação foi associada ao seu site.
| Parâmetro | Descrição |
|---|---|
| -PowerShellModule | Opcional. Use essa opção para relatar os números de versão e os caminhos das DLLs necessárias para monitoramento. Use essa opção se precisar identificar a versão de qualquer DLL, incluindo o SDK do Application Insights. |
| -Inspecionar o processo |
Opcional. Use essa opção para relatar se o IIS está em execução. Ele baixa ferramentas externas para determinar se as DLLs necessárias são carregadas no tempo de execução do IIS. Se esse processo falhar por qualquer motivo, você pode executar estes comandos manualmente: * iisreset.exe /status* \[handle64.exe\](/sysinternals/downloads/handle) -p w3wp \| findstr /I "InstrumentationEngine AI. ApplicationInsights"* \[listdlls64.exe\](/sysinternals/downloads/listdlls) w3wp \| findstr /I "InstrumentationEngine AI ApplicationInsights" |
| -Force | Opcional. Usado somente com InspectProcess. Use essa opção para ignorar o prompt do usuário que aparece antes que mais ferramentas sejam baixadas. |
Set-ApplicationInsightsMonitoringConfig
Define o arquivo de configuração sem fazer uma reinstalação completa. Reinicie o IIS para que as alterações entrem em vigor.
Importante
Este cmdlet requer uma sessão do PowerShell com permissões de administrador.
Exemplos
Exemplo com uma única chave de instrumentação
Neste exemplo, todos os aplicativos no computador atual são fornecidos com uma única chave de instrumentação.
Enable-ApplicationInsightsMonitoring -InstrumentationKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Exemplo com um mapa de teclas de instrumentação
Neste exemplo:
-
MachineFiltercorresponde ao computador atual usando o curinga'.*'. -
AppFilter='WebAppExclude'fornece umanullchave de instrumentação. O aplicativo especificado não é instrumentado. -
AppFilter='WebAppOne'atribui ao aplicativo especificado uma chave de instrumentação exclusiva. -
AppFilter='WebAppTwo'atribui ao aplicativo especificado uma chave de instrumentação exclusiva. -
AppFilterusa o wildcard'.*'para corresponder a aplicações Web que ainda não abrange e atribui uma chave de instrumentação padrão. - São adicionados espaços para facilitar a leitura.
Enable-ApplicationInsightsMonitoring -InstrumentationKeyMap `
` @(@{MachineFilter='.*';AppFilter='WebAppExclude'},
` @{MachineFilter='.*';AppFilter='WebAppOne';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx1'}},
` @{MachineFilter='.*';AppFilter='WebAppTwo';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx2'}},
` @{MachineFilter='.*';AppFilter='.*';InstrumentationSettings=@{InstrumentationKey='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxdefault'}})
Parâmetros
| Parâmetro | Descrição |
|---|---|
| -InstrumentationKey | Required. Use esse parâmetro para fornecer uma única chave de instrumentação para uso por todos os aplicativos no computador de destino. |
| -InstrumentationKeyMap | Required. Use esse parâmetro para fornecer várias chaves de instrumentação e um mapeamento das chaves de instrumentação usadas por cada aplicativo. |
Você pode criar um único script de instalação para vários computadores definindo MachineFilter.
Importante
As aplicações correspondem às regras pela ordem em que são fornecidas. Especifique primeiro as regras mais específicas e as regras mais genéricas por último.
Importante
InstrumentationKeyMap é uma funcionalidade avançada de roteamento que associa aplicações do Internet Information Services (IIS) hospedadas na mesma máquina aos recursos do Application Insights. A funcionalidade aplica-se a aplicações ASP.NET e ASP.NET Core alojadas no IIS que são autoinstrumentadas pelo Application Insights Agent.
Como funciona a correspondência
- O mapa define uma lista ordenada de regras denominada
filters. A primeira regra de correspondência é aplicada. Coloque regras específicas em primeiro lugar e termine com uma regra abrangente. - Cada regra pode atribuir um recurso diferente do Application Insights a aplicativos correspondentes. Prefira cadeias de conexão em cenários suportados porque as chaves de instrumentação são herdadas.
Filtros disponíveis
-
MachineFilteroumachineFilter: expressão regular C# que corresponde ao nome do computador ou da máquina virtual (VM)..*corresponde a todos os nomes. -
AppFilterouappFilter: expressão regular C# que corresponde ao nome do site do IIS (HostingEnvironment.SiteName). Este filtro é necessário quandoVirtualPathFilterouvirtualPathFilternão é fornecido. -
VirtualPathFilterouvirtualPathFilter: expressão regular C# que corresponde ao caminho virtual do IIS (HostingEnvironment.ApplicationVirtualPath). Use esse filtro para direcionar um único aplicativo em um site.
Mapeamento terminológico
- Os cmdlets do PowerShell usam
MachineFilter,AppFiltereVirtualPathFilter. - A extensão JSON de Azure VM e de Virtual Machine Scale Sets usa
machineFilter,appFilterevirtualPathFilter, e define o recurso cominstrumentationSettings.
Sugestão
Inclua uma regra final que corresponda a todos os aplicativos, como .*, e aplique um recurso padrão para tornar o comportamento explícito.
Forma de mapa deste cmdlet
- Forneça
-InstrumentationKeyMapcomo uma matriz PowerShell de tabelas de hash. - Para este cmdlet, defina o recurso de destino por regra com
InstrumentationSettings=@{ InstrumentationKey = '<ikey>' }. - Se você quiser um único recurso para todos os aplicativos na máquina, use
-ConnectionStringou-InstrumentationKeyem vez disso.
Start-ApplicationInsightsMonitorizaçãoRastreio
Recolhe eventos de rastreamento de eventos para Windows (ETW) que o runtime de anexação sem código emite. Use este cmdlet como uma alternativa mais simples para executar o PerfView.
Os eventos são impressos no console em tempo real e também gravados em um .etl arquivo. Você pode abrir o arquivo com o .etl PerfView para uma análise mais profunda.
Esse cmdlet é executado até atingir o tempo limite, o padrão é 5 minutos ou até que você o interrompa manualmente com Ctrl + C.
Exemplos
Como recolher eventos
Use esse fluxo quando precisar investigar por que um aplicativo do IIS não está sendo instrumentado.
O tempo de execução de incorporamento sem código emite eventos ETW quando o IIS é iniciado e quando a sua aplicação é iniciada.
- Em um prompt de comando administrativo, execute
iisreset /stoppara parar o IIS e todos os aplicativos Web. - Comece a rastrear executando este cmdlet.
- Em um prompt de comando administrativo, execute
iisreset /startpara iniciar o IIS. - Acione a inicialização navegando até seu aplicativo.
- Depois que o aplicativo terminar de carregar, pressione
Ctrl + Cpara parar ou permita que o tempo limite termine a sessão.
Que eventos deve recolher
Você pode escolher quais fontes de eventos incluir:
-
-CollectSdkEventsrecolhe eventos do SDK do Application Insights. -
-CollectRedfieldEventscoleta eventos do Application Insights Agent e do runtime Redfield, o que é útil para o diagnóstico de inicialização de aplicações no IIS. - Colete ambos os conjuntos especificando ambos os switches.
- Se você não especificar uma opção, ambos os conjuntos serão coletados por padrão.
Parâmetros
| Parâmetro | Descrição |
|---|---|
| -DuraçãoMáximaEmMinutos | Opcional. Define quanto tempo coletar antes do tempo limite. O padrão é 5 minutos. |
| -LogDirectory | Opcional. Diretório onde o .etl arquivo deve ser gravado. Por padrão, o arquivo é criado no diretório do módulo PowerShell. O caminho completo é mostrado quando a sessão é iniciada. |
| -CollectSdkEvents | Opcional. Inclua eventos do SDK do Application Insights. |
| -ColetarEventosRedfield | Opcional. Inclua eventos do Application Insights Agent e do ambiente de execução do Redfield. |
| -Verbose | Parâmetro comum. Produz logs detalhados. |
Output
Exemplo de logs de inicialização do aplicativo
Start-ApplicationInsightsMonitoringTrace -CollectRedfieldEvents
Starting...
Log File: C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\logs\20190627_144217_ApplicationInsights_ETW_Trace.etl
Tracing enabled, waiting for events.
Tracing will timeout in 5 minutes. Press CTRL+C to cancel.
2:42:31 PM EVENT: Microsoft-ApplicationInsights-IIS-ManagedHttpModuleHelper Trace Resolved variables to: MicrosoftAppInsights_ManagedHttpModulePath='C:\Program Files\WindowsPowerShell\Modules\Az.ApplicationMonitor\content\Runtime\Microsoft.ApplicationInsights.RedfieldIISModule.dll', MicrosoftAppInsights_ManagedHttpModuleType='Microsoft.ApplicationInsights.RedfieldIISModule.RedfieldIISModule'
2:42:31 PM EVENT: Microsoft-ApplicationInsights-IIS-ManagedHttpModuleHelper Trace Resolved variables to: MicrosoftDiagnosticServices_ManagedHttpModulePath2='', MicrosoftDiagnosticServices_ManagedHttpModuleType2=''
2:42:31 PM EVENT: Microsoft-ApplicationInsights-IIS-ManagedHttpModuleHelper Trace Environment variable 'MicrosoftDiagnosticServices_ManagedHttpModulePath2' or 'MicrosoftDiagnosticServices_ManagedHttpModuleType2' is null, skipping managed dll loading
Implementar o Application Insights Agent para máquinas virtuais (VMs) e conjuntos de escalas de máquinas virtuais
Nesta secção
- Permitir monitorização para máquinas virtuais
- Permitir monitorização para conjuntos de escalas de máquinas virtuais
Habilite o monitoramento do Azure MonitorApplication Insights por meio da autoinstrumentação para aplicativos ASP.NET e ASP.NET Core hospedados pelo Internet Information Server (IIS) em Máquinas Virtuais do Azure e Conjuntos de Dimensionamento de Máquinas Virtuais do Azure.
Implante o Application Insights Agent com uma extensão de máquina virtual. O agente coleta automaticamente os mesmos sinais de dependência que o SDK. Use o PowerShell para automatizar implantações em grande escala.
Observação
- Para aplicações Java, utilize o agente Application Insights Java 3.0, que recolhe automaticamente as bibliotecas, os frameworks, os logs e as dependências mais populares, juntamente com muitas outras configurações.
- As aplicações Node.js e Python que estão a correr nas VMs da Azure e nos Azure Virtual Machine Scale Sets não suportam autoinstrumentação. Usa a distribuição Azure Monitor OpenTelemetry em vez disso.
- Para monitorar convidados de VM, além dos aplicativos hospedados neles, consulte Dados de convidado de VM.
Para obter uma lista completa dos cenários de autoinstrumentação suportados, consulte Ambientes suportados, idiomas e provedores de recursos.
Habilitar o monitoramento para máquinas virtuais
Você pode usar o portal do Azure ou o PowerShell para habilitar o monitoramento de VMs.
Opção 1: Azure portal
No portal do Azure, aceda ao seu recurso Application Insights. Copia a tua connection string para a prancheta.
Vá para a sua máquina virtual. Na seção Configurações no menu do lado esquerdo, selecione Extensões + Adicionar aplicativos>.
Selecione Agente do Application Insights>Seguinte.
Cole a cadeia de conexão copiada na etapa 1 e selecione Revisar + criar.
Opção 2: PowerShell
Observação
Novo no PowerShell? Consulte o Guia de introdução.
Instale ou atualize o Application Insights Agent como uma extensão para máquinas virtuais do Azure:
# define variables to match your environment before running
$ResourceGroup = "<myVmResourceGroup>"
$VMName = "<myVmName>"
$Location = "<myVmLocation>"
$ConnectionString = "<myAppInsightsResourceConnectionString>"
$publicCfgJsonString = @"
{
"redfieldConfiguration": {
"instrumentationKeyMap": {
"filters": [
{
"appFilter": ".*",
"machineFilter": ".*",
"virtualPathFilter": ".*",
"instrumentationSettings" : {
"connectionString": "$ConnectionString"
}
}
]
}
}
}
"@
$privateCfgJsonString = '{}'
Set-AzVMExtension -ResourceGroupName $ResourceGroup -VMName $VMName -Location $Location -Name "ApplicationMonitoringWindows" -Publisher "Microsoft.Azure.Diagnostics" -Type "ApplicationMonitoringWindows" -Version "2.8" -SettingString $publicCfgJsonString -ProtectedSettingString $privateCfgJsonString
Observação
Para implantações em escala mais complicadas, você pode usar um loop do PowerShell para instalar ou atualizar a extensão do Application Insights Agent em várias VMs.
Consulte o status da extensão do Application Insights Agent para máquinas virtuais do Azure:
Get-AzVMExtension -ResourceGroupName "<myVmResourceGroup>" -VMName "<myVmName>" -Name ApplicationMonitoringWindows -Status
Obtenha uma lista de extensões instaladas para máquinas virtuais do Azure:
Get-AzResource -ResourceId "/subscriptions/<mySubscriptionId>/resourceGroups/<myVmResourceGroup>/providers/Microsoft.Compute/virtualMachines/<myVmName>/extensions"
Desinstale a extensão Application Insights Agent das máquinas virtuais do Azure:
Remove-AzVMExtension -ResourceGroupName "<myVmResourceGroup>" -VMName "<myVmName>" -Name "ApplicationMonitoring"
Observação
Verifique a instalação selecionando Live Metrics Stream dentro do recurso do Application Insights associado à cadeia de conexão usada para implantar a extensão do Application Insights Agent. Se estiveres a enviar dados de várias máquinas virtuais, seleciona as máquinas virtuais alvo do Azure em Nome do Servidor. Pode levar até um minuto para que os dados comecem a fluir.
instrumentationKeyMap (configurações de extensão)
Importante
InstrumentationKeyMap é uma funcionalidade avançada de roteamento que associa aplicações do Internet Information Services (IIS) hospedadas na mesma máquina aos recursos do Application Insights. A funcionalidade aplica-se a aplicações ASP.NET e ASP.NET Core alojadas no IIS que são autoinstrumentadas pelo Application Insights Agent.
Como funciona a correspondência
- O mapa define uma lista ordenada de regras denominada
filters. A primeira regra de correspondência é aplicada. Coloque regras específicas em primeiro lugar e termine com uma regra abrangente. - Cada regra pode atribuir um recurso diferente do Application Insights a aplicativos correspondentes. Prefira cadeias de conexão em cenários suportados porque as chaves de instrumentação são herdadas.
Filtros disponíveis
-
MachineFilteroumachineFilter: expressão regular C# que corresponde ao nome do computador ou da máquina virtual (VM)..*corresponde a todos os nomes. -
AppFilterouappFilter: expressão regular C# que corresponde ao nome do site do IIS (HostingEnvironment.SiteName). Este filtro é necessário quandoVirtualPathFilterouvirtualPathFilternão é fornecido. -
VirtualPathFilterouvirtualPathFilter: expressão regular C# que corresponde ao caminho virtual do IIS (HostingEnvironment.ApplicationVirtualPath). Use esse filtro para direcionar um único aplicativo em um site.
Mapeamento terminológico
- Os cmdlets do PowerShell usam
MachineFilter,AppFiltereVirtualPathFilter. - A extensão JSON de Azure VM e de Virtual Machine Scale Sets usa
machineFilter,appFilterevirtualPathFilter, e define o recurso cominstrumentationSettings.
Sugestão
Inclua uma regra final que corresponda a todos os aplicativos, como .*, e aplique um recurso padrão para tornar o comportamento explícito.
Para onde se dirige a extensão de VM e Virtual Machine Scale Sets
Coloque o mapa sob redfieldConfiguration.instrumentationKeyMap.filters nas definições públicas da extensão (-SettingString para VMs, -Setting para Virtual Machine Scale Sets). Os nomes das propriedades estão em camel case minúsculo. Defina o recurso de destino por regra com instrumentationSettings.connectionString.
{
"redfieldConfiguration": {
"instrumentationKeyMap": {
"filters": [
{
"machineFilter": ".*",
"appFilter": ".*",
"instrumentationSettings": {
"connectionString": "<your-APPLICATIONINSIGHTS_CONNECTION_STRING>"
}
}
]
}
}
}
Permitir monitorização para conjuntos de escalas de máquinas virtuais
Você pode usar o portal do Azure ou o PowerShell para habilitar o monitoramento de conjuntos de dimensionamento de máquinas virtuais.
Opção 1: Azure portal
Siga as etapas anteriores para VMs, mas vá para seus conjuntos de dimensionamento de máquina virtual em vez de sua VM.
Opção 2: PowerShell
Instale ou atualize o Application Insights Agent como uma extensão para conjuntos de dimensionamento de máquinas virtuais:
# Set resource group, vmss name, and connection string to reflect your environment
$ResourceGroup = "<myVmResourceGroup>"
$VMSSName = "<myVmName>"
$ConnectionString = "<myAppInsightsResourceConnectionString>"
$publicCfgHashtable =
@{
"redfieldConfiguration"= @{
"instrumentationKeyMap"= @{
"filters"= @(
@{
"appFilter"= ".*";
"machineFilter"= ".*";
"virtualPathFilter"= ".*";
"instrumentationSettings" = @{
"connectionString"= "$ConnectionString"
}
}
)
}
}
};
$privateCfgHashtable = @{};
$vmss = Get-AzVmss -ResourceGroupName $ResourceGroup -VMScaleSetName $VMSSName
Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "ApplicationMonitoringWindows" -Publisher "Microsoft.Azure.Diagnostics" -Type "ApplicationMonitoringWindows" -TypeHandlerVersion "2.8" -Setting $publicCfgHashtable -ProtectedSetting $privateCfgHashtable
Update-AzVmss -ResourceGroupName $vmss.ResourceGroupName -Name $vmss
# Note: Depending on your update policy, you might need to run Update-AzVmssInstance for each instance
Obtenha uma lista de extensões instaladas para conjuntos de dimensionamento de máquinas virtuais:
Get-AzResource -ResourceId "/subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVmssName>/extensions"
Desinstale a extensão de monitorização de aplicações dos conjuntos de dimensionamento de máquinas virtuais:
# set resource group and vmss name to reflect your environment
$vmss = Get-AzVmss -ResourceGroupName "<myResourceGroup>" -VMScaleSetName "<myVmssName>"
Remove-AzVmssExtension -VirtualMachineScaleSet $vmss -Name "ApplicationMonitoringWindows"
Update-AzVmss -ResourceGroupName $vmss.ResourceGroupName -Name $vmss.Name -VirtualMachineScaleSet $vmss
# Note: Depending on your update policy, you might need to run Update-AzVmssInstance for each instance
Troubleshooting
Para obter etapas dedicadas de solução de problemas, consulte Problemas ao implantar a extensão do Application Insights Monitoring Agent para VMs e conjuntos de dimensionamento de máquinas virtuais.
Verificar se o Application Insights recebe telemetria
ASP.NET & ASP.NET Core
Execute seu aplicativo e faça solicitações para ele. Agora, a telemetria deve ser encaminhada para o Application Insights. O SDK do Application Insights coleta automaticamente as solicitações web de entrada para a sua aplicação, bem como a seguinte telemetria.
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
- Traços (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.
Introdução
Ative métricas em tempo real com os SDKs do Application Insights seguindo as diretrizes específicas de cada linguagem.
- ASP.NET: Ativado por defeito, mas também pode ser ativado manualmente usando código.
- ASP.NET Core: Ativado por defeito, mas também pode ser ativado manualmente usando código.
- .NET/.NET Core Console/Worker: Ativado por defeito.
Abra o recurso Application Insights para a sua candidatura no portal Azure. Selecione Métricas em tempo real, que está listado em Investigar no menu à esquerda.
Proteja o canal de controle habilitando a autenticação do Microsoft Entra se você usar filtros personalizados.
Funcionalidades suportadas
| Linguagem | Métricas básicas | Métricas de desempenho | Filtragem personalizada | Telemetria de amostra | CPU dividida por processo |
|---|---|---|---|---|---|
| .NET Framework | Suportado (LTS) | Suportado (LTS) | Suportado (LTS) | Suportado (LTS) | Suportado (LTS) |
| .NET Core (destino=.NET Framework) | Suportado (LTS) | Suportado (LTS) | Suportado (LTS) | Suportado (LTS) | Suportado (LTS) |
| .NET Core (alvo=.NET Core) | Suportado (LTS) | Supported* | Suportado (LTS) | Suportado (LTS) | Não suportado |
As métricas básicas incluem solicitação, dependência e taxa de exceção. As métricas de desempenho (contadores de desempenho) incluem memória e CPU. A telemetria de amostra mostra um fluxo de informações detalhadas para solicitações e dependências falhadas, exceções, eventos e rastreamentos.
O suporte ao PerfCounters varia ligeiramente entre versões do .NET Core que não têm como alvo o .NET Framework:
- As métricas PerfCounters são suportadas quando executadas no Serviço de Aplicativo do Azure para Windows (ASP.NET Core SDK versão 2.4.1 ou superior).
- Os PerfCounters são suportados quando a aplicação está a correr numa máquina qualquer Windows para aplicações que têm como alvo .NET Core LTS ou superior.
- Os PerfCounters são suportados quando o aplicativo está sendo executado em qualquer lugar (como Linux, Windows, serviço de aplicativo para Linux ou contêineres) nas versões mais recentes, mas apenas para aplicativos destinados ao .NET Core LTS ou superior.
Ative métricas em tempo real usando código para qualquer aplicação .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 uma aplicação de consola, mas o mesmo código pode ser usado em qualquer aplicação .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 recolhe ILoggerWarning registos e registos 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 (registos)
Esta secção explica como enviar registos de rastreio de diagnóstico das aplicações ASP.NET ou ASP.NET Core para o Application Insights e, em seguida, explorar/pesquisar esses registos 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.
O Application Insights captura registos do ASP.NET Core e de outras aplicações .NET através do ILogger, e do clássico ASP.NET (.NET Framework) através do clássico SDK e adaptadores.
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 Application Insights no Visual Studio, existe uma opção para incluir o coletor de logs.
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 Solution Explorer, clique com o botão direito no seu projeto e selecione Gerir 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 mais informações, consulte Logging in ASP.NET Core e Que tipo de telemetria Application Insights é produzido a partir dos registos do ILogger? Onde posso ver os registos 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
Pode configurar eventos de Event Tracing for Windows (ETW) para serem enviados ao Application Insights como traços.
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
A orientação seguinte aplica-se apenas a cenários de ILogger (ASP.NET Core e consola). Não se aplica ao clássico ASP.NET.
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 registos ILogger aparecem como telemetria de rastreio (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.
Exemplo
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 Application Insights .NET utiliza DiagnosticSource e Activity para recolher e correlacionar telemetria.
Dependências
Dependências rastreadas automaticamente
Os SDKs Application Insights para .NET e .NET Core incluem DependencyTrackingTelemetryModule, que é um módulo de telemetria que recolhe 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. |
| Azure Blob Storage, Armazenamento de Tabelas ou Armazenamento em Fila | Chamadas feitas com o cliente Azure Storage. |
| 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 | Automaticamente rastreado se for usado HTTP/HTTPS. 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.
Como funciona o monitoramento automático de dependência?
A instrumentação de bytecode é aplicada ao redor de métodos selecionados usando
InstrumentationEngine, e é ativada por meio deStatusMonitorou pela extensão Application Insights para o Azure App Service.Os callbacks
EventSourcesão usados para captar telemetria de bibliotecas .NET que emitem eventos estruturados.Os callbacks
DiagnosticSourcesão usados em SDKs .NET e .NET Core mais recentes para recolher telemetria de bibliotecas que suportam rastreio distribuído.
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 da base de dados é sempre coletado e armazenado como o nome da coleção DependencyTelemetry. Outro campo, chamado dados, pode conter o texto completo da consulta SQL.
Observação
O Azure Functions requer definições separadas para permitir a recolha 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.
| Plataforma | Etapas necessárias para obter uma consulta SQL completa |
|---|---|
| Aplicações Web no Serviço de Aplicações Azure | No painel de controlo da tua aplicação web, abre o painel Application Insights e ativa 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 aplicações ASP.NET Core, é obrigatório aderir à coleção de texto SQL utilizando:
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 rdddsd ou rddf indica que as dependências são recolhidas através de callbacks DiagnosticSource ou EventSource, portanto, a consulta SQL completa não é capturada.
Exceções
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 SDK do JavaScript permite o envio de relatórios do lado do cliente de exceções que ocorrem em navegadores 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 secção foca-se nas aplicações do .NET Framework a partir de uma perspetiva de exemplo de código. Alguns dos métodos que funcionam para o .NET Framework estão obsoletos no .NET Core SDK.
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 pesquisa de telemetria 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 ficheiro de código relevante, selecione uma linha no stack trace.
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 dados de solicitação 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 traços 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.
- Captura exceções automaticamente configurando o seu framework de 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-te obter um stack trace e detalhes sobre 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ências (DI) no .NET, o SDK do .NET apropriado e a configuração correta do Application Insights para DI, poderá requerer o TelemetryClient como um parâmetro de construtor.
public class ExampleController : ApiController
{
private readonly TelemetryClient _telemetryClient;
public ExampleController(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}
}
No exemplo anterior, o TelemetryClient é injetado na classe ExampleController.
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 tiveres redirecionamentos ativos, adiciona as seguintes linhas à função Application_Error 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
- A partir 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 mesmo sem qualquer exceção, ela será rastreada na telemetria correspondente do pedido com ResultCode 500. No entanto, o SDK do Application Insights não consegue rastrear 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 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 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());
}
}
API Web
A partir do SDK Web do Application Insights versão 2.6 (beta 3 ou posterior), o Application Insights recolhe exceções não tratadas lançadas automaticamente nos métodos do controlador para a Web API 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 a partir de construtores de classe 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 da aplicação.
- Exceção ocorrida 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
Sobrescrever 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 para exceções
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. Estão incluídas exceções .NET tanto controladas como não tratadas.
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 pelo portal do Application Insights ao contar os relatórios TrackException. 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 recolha 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 método TrackMetric() também é ineficiente em termos de desempenho porque todos TrackMetric(item) passam pelo pipeline SDK completo dos inicializadores e processadores de telemetria.
Ao contrário de TrackMetric(), GetMetric() lida com a pré-agregação local e, em seguida, envia apenas uma métrica de resumo agregado a um intervalo fixo de um minuto. Se precisar monitorizar de perto alguma métrica personalizada ao nível de segundo ou até milissegundo, pode fazê-lo, incorrendo apenas no custo de armazenamento e tráfego de rede de monitorização a cada minuto. Esse comportamento também reduz muito o risco de ocorrência de estrangulamento, pois o número total de itens de telemetria que precisam ser enviados para uma métrica agregada fica significativamente reduzido.
No Application Insights, as métricas personalizadas coletadas através de TrackMetric() e GetMetric() 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 o seu aplicativo envia um volume elevado de telemetria em um curto intervalo de tempo.
A restrição de largura de banda é uma preocupação porque pode levar a alertas não recebidos. A condição para disparar um alerta pode ocorrer localmente e depois ser descartada no ponto de entrada por causa do excesso de dados enviados. Não recomendamos usar TrackMetric() para .NET e .NET Core, a menos que implemente a 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 quiser replicar o ambiente de teste usado nestes exemplos, siga os passos 1 a 6 em .NET Core Worker Service application. 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 executas o código de exemplo, vês o ciclo while a ser executado repetidamente sem que seja enviada telemetria na janela de saída 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 o nosso recurso do Application Insights na experiência Logs (Analytics), o item individual de telemetria parece-se 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 a propriedade value quanto a valueSum 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 alto desempenho, os usuários podem precisar ajudar o SDK evitando algumas consultas.
Por exemplo, o exemplo anterior realizou uma procura por um identificador para a métrica ComputersSold e, em seguida, registou 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 ajustou 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);
}
}
Executar o código de exemplo durante 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 formatos. 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 estimados>Métricas personalizadas>Habilitar alertas sobre dimensões de métricas personalizadas>OK. Para obter mais informações, consulte Dimensões de métricas personalizadas e pré-agregação.
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 método TrackMetric() ou qualquer outro TrackXXX() tem OperationName definido corretamente para 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 endpoint em nuvem do Application Insights, o campo de dados Context.Operation.Name é definido como Special Operation:
_telemetryClient.GetMetric("Request Size", MetricDimensionNames.TelemetryContext.Operation.Name).TrackValue(requestSize, "Special Operation");
O valor desta dimensão especial é copiado para TelemetryContext e não é utilizado 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 numéricos baixos para dimensões de modo a 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 retorna 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 este limite é atingido, as chamadas paraTrackValue()que normalmente resultariam em uma nova série retornamfalse. -
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. A monitorização adequada de tais padrões requer a instrumentação manual do 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.
Descriçã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 o pai de A. Uma operação pode ter apenas um pai, 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.
Rastreio de operações de entrada
O Application Insights Web SDK recolhe automaticamente pedidos HTTP para aplicações ASP.NET que correm num pipeline IIS e para todas as aplicações 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 transmitem detalhes de correlação juntamente com as solicitações HTTP, mas cada protocolo de fila precisa definir como os mesmos detalhes são transmitidos através da mensagem de fila. Alguns protocolos de fila, como o AMQP, permitem a passagem de mais metadados. Outros protocolos, como o Azure Storage Queue, exigem que o contexto seja codificado na carga útil da mensagem.
Observação
O rastreamento entre múltiplos 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 através de mensagens do Azure Service Bus.
Fila de armazenamento do Azure
O exemplo seguinte mostra como rastrear as operações da fila Azure Storage e correlacionar a telemetria entre o produtor, o consumidor e o Azure Storage.
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 identificar qual chamada resultou em tentativas de reexecução. - Correlacione os logs de armazenamento (se e quando necessário): eles estão correlacionados com a telemetria do Application Insights.
A operação Enqueue é filha de uma operação-mãe. Um exemplo é uma solicitação HTTP de entrada. A chamada de dependência HTTP é filha da operação Enqueue 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 obter um item da fila. - Use
Activity.SetParentId(message.ParentId)para correlacionar logs de consumidores e produtores. - Inicie o
Activity. - Rastreie operações de dequeue, processe e elimine 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
Activity. - 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, o sistema reconhece os seguintes tipos de
-
Azure queuepara Azure Storage Queues -
Azure Event Hubspara Hubs de Eventos do Azure -
Azure Service Buspara Azure Service Bus
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 Rastreamento 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 rastreio/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. Vamos supor que você tenha uma operação principal que foi criada a partir de solicitações de entrada que agendaram essa operação. Desde que BackgroundTask seja iniciado no mesmo fluxo assíncrono de controlo de uma solicitação de entrada, ele está correlacionado com a operação-mãe.
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 método Enqueue na fila de Service Bus ou na fila de armazenamento pode servir de exemplo para este tipo de rastreamento personalizado.
A abordagem geral para o rastreamento de dependência personalizada é:
- Chame o método de extensão
TelemetryClient.StartOperationque preenche as propriedades necessárias para correlação e algumas outras propriedades, como início, carimbo de data e horaDependencyTelemetry, 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 monitorize 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 como o mecanismo de notificação da estrutura/biblioteca para sinalizar eventos importantes, como solicitações recebidas ou enviadas, e exceções.
As atividades são funcionalidades principais no Application Insights. Dependência automática e recolha de solicitações dependem muito deles, juntamente com os eventos DiagnosticSource. 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 Activity. 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.
Contadores
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 os 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"
Visualizar 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/Sec
- Exceções CLR (Common Language Runtime) do .NET geradas por segundo
- Tempo de Execução do Pedido de Aplicações ASP.NET
- Processo\Bytes privados
- Processo\Bytes de Dados de E/S por Segundo
- Aplicações ASP.NET\Pedidos na Fila de Aplicações
- 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
- Processo\Bytes de Dados de E/S por Segundo
- 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 recolhem contadores de desempenho se a aplicação estiver a correr no Windows e tiver como destino a versão
NETSTANDARD2.0ou posteriores. - 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, veja
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 método WebApplication.CreateBuilder() 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();
Colete contadores de desempenho no código para aplicações web ASP.NET ou aplicações de consola .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
Tanto as aplicações ASP.NET como as aplicações ASP.NET Core implementadas em Azure Web Apps são executadas em um ambiente especial de sandbox. As aplicações implementadas em Azure App Service podem utilizar um contentor Windows ou ser alojadas num ambiente sandbox. Se a aplicação for implementada num contentor Windows, todos os contadores de desempenho padrão estão disponíveis na imagem do contentor.
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.
O SDK Application Insights para ASP.NET e ASP.NET Core deteta se o código é implementado numa aplicação web ou num contentor não Windows. A deteção determina se recolhe contadores de desempenho num ambiente sandbox ou utiliza o mecanismo padrão de recolha quando alojado num contentor Windows ou numa 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 nome category, counter e instance 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 do .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. Pode ser visto como um equivalente multiplataforma para o PerformanceCounters que só é suportado 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 recolher Contadores de Eventos
O Application Insights suporta a recolha de EventCounters com o 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 aplicações ASP.NET Core, deverá também adicionar o pacote Microsoft.ApplicationInsights.AspNetCore.
dotnet add package Microsoft.ApplicationInsights.EventCounterCollector
dotnet add package Microsoft.ApplicationInsights.AspNetCore
Contadores padrão recolhidos
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 bem conhecidos publicados pelo .NET Runtime, consulte o documento Contadores Disponíveis.
Personalização de contadores a serem recolhidos
O exemplo a seguir mostra como adicionar/remover contadores. Essa personalização seria feita como parte da configuração do serviço de aplicativo após a habilitação da coleta de telemetria do Application Insights, usando AddApplicationInsightsTelemetry() ou 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.
Filtragem
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 | Descrição |
|---|---|
AccountIdTelemetryInitializer |
Define a propriedade AccountId. |
AuthenticatedUserIdTelemetryInitializer |
Define a AuthenticatedUserId propriedade como definida pelo JavaScript SDK. |
AzureRoleEnvironmentTelemetryInitializer |
Atualiza as propriedades RoleName e RoleInstance do contexto Device para todos os itens de telemetria com informação extraída do ambiente de execução Azure. |
BuildInfoConfigComponentVersionTelemetryInitializer |
Atualiza a propriedade Version do contexto Component para todos os itens de telemetria com o valor extraído do ficheiro BuildInfo.config produzido pelo MS Build. |
ClientIpHeaderTelemetryInitializer |
Atualiza a propriedade Ip do contexto Location de todos os itens de telemetria com base no cabeçalho HTTP do pedido. |
DeviceTelemetryInitializer |
Atualiza as seguintes propriedades do contexto de Device para todos os itens de 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 como o valor extraído da propriedade NetworkInterface.• Language está definido como o nome da propriedade CurrentCulture. |
DomainNameRoleInstanceTelemetryInitializer |
Atualiza a propriedade RoleInstance do contexto Device para todos os itens de telemetria com o nome de domínio do computador onde a aplicação web está a executar. |
OperationNameTelemetryInitializer |
Atualiza a propriedade Name de RequestTelemetry e a propriedade Name do contexto Operation de todos os itens de telemetria baseados no método HTTP, bem como os nomes do controlador de ASP.NET MVC e da ação invocada para processar o pedido. |
OperationIdTelemetryInitializer ou OperationCorrelationTelemetryInitializer |
Atualiza a Operation.Id propriedade de contexto de todos os itens de telemetria monitorizados durante o processamento de uma solicitação com o RequestTelemetry.Id gerado automaticamente. |
SessionTelemetryInitializer |
Atualiza a propriedade Id do contexto Session para todos os itens de telemetria com o valor extraído do cookie ai_session gerado pelo código de instrumentação JavaScript ApplicationInsights em execução no navegador do usuário. |
SyntheticTelemetryInitializer ou SyntheticUserAgentTelemetryInitializer |
Atualiza as propriedades de contexto User, Session e Operation de todos os itens de telemetria que são rastreados ao lidar com uma solicitação de uma fonte sintética, como um teste de disponibilidade ou um bot de motor de busca. 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 e AcquisitionDate propriedades do contexto User 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, enquanto está em execução no navegador do utilizador. |
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 aplicações escritas com ASP.NET Core, adicionar um novo inicializador de telemetria é feito adicionando-o ao contentor DependencyInjection, como 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 aplicações Web ASP.NET é instanciar o inicializador em 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 a sua aplicação enviar telemetria considerável, este processador removerá parte dessa telemetria.
<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 aplicações ASP.NET Core ou se estiver a usar o SDK Microsoft.ApplicationInsights.WorkerService.
Para ASP.NET Core, a adição de um novo processador de telemetria é feita usando o método de extensão AddApplicationInsightsTelemetryProcessor no IServiceCollection, como 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 aplicações ASP.NET Core ou se estiver a usar 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 aprender a configurar a amostragem para aplicações ASP.NET e ASP.NET Core, consulte Sampling in 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
- Fornecedor de Identificação da Aplicação
Pode personalizar o Application Insights SDK para ASP.NET, ASP.NET Core e Worker Service para alterar a configuração predefinida.
ASP.NET
O SDK Application Insights .NET 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 defeito, quando utilizas a experiência automatizada dos projetos de modelos do Visual Studio que suportam Add>Application Insights Telemetry, o ficheiro ApplicationInsights.config é 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 ficheiro de configuração é ignorado se for usada a extensão para websites do Azure ou a extensão para VMs do Azure e conjuntos de dimensionamento de máquinas virtuais do Azure.
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 TelemetryConfiguration predefinido usado pelo SDK de Serviço de Trabalhadores é semelhante à configuração automática usada numa aplicação ASP.NET ou ASP.NET Core, excluindo os inicializadores de telemetria usados para enriquecer a telemetria a partir de 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 incorporados: 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 que seja descartado por um processador de telemetria não chega ao canal. O método Send() normalmente não envia os itens para o back office instantaneamente. Normalmente, ele os armazena em buffer na memória e os envia em lotes para uma transmissão eficiente.
Evite chamar Flush(), a menos que seja absolutamente necessário enviar a 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 Application Insights .NET e .NET Core incluem dois canais incorporados:
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. Este canal implementa um método
Flush()que pode ser usado para descarregar qualquer item de telemetria em 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 isto para todos os cenários de produção. Este canal é o padrão para aplicações ASP.NET e ASP.NET Core configuradas 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 aplicações ASP.NET, a configuração envolve definir a instância do canal de telemetria para TelemetryConfiguration.Active ou modificar ApplicationInsights.config. Para aplicações ASP.NET Core, a configuração envolve adicionar o canal ao contentor de injeção de dependências.
As seções a seguir mostram exemplos de configuração da definição StorageFolder para o canal em vários tipos de aplicações.
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 método ConfigureServices da classe Startup.cs 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.
Sobrepondo 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 a chegar a taxas mais rápidas ou se a rede ou o back-end do Application Insights estiverem lentos, as instâncias Transmission 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 de comunicação para armazenar temporariamente 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 predefinido é 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. Em Windows, é usado %LOCALAPPDATA% ou %TEMP% se não for especificado explicitamente outro caminho. 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 como eliminar dados de telemetria, leia sobre o uso de Flush().
Quando utilizar Flush()
O método Flush() envia imediatamente qualquer telemetria em buffer. 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. Chamar Flush() desnecessariamente pode causar problemas de desempenho e não garante que todos os dados sejam enviados, especialmente ao usar ServerTelemetryChannel, que não faz o escoamento 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 | Descrição |
|---|---|
| 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 | Recolhe contadores de desempenho do Windows (CPU, memória, carga de rede das instalações do IIS). Especifique os contadores específicos (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 | Recolhe .NET EventCounters. Recomendado para ASP.NET Core e soluções multiplataforma em alternativa aos 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 App Service. Módulo: AppServicesHeartbeatTelemetryModule |
| Pulsações (VMs e conjuntos de dimensionamento de máquinas virtuais) | Envia batimentos cardíacos e métricas personalizadas para o ambiente VM 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 programador (depurador anexado) | Força TelemetryChannel a enviar itens imediatamente quando o depurador está ligado. 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) | Regista exceções de tarefas não observadas e exceções não tratadas para funções de trabalho, serviços Windows e aplicações de consola. Módulos: • Microsoft.ApplicationInsights.WindowsServer.UnobservedExceptionTelemetryModule• Microsoft.ApplicationInsights.WindowsServer.UnhandledExceptionTelemetryModuleNuGet:Microsoft.ApplicationInsights.WindowsServer |
| Monitorização do EventSource | Envia eventos configurados de EventSource para o Application Insights como traces. 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 | Descrição |
|---|---|
| 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 multifuncionais, use EventCounterCollectionModule (consulte a linha seguinte).NuGet:Microsoft.ApplicationInsights.PerfCounterCollector |
| Contadores de eventos | Recolhe .NET EventCounters. Recomendado para ASP.NET Core e soluções multiplataforma em alternativa aos 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 através do SDK base quando hospedado no App Service. 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 batimentos cardíacos (como métricas personalizadas) com detalhes sobre o ambiente de Máquinas Virtuais 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 programador (depurador anexado) | O mesmo comportamento está disponível; a classe faz parte do pacote 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 | Exclusivo para 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(activar a injeção de cabeçalho W3C). - Configurar
EventCounterCollectionModule(limpar padrões e adicionar um único contador). - Desative a coleta de contadores de desempenho removendo
PerformanceCollectorModule.
<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 de extensão ConfigureTelemetryModule<T> 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 | Descrição | Predefinição |
|---|---|---|
| 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 extractor. 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 excepçõ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. Utilize a instância da aplicação IConfiguration. As configurações devem estar na seção ApplicationInsights, conforme mostrado no exemplo a seguir. A secção seguinte de appsettings.json configura a cadeia de ligação e desativa a amostragem adaptativa e a recolha de contadores de desempenho.
{
"ApplicationInsights": {
"ConnectionString": "<YOUR-CONNECTION-STRING>",
"EnableAdaptiveSampling": false,
"EnablePerformanceCounterCollectionModule": false
}
}
Se for usado builder.Services.AddApplicationInsightsTelemetry(aiOptions) para ASP.NET Core 6.0 ou services.AddApplicationInsightsTelemetry(aiOptions) para ASP.NET Core 3.1 e anteriores, sobrepõe-se às definições de 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 encontra-se no espaço de nomes Microsoft.ApplicationInsights.WorkerService ao contrário de Microsoft.ApplicationInsights.AspNetCore.Extensions no SDK ASP.NET Core.
A tabela a seguir lista as configurações mais usadas no ApplicationInsightsServiceOptions.
| Configuração | Descrição | Predefinição |
|---|---|---|
| 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 ficheiro de configuração para cada módulo. Para desativar um módulo, elimine o nó ou comente-o.
ASP.NET Core
Se quiseres desativar a telemetria de forma condicional e dinâmica, podes resolver a instância TelemetryConfiguration com um contentor de injeção de dependências ASP.NET Core em qualquer parte do teu código e definir a flag DisableTelemetry nela.
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 quiseres desativar a telemetria de forma condicional e dinâmica, podes resolver a instância TelemetryConfiguration com um contentor de injeção de dependências ASP.NET Core em qualquer parte do teu código e definir a flag DisableTelemetry nela.
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 de TelemetryClient, incluindo módulos de telemetria padrão, execute esta etapa em um método de inicializaçã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 recurso novo no portal do Application Insights.
ASP.NET Core
Em ASP.NET Core, configure a cadeia de conexão em Program.cs durante o início da aplicação usando o TelemetryConfiguration do container de injeção de dependências (DI):
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");
// ...
Fornecedor de Identificação da Aplicação
Observação
Para ASP.NET, este fornecedor está disponível a partir do SDK v2.6.0*.
O objetivo deste fornecedor é procurar um ID de aplicação com base numa connection string. O ID da aplicação é incluído em RequestTelemetry e DependencyTelemetry e é 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 limita o fluxo de solicitações e armazena os resultados em 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.
Caso seja necessário configurar um proxy, recomendamos criar um proxy para o endereço base e garantir que o percurso inclua /api/profiles/{0}/appId. Em tempo de execução, {0} é substituído pelo connection string para 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 existe ficheiro 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 ProfileQueryEndpoint.
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();
ProvedorDeIdDoAplicativoDeDicionário
Este fornecedor estático baseia-se nos pares de connection string/ID de aplicação configurados.
Esta classe tem a propriedade Defined, que é um conjunto de pares de string de conexão/ID de aplicação Dictionary<string,string>.
Esta classe tem a propriedade opcional Next, que pode ser usada para configurar outro fornecedor quando é solicitado um connection string que não existe na 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 FullScript, ScriptBody está disponível desde a versão 2.14 do SDK do Application Insights para ASP.NET Core. 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 precisar de configuração para além de definir a cadeia de conexão, é necessário remover a injeção automática conforme descrito e adicionar manualmente o SDK JavaScript.
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 aprender a usar eficientemente a chamada GetMetric() para capturar métricas que foram pré-agregadas localmente para aplicações .NET e .NET Core, veja Coleção personalizada de métricas no .NET e .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áginas no Log Analytics
Em Log Analytics, duas tabelas mostram dados das 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 mais informações sobre o acompanhamento de operações personalizadas, consulte Acompanhe operações personalizadas com o SDK .NET 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 em 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 | Descrição |
|---|---|
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.
Traços 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, podes usar alternativamente o método TelemetryClient.StartOperation (extensão) que preenche as propriedades DependencyTelemetry necessárias para correlação e outras propriedades como a hora e duração de início, por isso não precisas de criar um temporizador personalizado como nos exemplos seguintes. Para mais informações, consulte a secção sobre rastreamento de dependências de saída em Acompanhe operações personalizadas com o Application Insights .NET SDK.
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 em 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
Revisão da configuração do Autoflush: Ativar o autoflush no seu ficheiro web.config pode levar à degradação do desempenho em aplicações .NET instrumentadas com 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 esta propriedade é definida para true, o nome do utilizador na ASP.NET Core é exibido juntamente com telemetria do lado do cliente. Por esta razão, adicionar appInsights.setAuthenticatedUserContext manualmente já não é necessário porque já é injetado 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
Em Log Analytics, métricas e propriedades personalizadas aparecem nos atributos customMeasurements e customDimensions de cada registo 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 Application Insights em Azure onde aparece a telemetria. 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.
| Recurso | Limite predefinido | Limite máximo | Notes |
|---|---|---|---|
| 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 Snapshot Debugger | 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: Utilize este exemplo se estiver no ASP.NET Core e estiver a criar tarefas em segundo plano de acordo com as diretrizes oficiais.
.NET Core Worker Service: Use este exemplo se você tiver um aplicativo .NET Worker Service de acordo com as diretrizes oficiais.
Troubleshooting
Consulte os artigos dedicados à resoluçã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
- O SDK .NET é lançado em GitHub
- O SDK Node.js é lançado em GitHub
As Atualizações de Serviço também resumem as principais melhorias do Application Insights.
Passos seguintes
- 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: