You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Cache for Redis的Application Insights中查看会话状态详细日志

如何在Application Insights中查看Azure Cache for Redis存储的ASP.NET会话ID及详细状态

可以实现。默认情况下Application Insights不会自动捕获Redis中存储的会话细节,需要通过自定义遥测和代码扩展来实现,具体方法如下:

  • 自定义捕获会话ID及相关事件
    在ASP.NET应用的会话生命周期节点(比如Session_Start、控制器方法中),获取当前会话ID,通过Application Insights的TelemetryClient发送自定义事件。示例代码:

    using Microsoft.ApplicationInsights;
    using System.Collections.Generic;
    
    // 示例:在Global.asax的Session_Start方法中
    protected void Session_Start(object sender, EventArgs e)
    {
        var telemetry = new TelemetryClient();
        telemetry.TrackEvent("NewSessionCreated", new Dictionary<string, string>
        {
            { "SessionId", Session.SessionID },
            { "IsNewSession", Session.IsNewSession.ToString() }
        });
    }
    
  • 跟踪Redis会话的读写操作
    若需要查看会话数据的读写细节,可以在Redis会话操作的逻辑中添加遥测记录。比如使用StackExchange.Redis时,在读写会话数据后发送依赖遥测:

    using Microsoft.ApplicationInsights;
    using StackExchange.Redis;
    
    public class CustomRedisSessionStore
    {
        private readonly IDatabase _redisDb;
        private readonly TelemetryClient _telemetry;
    
        public CustomRedisSessionStore(IConnectionMultiplexer redis)
        {
            _redisDb = redis.GetDatabase();
            _telemetry = new TelemetryClient();
        }
    
        public void WriteSession(string sessionId, byte[] data)
        {
            var stopwatch = System.Diagnostics.Stopwatch.StartNew();
            var success = _redisDb.StringSet(sessionId, data, TimeSpan.FromMinutes(30));
            stopwatch.Stop();
    
            _telemetry.TrackDependency(
                dependencyTypeName: "Redis",
                dependencyName: "WriteSessionData",
                data: sessionId,
                startTime: DateTime.Now,
                duration: stopwatch.Elapsed,
                success: success
            );
        }
    }
    
  • 在Application Insights中查询会话数据
    发送自定义遥测后,进入Application Insights门户的日志页面,使用Kusto查询语句筛选会话相关数据。比如查询所有会话创建事件:

    customEvents
    | where name == "NewSessionCreated"
    | project Timestamp, SessionId = customDimensions.SessionId, IsNewSession = customDimensions.IsNewSession
    | order by Timestamp desc
    

    若要查看Redis会话的读写记录,可查询dependencies表:

    dependencies
    | where type == "Redis" and name == "WriteSessionData"
    | project Timestamp, SessionId = data, Duration, Success
    
  • 优化建议

    • 确保TelemetryClient已在应用中正确初始化(ASP.NET Core可通过依赖注入获取)。
    • 避免高频发送遥测,可根据业务需求调整捕获范围,防止产生不必要的成本和性能开销。
    • ASP.NET Core中可通过自定义中间件,全局拦截会话访问事件,统一处理遥测发送。

内容的提问来源于stack exchange,提问作者TeaAliy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:47:22