17

我想知道应用程序洞察力如何与 cookie 一起使用,因为我想了解用户和会话跟踪,所以我一直在研究和...

下面简单介绍一下这个理论:

  1. 每当 Application Insights SDK 收到没有应用程序洞察用户跟踪 cookie(由 Application Insights JS 片段设置)的请求时,它都会设置此 cookie 并启动新会话。(来自apmtips

2.

UserTelemetryInitializer使用从用户浏览器中运行的 Application Insights JavaScript 检测代码生成的ai_user cookie中提取的值更新所有遥测项目的用户上下文的IdAcquisitionDate属性。

SessionTelemetryInitializer使用从用户浏览器中运行的 ApplicationInsights JavaScript 检测代码生成的ai_session cookie中提取的值更新所有遥测项的Session上下文的Id属性。(来自azure 文档(使用 ApplicationInsights.config 配置 Application Insights SKD)

所以有两个 cookie:ai_sessionai_user

我的问题来了:

  1. 他们什么时候初始化?
  2. 它在做什么?
  3. 我怎样才能停止使用它们?
  4. 如果我想保留它们,我该如何更改它们的到期时间?

尝试删除它们时,我使用 Web Api 的默认模板(包括 MVC 和 Web Api)使用 ASP.NET Web 应用程序创建了一个项目。

进行研究时,我发现这种方法可以禁用它们,但我没有任何 WebSessionTrackingTelemetryModule。所以我注释掉了“UserTelemetryInitializer”和“SessionTelemetryInitializer”,这就是我所拥有的:

<TelemetryInitializers>

  <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.SyntheticTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
  <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.ClientIpHeaderTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
  <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.UserAgentTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
  <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.OperationNameTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
  <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.OperationIdTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />

<!--<Add Type="Microsoft.ApplicationInsights.Extensibility.Web.UserTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />-->
<!--<Add Type="Microsoft.ApplicationInsights.Extensibility.Web.SessionTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />-->

 <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.AzureRoleEnvironmentTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
 <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.DomainNameRoleInstanceTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
 <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.BuildInfoConfigComponentVersionTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />
 <Add Type="Microsoft.ApplicationInsights.Extensibility.Web.DeviceTelemetryInitializer, Microsoft.ApplicationInsights.Extensibility.Web" />


</TelemetryInitializers>

和 :

<TelemetryModules>

<Add Type="Microsoft.ApplicationInsights.Extensibility.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.ApplicationInsights.Extensibility.DependencyCollector" />
<Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector"/>
<Add Type="Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights" />
<Add Type="Microsoft.ApplicationInsights.Extensibility.Web.RequestTrackingTelemetryModule, Microsoft.ApplicationInsights.Extensibility.Web"/>
<Add Type="Microsoft.ApplicationInsights.Extensibility.Web.ExceptionTrackingTelemetryModule, Microsoft.ApplicationInsights.Extensibility.Web" />
<Add Type="Microsoft.ApplicationInsights.Extensibility.Web.DeveloperModeWithDebuggerAttachedTelemetryModule, Microsoft.ApplicationInsights.Extensibility.Web" />

</TelemetryModules>

但这并没有什么不同。无论我是否对模块进行评论,cookie 仍在生成中。

尝试删除 cookie,我评论了 Startup 中完成的步骤,并从我的项目中排除了所有 .js 文件,但 cookie 在每次请求后都会出现。

所以在这一点上,我不明白“Application Insights Javascript”发生在哪里,我想我缺少的是后端的东西。我错了吗?

最后,我评论的 Startup.cs 看起来像:

[assembly: OwinStartupAttribute(typeof(Try001.Startup))]
namespace Try001
{
    public partial class Startup
    {
         public void Configuration(IAppBuilder app)
         {   
            //ConfigureAuth(app);
         }
    }
  }

我的 Global.asax.cs 看起来像:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        //AreaRegistration.RegisterAllAreas();
        //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        //BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

RegisterRoutes 只是在做默认路由。所以我的目标是只做非常基本的事情来让它工作,但我不知道在哪里继续挖掘。

有人可以启发我吗?

感谢您到目前为止的阅读。

4

1 回答 1

21

Cookie 初始化逻辑发生在 Application Insights JavaScript SDK 中。如果您查看页面的源代码,您会注意到来自 //az416426.vo.msecnd.net/scripts/a/ai.0.js 的 JS。你也可以在 GitHub 上阅读/贡献 JavaScript SDK 的源代码:https ://github.com/Microsoft/ApplicationInsights-JS

回复您的问题:

他们什么时候初始化的,它在做什么?
当 JavaScript SDK 尝试发送任何遥测项目并检查 cookie 是否不存在时,它们会被初始化,它会创建它们。有关详细信息,请参阅https://github.com/Microsoft/ApplicationInsights-JS/blob/master/JavaScript/JavaScriptSDK/Context/User.ts,会话 cookie 也有类似的逻辑。

我怎样才能停止使用它们?在 JavaScript SDK 的更新版本中,您现在可以通过配置对象
控制 cookie 以及用户信息和会话缓冲区(用于限制对 AI 的请求的速率)的本地存储:

...snippet...
}({
    instrumentationKey: "<your key>",
    isCookieUseDisabled: true,
    isStorageUseDisabled: true,
    enableSessionStorageBuffer: true
});

如果我想保留它们,我该如何更改它们的到期时间?您可以控制两种设置:

  • 会话更新时间 - 在没有活动的情况下重置会话之前经过了多长时间(默认为 30 分钟)
  • 会话到期时间 - 即使有活动(默认为 24​​ 小时),在重置会话之前经过了多少时间。

要更改它们,请在此代码段中设置检测键的位置旁边设置以下值:

      ..snippet..
 }({
        instrumentationKey: "<your key>",
        sessionRenewalMs:<your custom value in ms>,
        sessionExpirationMs:<your custom value in ms>

    });
于 2015-07-08T13:37:18.493 回答