如何停止从Azure功能中的特定功能发送遥测?

时间:2019-12-02 00:59:55

标签: .net-core azure-functions azure-application-insights

在我的函数应用程序(v2)中,我有一个函数 probe ,该函数用于测试我的应用程序的运行状况,每隔几秒钟就会调用一次。我想停止从该特定功能到Application Insights的所有记录。

函数 probe 看起来像这样:

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"
        }
    }
}

但是我仍然通过调用/ probe在Application Insights中看到遥测:

Application Insights Screenshot

我做错了什么?

3 个答案:

答案 0 :(得分:3)

更新12/09:

是的,您的评论是正确的,仍有一些有关它的消息可以登录到应用程序见解中。但是任何通过log.LogInformation()方法记录的消息,都不应写入应用程序见解中。

我发现可以避免这种情况的另一种方法,您可以为所有其他功能应用程序指定日志级别;但不要针对您不想登录到应用程序见解的功能应用程序,请勿为其指定日志级别。然后,您可以将默认指定为,这可以完全避免该功能应用登录到应用洞察中。

这里是一个例子:

我有3个功能应用程序,并且我不希望名为 HttpTrigger1 的功能登录到应用程序见解中。因此,在host.json中,我将其他两个功能应用程序的 loglevel 指定为 Trace BlobTrigger1 QueueTrigger1 。并将默认设置为

在我身边的host.json:

{
  "version": "2.0",
  "extensions": {
    "http": {
      "routePrefix": ""
    }
  },
  "logging": {
    "logLevel": {
      "Function.BlobTrigger1": "Trace",
      "Function.QueueTrigger1": "Trace",
      "default": "None"
    }
  }
}

屏幕截图:

enter image description here

它按预期工作,没有将来自“ HttpTrigger1”的日志写入Application Insights。


要从特定的azure函数禁用日志记录到应用程序见解,请在host.json中为该azure函数指定logLevel为 None (在您的情况下为 probe )。示例host.json如下所示:

{
    "version": "2.0",
    "extensions": {
        "http": {
            "routePrefix": ""
        }
    },
    "logging": {
        "logLevel": {
            "Function.probe": "None",
            "default": "Trace"
        }
    }
}

然后只有名为“ probe” 的功能无法将数据发送到应用程序见解。

这是您应注意的一件事,在指定的azure函数->监视器中,创建了一个空日志(请参见下面的屏幕快照),此“空日志”意味着没有日志被写入应用程序见解中(您可以只需在应用程序见解中编写一个查询来确认这一点。我使用日志查询对其进行了测试,在应用程序见解中未显示该指定的Azure函数的日志。

enter image description here

答案 1 :(得分:0)

我不知道您是否需要它,但是您也可以将其指定为功能应用程序的配置。

您需要根据the spec

重写密钥

对我来说,它的工作是添加一个名为"AzureFunctionsJobHost__logging__logLevel__Function.FUNCTIONNAME": "Error"

的配置密钥

答案 2 :(得分:-1)

您可以在Azure Portal的APPINSIGHTS_INSTRUMENTATIONKEY中删除Application Settings

enter image description here

enter image description here