如何在Azure中监控Microsoft.Identity.Web内存令牌缓存的使用量
关于Microsoft.Identity.Web内存令牌缓存的监控问题解答
首先明确结论:AddInMemoryTokenCaches 默认没有内置的Azure应用洞察(App Insights)直接对接逻辑,但可以通过自定义埋点等方式实现用量监控,且该缓存方案自带过期清理机制,不会无限制堆积令牌。
以下是具体的监控实现途径:
- 自定义事件埋点上报App Insights
Microsoft.Identity.Web开放了令牌缓存的生命周期回调接口,你可以在配置令牌缓存时订阅AfterAccess等回调事件,触发时获取当前缓存的条目数、状态变更等数据,调用App Insights的TelemetryClient上报对应指标即可,参考实现代码如下:using Microsoft.ApplicationInsights; using Microsoft.AspNetCore.Authentication.OpenIdConnect; services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(options => { options.AfterAccess = async ctx => { if (ctx.HttpContext == null) return; var telemetryClient = ctx.HttpContext.RequestServices.GetRequiredService<TelemetryClient>(); // 上报当前内存令牌缓存的条目数 telemetryClient.TrackMetric("InMemoryTokenCache_ItemCount", ctx.Cache.Count); // 可选上报缓存变更、命中类事件 if (ctx.HasStateChanged) { telemetryClient.TrackEvent("TokenCache_ItemUpdated"); } await Task.CompletedTask; }; }); - 复用ASP.NET Core内置内存缓存指标
AddInMemoryTokenCaches底层依赖ASP.NET Core原生的IMemoryCache实现,你可以直接将IMemoryCache的全局指标(总条目数、缓存占用大小、命中率)统一上报到App Insights,也能间接反映令牌缓存的资源占用情况。
注意:
AddInMemoryTokenCaches是进程内缓存,如果你在Azure上采用多实例部署应用,每个实例的令牌缓存互相独立,监控指标需要按实例维度拆分统计。另外该缓存默认会自动清理过期的令牌条目,无需担心无限制堆积的问题。
内容的提问来源于stack exchange,提问作者dzookatz
相关产品推荐
相关产品推荐

