如何在Azure功能本地使用Application Insights?

gab*_*mgp 5 azure azure-application-insights azure-functions

我正在使用接口ILogger来记录Azure函数中的事件.我可以在Azure中发布它并将其连接到Azure中的Application Insights.

我希望在开发过程中在Visual Studio中查看Application Insights中的日志.在这里,我可以看到这在ASP.NET核心Web应用程序中可以在Startup.cs中放入一些代码.使用VS 2017中的工具中的新项目模板,Azure功能可以实现类似的功能吗?

我正在使用VS 2017和Azure Function CLI 1.0.0-beta-100.

Raf*_*lin 15

因此,显然由于对库所做的更改,它会时不时地停止工作。所以这就是帮助我让它在 2019 年 4 月工作的原因。希望它会帮助其他人。

我没有添加任何日志或任何特定于我的函数应用程序的内容,现在对我来说,它几乎将所有控制台数据打印到我的应用程序洞察中的跟踪日志中(在本地,还不需要在 Azure 中配置任何内容)。此外,我的测试场景在 TargetFrameworknetstandard2.0和 AzureFunctionsVersion上运行2

首先需要将此 NuGet 包添加到函数应用中:https : //www.nuget.org/packages/Microsoft.Azure.WebJobs.Logging.ApplicationInsights/

然后,您必须将一个空文件添加到您的项目根目录:ApplicationInsights.config您不需要在构建或其他任何内容时将其复制到输出,这只是必须存在的内容,否则 Application Insights 将无法在本地运行。

然后你需要为你的APPINSIGHTS_INSTRUMENTATIONKEYin添加一些值local.settings.json。这是它与常规控制台应用程序不同的地方,即使检测键为空,它也可以在本地工作。在功能应用程序中,显然你需要在那里添加一些价值。它可以是任何东西,我已经这样做了并且效果很好:

"APPINSIGHTS_INSTRUMENTATIONKEY": "you-need-to-have-anything-at-all-here-so-it-will-work-locally"
Run Code Online (Sandbox Code Playgroud)

  • 这太疯狂了。到了 2021 年,这仍然是 Azure Functions 的解决方法。我浪费了几个小时来弄清楚为什么在使用 VS gui 添加本地应用程序洞察后遥测数据不会在本地显示。感谢您的解决! (3认同)
  • 哪些文档让您得出了这一发现?这些信息可以在任何地方在线获取吗?如果是这样,请您提供链接 (2认同)

mil*_*rac 8

将应用程序洞察(AI)遥测添加到Azure功能简单明了.

你只需要官方文档中的这两个步骤;

  1. 创建Application Insights实例.
    • 应用程序类型应设置为常规
    • 抓住仪器密钥
  2. 更新功能应用程序的设置
    • 添加应用设置 - APPINSIGHTS_INSTRUMENTATIONKEY = {Instrumentation Key}

然而,显而易见的是如何在本地开发功能应用程序时捕获AI遥测数据,就在它让它进入云端之前.首先,您需要为Azure Functions 准备本地开发环境.那你几乎准备好了.您只需要在local.settings.json文件上重复上面的第二步.所以你的文件看起来应该是这样的;

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_EXTENSION_VERSION": "beta",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
    "HOST_NAME": "localhost:7072",
    "APPINSIGHTS_INSTRUMENTATIONKEY": "11111111-2222-3333-4444-555555555555"
  },
  "Host": {
    "LocalHttpPort": 7072
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我有2个AI实例,APPINSIGHTS_INSTRUMENTATIONKEY我的Azure门户和我的本地dev env(local.settings.json)中的值是不同的,所以我不会混淆prod和dev遥测.

  • 关键点:`local.settings.json` 中必须有 `"APPINSIGHTS_INSTRUMENTATIONKEY": "dummy_key"` 才能让 AppInsights 在本地工作。 (8认同)

Bra*_*ang 2

据我所知,目前我们无法将 Application Insights 直接包含在本地 azure 函数项目中。

这是一个解决方法:

需要你自己去实现。从 Nuget 包管理器安装 Microsoft.ApplicationInsights 后。

然后使用 TelemetryClient 将日志发送到 azure。

更多详细信息,您可以参考以下代码:

[FunctionName("HttpTriggerCSharp")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
    var appInsights = GetTelemetryClient();
    //track an event
    appInsights.TrackEvent("I am starting now. I'm timer triggered");
    // track a numeric value
    appInsights.TrackMetric("Ticks based on current time", DateTime.Now.Ticks);
    // track an exception
    appInsights.TrackException(new Exception($"Random exception at {DateTime.Now}"));

    // send data to azure
    appInsights.Flush();

    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");

    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    name = name ?? data?.name;

    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}

private static TelemetryClient GetTelemetryClient()
{
    var telemetryClient = new TelemetryClient();
    telemetryClient.InstrumentationKey = "Your InstrumentationKey";
    return telemetryClient;
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述