Azure Application Insights是可扩展的应用程序性能管理(APM)服务,可用于监视性能,检测异常并实时诊断Web应用程序的性能问题。 如果使用的是.NET Core,则可以在.NET Core支持的多个平台(Windows,Linux或Mac)上使用Application Insights。
请注意,您可以将Application Insights用于以各种技术(包括.NET,JavaScript,Node.js和Java以及.NET Core)构建的应用程序。 而且,无论这些应用程序是否托管在云中,您都可以使用Application Insights。 在本文中,我们将研究如何在ASP.NET Core应用程序中将数据记录到Azure Application Insights。
若要使用本文中说明的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019 。
您还将需要一个Azure帐户,因为我们会将日志消息推送到Azure中的Application Insights。 如果您没有Azure帐户,则可以在此处创建一个免费的Azure帐户 。 在以下各节中,我们将研究如何将Application Insights配置为ASP.NET Core中默认记录器的接收器之一。
创建一个ASP.NET Core API项目
首先,让我们在Visual Studio中创建一个ASP.NET Core项目。 假设系统中已安装Visual Studio 2019,请按照下面概述的步骤在Visual Studio中创建一个新的ASP.NET Core项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
- 点击下一步。
- 在“配置新项目”窗口中,指定新项目的名称和位置。
- 单击创建。
- 在“创建新的ASP.NET Core Web应用程序”窗口中,选择.NET Core作为运行时,然后从顶部的下拉列表中选择ASP.NET Core 2.2(或更高版本)。
- 选择“ API”作为项目模板以创建新的ASP.NET Core API应用程序。
- 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
- 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
- 单击创建。
这将在Visual Studio中创建一个新的ASP.NET Core API项目。 我们将在本文的后续部分中使用该项目。
安装NuGet软件包以获取Application Insights
现在,我们已经在Visual Studio中创建了一个ASP.NET Core API项目,接下来应该做的是安装必要的NuGet包。 为此,请在“解决方案资源管理器”窗口中选择项目,然后右键单击并选择“ Manage NuGet Packages ...”。 然后从NuGet软件包管理器安装以下软件包:
- Microsoft.ApplicationInsights.AspNetCore
- Microsoft.Extensions.Logging.ApplicationInsights
或者,您可以通过输入以下命令从NuGet软件包管理器控制台安装这些软件包:
Install-Package Microsoft.ApplicationInsights.AspNetCore
Install-Package Microsoft.Extensions.Logging.ApplicationInsights
在下一节中,我们将建立应用程序与Application Insights的连接。 您将需要一个Azure帐户继续进行下一步。
在AppSettings.json中配置到Application Insights的日志记录
我们将需要一个检测密钥来连接到Azure中的Application Insight并记录数据。 我们将在AppSettings.json文件中指定它。 这是AppSettings.json文件的内容如下所示:
{
"Logging": {
"LogLevel": {
"Default": "Information"
},
"ApplicationInsights": {
"InstrumentationKey": "Write your instrumentation key here"
}
},
"AllowedHosts": "*"
}
在Program类中配置到Application Insights的日志记录
下一步是在Program.cs文件的Program类中配置日志记录。 以下代码段显示了如何实现此目的。
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilderForApplicationInsights(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilderForApplicationInsights(string[] args)
{
var webHostBuilder = WebHost.CreateDefaultBuilder(args);
webHostBuilder.UseStartup<Startup>()
.ConfigureLogging((hostingContext, loggingBuilder) =>
{
var loggingConfiguration = hostingContext.Configuration.GetSection("Logging");
if (!string.IsNullOrWhiteSpace(
loggingConfiguration["ApplicationInsights:InstrumentationKey"]))
{
var logLevel = loggingConfiguration["LogLevel:Default"];
loggingBuilder.AddApplicationInsights(loggingConfiguration
["ApplicationInsights:InstrumentationKey"]?.ToString() ?? "");
loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>
("", Enum.Parse<LogLevel>(logLevel ?? "Information"));
loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>
("Default", Enum.Parse<LogLevel>(logLevel ?? "Warning"));
}
});
return webHostBuilder;
}
}
在启动类中配置到Application Insights的日志记录
在ConfigureServices方法中编写以下代码,以将ApplicationInsightsTelemetry添加到请求处理管道。
var instrumentationKey = Configuration.GetValue<string>
("ApplicationInsights:InstrumentationKey");
services.AddApplicationInsightsTelemetry(instrumentationKey);
在.NET Core中的控制器方法中创建日志
以下代码清单显示了如何从控制器记录数据。
public class ValuesController : ControllerBase
{
private readonly ILogger _logger;
public ValuesController(ILogger<ValuesController> logger)
{
_logger = logger;
}
[HttpGet]
public ActionResult<string> Get()
{
_logger.LogInformation("This is a test for checking the logger"
+ DateTime.Now.ToLongTimeString());
return "Hello World";
}
}
Application Insights可以监视请求率,响应时间,异常,失败率,甚至可以监视您在应用程序代码中编写的自定义指标。 此外,Application Insights在多种平台上支持多种语言的应用程序,并且可与多种日志记录框架一起使用。 在以后的文章中,我们将研究如何为Serilog使用接收器,该接收器能够将日志数据写入Application Insights。
From: https://www.infoworld.com/article/3440684/how-to-use-azure-application-insights-in-aspnet-core.html