【问题标题】:Managing Application Insights Cookies管理 Application Insights Cookie
【发布时间】:2018-06-01 16:51:04
【问题描述】:

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

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

  1. 只要 Application Insights SDK 收到没有应用程序洞察用户跟踪 cookie(由 Application Insights JS sn-p 设置)的请求,它就会设置此 cookie 并启动新会话。 (来自apmtips

2.

UserTelemetryInitializer 更新 User 上下文的 IdAcquisitionDate 属性,用于所有具有从ai_user cookie,由在用户浏览器中运行的 Application Insights JavaScript 检测代码生成。

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

所以有两个 cookie:ai_sessionai_user

我的问题来了:

  1. 它们何时初始化?
  2. 这是做什么的?
  3. 如何停止使用它们?
  4. 如果我想保留它们,我该如何更改它们的过期时间?

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

进行研究时,我发现 this approach 可以禁用它们,但我没有任何 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 只是在做默认路由。所以我的目标是只做非常基本的事情来让它工作,但我不知道在哪里继续挖掘。

有人可以启发我吗?

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

【问题讨论】:

  • "app insight javascript" 实际上是一个 javascript sn-p,它位于模板 html/cshtml/master 文件之一中,具体取决于您拥有的项目类型。您是自己手动添加了 AI,还是在新项目中使用了 VS 中的“添加应用程序洞察遥测...”命令?
  • 就是这样,不是我猜的后端,而是_Layout.cshtml中的JS sn-p。非常感谢您为我指明了正确的方向!
  • 显然我应该添加这个作为答案,所以 alexb 没有窃取我的互联网积分! :P
  • @JohnGardner 一句话答案与完整解决方案没有可比性;-)
  • @HelloWorld 好吧,是的,我会发布更多,我在问一个澄清问题,你不能在答案中做到这一点。此外,答案已被编辑为比原来的内容更多:P

标签: c# asp.net azure-application-insights


【解决方案1】:

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 的更新版本中,您现在可以通过config object 控制 cookie 以及用户信息和会话缓冲区(用于限制对 AI 的请求的速率)的本地存储:

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

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

  • 会话更新时间 - 会话重置前经过了多少时间 无活动(默认为 30 分钟)
  • 会话过期时间 - 多少时间 即使有活动也会在会话重置之前经过(默认为 24​​ 小时)。

要更改它们,请在此 sn-p 中设置检测密钥的位置旁边设置以下值:

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

    });

【讨论】:

  • 这解决了我的问题并教会了我比我认为我能做的更多的事情。非常感谢您的广泛回答,代码部分刚刚完成,非常感谢
  • 所以没有办法设置例如AuthenticatedUserId 和 AccountId server-side,并初始化cookie server-side? Application Insights 是不是错过了第一个请求(因为 cookie 仅在客户端设置以响应第一个请求)?
  • 现在有禁用 cookie(和本地存储)的选项,请参阅:github.com/Microsoft/ApplicationInsights-JS/blob/master/… 将 isCookieUseDisabled 和 isStorageUseDisabled 设置为 false。
  • 嗨,我在哪里添加 isCookieUseDisabled?到哪个文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
相关资源
最近更新 更多