我在 v2 SDK 上有一个 3 周前的函数,并使用开箱即用的 App Insights 支持,即只需设置环境变量并......神奇。
我确实读到,默认情况下它不会将 Information 级别日志发送到 AppInsights,这看起来是正确的,因为我看不到任何信息跟踪,但我确实看到我使用自定义消息注销时偶尔出现的错误。
但对于指标来说,它是破碎的。我可以在日志中看到一些遥测数据。很奇怪。
看。
现在看看这些奇怪的日志。
...看到那些与我的代码中的
n/a
行相匹配的 LogMetric
了吗?
当我明确搜索其中之一时,什么也没找到。
如果我深入研究那些
n/a
日志。
...它们很空。
是我的问题还是这一切都很可疑?
如何以有效的方式记录函数中的指标?
首先,对于指标,您的意思是自定义指标吗?如果是,那么您应该在应用见解的
customMetrics
表中找到它。
第二,您使用什么方法发送指标?从你的代码来看,
this.Logger?.LogMetric
方法的实现是什么?
要发送指标,您可以使用 TrackMetric(刚刚使用此方法测试,并且有效)或 GetMetric 方法。
使用 TrackMetric(已弃用,但仍然可以使用)/ GetMetric(推荐)方法的示例代码:
TelemetryConfiguration.Active.InstrumentationKey = "your key";
TelemetryClient client = new TelemetryClient();
client.TrackMetric("my metric", 60);
client.GetMetric("my metric").TrackValue(89);
client.Flush();
就我而言,host.json 文件中的设置排除了访问 Application Insights 的指标。指标正在
Information
级别记录,我最初将我的配置为 Warning
级别。
"logging": {
"logLevel": {
"Function.<function name>": "Information", //<--won't see metrics if set to Warning
...
请参阅此处,了解有关配置日志记录级别的更多信息。
嗯,一开始,这可能会让人感觉断章取义,但这就是我身上发生的事情。我的代码绝对正确,但问题是我的 Application Insights 连接到了一个 Azure Log Analytics 工作区,该工作区连接了许多其他 App Insights,因此会吸收大量数据。而且,Log Analytics 工作区的每日上限为 5 GB。
因此,即使您的代码正确但 Log Analytics 工作区有任何限制,您也不会收到任何错误,并且您的代码将无缝工作,但应用程序中不会显示任何痕迹、信息、错误、事件等见解。
建议检查 App Insights 或 Log Analytics 工作区中是否启用了任何此类设置。另一件可以检查的事情是网络隔离,如果虚拟网络访问配置部分的两个选项都有是,有时会阻止来自公共来源的遥测。