【问题标题】:Use Application Insights with Blob trigger将 Application Insights 与 Blob 触发器结合使用
【发布时间】:2019-07-21 08:53:36
【问题描述】:

我正在开发一个简单的 Blob 触发器,该触发器将 CSV 文件从 blob 存储转换为 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 发布时都不会死,那也很好。

如果有人花时间帮我解决这个问题,我会非常感激。

【问题讨论】:

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


    【解决方案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 后,导航到 azure 门户 -> 您的函数应用 -> 应用程序设置:添加字段 APPINSIGHTS_INSTRUMENTATIONKEY 及其值。然后点击保存。如下:

    然后你可以上传一个文件到blob存储,然后到你的azure函数日志控制台,你可以看到ILogger写的日志在那里:

    最后,nav to azure portal -> your application insight -> search page,点击刷新按钮,可以看到ILogger写的日志显示出来了(可能需要几分钟):

    如果您有任何问题,请告诉我。

    【讨论】:

    • 感谢您抽出宝贵时间。我按照您的示例进行操作,但仍然无法正常工作。事实证明,当我在门户中出现异常时说“函数类型名称无效”。我用谷歌搜索了这个,结果发现我的 FUNCTIONS_EXTENSION_VERSION appsetting 被设置为 ~1,我把它改成了 ~2 并且它起作用了!所以你的回答是正确的,我只是在写问题时没有注意异常。再次非常感谢您!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2023-04-05
    • 2016-02-22
    • 2020-01-17
    相关资源
    最近更新 更多