Megosztás a következőn keresztül:


Telemetria szűrése és előfeldolgozása az Application Insights SDK-ban

Figyelemfelhívás

Javasoljuk az Azure Monitor OpenTelemetry Distro használatát az új alkalmazások vagy ügyfelek számára az Azure Monitor Application Insights használatához. Az Azure Monitor OpenTelemetry Distro az Application Insights SDK-hoz hasonló funkciókat és élményt nyújt. Az Application Insights SDK-ból a .NET, a Node.js és a Python áttelepítési útmutatóival migrálható, de még dolgozunk néhány további funkció hozzáadásán a visszamenőleges kompatibilitás érdekében.

Az SDK-ból való küldés előtt kódot írhat a telemetriai adatok szűréséhez, módosításához vagy bővítéséhez. A feldolgozás a szabványos telemetriai modulokból, például a HTTP-kérések gyűjtéséből és a függőséggyűjtésből küldött adatokat tartalmazza.

  • A szűrés módosíthatja vagy elvetheti a telemetriát, mielőtt elküldené az SDK-ból a implementálással ITelemetryProcessor. Csökkentheti például a telemetriai adatok mennyiségét a robotok kéréseinek kizárásával. A mintavételezéssel ellentétben Ön teljes mértékben szabályozhatja az elküldött vagy elvetett adatokat, de ez az összesített naplókon alapuló metrikákra is hatással van. Az elemek elvetésének módjától függően előfordulhat, hogy elveszíti a kapcsolódó elemek közötti navigálás lehetőségét is.

  • Tulajdonságok hozzáadása vagy módosítása az alkalmazásból küldött telemetriai adatokhoz egy ITelemetryInitializer. Hozzáadhat például számított értékeket vagy verziószámokat, amelyekkel szűrheti az adatokat a portálon.

  • A mintavételezés a statisztikák befolyásolása nélkül csökkenti a telemetriai adatok mennyiségét. Összetartja a kapcsolódó adatpontokat, így a probléma diagnosztizálásakor navigálhat közöttük. A portálon a mintavételezés kompenzálása érdekében a rendszer megszorozza a teljes számokat.

Feljegyzés

Az SDK API egyéni események és metrikák küldéséhez használható.

Előfeltételek

Telepítse a megfelelő SDK-t az alkalmazáshoz: ASP.NET, ASP.NET Core, nem HTTP/Worker for .NET/.NET Core vagy JavaScript.

Szűrés

Ezzel a technikával közvetlenül szabályozhatja, hogy mi szerepel a telemetriai adatfolyamban, vagy mit zár ki belőle. A szűrés segítségével eltávolíthatja a telemetriai elemeket az Application Insightsba küldött adatokból. A szűrést mintavételezéssel vagy külön is használhatja.

A telemetria szűréséhez írjon egy telemetriai processzort, és regisztrálja azt a TelemetryConfiguration. Minden telemetria a processzoron megy keresztül. Dönthet úgy, hogy elveti a streamből, vagy átadja a lánc következő processzorának. A standard modulokból, például a HTTP-kérelemgyűjtőből és a függőséggyűjtőből származó telemetriai adatok, valamint a saját maga által nyomon követett telemetriai adatok is szerepelnek. Szűrheti például a robotok kéréseivel vagy a sikeres függőségi hívásokkal kapcsolatos telemetriát.

Figyelmeztetés

Az SDK-ból a processzorok használatával küldött telemetriai adatok szűrésével megszűrheti a portálon látható statisztikákat, és megnehezítheti a kapcsolódó elemek követését.

Ehelyett fontolja meg a mintavételezést.

.NET-alkalmazások

  1. Implementálás ITelemetryProcessor.

    A telemetriai processzorok feldolgozási láncot hoznak létre. Amikor létrehoz egy telemetriai processzort, a lánc következő processzorára fog hivatkozni. Amikor egy telemetriai adatpontot átad a folyamatmetódusnak, elvégzi a munkáját, majd meghívja (vagy nem hívja meg) a lánc következő telemetriai feldolgozóját.

    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. Adja hozzá a processzort.

    Szúrja be ezt a kódrészletet az ApplicationInsights.config fájlba:

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

    A .config fájlból sztringértékeket adhat át úgy, hogy nyilvánosan elnevezett tulajdonságokat ad meg az osztályban.

    Figyelmeztetés

    Ügyeljen arra, hogy a .config fájlban szereplő típusnév és tulajdonságnevek megegyeznek a kód osztály- és tulajdonságnevével. Ha a .config fájl nem létező típusra vagy tulajdonságra hivatkozik, előfordulhat, hogy az SDK nem küld telemetriai adatokat.

    Másik lehetőségként inicializálhatja a szűrőt a kódban. Egy megfelelő inicializálási osztályban, például az AppStart inicializálási osztályban Global.asax.csszúrja be a processzort a láncba:

    Feljegyzés

    Az alábbi kódminta elavult, de az utókor számára itt érhető el. Fontolja meg az OpenTelemetria használatának első lépéseit, vagy az OpenTelemetryre való migrálást.

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

    A pont után létrehozott telemetriai ügyfelek a processzorokat használják.

Példaszűrők

Szintetikus kérések

Szűrje ki a robotokat és a webes teszteket. Bár a Metrics Explorer lehetővé teszi a szintetikus források szűrését, ez a lehetőség csökkenti a forgalmat és a betöltési méretet azáltal, hogy magát az SDK-t szűri.

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

Sikertelen hitelesítés

A kérések szűrése "401" válaszsal.

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

Gyors távoli függőségi hívások kiszűrése

Ha csak lassú hívásokat szeretne diagnosztizálni, szűrje ki a gyors hívásokat.

Feljegyzés

Ez a szűrés el fogja varrni a portálon látható statisztikákat.

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

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

Függőségi problémák diagnosztikája

Ez a blog egy olyan projektet ír le, amely a függőségekkel kapcsolatos problémákat diagnosztizálja azáltal, hogy automatikusan küld rendszeres pingeket a függőségeknek.

Java-alkalmazások

Ha többet szeretne megtudni a telemetriai processzorokról és azok Java-ban történő implementálásáról, tekintse meg a Java telemetriai processzorok dokumentációját.

JavaScript-webalkalmazások

Az ITelemetryInitializer használatával szűrheti a Telemetriát JavaScript-webalkalmazásokból.

  1. Telemetria-inicializáló visszahívási függvény létrehozása. A visszahívási függvény paraméterként szerepel ITelemetryItem , amely a feldolgozandó esemény. A visszahívásból visszatérve false a szűrni kívánt telemetriai elem jelenik meg.

    var filteringFunction = (envelope) => {
      if (envelope.data.someField === 'tobefilteredout') {
        return false;
      }
      return true;
    };
    
  2. Adja hozzá a telemetriai inicializáló visszahívását:

    appInsights.addTelemetryInitializer(filteringFunction);
    

Tulajdonságok hozzáadása/módosítása: ITelemetryInitializer

Telemetriai inicializálókkal bővítheti a telemetriát további információkkal, vagy felülbírálhatja a standard telemetriai modulok által beállított telemetriai tulajdonságokat.

A webes Application Insights például telemetriát gyűjt a HTTP-kérelmekről. Alapértelmezés szerint az =400 válaszkódú >kéréseket sikertelenként jelöli meg. Ha ehelyett a 400-at szeretné sikeresnek tekinteni, megadhat egy telemetriai inicializálót, amely beállítja a siker tulajdonságot.

Ha telemetriai inicializálót ad meg, a rendszer akkor hívja meg, amikor a Track*() metódusok bármelyikét meghívja. Ez az inicializáló a standard telemetriai modulok által meghívott metódusokat tartalmazza Track() . Ezek a modulok konvenció szerint nem állítottak be olyan tulajdonságot, amelyet egy inicializáló már beállított. A telemetriai inicializálók hívása a telemetriai processzorok meghívása előtt történik, így az inicializálók által végzett összes bővítés látható a processzorok számára.

.NET-alkalmazások

  1. Az inicializáló definiálása

    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. Az inicializáló betöltése

    Az ApplicationInsights.config fájlban:

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

    Másik lehetőségként az inicializálót a kódban is létrehozhatja, például a Global.aspx.cs:

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

    További információ erről a mintáról.

JavaScript-telemetria-inicializálók

Szükség esetén szúrjon be egy JavaScript-telemetria-inicializálót. További információ az Application Insights JavaScript SDK telemetriai inicializálóiról: Telemetriai inicializálók.

Telemetria-inicializáló beszúrása az onInit visszahívási függvény hozzáadásával a JavaScript (Web) SDK Loader Script konfigurációjában:

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

A telemetriai elemen elérhető nemcustom tulajdonságok összegzését az Application Insights Adatmodell exportálása című témakörben tekinti meg.

Tetszőleges számú inicializálót adhat hozzá. A rendszer a hozzáadás sorrendjében hívja meg őket.

OpenCensus Python telemetriai feldolgozók

Az OpenCensus Python telemetriai processzorai egyszerűen visszahívási függvények, amelyek a telemetriát az exportálás előtt feldolgozzák. A visszahívási függvénynek paraméterként el kell fogadnia a boríték adattípusát. Ha ki szeretné szűrni a telemetriát az exportálásból, győződjön meg arról, hogy a visszahívási Falsefüggvény visszatér. Az Azure Monitor-adattípusok sémáját a GitHub borítékjaiban tekintheti meg.

Feljegyzés

A mező attribútumának ai.cloud.role tags módosításával módosíthatócloud_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()

Annyi processzort adhat hozzá, amennyit csak szeretne. A rendszer a hozzáadás sorrendjében hívja meg őket. Ha egy processzor kivételt jelez, az nem érinti a következő processzorokat.

Példa TelemetryInitializers

Egyéni tulajdonság hozzáadása

Az alábbi inicializáló minden nyomon követett telemetriához hozzáad egy egyéni tulajdonságot.

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

Felhőbeli szerepkörnév hozzáadása

Az alábbi inicializáló minden nyomon követett telemetriára beállítja a felhőbeli szerepkör nevét.

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

A földrajzi helyleképezésekhez használt ügyfél IP-címének szabályozása

Az alábbi minta inicializáló beállítja az ügyfél IP-címét, amelyet az ügyfélcsatorna IP-címe helyett geolokációs leképezéshez használnak a telemetriai betöltés során.

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 és ITelemetryInitializer

Mi a különbség a telemetriai processzorok és a telemetriai inicializálók között?

  • Vannak átfedések a velük elvégezhető műveletekben. Mindkettő használható a telemetria tulajdonságainak hozzáadására vagy módosítására, bár javasoljuk, hogy inicializálókat használjon erre a célra.
  • A telemetriai inicializálók mindig a telemetriai processzorok előtt futnak.
  • A telemetriai inicializálók több alkalommal is meghívhatók. Konvenció szerint nem állítottak be olyan tulajdonságot, amely már be lett állítva.
  • A telemetriai processzorokkal teljes mértékben lecserélhet vagy elvethet egy telemetriai elemet.
  • A rendszer minden regisztrált telemetriai inicializálót meghív minden telemetriai elemhez. A telemetriai processzorok esetében az SDK garantálja az első telemetriai processzor meghívását. Az előző telemetriai processzorok határozzák meg, hogy a többi processzort meghívják-e.
  • Telemetriai inicializálókkal bővítheti a telemetriát több tulajdonsággal, vagy felülbírálhat egy meglévőt. Telemetria-feldolgozóval szűrheti ki a telemetriát.

Feljegyzés

A JavaScript csak telemetriai inicializálókkal rendelkezik, amelyek képesek kiszűrni az eseményeket az ITelemetryInitializer használatával

Az ApplicationInsights.config hibaelhárítása

  • Győződjön meg arról, hogy a teljes típusnév és a szerelvény neve helyes.
  • Ellenőrizze, hogy az applicationinsights.config fájl szerepel-e a kimeneti könyvtárban, és tartalmazza-e a legutóbbi módosításokat.

Azure Monitor telemetriai adattípusokra vonatkozó referencia

Referenciadokumentumok

SDK-kód

Következő lépések