Filter dan telemetri pra-proses di SDK Application Insights

Anda dapat menulis kode untuk memfilter, memodifikasi, atau memperkaya telemetri Anda sebelum dikirim dari SDK. Pemrosesan mencakup data yang dikirim dari modul telemetri standar, seperti pengumpulan permintaan HTTP dan pengumpulan dependensi.

  • Pemfilteran dapat memodifikasi atau membuang telemetri sebelum dikirim dari SDK dengan mengimplementasikan ITelemetryProcessor. Misalnya, Anda dapat mengurangi volume telemetri dengan mengecualikan permintaan dari robot. Tidak seperti pengambilan sampel, Anda memiliki kontrol penuh apa yang dikirim atau dibuang, tetapi akan memengaruhi metrik apa pun berdasarkan log agregat. Bergantung pada cara Anda membuang item, Anda mungkin juga kehilangan kemampuan untuk menavigasi di antara item terkait.

  • Tambahkan atau Ubah properti ke telemetri apa pun yang dikirim dari aplikasi Anda dengan menerapkan ITelemetryInitializer. Misalnya, Anda dapat menambahkan nilai terhitung atau nomor versi untuk memfilter data di portal.

  • Pengambilan sampel mengurangi volume telemetri tanpa mempengaruhi statistik Anda. Proses ini membuat data titik terus berkaitan bersama-sama sehingga Anda dapat menavigasi di antara mereka ketika Anda mendiagnosis masalah. Di portal, jumlah total dikalikan untuk mengimbangi pengambilan sampel.

Catatan

API SDK digunakan untuk mengirim peristiwa dan metrik kustom.

Sebelum memulai:

Filter

Teknik ini memberi Anda kontrol langsung atas apa yang disertakan atau dikecualikan dari aliran telemetri. Pemfilteran dapat digunakan untuk menjatuhkan item telemetri agar tidak dikirim ke Application Insights. Anda dapat menggunakan pemfilteran dengan pengambilan sampel, atau secara terpisah.

Untuk memfilter telemetri, Anda tulis prosesor telemetri dan daftarkan itu dengan TelemetryConfiguration. Semua telemetri melewati prosesor Anda. Anda dapat memilih untuk menghilangkannya dari streaming atau memberikannya ke prosesor berikutnya dalam rantai. Telemetri dari modul standar, seperti kolektor permintaan HTTP dan kolektor dependensi, dan telemetri yang Anda lacak sendiri disertakan. Misalnya, Anda dapat memfilter telemetri tentang permintaan dari robot atau panggilan dependensi yang berhasil.

Peringatan

Memfilter telemetri yang dikirim dari SDK dengan menggunakan prosesor dapat mengubah statistik yang Anda lihat di portal dan membuatnya sulit untuk mengikuti item terkait.

Sebagai gantinya, pertimbangkan untuk menggunakan sampling.

Membuat prosesor telemetri

C#

  1. Untuk membuat filter, terapkan ITelemetryProcessor.

    Prosesor telemetri membangun rantai pemrosesan. Saat Anda membuat contoh realisasi prosesor telemetri, Anda akan diberi referensi ke prosesor berikutnya dalam rantai. Ketika titik data telemetri diteruskan ke metode proses, proses melakukan pekerjaannya dan kemudian memanggil (atau tidak memanggil) prosesor telemetri berikutnya dalam rantai.

    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. Tambahkan prosesor Anda.

Aplikasi ASP.NET

Masukkan cuplikan ini dalam ApplicationInsights.config:

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

Anda dapat meneruskan nilai untai (karakter) dari file .config dengan menyediakan properti bernama publik di kelas Anda.

Peringatan

Berhati-hatilah untuk mencocokkan nama tipe dan nama properti apa pun dalam file .config ke nama kelas dan properti dalam kode. Jika file .config mereferensikan tipe atau properti yang tidak ada, SDK mungkin diam-diam gagal mengirim telemetri apa pun.

Atau, Anda dapat menginisialisasi filter dalam kode. Di kelas inisialisasi yang sesuai, sebagai contoh, AppStart di Global.asax.cs, masukkan prosesor Anda ke dalam rantai:

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();

Klien telemetri yang dibuat setelah titik ini akan menggunakan prosesor Anda.

Aplikasi layanan Core/Worker ASP.NET

Catatan

Menambahkan prosesor dengan menggunakan ApplicationInsights.config atau TelemetryConfiguration.Active tidak valid untuk aplikasi ASP.NET Core atau jika Anda menggunakan SDK Microsoft.ApplicationInsights.WorkerService.

Untuk aplikasi yang ditulis dengan menggunakan ASP.NET Core atau WorkerService, menambahkan prosesor telemetri baru dilakukan dengan menggunakan AddApplicationInsightsTelemetryProcessormetode ekstensi pada IServiceCollection, seperti yang ditunjukkan. Metode ini disebut dalam metode ConfigureServices dari kelas Startup.cs Anda.

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

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

Untuk mendaftarkan prosesor telemetri yang membutuhkan parameter di ASP.NET Core, buat kelas kustom yang menerapkan ITelemetryProcessorFactory. Panggil konstruktor dengan parameter yang diinginkan dalam metode Buat lalu gunakan AddSingleton<ITelemetryProcessorFactory, MyTelemetryProcessorFactory>().

Filter contoh

Permintaan sintetis

Memfilter tes bot dan web. Meskipun Metrics Explorer memberi Anda opsi untuk memfilter sumber sintetis, opsi ini mengurangi lalu lintas dan ukuran konsumsi dengan memfilternya di SDK itu sendiri.

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

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

Autentikasi gagal

Filter permintaan dengan respons "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);
}

Memfilter panggilan dependensi jarak jauh cepat

Jika Anda hanya ingin mendiagnosis panggilan yang lambat, saring panggilan yang cepat.

Catatan

Pemfilteran ini akan mengubah statistik yang Anda lihat di portal.

public void Process(ITelemetry item)
{
    var request = item as DependencyTelemetry;

    if (request != null && request.Duration.TotalMilliseconds < 100)
    {
        return;
    }
    this.Next.Process(item);
}

Mendiagnosis masalah ketergantungan

Blog ini menjelaskan proyek untuk mendiagnosis masalah ketergantungan dengan secara otomatis mengirim ping reguler ke dependensi.

Java

Untuk mempelajari selengkapnya tentang prosesor telemetri dan implementasinya di Java, lihat dokumentasi prosesor telemetri Java.

Aplikasi web JavaScript

Filter dengan menggunakan ITelemetryInitializer

  1. Buat fungsi callback inisializer telemetri. Fungsi callback mengambil ITelemetryItem sebagai parameter, yang mana merupakan peristiwa yang sedang diproses. Mengembalikan false dari callback ini menghasilkan item telemetri yang akan difilter.

    var filteringFunction = (envelope) => {
      if (envelope.data.someField === 'tobefilteredout') {
          return false;
      }
    
      return true;
    };
    
  2. Tambahkan callback penginisialan telemetri Anda:

    appInsights.addTelemetryInitializer(filteringFunction);
    

Menambah/memodifikasi properti: ITelemetryInitializer

Gunakan penginisialan telemetri untuk memperkaya telemetri Anda dengan informasi tambahan atau mengesampingkan set properti telemetri dengan modul telemetri standar.

Misalnya, Application Insights untuk paket web mengumpulkan telemetri tentang permintaan HTTP. Secara default, telemetri memberi bendera kegagalan memenuhi permintaan dengan kode respons >=400. Tetapi jika Anda ingin memperlakukan 400 sebagai sukses, Anda dapat menyediakan inisialisasi telemetri yang menetapkan properti sukses.

Jika Anda menyediakan inisialisasi telemetri, telemetri disebut setiap kali metode Track*() dipanggil. Inisialisasi ini mencakup metode Track() yang disebut oleh modul telemetri standar. Berdasarkan konvensi, modul-mocul ini tidak menetapkan properti apa pun yang sudah ditetapkan oleh inisialisasi. Inisialisasi telemetri dipanggil sebelum memanggil prosesor telemetri. Jadi setiap pengayaan yang dilakukan oleh inisializer itu terlihat oleh prosesor.

Tentukan inisialisasi Anda

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

ASP.NET aplikasi: Muat inisializer Anda

Pada ApplicationInsights.config:

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

Atau, Anda dapat membuat contoh realisasi penginisialan dalam kode, misalnya, di Global.aspx.cs:

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

Lihat lebih lanjut dari sampel ini.

ASP.NET aplikasi layanan Core/Worker: Muat inisializer Anda

Catatan

Menambahkan penginisialan dengan menggunakan ApplicationInsights.config atau TelemetryConfiguration.Active tidak valid untuk aplikasi ASP.NET Core atau jika Anda menggunakan SDK Microsoft.ApplicationInsights.WorkerService.

Untuk aplikasi yang ditulis menggunakan ASP.NET Core atau WorkerService, menambahkan penginisialan telemetri baru dilakukan dengan menambahkannya ke kontainer Injeksi Dependensi, seperti yang ditunjukkan. Selesaikan langkah ini dalam metode Startup.ConfigureServices.

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

Penginisialan telemetri JavaScript

Sisipkan penginisialisasi telemetri JavaScript, jika diperlukan. Untuk informasi selengkapnya tentang penginisialisasi telemetri untuk Application Insights JavaScript SDK, lihat Penginisialisasi telemetri.

Sisipkan penginisialisasi telemetri dengan menambahkan fungsi panggilan balik onInit di konfigurasi Skrip Pemuat SDK 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>

Untuk ringkasan properti non-kustom yang tersedia pada item telemetri, lihat Model Data Ekspor Application Insights.

Anda dapat menambahkan inisialisasi sebanyak yang Anda mau. Mereka dipanggil berdasarkan urutan mereka ditambahkan.

Prosesor telemetri OpenCensus Python

Prosesor telemetri di OpenCensus Python hanyalah sebatas fungsi callback yang dipanggil untuk memproses telemetri sebelum diekspor. Fungsi callback harus menerima data tipe amplop sebagai parameternya. Untuk memfilter telemetri agar tidak diekspor, pastikan fungsi callback kembali False. Anda dapat melihat skema untuk tipe data Azure Monitor dalam tipe amplop di GitHub.

Catatan

Anda dapat memodifikasi cloud_RoleName dengan mengubah atribut ai.cloud.role di bidang 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()

Anda dapat menambahkan prosesor sebanyak yang Anda suka. Mereka dipanggil berdasarkan urutan mereka ditambahkan. Jika satu prosesor melontarkan pengecualian, itu tidak berdampak pada prosesor berikutnya.

Contoh TelemetryInitializers

Menambahkan properti kustom

Contoh penginisialan berikut menambahkan properti kustom ke setiap telemetri yang terlacak.

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

Tambahkan nama peran cloud

Contoh penginisialan berikut ini menetapkan nama peran awan ke setiap telemetri yang dilacak.

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

Mengontrol alamat IP klien yang digunakan untuk pemetaan geolokasi

Sampel penginisialisasi berikut mengatur IP klien yang akan digunakan untuk pemetaan geolokasi, alih-alih alamat IP soket klien, selama penyerapan telemetri.

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 dan ITelemetryInitializer

Apa perbedaan antara prosesor telemetri dan inisialisasi telemetri?

  • Ada beberapa tumpang tindih dalam apa yang dapat Anda lakukan dengan mereka. Keduanya dapat digunakan untuk menambahkan atau memodifikasi properti telemetri, meskipun kami menyarankan Anda menggunakan penginisialan untuk tujuan tersebut.
  • Penginisialan telemetri selalu berjalan sebelum prosesor telemetri.
  • Penginisialan telemetri dapat dipanggil lebih dari sekali. Secara konvensi, mereka tidak menetapkan properti mana pun yang sudah ditetapkan.
  • Prosesor telemetri memungkinkan Anda untuk sepenuhnya mengganti atau membuang item telemetri.
  • Semua penginisialan telemetri yang terdaftar dipanggil untuk setiap item telemetri. Untuk prosesor telemetri, SDK menjamin untuk memanggil prosesor telemetri pertama. Apakah prosesor lainnya dipanggil atau tidak diputuskan oleh prosesor telemetri sebelumnya.
  • Gunakan penginisialan telemetri untuk memperkaya telemetri dengan lebih banyak properti atau mengganti yang sudah ada. Gunakan prosesor telemetri untuk menyaring telemetri.

Catatan

JavaScript hanya memiliki inisial telemetri yang dapatmemfilter peristiwa dengan menggunakan ITelemetryInitializer

Memecahkan ApplicationInsights.config

  • Konfirmasikan bahwa nama tipe dan nama perakitan yang sepenuhnya memenuhi syarat sudah benar.
  • Pastikan bahwa applicationinsights.config Anda berada di direktori output Anda dan berisi setiap perubahan terbaru.

Referensi Tipe Data Telemetri Azure Monitor

Dokumen referensi

Kode SDK

Langkah berikutnya