结合使用Application Insights和Blob触发器

时间:2019-02-27 15:21:12

标签: .net azure azure-storage-blobs azure-application-insights

我正在研究一个简单的Blob触发器,该触发器将Blob存储中的CSV文件导入SQL。

该功能的功能正在运行,但我想在Azure中添加Application Insights,以便能够获取有关异常和日志记录信息的通知。我只是不能把头缠住它。 我已经搜寻了几天,阅读了大量文章,但似乎找不到任何有效的方法。对于Azure和一般编程人员而言,我是新手,因此很难理解其中的一些示例。

我在门户的功能中添加了Application Insights,并将Instrumentationkey添加到了功能中的appsettings。当我在函数中使用Tracewriter时,我可以发布它并且函数可以正常工作(除非Application Insights已死)。

当我改用ILogger(推荐)并发布时,我在Application Insights中得到的信息为零,而我的功能根本无法正常工作。

我读了一篇文章,说您可以仅将Application Insights和istrumentationkey添加到您的函数中,然后添加一个nuget-package及其起作用。而另一篇文章则提供了一个复杂的示例,其中他们在startup.cs类中构建了一些东西。只是有很多不同的信息,我没有经验去知道我的特定应用是对还是错。

我的功能当前如下所示(.NET Core 2.1):

    public static class BlobTrigger
{
    [FunctionName("BlobToSql")]
    public static async Task Run([BlobTrigger("myblobstorage", Connection = "AzureWebJobsStorage")]
        CloudBlockBlob blob, ILogger log)
    {
        Exception exception = null;
        log.LogInformation($"BlobTrigger processed a request for blob: {blob.Name}");

        var csvToSqlHandler = new CsvToSqlHandler();

        if (!blob.Name.EndsWith(".CSV"))
        {
            log.LogError(($"Blob '{blob.Name}' doesn't have the .csv extension. Skipping processing."));
            return;
        }

        try
        {
            var dataTable = await csvToSqlHandler.CreateDataTableFromCsv(blob);

            csvToSqlHandler.FormatDataTable(dataTable, blob.Name);

            csvToSqlHandler.FormatDataTableColumns(dataTable, blob.Name);

            await csvToSqlHandler.DataTableToSql(dataTable, blob.Name);
        }
        catch (Exception e)
        {
            exception = e;
            log.LogError($"{blob.Name} failed. Exception: {exception.Message}");
        }

        if (exception == null)
        {
            await blob.DeleteAsync();
        }
        log.LogInformation($"Blob '{blob.Name}' successfully executed!");
    }
}

使用此:

using System;
using System.Threading.Tasks;
using BlobToSqlConverter.Handlers;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;

我只是想在Azure的Application Insights中看到一些日志,并感到不高兴,如果我每次使用ILogger发布时我的功能都没有消失,那也很好。

如果有人花时间帮助我,我真的很高兴。

1 个答案:

答案 0 :(得分:1)

如果您在azure函数的应用程序设置中正确配置了APPINSIGHTS_INSTRUMENTATIONKEY,则ILogger将自动将数据写入应用程序见解。

假设您是从Visual Studio-> azure函数模板创建azure函数(v2),我在Function.cs中编写如下代码:

using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace MyFunctionApp3
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("f22/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes !!!");
            log.LogTrace("this is a trace info from ilogger !!!");
            log.LogInformation("this is a information from ilogger!!!");
        }
    }
}

您还可以通过将以下代码添加到host.json文件来控制日志级别:

{
  "version": "2.0",
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Trace",
      "Host.Results": "Error",
      "Function": "Trace",
      "Host.Aggregator": "Trace"
    }
  }
}

然后将其发布为天蓝色。

成功将其发布到Azure之后,请导航到Azure门户->您的功能应用程序->应用程序设置:添加字段APPINSIGHTS_INSTRUMENTATIONKEY及其值。然后点击保存。如下所示:

enter image description here

然后,您可以将文件上传到blob存储,然后转到azure功能日志控制台,您可以看到ILogger编写的日志在其中:

enter image description here

最后,导航至azure门户->您的应用程序见解->搜索页面,然后单击刷新按钮,您将看到显示了由ILogger编写的日志(可能需要几分钟):

enter image description here

如有任何疑问,请告诉我。