Azure Application Insights 不显示数据

Posted

技术标签:

【中文标题】Azure Application Insights 不显示数据【英文标题】:Azure Application Insights not showing data 【发布时间】:2022-01-11 14:20:48 【问题描述】:

我有一个作为 Azure 应用服务运行的 ASP.NET Core 应用程序。 Azure Application Insights 已启用(我关注了these instructions)。问题是我在 Azure 门户上的 Azure Insights 实例没有显示任何有用的数据,除了实时指标 (see the screenshot)。如您所见,屏幕截图中有多个请求和自定义事件。

但是,当我打开事务搜索时,它什么也没有显示 (see the screenshot)。 活动页面也是空的 (see the screenshot)。

到目前为止,我仔细检查了一个 InstrumentKey。我也尝试使用 ConnectionString 代替 InstrumentKey,但没有帮助。

我的应用在 .NET Core 3.1 上运行。我安装了最新版本的 Microsoft.ApplicationInsights.AspNetCore 包,即 2.19.0。

这是在 Program.cs 中配置日志记录的方式:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .ConfigureLogging(builder =>
            
                builder.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Information);
            );

下面是 Startup.cs 的代码:

services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions 
        
            ConnectionString = Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING")
        );

logLevel也在appsettings.json中配置:

"Logging": 
"LogLevel": 
  "Default": "Warning"
,
"ApplicationInsights": 
  "LogLevel": 
    "Default": "Information"
  

更新: 拥有更多权限的管理员可以看到所有数据,包括事件、性能操作等。所以我想这与权限有关。虽然奇怪的是我没有看到任何警告信息。管理员为我分配了更多角色 (see the screenshot),但没有任何区别。

我将不胜感激有关此问题的任何帮助!

【问题讨论】:

尝试记录一些虚假警告(使用 ILogger),或将日志级别降低到信息,并记录信息级别消息并检查是否出现 - 通常需要 3 到 5 分钟才能出现在App Insights 门户页面/图表。 阅读这个常见问题解答的特别section。 @AnandSowmithiran,感谢您的建议,但没有帮助。我什至将我的日志级别设置为 Trace。 Live Metrics 页面现在在 Sample telemetry 部分中显示了许多 Trace 事件。所以看起来 Application Insights 正在接收数据,但没有保存它...... 查看此SO question 的答案,有时未正确输入 Instrumentation 密钥。 您是在单独使用ILogger 还是(也)TelemetryClient?您可以发布设置检测密钥和日志级别的代码/配置吗? 【参考方案1】:

在把我头上几乎所有的头发都扯掉之后,我终于解决了这个问题! 原来 Azure Application Insights 的实例已链接到属于我无权访问的资源组的日志分析工作区。所以日志被正确存储,但我没有阅读它们的权限。 我的管理员通过创建一个新的 Azure Application Insights 实例解决了这个问题,该实例链接到我的资源组中的日志分析工作区。 对于不熟悉 Log Analytic Workspace 的任何人 - 您可以在创建 Azure Application Insights 的新实例时指定它 (see the screen)。

感谢大家帮助我!

【讨论】:

【参考方案2】:

我也试过了,可以看到门户里面的日志。

正如Peter Bons 建议的那样,确保您在控制器中使用ILogger

这是我遵循的步骤。

我已经从GitHub 下载了一个示例项目,然后在 Visual Studio 中提取打开的项目并使用 Application insight telemetry 进行配置。将最新的 Microsoft.ApplicationInsights.AspNetCore 更新到 2.19.0

并在我的 appsettings.json 中添加了检测密钥,该密钥从 Azure 门户>Application insight(my applnsight)>overview复制而来。


  "Logging": 
    "ApplicationInsights": 
      "LogLevel": 
        "Default": "Debug",
        "Microsoft": "Error"
      
    ,
    "LogLevel": 
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    
  ,
  "AllowedHosts": "*",
  "ApplicationInsights": 
    "InstrumentationKey": "mykey",
    "ConnectionString": "InstrumentationKey=6xxxxxx-xxxxx-xxxx-xxxx-0000000xxxxxxxx.in.applicationinsights.azure.com/"
  

Ilogger 我的controller.cs 中的配置
namespace ApplicationInsightsTutorial.Controllers

    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    
        private static readonly string[] Summaries = new[]
        
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        ;

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        
            _logger = logger;
        

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        

            var iteracion = 4;

            _logger.LogDebug($"Debug iteracion");
            _logger.LogInformation($"Information iteracion");
            _logger.LogWarning($"Warning iteracion");
            _logger.LogError($"Error iteracion");
            _logger.LogCritical($"Critical iteracion");

            try
            
                throw new NotImplementedException();
            
            catch (Exception ex)
            
                _logger.LogError(ex, ex.Message);
            

            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            )
            .ToArray();
        
    

startup.cs 中添加

 public void ConfigureServices(IServiceCollection services)
        
            services.AddControllers();
            services.AddApplicationInsightsTelemetry();//telemetry added
        

完成上述所有配置后,运行应用程序并导航到 Azure 门户以检查日志。

确保您已在我的controller.cs 中提供了您想要检查的日志信息。

从日志中我们也可以看到带有代码行的异常/错误。 以下是一些截图供参考:

更多信息请参考SO Thread。

【讨论】:

以上是关于Azure Application Insights 不显示数据的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 Service Fabric Actor Reliable 服务中添加 Application Insight

创建第一个azure hadoop insight

在 Azure 中构建 App Insight 以监控 Linux 服务器中的 Inotify 服务

Application Insight 中的范围日志记录

Jmeter 中的 Application Insight Cookie 处理

在 Application Insight 和 Postman 中获取时间差异