我正在尝试调试一个dotnet core 5 Blazor Server应用程序,该应用程序在部署到本地IIS服务器时消耗了IIS服务器的所有内存。
但是,目前还不清楚是什么导致了内存泄漏。
据我所知,安装Application Insights应该创建能够确定问题所在所需的日志。
所以我在项目中添加了App Insights。当我运行项目时,我可以看到在Visual Studio中创建的App Insights Events。
但是,当应用程序发布到生产IIS服务器时,问题就发生了。我不明白如何从Prod服务器查看应用程序洞察数据。是否正在生成日志?
我试图找到这方面的数据,但我发现的大部分是Azure应用程序洞察。但是该应用程序不能在Azure上运行。
那么我如何从Prod服务器查看日志呢?或者有更好的方法来调试这个问题?
所以我在项目中添加了App Insights。当我运行项目时,我可以看到在Visual Studio中创建的App Insights Events。
但是,当应用程序发布到生产IIS服务器时,问题就发生了。我不明白如何从Prod服务器查看应用程序洞察数据。是否正在生成日志?
让我弄清楚:你已经创建了一个Azure应用程序洞察资源。当您使用调试器运行项目时,您可以看到遥测正在生成。
- 正确吗?
- 你如何验证遥测正在生成?
如果它在本地工作,它应该在部署到IIS时工作。您的应用程序将生成遥测数据,并将其发送到Azure Cloud中的application Insights资源。在这种情况下,你的应用程序是否实际上托管在Azure上并不重要。
如果您没有看到遥测,请确保在生产环境中正确设置了仪表键。
有几种方法可以探索发送到Application Insights的遥测数据:
- https://learn.microsoft.com/en-us/azure/azure-monitor/app/diagnostic-search
- https://learn.microsoft.com/en-us/azure/azure-monitor/app/overview-dashboard
- https://learn.microsoft.com/en-us/azure/azure-monitor/logs/queries
一些研究之后,我发现这个问题的答案。
你可以使用Azure Application Insights查看从asp.net core应用程序收集的数据,无论应用程序实际运行在何处。它可以在本地运行,也可以在云中运行。
的工作方式是在你的应用程序中,你添加一个"连接字符串"对于应用程序的见解。连接字符串是您创建的应用程序中可用的见解资源在Azure。
然后将此连接字符串添加到应用程序中的代码中。然后,当应用程序运行时,无论是在Visual Studio中还是从发布位置,应用程序都会通过端点将数据发送到Azure资源。
连接字符串看起来像这样:
InstrumentationKey=000000-0000-0000-0000-000000000;IngestionEndpoint=https://eastus2-0.in.applicationinsights.azure.com/
然后添加如下代码:
var options = new ApplicationInsightsServiceOptions { ConnectionString = @"InstrumentationKey==000000-0000-0000-0000-000000000;IngestionEndpoint=https://eastus2-0.in.applicationinsights.azure.com/" };
services.AddApplicationInsightsTelemetry(options: options);
有许多方法可以实际添加连接字符串。查看这里的文档
然后登录到Azure以查看收集的数据。