Application Insights SDK'sında telemetri verilerini filtreleme ve ön işlemeden geçirme
SDK'dan gönderilmeden önce telemetrinizi filtrelemek, değiştirmek veya zenginleştirmek için kod yazabilirsiniz. İşleme, HTTP isteği koleksiyonu ve bağımlılık koleksiyonu gibi standart telemetri modüllerinden gönderilen verileri içerir.
Filtreleme, uygulayarak
ITelemetryProcessor
SDK'dan gönderilmeden önce telemetriyi değiştirebilir veya atabilir. Örneğin, robotlardan gelen istekleri dışlayarak telemetri hacmini azaltabilirsiniz. Örneklemeden farklı olarak, gönderilen veya atılan öğeler üzerinde tam denetime sahipsiniz, ancak toplanan günlükleri temel alan tüm ölçümleri etkiler. Öğeleri nasıl attığınıza bağlı olarak, ilgili öğeler arasında gezinme özelliğini de kaybedebilirsiniz.uygulamanızdan gönderilen herhangi bir telemetriye bir uygulayarak
ITelemetryInitializer
özellikleri ekleyin veya değiştirin. Örneğin, portaldaki verileri filtrelemek için hesaplanan değerler veya sürüm numaraları ekleyebilirsiniz.Örnekleme , istatistiklerinizi etkilemeden telemetri hacmini azaltır. Bir sorunu tanıladığınızda aralarında gezinebilmeniz için ilgili veri noktalarını bir arada tutar. Portalda, örneklemeyi telafi etmek için toplam sayılar çarpılır.
Not
SDK API'si özel olayları ve ölçümleri göndermek için kullanılır.
Önkoşullar
Uygulamanız için uygun SDK'yı yükleyin: ASP.NET, ASP.NET Core, .NET/.NET Core için HTTP/Worker Olmayan veya JavaScript.
Filtreleme
Bu teknik, telemetri akışına dahil edilen veya telemetri akışından dışlananlar üzerinde doğrudan denetim sağlar. Filtreleme, telemetri öğelerinin Application Insights'a gönderilmesini bırakmak için kullanılabilir. Filtrelemeyi örneklemeyle veya ayrı ayrı kullanabilirsiniz.
Telemetriyi filtrelemek için bir telemetri işlemcisi yazar ve ile TelemetryConfiguration
kaydedersiniz. Tüm telemetri işlemcinizden geçer. Akışı akıştan bırakmayı veya zincirdeki bir sonraki işlemciye vermeyi seçebilirsiniz. HTTP isteği toplayıcısı ve bağımlılık toplayıcısı gibi standart modüllerden alınan telemetri ve kendiniz takip ettiğiniz telemetri dahildir. Örneğin, robotlardan gelen istekler veya başarılı bağımlılık çağrıları hakkındaki telemetri verilerini filtreleyebilirsiniz.
Uyarı
SDK'dan gönderilen telemetri verilerini işlemciler kullanarak filtrelemek, portalda gördüğünüz istatistikleri çarpıtabilir ve ilgili öğeleri izlemeyi zorlaştırabilir.
Bunun yerine örnekleme kullanmayı göz önünde bulundurun.
.NET uygulamaları
uygulayın
ITelemetryProcessor
.Telemetri işlemcileri bir işleme zinciri oluşturur. Bir telemetri işlemcisi örneği oluştururken, zincirdeki bir sonraki işlemciye başvuru alırsınız. Bir telemetri veri noktası işlem yöntemine geçirildiğinde, işini yapar ve ardından zincirdeki sonraki telemetri işlemcisini çağırır (veya çağırmaz).
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; } }
İşlemcinizi ekleyin.
Bu kod parçacığını ApplicationInsights.config içine ekleyin:
<TelemetryProcessors> <Add Type="WebApplication9.SuccessfulDependencyFilter, WebApplication9"> <!-- Set public property --> <MyParamFromConfigFile>2-beta</MyParamFromConfigFile> </Add> </TelemetryProcessors>
Sınıfınızda genel adlandırılmış özellikler sağlayarak .config dosyasından dize değerlerini geçirebilirsiniz.
Uyarı
Tür adını ve .config dosyasındaki tüm özellik adlarını koddaki sınıf ve özellik adlarına eşleştirmeye dikkat edin. .config dosyası var olmayan bir türe veya özelliğe başvurursa, SDK sessizce herhangi bir telemetri gönderemeyebilir.
Alternatif olarak, filtreyi kodda başlatabilirsiniz. Uygun bir başlatma sınıfında, örneğin, içinde
Global.asax.cs
AppStart, işlemcinizi zincire ekleyin: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();
Bu noktadan sonra oluşturulan telemetri istemcileri işlemcilerinizi kullanır.
Örnek filtreler
Yapay istekler
Botları ve web testlerini filtreleyin. Ölçüm Gezgini yapay kaynakları filtreleme seçeneği sunar ancak bu seçenek trafiği ve alma boyutunu SDK'nın kendisinde filtreleyerek azaltır.
public void Process(ITelemetry item)
{
if (!string.IsNullOrEmpty(item.Context.Operation.SyntheticSource)) {return;}
// Send everything else:
this.Next.Process(item);
}
Kimlik doğrulaması başarısız oldu
İstekleri "401" yanıtıyla filtreleyin.
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);
}
Hızlı uzak bağımlılık çağrılarını filtreleme
Yalnızca yavaş çağrıları tanılamak istiyorsanız, hızlı olanları filtreleyin.
Not
Bu filtreleme, portalda gördüğünüz istatistikleri çarpıtır.
public void Process(ITelemetry item)
{
var request = item as DependencyTelemetry;
if (request != null && request.Duration.TotalMilliseconds < 100)
{
return;
}
this.Next.Process(item);
}
Bağımlılık sorunlarını tanılama
Bu blogda , bağımlılıklara otomatik olarak düzenli ping göndererek bağımlılık sorunlarını tanılamaya yönelik bir proje açıklanır.
Java uygulamaları
Telemetri işlemcileri ve Bunların Java'daki uygulamaları hakkında daha fazla bilgi edinmek için Java telemetri işlemcileri belgelerine bakın.
JavaScript web uygulamaları
ITelemetryInitializer kullanarak JavaScript web uygulamalarından telemetriyi filtreleyebilirsiniz.
Telemetri başlatıcı geri çağırma işlevi oluşturun. Geri çağırma işlevi, işlenen olay olan bir parametre olarak alır
ITelemetryItem
. Bu geri aramadan geri dönülerekfalse
telemetri öğesinin filtreleneceği sonucuna varılır.var filteringFunction = (envelope) => { if (envelope.data.someField === 'tobefilteredout') { return false; } return true; };
Telemetri başlatıcı geri aramanızı ekleyin:
appInsights.addTelemetryInitializer(filteringFunction);
Özellikleri ekleme/değiştirme: ITelemetryInitializer
Telemetriyi ek bilgilerle zenginleştirmek veya standart telemetri modülleri tarafından ayarlanan telemetri özelliklerini geçersiz kılmak için telemetri başlatıcılarını kullanın.
Örneğin, web paketi için Application Insights HTTP istekleri hakkında telemetri toplar. Varsayılan olarak, yanıt kodu >=400 olan tüm istekleri başarısız olarak işaretler. Bunun yerine 400'e başarılı olarak davranmak istiyorsanız, başarı özelliğini ayarlayan bir telemetri başlatıcısı sağlayabilirsiniz.
Telemetri başlatıcı sağlarsanız, Track*() yöntemlerinden herhangi biri çağrıldığında çağrılır. Bu başlatıcı, standart telemetri modülleri tarafından çağrılan yöntemleri içerir Track()
. Kural gereği, bu modüller zaten bir başlatıcı tarafından ayarlanmış olan herhangi bir özelliği ayarlamaz. Telemetri başlatıcıları telemetri işlemcileri çağrılmadan önce çağrılır, bu nedenle başlatıcılar tarafından yapılan tüm zenginleştirmeler işlemciler tarafından görülebilir.
.NET uygulamaları
Başlatıcınızı tanımlama
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 } } }
Başlatıcınızı yükleme
ApplicationInsights.config içinde:
<ApplicationInsights> <TelemetryInitializers> <!-- Fully qualified type name, assembly name: --> <Add Type="MvcWebRole.Telemetry.MyTelemetryInitializer, MvcWebRole"/> ... </TelemetryInitializers> </ApplicationInsights>
Alternatif olarak, kodda başlatıcı örneğin Global.aspx.cs örneği oluşturabilirsiniz:
protected void Application_Start() { // ... TelemetryConfiguration.Active.TelemetryInitializers.Add(new MyTelemetryInitializer()); }
JavaScript telemetri başlatıcıları
Gerekirse bir JavaScript telemetri başlatıcısı ekleyin. Application Insights JavaScript SDK'sı için telemetri başlatıcıları hakkında daha fazla bilgi için bkz . Telemetri başlatıcıları.
JavaScript (Web) SDK Yükleyici Betiği yapılandırmasına onInit geri çağırma işlevini ekleyerek telemetri başlatıcısı ekleyin:
<script type="text/javascript">
!(function (cfg){function e(){cfg.onInit&&cfg.onInit(n)}var x,w,D,t,E,n,C=window,O=document,b=C.location,q="script",I="ingestionendpoint",L="disableExceptionTracking",j="ai.device.";"instrumentationKey"[x="toLowerCase"](),w="crossOrigin",D="POST",t="appInsightsSDK",E=cfg.name||"appInsights",(cfg.name||C[t])&&(C[t]=E),n=C[E]||function(g){var f=!1,m=!1,h={initialize:!0,queue:[],sv:"8",version:2,config:g};function v(e,t){var n={},i="Browser";function a(e){e=""+e;return 1===e.length?"0"+e:e}return n[j+"id"]=i[x](),n[j+"type"]=i,n["ai.operation.name"]=b&&b.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(h.sv||h.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:undefined,seq:"1",aiDataContract:undefined}}var n,i,t,a,y=-1,T=0,S=["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"],o=g.url||cfg.src,r=function(){return s(o,null)};function s(d,t){if((n=navigator)&&(~(n=(n.userAgent||"").toLowerCase()).indexOf("msie")||~n.indexOf("trident/"))&&~d.indexOf("ai.3")&&(d=d.replace(/(\/)(ai\.3\.)([^\d]*)$/,function(e,t,n){return t+"ai.2"+n})),!1!==cfg.cr)for(var e=0;e<S.length;e++)if(0<d.indexOf(S[e])){y=e;break}var n,i=function(e){var a,t,n,i,o,r,s,c,u,l;h.queue=[],m||(0<=y&&T+1<S.length?(a=(y+T+1)%S.length,p(d.replace(/^(.*\/\/)([\w\.]*)(\/.*)$/,function(e,t,n,i){return t+S[a]+i})),T+=1):(f=m=!0,s=d,!0!==cfg.dle&&(c=(t=function(){var e,t={},n=g.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][x]()]=o[1])}return t[I]||(e=(n=t.endpointsuffix)?t.location:null,t[I]="https://"+(e?e+".":"")+"dc."+(n||"services.visualstudio.com")),t}()).instrumentationkey||g.instrumentationKey||"",t=(t=(t=t[I])&&"/"===t.slice(-1)?t.slice(0,-1):t)?t+"/v2/track":g.endpointUrl,t=g.userOverrideEndpointUrl||t,(n=[]).push((i="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",o=s,u=t,(l=(r=v(c,"Exception")).data).baseType="ExceptionData",l.baseData.exceptions=[{typeName:"SDKLoadFailed",message:i.replace(/\./g,"-"),hasFullStack:!1,stack:i+"\nSnippet failed to load ["+o+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(b&&b.pathname||"_unknown_")+"\nEndpoint: "+u,parsedStack:[]}],r)),n.push((l=s,i=t,(u=(o=v(c,"Message")).data).baseType="MessageData",(r=u.baseData).message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+l+")").replace(/\"/g,"")+'"',r.properties={endpoint:i},o)),s=n,c=t,JSON&&((u=C.fetch)&&!cfg.useXhr?u(c,{method:D,body:JSON.stringify(s),mode:"cors"}):XMLHttpRequest&&((l=new XMLHttpRequest).open(D,c),l.setRequestHeader("Content-type","application/json"),l.send(JSON.stringify(s)))))))},a=function(e,t){m||setTimeout(function(){!t&&h.core||i()},500),f=!1},p=function(e){var n=O.createElement(q),e=(n.src=e,t&&(n.integrity=t),n.setAttribute("data-ai-name",E),cfg[w]);return!e&&""!==e||"undefined"==n[w]||(n[w]=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?O.getElementsByTagName("head")[0].appendChild(n):setTimeout(function(){O.getElementsByTagName(q)[0].parentNode.appendChild(n)},cfg.ld||0),n};p(d)}cfg.sri&&(n=o.match(/^((http[s]?:\/\/.*\/)\w+(\.\d+){1,5})\.(([\w]+\.){0,2}js)$/))&&6===n.length?(d="".concat(n[1],".integrity.json"),i="@".concat(n[4]),l=window.fetch,t=function(e){if(!e.ext||!e.ext[i]||!e.ext[i].file)throw Error("Error Loading JSON response");var t=e.ext[i].integrity||null;s(o=n[2]+e.ext[i].file,t)},l&&!cfg.useXhr?l(d,{method:"GET",mode:"cors"}).then(function(e){return e.json()["catch"](function(){return{}})}).then(t)["catch"](r):XMLHttpRequest&&((a=new XMLHttpRequest).open("GET",d),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE)if(200===a.status)try{t(JSON.parse(a.responseText))}catch(e){r()}else r()},a.send())):o&&r();try{h.cookie=O.cookie}catch(k){}function e(e){for(;e.length;)!function(t){h[t]=function(){var e=arguments;f||h.queue.push(function(){h[t].apply(h,e)})}}(e.pop())}var c,u,l="track",d="TrackPage",p="TrackEvent",l=(e([l+"Event",l+"PageView",l+"Exception",l+"Trace",l+"DependencyData",l+"Metric",l+"PageViewPerformance","start"+d,"stop"+d,"start"+p,"stop"+p,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),h.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4},(g.extensionConfig||{}).ApplicationInsightsAnalytics||{});return!0!==g[L]&&!0!==l[L]&&(e(["_"+(c="onerror")]),u=C[c],C[c]=function(e,t,n,i,a){var o=u&&u(e,t,n,i,a);return!0!==o&&h["_"+c]({message:e,url:t,lineNumber:n,columnNumber:i,error:a,evt:C.event}),o},g.autoExceptionInstrumented=!0),h}(cfg.cfg),(C[E]=n).queue&&0===n.queue.length?(n.queue.push(e),n.trackPageView({})):e();})({
src: "https://js.monitor.azure.com/scripts/b/ai.3.gbl.min.js",
crossOrigin: "anonymous", // When supplied this will add the provided value as the cross origin attribute on the script tag
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
// sri: false, // Custom optional value to specify whether fetching the snippet from integrity file and do integrity check
cfg: { // Application Insights Configuration
connectionString: "YOUR_CONNECTION_STRING"
}});
</script>
Telemetri öğesinde kullanılabilen özel olmayan özelliklerin özeti için bkz . Application Insights Dışarı Aktarma Veri Modeli.
İstediğiniz kadar başlatıcı ekleyebilirsiniz. Bunlar, eklendikleri sırayla çağrılır.
OpenCensus Python telemetri işlemcileri
OpenCensus Python'daki telemetri işlemcileri, dışarı aktarilmeden önce telemetriyi işlemek için çağrılan geri çağırma işlevleridir. Geri çağırma işlevinin parametresi olarak bir zarf veri türünü kabul etmesi gerekir. Telemetri verilerinin dışarı aktarılmasını filtrelemek için geri çağırma işlevinin döndürdüğünden False
emin olun. Azure İzleyici veri türlerinin şemasını GitHub'daki zarflarda görebilirsiniz.
Not
Alandaki özniteliğini tags
değiştirerek ai.cloud.role
değiştirebilirsinizcloud_RoleName
.
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()
İstediğiniz kadar işlemci ekleyebilirsiniz. Bunlar, eklendikleri sırayla çağrılır. Bir işlemci özel durum oluşturursa, aşağıdaki işlemcileri etkilemez.
Örnek TelemetriInitializers
Özel özellik ekleme
Aşağıdaki örnek başlatıcı izlenen her telemetriye özel bir özellik ekler.
public void Initialize(ITelemetry item)
{
var itemProperties = item as ISupportProperties;
if(itemProperties != null && !itemProperties.Properties.ContainsKey("customProp"))
{
itemProperties.Properties["customProp"] = "customValue";
}
}
Bulut rolü adı ekleme
Aşağıdaki örnek başlatıcı, bulut rolü adını izlenen her telemetriye ayarlar.
public void Initialize(ITelemetry telemetry)
{
if (string.IsNullOrEmpty(telemetry.Context.Cloud.RoleName))
{
telemetry.Context.Cloud.RoleName = "MyCloudRoleName";
}
}
Coğrafi konum eşlemeleri için kullanılan istemci IP adresini denetleme
Aşağıdaki örnek başlatıcı, telemetri alımı sırasında istemci yuva IP adresi yerine coğrafi konum eşlemesi için kullanılan istemci IP'sini ayarlar.
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 ve ITelemetryInitializer
Telemetri işlemcileri ile telemetri başlatıcıları arasındaki fark nedir?
- Bunlarla yapabileceklerinizde bazı çakışmalar vardır. Her ikisi de telemetri özelliklerini eklemek veya değiştirmek için kullanılabilir, ancak bu amaçla başlatıcıları kullanmanızı öneririz.
- Telemetri başlatıcıları her zaman telemetri işlemcilerinden önce çalışır.
- Telemetri başlatıcıları birden çok kez çağrılabilir. Kurala göre, önceden ayarlanmış herhangi bir özelliği ayarlamaz.
- Telemetri işlemcileri, bir telemetri öğesini tamamen değiştirmenize veya atmanıza olanak sağlar.
- Tüm kayıtlı telemetri başlatıcıları her telemetri öğesi için çağrılır. Telemetri işlemcileri için SDK, ilk telemetri işlemcisini çağırmayı garanti eder. Geri kalan işlemcilerin çağrılıp çağrılmayacağı, önceki telemetri işlemcileri tarafından belirlenir.
- Telemetriyi daha fazla özellik ile zenginleştirmek veya var olan bir telemetriyi geçersiz kılmak için telemetri başlatıcılarını kullanın. Telemetriyi filtrelemek için telemetri işlemcisi kullanın.
Not
JavaScript'te yalnızca ITelemetryInitializer kullanarak olayları filtreleyen telemetri başlatıcıları vardır
ApplicationInsights.config sorunlarını giderme
- Tam tür adının ve derleme adının doğru olduğunu onaylayın.
- applicationinsights.config dosyasının çıkış dizininizde olduğunu ve son değişiklikleri içerdiğini onaylayın.
Azure İzleyici Telemetri Veri Türleri Başvurusu
- ASP.NET Core SDK
- ASP.NET SDK
- Node.js SDK’sı
- Java SDK 'sı (yapılandırma yoluyla)
- Python SDK'sı
- JavaScript SDK'sı