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

时间:2017-08-04 15:06:25

标签: azure azure-functions azure-application-insights

我使用ILogger接口记录Azure功能中的事件。我可以在Azure中发布它并将其连接到Azure中的Application Insights。

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

我使用的是VS 2017和Azure Function CLI 1.0.0-beta-100。

3 个答案:

答案 0 :(得分:7)

向Azure Functions添加Application Insights(AI)遥测技术简单明了。

您只需要官方文档中的这些two步骤;

  1. 创建Application Insights实例。
    • 应用类型应设置为常规
    • 抓住检测密钥
  2. 更新功能应用程序的设置
    • 添加应用设置 - APPINSIGHTS_INSTRUMENTATIONKEY = {Instrumentation Key}
  3. 然而,显而易见的是,如何在本地开发功能应用程序时捕获AI遥测数据,就在让它进入云端之前。首先,您需要prepare Azure功能的本地开发环境。那你几乎准备好了。您只需要在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
      }
    }
    

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

答案 1 :(得分:4)

据我所知,目前我们无法在您当地的azure功能项目中直接包含Application Insights。

这是一种解决方法:

您需要自己实施。从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;
}

结果:

enter image description here

答案 2 :(得分:2)

因此,显然是由于对库进行的更改,它有时会停止工作。因此,这就是帮助我在2019年4月开始工作的原因。希望它将对其他人有所帮助。

我还没有添加任何针对我的功能应用程序的日志或任何特定内容,现在对我来说,这几乎是将所有控制台数据打印到我的应用程序见解中的跟踪日志中(本地,无需在Azure中进行任何配置) 。另外,我的测试方案在TargetFramework netstandard2.0和AzureFunctionsVersion 2上运行。

首先,您需要将此NuGet程序包添加到功能应用程序:https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Logging.ApplicationInsights/

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

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

"APPINSIGHTS_INSTRUMENTATIONKEY": "you-need-to-have-anything-at-all-here-so-it-will-work-locally"