Filtrar e pré-processar telemetria no SDK do Application Insights

Você pode escrever código para filtrar, modificar ou enriquecer seus dados telemétricos antes que eles sejam enviados do SDK. O processamento inclui dados que são enviados dos módulos de telemetria padrão, como a coleta de solicitação HTTP e a coleta de dependência.

  • A filtragem pode modificar ou descartar a telemetria antes que ela seja enviada do SDK pela implementação de ITelemetryProcessor. Por exemplo, você pode reduzir o volume de telemetria excluindo as solicitações de robôs. Ao contrário da amostragem, você tem controle total do que é enviado ou descartado, mas isso afetará todas as métricas com base em logs agregados. Dependendo de como você descartar os itens, você também poderá perder a capacidade de navegar entre itens relacionados.

  • Adicione ou modifique propriedades de qualquer telemetria enviada de seu aplicativo implementando um ITelemetryInitializer. Por exemplo, é possível adicionar valores calculados ou números de versão pelos quais os dados serão filtrados no portal.

  • Amostragem reduz o volume de telemetria sem afetar as estatísticas. Ela mantém juntos os 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 a amostragem.

Observação

A API do SDK é usada para enviar eventos personalizados e métricas.

Antes de começar:

Filtragem

Esta técnica fornece um controle mais direto sobre o que é incluído ou excluído do fluxo de telemetria. A filtragem pode ser usada para evitar que itens de telemetria sejam enviados para o Application Insights. Você pode usar a filtragem com a amostragem ou separadamente.

Para filtrar a telemetria, crie um processador de telemetria e registre-o no TelemetryConfiguration. Toda a telemetria passa pelo processador. Você pode optar por removê-lo do fluxo ou fornecê-lo ao próximo processador na cadeia. Estão incluídas a telemetria controlada por você mesmo e a telemetria dos módulos padrão, como o coletor de solicitações HTTP e o coletor de dependências. Por exemplo, é possível filtrar a telemetria sobre solicitações de robôs ou sobre chamadas de dependência bem-sucedidas.

Aviso

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 usar a amostragem.

Criar um processador de telemetria

C#

  1. Para criar um grupo de filtro, implemente ITelemetryProcessor.

    Os processadores de telemetria criam uma cadeia de processamento. Quando você cria uma instância de um processador de telemetria, recebe uma referência ao próximo processador na cadeia. Quando um ponto de dados de telemetria é transmitido para o método de processo, ele faz seu trabalho e chama (ou não) o próximo processador de telemetria da 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;
        }
    }
    
  2. Adicione seu processador.

Aplicativos ASP.NET

Insira este snippet em ApplicationInsights.config:

<TelemetryProcessors>
  <Add Type="WebApplication9.SuccessfulDependencyFilter, WebApplication9">
     <!-- Set public property -->
     <MyParamFromConfigFile>2-beta</MyParamFromConfigFile>
  </Add>
</TelemetryProcessors>

Você pode transmitir valores de cadeia de caracteres do arquivo .config fornecendo propriedades nomeadas públicas em sua classe.

Aviso

Fique atento para que o nome do tipo e todos os nomes de propriedade no arquivo .config correspondam aos nomes de classe e de propriedade no código. Se o arquivo .config fizer referência a um tipo ou propriedade inexistente, o SDK poderá falhar silenciosamente quando enviar qualquer telemetria.

Como alternativa, é possível inicializar o filtro no código. Em uma classe de inicialização adequada (por exemplo AppStart em Global.asax.cs), insira seu processador na cadeia:

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 depois desse ponto usarão os seus processadores.

Aplicativos de serviço ASP.NET Core/Worker

Observação

Adicionar um processador usando ApplicationInsights.config ou TelemetryConfiguration.Active não é válido para aplicativos ASP.NET Core ou quando você está usando o SDK Microsoft.ApplicationInsights.WorkerService.

Para aplicativos escritos com ASP.NET Core ou WorkerService, a adição de um novo processador de telemetria é feita usando o método de extensão AddApplicationInsightsTelemetryProcessor em IServiceCollection, conforme mostrado. Esse método é chamado no método ConfigureServices da classe Startup.cs.

    public void ConfigureServices(IServiceCollection services)
    {
        // ...
        services.AddApplicationInsightsTelemetry();
        services.AddApplicationInsightsTelemetryProcessor<SuccessfulDependencyFilter>();

        // If you have more processors:
        services.AddApplicationInsightsTelemetryProcessor<AnotherProcessor>();
    }

Para registrar os 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 use AddSingleton<ITelemetryProcessorFactory, MyTelemetryProcessorFactory>().

Filtros de exemplo

Solicitações sintéticas

Filtre os bots e os testes Web. Embora o Metrics Explorer ofereça a opção de filtrar origens sintéticas, ela reduz o tráfego e o tamanho da ingestão filtrando-as no próprio SDK.

public void Process(ITelemetry item)
{
  if (!string.IsNullOrEmpty(item.Context.Operation.SyntheticSource)) {return;}

  // Send everything else:
  this.Next.Process(item);
}

Autenticação com falha

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 de dependência rápidas remotas

Caso queira diagnosticar apenas chamadas lentas, filtre as rápidas.

Observação

Essa filtragem distorcerá 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);
}

Diagnosticar problemas de dependência

Este blog descreve um projeto para diagnosticar problemas de dependência ao enviar automaticamente pings regulares para as dependências.

Java

Para saber mais sobre os processadores de telemetria e a implementação deles em Java, referencie a documentação dos processadores de telemetria em Java.

Aplicativos Web JavaScript

Filtrar usando ITelemetryInitializer

  1. Crie uma função de retorno de chamada do inicializador de telemetria. Essa função usa ITelemetryItem como parâmetro, que é o evento que está sendo processado. Um resultado false nesse retorno de chamada faz com que o item de telemetria seja filtrado.

    var filteringFunction = (envelope) => {
      if (envelope.data.someField === 'tobefilteredout') {
          return false;
      }
    
      return true;
    };
    
  2. Adicione o retorno de chamada do inicializador de telemetria:

    appInsights.addTelemetryInitializer(filteringFunction);
    

Adicionar/modificar propriedades: ITelemetryInitializer

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 da Web coleta a telemetria sobre solicitações HTTP. Por padrão, ele sinaliza como com falha qualquer solicitação com um código de resposta > = 400. Mas caso você queira tratar 400 como êxito, forneça um inicializador de telemetria que define a propriedade de sucesso.

Se você fornecer um inicializador de telemetria, ele será chamado sempre que qualquer um dos métodos Track*() for chamado. Esse inicializador inclui métodos Track() chamados pelos módulos de telemetria padrão. Por convenção, esses módulos não definem qualquer propriedade que já tenha sido definida por um inicializador. Os inicializadores de telemetria são chamados antes dos processadores de telemetria. Portanto, todos os enriquecimentos feitos por inicializadores são visíveis para os processadores.

Definir seu inicializador

C#

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
    }
  }
}

Aplicativos ASP.NET: carregue seu inicializador

Em ApplicationInsights.config:

<ApplicationInsights>
  <TelemetryInitializers>
    <!-- Fully qualified type name, assembly name: -->
    <Add Type="MvcWebRole.Telemetry.MyTelemetryInitializer, MvcWebRole"/>
    ...
  </TelemetryInitializers>
</ApplicationInsights>

Como alternativa, você pode criar uma instância do inicializador no código; por exemplo, em Global.aspx.cs:

protected void Application_Start()
{
    // ...
    TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer());
}

Veja mais deste exemplo.

Aplicativos de serviço ASP.NET Core/Worker: carregue seu inicializador

Observação

Adicionar um inicializador usando ApplicationInsights.config ou TelemetryConfiguration.Active não é válido para aplicativos ASP.NET Core ou quando você está usando o SDK Microsoft.ApplicationInsights.WorkerService.

Para os aplicativos escritos com o ASP.NET Core ou o WorkerService, a adição de um novo inicializador de telemetria é feita incluindo-o no contêiner de Injeção de Dependência, conforme mostrado. Execute esta etapa no método Startup.ConfigureServices.

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}

Inicializadores de telemetria JavaScript

Insira um inicializador de telemetria JavaScript, se necessário. Para obter mais informações sobre os inicializadores de telemetria para o SDK do JavaScript do Application Insights, consulte Inicializadores de telemetria.

Insira um inicializador de telemetria adicionando a função de retorno de chamada onInit na configuração do Script de Carregador de SDK do JavaScript (Web):

<script type="text/javascript">
!(function (cfg){function e(){cfg.onInit&&cfg.onInit(i)}var S,u,D,t,n,i,C=window,x=document,w=C.location,I="script",b="ingestionendpoint",E="disableExceptionTracking",A="ai.device.";"instrumentationKey"[S="toLowerCase"](),u="crossOrigin",D="POST",t="appInsightsSDK",n=cfg.name||"appInsights",(cfg.name||C[t])&&(C[t]=n),i=C[n]||function(l){var d=!1,g=!1,f={initialize:!0,queue:[],sv:"7",version:2,config:l};function m(e,t){var n={},i="Browser";function a(e){e=""+e;return 1===e.length?"0"+e:e}return n[A+"id"]=i[S](),n[A+"type"]=i,n["ai.operation.name"]=w&&w.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(f.sv||f.version),{time:(i=new Date).getUTCFullYear()+"-"+a(1+i.getUTCMonth())+"-"+a(i.getUTCDate())+"T"+a(i.getUTCHours())+":"+a(i.getUTCMinutes())+":"+a(i.getUTCSeconds())+"."+(i.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z",iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}},ver:4,seq:"1",aiDataContract:undefined}}var h=-1,v=0,y=["js.monitor.azure.com","js.cdn.applicationinsights.io","js.cdn.monitor.azure.com","js0.cdn.applicationinsights.io","js0.cdn.monitor.azure.com","js2.cdn.applicationinsights.io","js2.cdn.monitor.azure.com","az416426.vo.msecnd.net"],k=l.url||cfg.src;if(k){if((n=navigator)&&(~(n=(n.userAgent||"").toLowerCase()).indexOf("msie")||~n.indexOf("trident/"))&&~k.indexOf("ai.3")&&(k=k.replace(/(\/)(ai\.3\.)([^\d]*)$/,function(e,t,n){return t+"ai.2"+n})),!1!==cfg.cr)for(var e=0;e<y.length;e++)if(0<k.indexOf(y[e])){h=e;break}var i=function(e){var a,t,n,i,o,r,s,c,p,u;f.queue=[],g||(0<=h&&v+1<y.length?(a=(h+v+1)%y.length,T(k.replace(/^(.*\/\/)([\w\.]*)(\/.*)$/,function(e,t,n,i){return t+y[a]+i})),v+=1):(d=g=!0,o=k,c=(p=function(){var e,t={},n=l.connectionString;if(n)for(var i=n.split(";"),a=0;a<i.length;a++){var o=i[a].split("=");2===o.length&&(t[o[0][S]()]=o[1])}return t[b]||(e=(n=t.endpointsuffix)?t.location:null,t[b]="https://"+(e?e+".":"")+"dc."+(n||"services.visualstudio.com")),t}()).instrumentationkey||l.instrumentationKey||"",p=(p=p[b])?p+"/v2/track":l.endpointUrl,(u=[]).push((t="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",n=o,r=p,(s=(i=m(c,"Exception")).data).baseType="ExceptionData",s.baseData.exceptions=[{typeName:"SDKLoadFailed",message:t.replace(/\./g,"-"),hasFullStack:!1,stack:t+"\nSnippet failed to load ["+n+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(w&&w.pathname||"_unknown_")+"\nEndpoint: "+r,parsedStack:[]}],i)),u.push((s=o,t=p,(r=(n=m(c,"Message")).data).baseType="MessageData",(i=r.baseData).message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+s+")").replace(/\"/g,"")+'"',i.properties={endpoint:t},n)),o=u,c=p,JSON&&((r=C.fetch)&&!cfg.useXhr?r(c,{method:D,body:JSON.stringify(o),mode:"cors"}):XMLHttpRequest&&((s=new XMLHttpRequest).open(D,c),s.setRequestHeader("Content-type","application/json"),s.send(JSON.stringify(o))))))},a=function(e,t){g||setTimeout(function(){!t&&f.core||i()},500),d=!1},T=function(e){var n=x.createElement(I),e=(n.src=e,cfg[u]);return!e&&""!==e||"undefined"==n[u]||(n[u]=e),n.onload=a,n.onerror=i,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||a(0,t)},cfg.ld&&cfg.ld<0?x.getElementsByTagName("head")[0].appendChild(n):setTimeout(function(){x.getElementsByTagName(I)[0].parentNode.appendChild(n)},cfg.ld||0),n};T(k)}try{f.cookie=x.cookie}catch(p){}function t(e){for(;e.length;)!function(t){f[t]=function(){var e=arguments;d||f.queue.push(function(){f[t].apply(f,e)})}}(e.pop())}var r,s,n="track",o="TrackPage",c="TrackEvent",n=(t([n+"Event",n+"PageView",n+"Exception",n+"Trace",n+"DependencyData",n+"Metric",n+"PageViewPerformance","start"+o,"stop"+o,"start"+c,"stop"+c,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),f.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4},(l.extensionConfig||{}).ApplicationInsightsAnalytics||{});return!0!==l[E]&&!0!==n[E]&&(t(["_"+(r="onerror")]),s=C[r],C[r]=function(e,t,n,i,a){var o=s&&s(e,t,n,i,a);return!0!==o&&f["_"+r]({message:e,url:t,lineNumber:n,columnNumber:i,error:a,evt:C.event}),o},l.autoExceptionInstrumented=!0),f}(cfg.cfg),(C[n]=i).queue&&0===i.queue.length?(i.queue.push(e),i.trackPageView({})):e();})({
src: "https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js",
crossOrigin: "anonymous",
onInit: function (sdk) {
  sdk.addTelemetryInitializer(function (envelope) {
    envelope.data = envelope.data || {};
    envelope.data.someField = 'This item passed through my telemetry initializer';
  });
}, // Once the application insights instance has loaded and initialized this method will be called
cfg: { // Application Insights Configuration
    connectionString: "YOUR_CONNECTION_STRING"
}});
</script>

Para obter um resumo das propriedades não personalizadas disponíveis no item de telemetria, confira Modelo de dados de exportação do Application Insights.

Você pode adicionar quantos inicializadores desejar. Eles são chamados na ordem em que são adicionados.

Processadores de telemetria do Python OpenCensus

Os processadores de telemetria no Python OpenCensus são simplesmente funções de retorno de chamada que são chamadas para processar a telemetria antes de serem exportadas. A função de retorno de chamada deve aceitar um tipo de dados de envelope como seu parâmetro. Para filtrar a telemetria com base no que está sendo exportado, verifique se a função de retorno de chamada retorna False. Você pode ver o esquema para tipos de dados do Azure Monitor nos envelopes no GitHub.

Observação

É possível modificar cloud_RoleName alterando o atributo ai.cloud.role no campo tags.

def callback_function(envelope):
    envelope.tags['ai.cloud.role'] = 'new_role_name'
# Example for log exporter
import logging

from opencensus.ext.azure.log_exporter import AzureLogHandler

logger = logging.getLogger(__name__)

# Callback function to append '_hello' to each log message telemetry
def callback_function(envelope):
    envelope.data.baseData.message += '_hello'
    return True

handler = AzureLogHandler(connection_string='InstrumentationKey=<your-instrumentation_key-here>')
handler.add_telemetry_processor(callback_function)
logger.addHandler(handler)
logger.warning('Hello, World!')
# Example for trace exporter
import requests

from opencensus.ext.azure.trace_exporter import AzureExporter
from opencensus.trace import config_integration
from opencensus.trace.samplers import ProbabilitySampler
from opencensus.trace.tracer import Tracer

config_integration.trace_integrations(['requests'])

# Callback function to add os_type: linux to span properties
def callback_function(envelope):
    envelope.data.baseData.properties['os_type'] = 'linux'
    return True

exporter = AzureExporter(
    connection_string='InstrumentationKey=<your-instrumentation-key-here>'
)
exporter.add_telemetry_processor(callback_function)
tracer = Tracer(exporter=exporter, sampler=ProbabilitySampler(1.0))
with tracer.span(name='parent'):
response = requests.get(url='https://www.wikipedia.org/wiki/Rabbit')
# Example for metrics exporter
import time

from opencensus.ext.azure import metrics_exporter
from opencensus.stats import aggregation as aggregation_module
from opencensus.stats import measure as measure_module
from opencensus.stats import stats as stats_module
from opencensus.stats import view as view_module
from opencensus.tags import tag_map as tag_map_module

stats = stats_module.stats
view_manager = stats.view_manager
stats_recorder = stats.stats_recorder

CARROTS_MEASURE = measure_module.MeasureInt("carrots",
                                            "number of carrots",
                                            "carrots")
CARROTS_VIEW = view_module.View("carrots_view",
                                "number of carrots",
                                [],
                                CARROTS_MEASURE,
                                aggregation_module.CountAggregation())

# Callback function to only export the metric if value is greater than 0
def callback_function(envelope):
    return envelope.data.baseData.metrics[0].value > 0

def main():
    # Enable metrics
    # Set the interval in seconds in which you want to send metrics
    exporter = metrics_exporter.new_metrics_exporter(connection_string='InstrumentationKey=<your-instrumentation-key-here>')
    exporter.add_telemetry_processor(callback_function)
    view_manager.register_exporter(exporter)

    view_manager.register_view(CARROTS_VIEW)
    mmap = stats_recorder.new_measurement_map()
    tmap = tag_map_module.TagMap()

    mmap.measure_int_put(CARROTS_MEASURE, 1000)
    mmap.record(tmap)
    # Default export interval is every 15.0s
    # Your application should run for at least this amount
    # of time so the exporter will meet this interval
    # Sleep can fulfill this
    time.sleep(60)

    print("Done recording metrics")

if __name__ == "__main__":
    main()

Você pode adicionar quantos processadores quiser. Eles são chamados na ordem em que são adicionados. Se um processador gerar uma exceção, ele não afetará os processadores a seguir.

Exemplo de TelemetryInitializers

Adicionar uma propriedade personalizada

Este exemplo de inicializador adiciona uma propriedade personalizada a cada telemetria rastreada.

public void Initialize(ITelemetry item)
{
  var itemProperties = item as ISupportProperties;
  if(itemProperties != null && !itemProperties.Properties.ContainsKey("customProp"))
    {
        itemProperties.Properties["customProp"] = "customValue";
    }
}

Adicionar um nome da função de nuvem

Este exemplo de inicializador define o nome da função de nuvem para cada telemetria rastreada.

public void Initialize(ITelemetry telemetry)
{
    if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName))
    {
        telemetry.Context.Cloud.RoleName = "MyCloudRoleName";
    }
}

Controlar o endereço IP do cliente usado para mapeamentos de geolocalização

O inicializador de exemplo a seguir define o IP do cliente que será 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;
}

ITelemetryProcessor e ITelemetryInitializer

Qual é a diferença entre os processadores de telemetria e inicializadores de telemetria?

  • Há algumas sobreposições no que pode ser feito com eles. Ambos podem ser usados para adicionar ou modificar propriedades de telemetria, embora seja recomendável usar inicializadores para essa finalidade.
  • Os inicializadores de telemetria são sempre executados antes dos processadores de telemetria.
  • Os inicializadores de telemetria podem ser chamados mais de uma vez. Por convenção, eles não definem nenhuma propriedade que já tenha sido definida.
  • Os processadores de telemetria permitem que você substitua ou descarte 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 garante a chamada do primeiro processador de telemetria. Os processadores de telemetria anteriores é que decidem se o restante dos processadores será chamado ou não.
  • Use inicializadores de telemetria para enriquecer a telemetria com mais propriedades ou substituir uma existente. Use um processador de telemetria para filtrar a telemetria.

Observação

O JavaScript tem apenas inicializadores de telemetria que podem filtrar eventos usando ITelemetryInitializer

Solucionar problemas de ApplicationInsights.config

  • Confirme se o nome do tipo totalmente qualificado e o nome do assembly estão corretos.
  • Confirme se o arquivo applicationinsights. config está no seu diretório de saída e contém todas as alterações recentes.

Referência de Tipos de Dados de Telemetria do Azure Monitor

Documentos de Referência

Código do SDK

Próximas etapas