如何停止从Azure函数中的特定函数发送遥测数据?
在我的函数应用程序(v2)中,我有一个函数探测器,用于测试我的应用程序的运行状况,每隔几秒钟调用一次。我想停止记录从特定功能到应用程序洞察的任何内容 函数探测器如下所示:如何停止从Azure函数中的特定函数发送遥测数据?,azure,.net-core,azure-functions,azure-application-insights,Azure,.net Core,Azure Functions,Azure Application Insights,在我的函数应用程序(v2)中,我有一个函数探测器,用于测试我的应用程序的运行状况,每隔几秒钟调用一次。我想停止记录从特定功能到应用程序洞察的任何内容 函数探测器如下所示: using System; using System.IO; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using MyApp.Api.Hello;
namespace MyApp.Api
{
public static class HealthFunctions
{
[FunctionName("probe")]
public static IActionResult Probe(
[HttpTriggerAttribute(AuthorizationLevel.Anonymous, "get")] HttpRequest request,
ILogger logger)
{
return new OkResult();
}
}
}
和host.json:
{
"version": "2.0",
"extensions": {
"http": {
"routePrefix": ""
}
},
"logging": {
"logLevel": {
"Function.probe": "Error",
"default": "Trace"
}
}
}
但是,我仍然在调用/探测发送的应用程序洞察中看到遥测:
我做错了什么?您可以在Azure Portal上的
应用程序设置中删除APPINSIGHTS\u INSTRUMENTATIONKEY
更新12/09:
是的,您的评论是正确的,仍然有一些关于它的消息可以登录到application insights。但是由log.LogInformation()
方法记录的任何消息都不应写入应用程序洞察
我发现另一种方法可以避免它,你可以为所有其他功能应用指定日志级别;但对于不想登录到application insights的函数应用程序,请不要为其指定loglevel。然后,您可以将默认值指定为无,这可以完全避免此功能应用程序登录到application insights
以下是一个例子:
我有3个函数应用程序,我不希望名为HttpTrigger1的函数登录到application insights。因此,在host.json中,我为其他两个函数应用程序指定日志级别到跟踪:BlobTrigger1和QueueTrigger1。并将默认值设置为None
我这边的host.json:
{
"version": "2.0",
"extensions": {
"http": {
"routePrefix": ""
}
},
"logging": {
"logLevel": {
"Function.BlobTrigger1": "Trace",
"Function.QueueTrigger1": "Trace",
"default": "None"
}
}
}
截图:
它按预期工作,没有来自“HttpTrigger1”的日志写入应用程序洞察
要禁用从特定azure函数到application insights的日志记录,可以在host.json中为该azure函数指定日志级别为None(在您的示例中,它是probe)。示例host.json如下所示:
{
"version": "2.0",
"extensions": {
"http": {
"routePrefix": ""
}
},
"logging": {
"logLevel": {
"Function.probe": "None",
"default": "Trace"
}
}
}
那么只有名为“probe”的函数无法向application insights发送数据
这里有一件事您应该注意,在指定的azure函数->监视器中,创建了一个空日志(请参见下面的屏幕截图),这个“空日志”意味着没有日志写入应用程序洞察(您可以在application insights中编写一个查询来确认这一点。我使用log query对其进行了测试,application insights中未显示指定azure函数的任何日志)
我不知道您需要它,但您也可以将其指定为功能应用程序的配置
您需要根据
对我来说,添加一个名为“AzureFunctionsJobHost\uuuuuuu logging\uuuuu logLevel\uuuuuu Function.FUNCTIONNAME”的配置键是有效的:“错误”
功能应用程序中是否有多个功能?是的,probe是功能应用程序中的许多功能之一。您好,正如您所说,您希望停止将此功能记录到Application insights。但请注意,对于功能应用程序,记录在本地的host.json文件中配置。在门户上,它在应用程序集中配置tings.因此,如果您想停止将特定函数记录到application insights,同一函数应用程序下的其他函数将受到影响。@BowmanZhu AFAIK host.json允许每个函数设置。您好,您确定host.json允许每个函数设置吗?正如文档所述,host.json定义了全局配置选项,并将影响所有函数设置函数应用程序中的函数。如果您知道如何在host.json文件中定义每个函数,它在门户网站上是类似的。谢谢。正如我在评论中所说,我希望禁用或减少从一个函数而不是应用程序中的所有函数发送的遥测。@Victor Hi,文档所说的是“控制函数的日志记录行为”应用程序,包括应用程序洞察。它只有这么一小部分,我想我应该读对了。你从哪里得到的文档说明你可以设置单个函数?请注意,函数应用程序并不等于单个函数。你是这么说的吗?“版本2.x遵循ASP.NET核心布局进行日志类别筛选。这使您可以筛选特定函数的日志记录。”感谢您的回答。我尝试了None(并将函数名的大小写改为Probe,将host.json改为function.Probe)。我得到了相同的“No results”(无结果)“在调用结果中,但当我在Application Insights中搜索操作Id时,我仍然可以看到问题中显示的每个请求的三个事件(请求、详细信息和信息).@Victor,请查看帖子中的更新部分,您可以使用其他方法来实现它。@Victor,如果您在这方面还有任何问题,请告诉我:)。感谢更新。我尝试将每个函数都列为白名单,它的工作原理是,没有列为白名单的函数不会显示在应用程序洞察日志中,但也会杀死3个(有用)Azure函数注入的白名单函数中的事件,如请求事件、“请求成功匹配…”和“正在执行HttpStatusCodeResult…”。如果您知道如何将这些事件保留在白名单函数中,请将其添加到答案中,否则请告诉我,我将接受此答案并授予奖金。@Victor,我将对您提到的内容进行研究,稍后再通知您。