Application Insights 未记录浏览器数据
Posted
技术标签:
【中文标题】Application Insights 未记录浏览器数据【英文标题】:Application Insights not logging browser data 【发布时间】:2022-01-06 06:06:21 【问题描述】:我在我的 mvc 应用程序中使用应用程序洞察力 javascript sdk。我从这里 (https://docs.microsoft.com/en-us/azure/azure-monitor/app/javascript) 复制了以下 sn-p:
<script type="text/javascript">
!function(T,l,y)var S=T.location,k="script",D="instrumentationKey",C="ingestionendpoint",I="disableExceptionTracking",E="ai.device.",b="toLowerCase",w="crossOrigin",N="POST",e="appInsightsSDK",t=y.name||"appInsights";(y.name||T[e])&&(T[e]=t);var n=T[t]||function(d)var g=!1,f=!1,m=initialize:!0,queue:[],sv:"5",version:2,config:d;function v(e,t)var n=,a="Browser";return n[E+"id"]=a[b](),n[E+"type"]=a,n["ai.operation.name"]=S&&S.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(m.sv||m.version),time:function()var e=new Date;function t(e)var t=""+e;return 1===t.length&&(t="0"+t),treturn e.getUTCFullYear()+"-"+t(1+e.getUTCMonth())+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"."+((e.getUTCMilliseconds()/1e3).toFixed(3)+"").slice(2,5)+"Z"(),iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:baseData:ver:2var h=d.url||y.src;if(h)function a(e)var t,n,a,i,r,o,s,c,u,p,l;g=!0,m.queue=[],f||(f=!0,t=h,s=function()var e=,t=d.connectionString;if(t)for(var n=t.split(";"),a=0;a<n.length;a++)var i=n[a].split("=");2===i.length&&(e[i[0][b]()]=i[1])if(!e[C])var r=e.endpointsuffix,o=r?e.location:null;e[C]="https://"+(o?o+".":"")+"dc."+(r||"services.visualstudio.com")return e(),c=s[D]||d[D]||"",u=s[C],p=u?u+"/v2/track":d.endpointUrl,(l=[]).push((n="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",a=t,i=p,(o=(r=v(c,"Exception")).data).baseType="ExceptionData",o.baseData.exceptions=[typeName:"SDKLoadFailed",message:n.replace(/\./g,"-"),hasFullStack:!1,stack:n+"\nSnippet failed to load ["+a+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(S&&S.pathname||"_unknown_")+"\nEndpoint: "+i,parsedStack:[]],r)),l.push(function(e,t,n,a)var i=v(c,"Message"),r=i.data;r.baseType="MessageData";var o=r.baseData;return o.message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+n+")").replace(/\"/g,"")+'"',o.properties=endpoint:a,i(0,0,t,p)),function(e,t)if(JSON)var n=T.fetch;if(n&&!y.useXhr)n(t,method:N,body:JSON.stringify(e),mode:"cors");else if(XMLHttpRequest)var a=new XMLHttpRequest;a.open(N,t),a.setRequestHeader("Content-type","application/json"),a.send(JSON.stringify(e))(l,p))function i(e,t)f||setTimeout(function()!t&&m.core||a(),500)var e=function()var n=l.createElement(k);n.src=h;var e=y[w];return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=i,n.onerror=a,n.onreadystatechange=function(e,t)"loaded"!==n.readyState&&"complete"!==n.readyState||i(0,t),n();y.ld<0?l.getElementsByTagName("head")[0].appendChild(e):setTimeout(function()l.getElementsByTagName(k)[0].parentNode.appendChild(e),y.ld||0)trym.cookie=l.cookiecatch(p)function t(e)for(;e.length;)!function(t)m[t]=function()var e=arguments;g||m.queue.push(function()m[t].apply(m,e))(e.pop())var n="track",r="TrackPage",o="TrackEvent";t([n+"Event",n+"PageView",n+"Exception",n+"Trace",n+"DependencyData",n+"Metric",n+"PageViewPerformance","start"+r,"stop"+r,"start"+o,"stop"+o,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),m.SeverityLevel=Verbose:0,Information:1,Warning:2,Error:3,Critical:4;var s=(d.extensionConfig||).ApplicationInsightsAnalytics||;if(!0!==d[I]&&!0!==s[I])var c="onerror";t(["_"+c]);var u=T[c];T[c]=function(e,t,n,a,i)var r=u&&u(e,t,n,a,i);return!0!==r&&m["_"+c](message:e,url:t,lineNumber:n,columnNumber:a,error:i),r,d.autoExceptionInstrumented=!0return m(y.cfg);function a()y.onInit&&y.onInit(n)(T[t]=n).queue&&0===n.queue.length?(n.queue.push(a),n.trackPageView()):a()(window,document,
src: "https://js.monitor.azure.com/scripts/b/ai.2.min.js", // The SDK URL Source
// name: "appInsights", // Global SDK Instance name defaults to "appInsights" when not supplied
// ld: 0, // Defines the load delay (in ms) before attempting to load the sdk. -1 = block page load and add to head. (default) = 0ms load after timeout,
// useXhr: 1, // Use XHR instead of fetch to report failures (if available),
crossOrigin: "anonymous", // When supplied this will add the provided value as the cross origin attribute on the script tag
// onInit: null, // Once the application insights instance has loaded and initialized this callback function will be called with 1 argument -- the sdk instance (DO NOT ADD anything to the sdk.queue -- As they won't get called)
cfg: // Application Insights Configuration
instrumentationKey: "InstrumentationKey"
enableDebug: true,
verboseLogging: true,
disableFetchTracking: false,
enableCorsCorrelation: true,
enableRequestHeaderTracking: true,
enableResponseHeaderTracking: true
/* ...Other Configuration Options... */
);
</script>
现在的问题是,当我浏览我的网络应用程序的任何页面时,我可以在 chrome 开发工具的网络选项卡中看到一个跟踪请求,如下所示:
Request Url: https://dc.services.visualstudio.com/v2/track
Response: "itemsReceived":2,"itemsAccepted":0,"errors":["index":0,"statusCode":206,"message":"Telemetry sampled out.","index":1,"statusCode":206,"message":"Telemetry sampled out."],"appId":"0bb96f1c-1feb-4191-b47c-eed8676dae68"
在响应中,我们可以看到 ItemsReceived 为 2,但 ItemsAccepted 为 0,并且 Errors 数组中有一个对象显示“Telemetry Sampled Out”,因此我无法在 Azure 门户上看到任何登录应用程序见解。
知道如何解决这个问题吗?
【问题讨论】:
【参考方案1】:在响应中,我们可以看到 ItemsReceived 为 2 但 ItemsAccepted 为 0
我们遵循documented steps,通过在我的 .net MVC 项目(由 Visual Studio 2019 创建的默认 MVC 项目)中添加客户端 JavaScript SDK 配置来启用客户端遥测。
在_Layoutcs.html
的<head>
部分中添加基于sn-p 的设置(您已在上面共享)后,我们可以毫无问题地查看基于浏览器的客户端指标。
以下是示例输出以供参考:
Errors 数组,上面写着“Telemetry Sampled Out”,因此我是 无法在 Azure 门户上看到任何登录应用程序见解。
Sampling 不是错误。在很多场景下默认开启。对于 JavaScript,您可以按照here 所述配置采样
也可能是你点击了the daily data cap:
在 Azure 门户中创建 Application Insights 资源时,每日上限设置为 100 GB/天。在 Visual Studio 中创建 Application Insights 资源时,默认值很小(仅 32.3 MB/天)。
我怀疑是后者,因为当使用 sdk 打开采样时,您不会看到它穿过电线。请参阅this doc 描述如何调整上限。
有关错误Telemetry Sampled Out
的更多信息,您可以参考此SO 线程。
【讨论】:
所以实际上这就是问题所在。不得不增加数据采样百分比,它实际上开始记录到 AI以上是关于Application Insights 未记录浏览器数据的主要内容,如果未能解决你的问题,请参考以下文章
为啥 NLog 不将范围数据记录到 Application Insights 自定义维度
在Azure Application Insights中记录机器人数据
使用 Azure Function V2 Durable 函数时,ILogger 不记录到 Application Insights
从 Function App ILogger (C#) 在 Application Insights 中记录自定义对象