我们在 ASP.NET Core 3.1 网站中使用 ILogger,使用 Microsoft.ApplicationInsights.AspNetCore 包,版本 2.14。我们正在尝试启用将信息性消息记录到 App Insight 中,例如。_logger.LogInformation("这里的信息')
在 ConfigureServices 中启动时,我们启用 App Insights:
services.AddApplicationInsightsTelemetry();
Run Code Online (Sandbox Code Playgroud)
我们的 appsettings.json 文件中有以下内容:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ApplicationInsights": {
"InstrumentationKey": "12345678-1234-5678-1234-1234567890ab",
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
Run Code Online (Sandbox Code Playgroud)
它正确获取应用程序洞察键(我们确实获得了正常指标、日志条目,例如异常),但是我们对 logger.LogInformation("Info here") 的调用都没有被发送/记录在 App Insight 仪表板中。
我发现了这个类似的问题:
ILogger 不尊重 Application Insights 的日志级别
但是答案仍然没有真正解决如何能够从 appsettings.json 文件更改日志级别与将日志级别硬编码到代码中。
从文档来看,这似乎应该“正常工作”,但似乎没有。
? https://docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger#control-logging-level
我们哪里错了?
我试图找出为什么我的一些函数响应经常需要 2 秒以上的时间,并且我注意到,在这些请求上,应用程序见解端到端事务详细信息每个依赖项调用之间存在很大的差距,这是我失去了所有的时间。
azure azure-application-insights azure-functions azure-cosmosdb appinsights
我已经在 Asp.net core 应用程序中设置了应用程序见解。我的所有 Web API 请求都会在应用程序洞察中进行跟踪,如果我遇到任何失败,我可以简单地在Failures
部分中找到它们。
但是,我还运行了 Hangfire 后台作业,如果它们失败,我无法在应用程序洞察中找到它们。另外,我有警报规则Whenever the total http server errors is greater than or equal to 1 count
,我不确定在这种情况下是否会出现hangfire 5xx 错误。
那么有什么方法可以跟踪 Hangfire 作业失败并获得相关通知吗?
为什么应用洞察在发布后没有自动开启?
执行自动发布后,我在导航到门户中的应用程序见解时收到以下信息:
以下是我在 ARM 模板中定义的方式:
{
"type": "microsoft.insights/components",
"kind": "web",
"name": "[parameters('webAppName')]",
"apiVersion": "2015-05-01",
"location": "[parameters('location')]",
"tags": {
"[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', parameters('webAppName'))]": "Resource",
"displayName": "[parameters('webAppName')]"
},
"properties": {
"Application_Type": "web"
},
"dependsOn": []
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?为什么应用洞察没有自动开启?
请注意,我添加了以下应用程序设置:
我有一个 C# .NET Core Azure Function App,并且使用 ILogger 将日志发送到 Application Insights。到目前为止,这运作良好。
函数头:
public static void Run([TimerTrigger("0 30 * * * *")] TimerInfo myTimer, ILogger log, ExecutionContext context)
ILogger的使用:
log.LogInformation($"MyFunction trigger function executed at: {DateTime.Now}");
在 App Insights 中,我看到日志包含默认信息,例如它来自哪个 Function App,以及message
包含上述字符串的日志。
但是,现在我想记录自定义日志。我有一个IEnumerable<IDictionary<string, string>>
,我希望列表中的每个字典元素都是一个单独的日志。理想情况下,我可以有一个日志,其中每个字段都是字典中的键,其值是相应的值。或者,我可以在日志中使用某种 customDimensions 字段,该字段将是一个包含列表中 1 个字典中的所有键值对的对象。
目的是使日志在 Kusto 中易于查询。我想避免在 App Insights 中查询它们时必须解析它们。
笔记:
我查看了许多其他类似的帖子,但似乎没有一个得到完整的回答。
c# azure-application-insights azure-functions ilogger appinsights
我使用以下查询从使用 AppInsights 失败并返回 400 的请求中获取 operationId 值:
requests
| project timestamp, id, operation_Name, success, resultCode, duration, operation_Id, cloud_RoleName, invocationId=customDimensions['InvocationId']
| where cloud_RoleName =~ 'xxxx' and operation_Name == 'createCase' and resultCode == 400
| order by timestamp desc
Run Code Online (Sandbox Code Playgroud)
我在以下查询中使用这些 operationId 值来获取所发生事件的日志:
traces
| union exceptions
| where operation_Id == '35edbc7c13f7ac4c85fa0b8071a12b72'
| order by timestamp asc
Run Code Online (Sandbox Code Playgroud)
有了这个,我得到了我想要的信息,但我需要多次编写和执行查询,所以我尝试在两个查询之间进行联接,但没有成功,因为我不是查询 AppInsights 的专家,而且我不确定关于如何加入工会,你能帮我吗?
这是一个很遥远的事情,谷歌上似乎没有任何接近的东西,但我想知道是否有可能阻止某些异常被记录到 App Insights 中?
我们的代码库中有很多地方针对用户操作引发了异常,但这些异常并不是我们想要在 App Insights 中显示的真正异常。
然而,改变发生这种情况的所有区域将需要很长时间,并且需要大量测试,因为我们需要确保逻辑流程不改变
目前我们引发了 LocationDomainException 类型的异常,我想如果我遇到不想记录异常的地方,我们可以更改为 LocationDomainUserError
我需要停止记录此异常或从其继承的任何异常
我使用 .NET Core 3.1。
我知道这有点反模式,但有人尝试过吗?
我正在尝试编写一个 Kusto 查询来查找在由另一列分组的列中具有最大值的记录,但还需要第三个(剩余)列。
假设有三列 A(时间戳)B(impvalue:数字)和 C(另一个值:字符串)。我需要获取按 C 和最大时间戳分组的记录及其相应的 B 列。
在 Sql 中,我很清楚如何使用自连接来做到这一点。我是 Kusto 的新手,我尝试了一些与 summarise、join 和 top 运算符的组合,但无法使其工作。
例子:
输出:
appinsights ×8
azure ×3
c# ×3
asp.net-core ×2
kql ×2
.net-core ×1
azure-devops ×1
exception ×1
hangfire ×1
ilogger ×1
join ×1
telemetry ×1