تصفية بيانات تتبع الاستخدام ومعالجتها مسبقًا في Application Insights SDK

يمكنك كتابة التعليمات البرمجية لتصفية بيانات تتبع الاستخدام أو تعديلها أو إثراءها قبل إرسالها من SDK. تتضمن المعالجة البيانات التي يتم إرسالها من وحدات بيانات تتبع الاستخدام القياسية، مثل جمع طلب HTTP وجمع التبعية.

  • يمكن من خلال التصفية تعديل بيانات تتبع الاستخدام أو تجاهلها قبل إرسالها من SDK عن طريق تنفيذ ITelemetryProcessor. على سبيل المثال، يمكنك تقليل حجم بيانات تتبع الاستخدام عن طريق استبعاد الطلبات من الروبوتات. على عكس أخذ العينات، لديك تحكم كامل في ما يتم إرساله أو تجاهله، ولكنه يؤثر على أي مقاييس استنادا إلى السجلات المجمعة. استنادا إلى كيفية تجاهل العناصر، قد تفقد أيضا القدرة على التنقل بين العناصر ذات الصلة.

  • إضافة خصائص أو تعديلها إلى أي بيانات تتبع استخدام يتم إرسالها من تطبيقك عن طريق تنفيذ ITelemetryInitializer. على سبيل المثال، يمكنك إضافة قيم محسوبة أو أرقام إصدارات لتصفية البيانات في المدخل.

  • يقلل أخذ العينات من حجم بيانات تتبع الاستخدام دون التأثير على إحصائياتك. تحافظ على نقاط البيانات ذات الصلة بحيث يمكنك التنقل بينها عند تشخيص مشكلة. في المدخل، تتم مضاعفة إجمالي الأعداد للتعويض عن أخذ عينات.

إشعار

يتم استخدام واجهة برمجة تطبيقات SDK لإرسال أحداث ومقاييس مخصصة.

المتطلبات الأساسية

قم بتثبيت SDK المناسب لتطبيقك: ASP.NET أو ASP.NET Core أو Non-HTTP/Worker ل .NET/.NET Core أو JavaScript.

التصفية

تمنحك هذه التقنية التحكم المباشر في ما يتم تضمينه أو استبعاده من بث بيانات تتبع الاستخدام. يمكن استخدام التصفية لقطع عناصر بيانات تتبع الاستخدام حتى لا يتم إرسالها إلى Application Insights. يمكنك استخدام التصفية بالتزامن مع أخذ عينات، أو بشكل منفصل.

لتصفية بيانات تتبع الاستخدام، يمكنك كتابة معالج بيانات تتبع الاستخدام وتسجيله باستخدام TelemetryConfiguration. تمر كافة بيانات تتبع الاستخدام عبر المعالج الخاص بك. يمكنك اختيار قطعه من البث أو إعطائه للمعالج التالي في السلسلة. يتم تضمين بيانات تتبع الاستخدام من الوحدات النمطية القياسية، مثل جامع طلب HTTP وجامع التبعية، وبيانات تتبع الاستخدام التي تعقبتها بنفسك. على سبيل المثال، يمكنك تصفية بيانات تتبع الاستخدام حول الطلبات من الروبوتات أو مكالمات التبعية الناجحة.

تحذير

تصفية بيانات تتبع الاستخدام المُرسلة من SDK باستخدام المعالجات يمكن أن تقص الإحصائيات التي تراها في المدخل وتجعل من الصعب متابعة العناصر ذات الصلة.

بدلا من ذلك، ضع في اعتبارك استخدام أخذ العينات.

تطبيقات .NET

  1. تنفيذ ITelemetryProcessor.

    تقوم معالجات بيانات تتبع الاستخدام ببناء سلسلة معالجة. عند إنشاء مثيل لمعالج بيانات تتبع الاستخدام، يتم منحك مرجعًا إلى المعالج التالي في السلسلة. عند تمرير نقطة بيانات لبيانات تتبع الاستخدام إلى أسلوب المعالجة، تقوم بعملها ثم تستدعي (أو لا تستدعي) معالج بيانات تتبع الاستخدام التالي في السلسلة.

    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. أضف المعالج الخاص بك.

    إدراج هذه القصاصة البرمجية في ApplicationInsights.config:

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

    يمكنك تمرير قيم السلسلة من ملف config. عن طريق توفير خصائص عامة مسماة في الفئة الخاصة بك.

    تحذير

    احرص على مطابقة اسم النوع وأسماء أي من الخصائص في ملف config. مع أسماء الفئة والخصائص في التعليمات البرمجية. إذا كان الملف config. يشير إلى نوع أو خاصية غير موجودة، فقد يفشل SDK بصمت في إرسال أي بيانات تتبع الاستخدام.

    بدلاً من ذلك، يمكنك تهيئة التصفية في التعليمات البرمجية. في فئة تهيئة مناسبة، على سبيل المثال، AppStart في Global.asax.cs، أدخل المعالج في السلسلة:

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

    يستخدم عملاء بيانات تتبع الاستخدام الذين تم إنشاؤهم بعد هذه النقطة المعالجات الخاصة بك.

مثال على عوامل تصفية:

الطلبات التركيبية

تصفية برامج الروبوت واختبارات الويب. على الرغم من أن Metrics Explorer يمنحك خيار تصفية المصادر الاصطناعية، فإن هذا الخيار يقلل من نسبة استخدام الشبكة والابتلاع عن طريق تصفيتها في SDK نفسه.

public void Process(ITelemetry item)
{
    if (!string.IsNullOrEmpty(item.Context.Operation.SyntheticSource)) {return;}
    
    // Send everything else:
    this.Next.Process(item);
}

مصادقة فاشلة

تصفية الطلبات باستخدام استجابة "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);
}

تصفية مكالمات التبعية البعيدة السريعة

إذا كنت ترغب في تشخيص المكالمات البطيئة فقط، فقم بتصفية المكالمات السريعة.

إشعار

ستؤدي هذا التصفية إلى قص الإحصائيات التي تراها على المدخل.

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

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

تشخيص مشكلات التبعية

تصف هذه المدونة مشروعا لتشخيص مشكلات التبعية عن طريق إرسال pings العادية تلقائيا إلى التبعيات.

تطبيقات Java

لمعرفة المزيد حول معالجات بيانات تتبع الاستخدام وتنفيذها في Java، راجع وثائق معالجات بيانات تتبع الاستخدام Java.

تطبيقات ويب JavaScript

يمكنك تصفية بيانات تتبع الاستخدام من تطبيقات الويب JavaScript باستخدام ITelemetryInitializer.

  1. إنشاء دالة رد اتصال مهيئ بيانات تتبع الاستخدام. تأخذ ITelemetryItem دالة رد الاتصال كمعلمة، وهو الحدث الذي تتم معالجته. false يؤدي العودة من رد الاتصال هذا إلى تصفية عنصر بيانات تتبع الاستخدام.

    var filteringFunction = (envelope) => {
      if (envelope.data.someField === 'tobefilteredout') {
        return false;
      }
      return true;
    };
    
  2. إضافة رد الاتصال بمهيئ بيانات تتبع الاستخدام الخاص بك:

    appInsights.addTelemetryInitializer(filteringFunction);
    

إضافة/تعديل خصائص: ITelemetryInitializer

استخدم مهيئات بيانات تتبع الاستخدام لإثراء بيانات تتبع الاستخدام بمعلومات إضافية أو لمنع خصائص بيانات تتبع الاستخدام التي تحددها وحدات بيانات تتبع الاستخدام القياسية.

على سبيل المثال، يقوم Application Insights بجمع بيانات تتبع الاستخدام حول طلبات HTTP لحزمة الويب. بشكل افتراضي، فإنه يقوم بوضع علامة على أي طلب برمز >استجابة =400 على أنه فشل. إذا كنت تريد بدلا من ذلك التعامل مع 400 كنجاح، يمكنك توفير مهيئ بيانات تتبع الاستخدام الذي يعين خاصية النجاح.

إذا قمت بتوفير مهيئ بيانات تتبع الاستخدام، يتم استدعاؤه كلما تم استدعاء أي من أساليب Track*(). ويشمل مهيئ العناصر ذلك الأساليب Track() التي يتم استدعاؤها بوحدات القياس عن بعد القياسية. بحسب الاصطلاح، لا تقوم هذه الوحدات بتعيين أي خاصية تم تعيينها مسبقًا بواسطة مهيئ. يتم استدعاء مهيئات بيانات تتبع الاستخدام قبل استدعاء معالجات بيانات تتبع الاستخدام، لذلك فإن أي عمليات إثراء يتم إجراؤها بواسطة المهايئات تكون مرئية للمعالجات.

تطبيقات .NET

  1. تعريف المهيئ

    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
            }
        }
    }
    
  2. تحميل المهيئ الخاص بك

    في ApplicationInsights.config:

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

    بدلاً من ذلك، يمكنك إنشاء مثيل التهيئة في التعليمات البرمجية، على سبيل المثال، في Global.aspx.cs:

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

    راجع المزيد من هذه العينة.

مهيئ JavaScript لبيانات تتبع الاستخدام

إدراج مهيئ بيانات تتبع استخدام JavaScript، إذا لزم الأمر. لمزيد من المعلومات حول مهيئات بيانات تتبع الاستخدام ل Application Insights JavaScript SDK، راجع مهيئات بيانات تتبع الاستخدام.

إدراج مهيئ بيانات تتبع الاستخدام عن طريق إضافة دالة رد الاتصال onInit في تكوين برنامج JavaScript (Web) SDK Loader Script:

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

للحصول على ملخص للخصائص غير المخصصة المتوفرة على عنصر بيانات تتبع الاستخدام، راجع نموذج بيانات تصدير Application Insights.

يمكنك إضافة العدد الذي تريد من المهيئين. يتم استدعاؤهم بالترتيب الذي يتم إضافتهم به.

معالجات بيانات تتبع الاستخدام OpenCensus Python

معالجات بيانات تتبع الاستخدام في OpenCensus Python هي ببساطة وظائف رد اتصال يتم استدعاءها لمعالجة بيانات تتبع الاستخدام قبل تصديرها. يجب أن تقبل دالة رد الاتصال نوع بيانات المغلف كمعلمة لها. لتصفية بيانات تتبع الاستخدام من التصدير، تأكد من إرجاع Falseدالة رد الاتصال . يمكنك مشاهدة مخطط أنواع بيانات Azure Monitor في المغلفات على GitHub.

إشعار

يمكنك التعديل cloud_RoleName عن طريق تغيير السمة ai.cloud.role في 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()

يمكنك إضافة العدد الذي تريده من المعالجات. يتم استدعاؤهم بالترتيب الذي يتم إضافتهم به. إذا طرح معالج واحد استثناءً، فإنه لا يؤثر على المعالجات التالية.

مثال TelemetryInitializers

إضافة خاصية مخصصة

يضيف مهيئ العينة التالي خاصية مخصصة لكل بيانات تتبع الاستخدام يتم تعقبها.

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

إضافة اسم دور السحابة

يقوم مهيئ العينة التالي بتعيين اسم دور السحابة إلى كل بيانات تتبع الاستخدام يتم تعقبها.

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

التحكم في عنوان IP للعميل المستخدم لتعيينات الموقع الجغرافي

يعين مهيئ العينة التالي عنوان IP للعميل، والذي يستخدم لتعيين الموقع الجغرافي، بدلا من عنوان IP لمأخذ توصيل العميل، أثناء استيعاب بيانات تتبع الاستخدام.

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

ما الفرق بين معالجات بيانات تتبع الاستخدام ومهيئات بيانات تتبع الاستخدام؟

  • هناك بعض التداخلات حول ما يمكنك القيام به معهم. يمكن استخدام كليهما لإضافة أو تعديل خصائص بيانات تتبع الاستخدام، على الرغم من أننا نوصي باستخدام المهيئات لهذا الغرض.
  • دائما ما تعمل مهيئات بيانات تتبع الاستخدام قبل معالجات بيانات تتبع الاستخدام.
  • يمكن استدعاء مهيئات بيانات تتبع الاستخدام أكثر من مرة. بحسب الاصطلاح، لا يقومون بتعيين أي خاصية تم تعيينها بالفعل.
  • تسمح لك معالجات بيانات تتبع الاستخدام باستبدال أو تجاهل عنصر بيانات تتبع الاستخدام تمامًا.
  • جميع مهيئات بيانات تتبع الاستخدام المسجلة يتم استدعاؤها لكل عنصر بيانات تتبع الاستخدام. بالنسبة إلى معالجات بيانات تتبع الاستخدام، تضمن SDK استدعاء أول معالج بيانات تتبع الاستخدام. تحديد ما إذا كان يتم استدعاء باقي المعالجات أو لا بواسطة معالجات بيانات تتبع الاستخدام السابقة.
  • استخدام مهيئات بيانات تتبع الاستخدام لإثراء بيانات تتبع الاستخدام بالمزيد من الخصائص أو منع أحد الخصائص الحالية. استخدام معالج بيانات تتبع الاستخدام لتصفية بيانات تتبع الاستخدام.

إشعار

يحتوي JavaScript فقط على مهيئات بيانات تتبع الاستخدام التي يمكنها تصفية الأحداث باستخدام ITelemetryInitializer

استكشاف أخطاء ApplicationInsights.config وإصلاحها

  • تأكد من صحة اسم النوع المؤهل بالكامل واسم التجميع.
  • تأكد من أن الملف applicationinsights.config موجود في دليل المخرجات الخاص بك ويحتوي على أي تغييرات حديثة.

مرجع أنواع بيانات تتبع الاستخدام في Azure Monitor

وثائق مرجعية

تعليمة برمجية SDK

الخطوات التالية