azure - 如何停止从 Azure Functions 中的特定函数发送遥测数据?

标签 azure .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"
        }
    }
}

但是,我仍然在 Application Insights 中看到通过调用/probe 发送的遥测数据:

Application Insights Screenshot

我做错了什么?

最佳答案

12/09 更新:

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

我发现另一种方法可以避免它,您可以为所有其他功能应用程序指定日志级别;但对于您不想记录到应用程序见解的函数应用程序,请勿为其指定日志级别。然后你可以将默认指定为,这样就可以完全避免这个函数应用登录应用洞察。

这是一个例子:

我有 3 个函数应用,并且我不希望名为 HttpTrigger1 的函数登录应用程序洞察。因此,在 host.json 中,我将其他 2 个函数应用的 loglevel 指定为 Trace:BlobTrigger1QueueTrigger1 。并将默认设置为

我这边的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 function -> Monitor中,创建了一个空日志(见下面的截图),这个“空日志”意味着没有日志写入application Insights(你可以只需在 Application Insights 中编写一个查询来确认这一点。我使用日志查询对其进行了测试,在 Application Insights 中没有显示该指定 Azure 函数的日志。

enter image description here

关于azure - 如何停止从 Azure Functions 中的特定函数发送遥测数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59131420/

相关文章:

Azure cosmosdb 迁移工具多个集合

c# - Visual Studio 2019 - msvsmon.exe 意外退出。 .net core 1.1 项目的调试将中止

c# - ThreadPool.QueueUserWorkItem preferLocal 有什么用?

azure - 由于未设置连接字符串,无法运行 azure 函数并出现错误

python-3.x - Azure函数无法导入某些python包

asp.net - "Add controller"的问题,MVC 4

ios - Azure AD Graph 获取用户 REST API 调用无法返回用户实体缩略图字段

Azure AD 应用程序注册区分角色

c# - Dotnet Core 3.1 升级错误 - 方法 'GetValidationVisitor' 没有实现

c# - 无法发布 Azure 函数