Используйте Application Insights с триггером Blob - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю над простым триггером Blob, который переносит CSV-файлы из хранилища BLOB-объектов в SQL.

Функциональность моей функции работает, но я хочу добавить Application Insights в Azure, чтобы иметь возможность получать уведомления об исключениях и информацию о входе в систему.Я просто не могу обернуть голову вокруг этого.Я несколько дней гуглял и читал множество статей, но, похоже, не могу найти ничего, что работает.Я новичок в Azure и в программировании в целом, поэтому некоторые примеры немного сложно понять.

Я добавил Application Insights к своей функции на портале и добавил Instrumentationkey в appsettings этой функции.Когда я использую Tracewriter в функции, я могу опубликовать ее, и функции работают (кроме Application Insights не работает).

Когда я переключаюсь на ILogger (что рекомендуется) и публикую, я получаю ноль информации в моем Application Insights, и мои функции вообще не работают.

Я прочитал одну статью о том, что вы можетепросто добавьте Application Insights и istrumentationkey в свою функцию, затем добавьте пакет nuget и он заработает.В другой статье есть сложный пример, где они создают что-то в классе 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;

Я просто хочу увидеть некоторые журналы в Application Insights на Azure и буду счастлив, также было бы неплохо, если бы мои функции не умирали каждый раз, когда я публикую с помощью ILogger.

Я был бы очень признателен, если бы кто-нибудь нашел время, чтобы помочь мне с этим.

1 Ответ

0 голосов
/ 28 февраля 2019

Если вы правильно настроите APPINSIGHTS_INSTRUMENTATIONKEY в настройках приложения функции Azure, то ILogger автоматически запишет данные для понимания приложения.

Предположим, вы создали функцию Azure (v2) из ​​Visual Studio -> шаблон функции Azure, я пишу код, как показано ниже, в своем файле 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 и его значение.затем нажмите сохранить.как показано ниже:

enter image description here

Затем вы можете загрузить файл в хранилище BLOB-объектов, а затем перейти в консоль журналов вашей функции Azure, где вы можете увидеть записанные журналы.от ILogger:

enter image description here

В конце перейдите на портал Azure -> Информация о вашем приложении -> Страница поиска и нажмите кнопку обновления,Вы можете увидеть, как отображаются журналы, написанные ILogger (это может занять несколько минут):

enter image description here

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...