Мониторинг Функций AzureMonitor Azure Functions

Решение Функции Azure предлагает встроенную интеграцию со службой Azure Application Insights для мониторинга функций.Azure Functions offers built-in integration with Azure Application Insights to monitor functions. В этой статье показано, как настроить отправку файлов журнала, созданных системой, из Функций Azure в Application Insights.This article shows you how to configure Azure Functions to send system-generated log files to Application Insights.

Мы рекомендуем использовать Application Insights, так как эта служба собирает данные журнала, сведения о производительности и информацию об ошибках.We recommend using Application Insights because it collects log, performance, and error data. Она автоматически обнаруживает аномалии в производительности и содержит мощные аналитические средства, которые помогают диагностировать проблемы и анализировать использование функций.It automatically detects performance anomalies and includes powerful analytics tools to help you diagnose issues and to understand how your functions are used. Эта служба помогает постоянно улучшать производительность и удобство использования.It's designed to help you continuously improve performance and usability. Вы даже можете применить Application Insights на этапе локальной работы над проектом приложения-функции.You can even use Application Insights during local function app project development. Дополнительные сведения см. в статье Что такое Application Insights?.For more information, see What is Application Insights?.

Так как необходимое инструментирование Application Insights встроено в Функции Azure, для подключения приложения-функции к ресурсу Application Insights нужно просто использовать действительный ключ инструментирования.As the required Application Insights instrumentation is built into Azure Functions, all you need is a valid instrumentation key to connect your function app to an Application Insights resource. Этот ключ инструментирования следует поместить в параметры приложения при создании ресурса приложения-функции в Azure.The instrumentation key should be added to your application settings when your function app resource is created in Azure. Если у приложения-функции еще нет такого ключа, его можно настроить вручную.If your function app doesn't already have this key, you can set it manually.

Стоимость и ограничения Application InsightsApplication Insights pricing and limits

Вы можете протестировать интеграцию Application Insights с Функциями Azure бесплатно.You can try out Application Insights integration with Azure Functions for free. Суточный объем данных, которые могут быть обработаны бесплатно, ограничен.There's a daily limit to how much data can be processed for free. Во время тестирования вы можете достичь этого предельного значения.You might hit this limit during testing. Azure отправляет уведомления на портале и по электронной почте при приближении к ежедневному ограничению.Azure provides portal and email notifications when you're approaching your daily limit. Если вы пропустите эти оповещения и превысите предельное значение, новые журналы не будут отображаться в Application Insights.If you miss those alerts and hit the limit, new logs won't appear in Application Insights queries. Учитывайте ограничения, чтобы не тратить время на ненужное устранение неполадок.Be aware of the limit to avoid unnecessary troubleshooting time. Дополнительные сведения см. в статье Управление ценами и объемом данных в Application Insights.For more information, see Manage pricing and data volume in Application Insights.

Важно!

В Application Insights есть функция выборки, которая позволяет избежать создания слишком большого объема данных телеметрии для завершенных выполнений в периоды пиковой нагрузки.Application Insights has a sampling feature that can protect you from producing too much telemetry data on completed executions at times of peak load. Выборка включена по умолчанию.Sampling is enabled by default. Если кажется, что некоторые данные отсутствуют, можно просто настроить параметры выборки в соответствии с конкретным сценарием мониторинга.If you appear to be missing data, you might need to adjust the sampling settings to fit your particular monitoring scenario. Дополнительные сведения см. в разделе о настройке выборки.To learn more, see Configure sampling.

Полный список функций Application Insights, доступных для приложения-функции, подробно описан в статье Application Insights для функций, поддерживаемых в решении "Функции Azure".The full list of Application Insights features available to your function app is detailed in Application Insights for Azure Functions supported features.

Просмотр телеметрии на вкладке "Монитор"View telemetry in Monitor tab

При включенной интеграции с Application Insights данные телеметрии можно просматривать на вкладке Монитор.With Application Insights integration enabled, you can view telemetry data in the Monitor tab.

  1. На странице приложения-функции выберите функцию, которая выполнялась по крайней мере один раз после настройки Application Insights.In the function app page, select a function that has run at least once after Application Insights was configured. Затем в области слева выберите Монитор.Then, select Monitor from the left pane. Периодически выбирайте Обновить, пока не появится список вызовов функций.Select Refresh periodically, until the list of function invocations appears.

    Список вызовов

    Примечание

    Для отображения списка может потребоваться до пяти минут. Это время необходимо клиенту, чтобы подготовить пакеты данных телеметрии для передачи на сервер.It can take up to five minutes for the list to appear while the telemetry client batches data for transmission to the server. Такая задержка отсутствует в случае Live Metrics Stream.The delay doesn't apply to the Live Metrics Stream. Эта служба подключается к узлу решения "Функции" при загрузке страницы, поэтому журналы передаются на нее напрямую.That service connects to the Functions host when you load the page, so logs are streamed directly to the page.

  2. Чтобы просмотреть журналы для вызова определенной функции, выберите ссылку на столбец Дата (UTC) для этого вызова.To see the logs for a particular function invocation, select the Date (UTC) column link for that invocation. Выходные данные ведения журнала для этого вызова отображаются на новой странице.The logging output for that invocation appears in a new page.

    Сведения о вызове

  3. Выберите Запустить в Application Insights, чтобы просмотреть источник запроса, который извлекает данные журнала Azure Monitor в журнале Azure.Choose Run in Application Insights to view the source of the query that retrieves the Azure Monitor log data in Azure Log. Если вы впервые используете функцию Azure Log Analytics в подписке, вам будет предложено ее включить.If this is your first time using Azure Log Analytics in your subscription, you're asked to enable it.

  4. После включения Log Analytics отображается следующий запрос.After you enable Log Analytics, the following query is displayed. Как можно видеть, результаты запроса ограничены последними 30 днями (where timestamp > ago(30d)).You can see that the query results are limited to the last 30 days (where timestamp > ago(30d)). Кроме того, в результатах отображается не более 20 строк (take 20).In addition, the results show no more than 20 rows (take 20). В отличие от них, список сведений о вызовах для функции содержит информацию за последние 30 дней без ограничений.In contrast, the invocation details list for your function is for the last 30 days with no limit.

    Список вызовов в аналитике Application Insights

Дополнительные сведения см. в разделе Запросы к данным телеметрии далее в этой статье.For more information, see Query telemetry data later in this article.

Просмотр данных телеметрии в Application InsightsView telemetry in Application Insights

Чтобы открыть Application Insights из приложения-функции на портале Azure, слева на странице в разделе Параметры выберите Application Insights.To open Application Insights from a function app in the Azure portal, select Application Insights under Settings in the left page. Если вы впервые используете Application Insights с подпиской, вам будет предложено включить эту функцию. Выберите Включить Application Insights, а затем на следующей странице выберите Применить.If this is your first time using Application Insights with your subscription, you'll be prompted to enable it: select Turn on Application Insights, and then select Apply on the next page.

Открытие Application Insights на странице обзора приложения-функции

Дополнительные сведения об использовании Application Insights см. в документации по Application Insights.For information about how to use Application Insights, see the Application Insights documentation. В этом разделе представлено несколько примеров просмотра данных в Application Insights.This section shows some examples of how to view data in Application Insights. Если вы уже знакомы с Application Insights, можете сразу переходить к разделам, посвященным конфигурации и настройке данных телеметрии.If you're already familiar with Application Insights, you can go directly to the sections about how to configure and customize the telemetry data.

Вкладка обзора Application Insights

При оценке поведения, производительности и ошибок в функциях могут быть полезны следующие области Application Insights.The following areas of Application Insights can be helpful when evaluating the behavior, performance, and errors in your functions:

ИзучениеInvestigate ОписаниеDescription
СбоиFailures Создание диаграмм и оповещений на основе сбоев функции и исключений сервера.Create charts and alerts based on function failures and server exceptions. Имя операции обозначает имя функции.The Operation Name is the function name. Сбои в зависимостях здесь не отображаются, если вы не настроили для них пользовательскую телеметрию.Failures in dependencies aren't shown unless you implement custom telemetry for dependencies.
ПроизводительностьPerformance Анализ проблем с производительностью путем просмотра использования ресурсов и пропускной способности для экземпляров облачных ролей.Analyze performance issues by viewing resource utilization and throughput per Cloud role instances. Эти данные можно использовать для отладки в тех случаях, когда функции создают чрезмерную нагрузку на базовые ресурсы.This data can be useful for debugging scenarios where functions are bogging down your underlying resources.
МетрикиMetrics Создание диаграмм и оповещений на основе метрик.Create charts and alerts that are based on metrics. Используются такие метрики: число вызовов функций, время выполнения и частота успешных попыток.Metrics include the number of function invocations, execution time, and success rates.
Интерактивные метрикиLive Metrics Просмотр данных метрик по мере их создания почти в реальном времени.View metrics data as it's created in near real-time.

Запросы к данным телеметрииQuery telemetry data

Аналитика в Application Insights предоставляет доступ ко всем данным телеметрии в формате таблиц в базе данных.Application Insights Analytics gives you access to all telemetry data in the form of tables in a database. Функция аналитики поддерживает язык запросов для извлечения, обработки и визуализации данных.Analytics provides a query language for extracting, manipulating, and visualizing the data.

Выберите Журналы для просмотра или запроса событий в журналах.Choose Logs to explore or query for logged events.

Пример данных аналитики

В этом примере показано распределение запросов по рабочим ролям за последние 30 минут.Here's a query example that shows the distribution of requests per worker over the last 30 minutes.

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

Доступные таблицы представлены на вкладке Схема в области слева.The tables that are available are shown in the Schema tab on the left. Данные, создаваемые при вызовах функций, вы найдете в следующих таблицах:You can find data generated by function invocations in the following tables:

ТаблицаTable ОписаниеDescription
tracestraces Журналы, созданные средой выполнения и кодом функций.Logs created by the runtime and by function code.
requestsrequests По одному запросу для каждого вызова функции.One request for each function invocation.
exceptionsexceptions Любые исключения в среде выполнения.Any exceptions thrown by the runtime.
customMetricscustomMetrics Число успешных и неудачных вызовов, доля успешных попыток, продолжительность.The count of successful and failing invocations, success rate, and duration.
customEventscustomEvents События, отслеживаемые средой выполнения, например HTTP-запросы, которые активируют функции;Events tracked by the runtime, for example: HTTP requests that trigger a function.
performanceCountersperformanceCounters Сведения о производительности серверов, на которых выполняются функции.Information about the performance of the servers that the functions are running on.

Остальные таблицы предназначены для проверок доступности, а также телеметрии клиента и браузера.The other tables are for availability tests, and client and browser telemetry. Вы можете реализовать пользовательскую телеметрию, чтобы добавлять в них данные.You can implement custom telemetry to add data to them.

В каждой таблице есть поле customDimensions, где хранится часть данных о конкретной функции.Within each table, some of the Functions-specific data is in a customDimensions field. Например, следующий запрос получает все трассировки с уровнем журнала Error.For example, the following query retrieves all traces that have log level Error.

traces 
| where customDimensions.LogLevel == "Error"

Среда выполнения предоставляет поля customDimensions.LogLevel и customDimensions.Category.The runtime provides the customDimensions.LogLevel and customDimensions.Category fields. Вы можете указать дополнительные поля в журналах, которые указываются в коде функции.You can provide additional fields in logs that you write in your function code. См. раздел Структурированное ведение журнала далее в этой статье.See Structured logging later in this article.

Настройка категорий и уровней ведения журналаConfigure categories and log levels

Вы можете использовать Application Insights без какой бы то ни было настройки конфигурации.You can use Application Insights without any custom configuration. Конфигурация по умолчанию может привести к созданию больших объемов данных.The default configuration can result in high volumes of data. Если вы используете подписку Azure для Visual Studio, объем данных Application Insights может достигнуть установленного верхнего предела.If you're using a Visual Studio Azure subscription, you might hit your data cap for Application Insights. Далее в этой статье вы узнаете, как настроить данные, отправляемые функциями в Application Insights.Later in this article, you learn how to configure and customize the data that your functions send to Application Insights. Для приложения-функции ведение журнала настраивается в файле host.json.For a function app, logging is configured in the host.json file.

КатегорииCategories

В средстве ведения журнала Функций Azure предусмотрена категория для каждого журнала.The Azure Functions logger includes a category for every log. Категория указывает, какая часть кода среды выполнения или кода функции записывала данные в этот журнал.The category indicates which part of the runtime code or your function code wrote the log. В следующей таблице описаны основные категории журналов, создаваемых средой выполнения.The following chart describes the main categories of logs that the runtime creates.

КатегорияCategory ОписаниеDescription
Host.ResultsHost.Results Эти журналы отображаются в Application Insights как запросы.These logs show as requests in Application Insights. Они содержат сведения об успешном выполнении или сбое функций.They indicate success or failure of a function. Все эти журналы записываются на уровне Information.All of these logs are written at Information level. При фильтрации на уровне Warning или выше эти данные отображаться не будут.If you filter at Warning or above, you won't see any of this data.
Host.AggregatorHost.Aggregator Эти журналы содержат счетчики и средние значения по вызовам функций за настраиваемый период времени.These logs provide counts and averages of function invocations over a configurable period of time. По умолчанию используется период 30 секунд или 1000 результатов в зависимости от того, что из этого наступит раньше.The default period is 30 seconds or 1,000 results, whichever comes first. Журналы доступны в таблице customMetrics в Application Insights.The logs are available in the customMetrics table in Application Insights. Например, здесь вы найдете число запусков, долю успешных попыток и длительность выполнения.Examples are the number of runs, success rate, and duration. Все эти журналы записываются на уровне Information.All of these logs are written at Information level. При фильтрации на уровне Warning или выше эти данные отображаться не будут.If you filter at Warning or above, you won't see any of this data.

Все журналы для категорий, кроме перечисленных выше, доступны в таблице traces в Application Insights.All logs for categories other than these are available in the traces table in Application Insights.

Все журналы с категориями, имена которых начинаются со слова Host, сохраняются средой выполнения Функций Azure.All logs with categories that begin with Host are written by the Functions runtime. Журналы для запущенных и выполненных функций относятся к категории Host.Executor.The Function started and Function completed logs have category Host.Executor. Успешные выполнения записываются в эти журналы на уровне Information.For successful runs, these logs are Information level. Исключения записываются на уровне Error.Exceptions are logged at Error level. Кроме того, среда выполнения создает журналы уровня Warning, например очередь сообщений, отправленных в очередь подозрительных сообщений.The runtime also creates Warning level logs, for example: queue messages sent to the poison queue.

Среда выполнения Функций Azure создает журналы, название категории для которых начинается со слова "Host".The Functions runtime creates logs with a category that begin with "Host." В версии 1.x журналы function started, function executed и function completed относятся к категории Host.Executor.In version 1.x, the function started, function executed, and function completed logs have the category Host.Executor. Начиная с версии 2.x, эти журналы относятся к категории Function.<YOUR_FUNCTION_NAME>.Starting in version 2.x, these logs have the category Function.<YOUR_FUNCTION_NAME>.

Если вы сохраняете данные в журналы из кода функции, используется категория Function.<YOUR_FUNCTION_NAME>.User, а уровень ведения журнала может быть любым.If you write logs in your function code, the category is Function.<YOUR_FUNCTION_NAME>.User and can be any log level. В версии 1.x среды выполнения Функций используется категория Function.In version 1.x of the Functions runtime, the category is Function.

Уровни журналаLog levels

В средстве ведения журнала Функций Azure также предусмотрена возможность задать уровень ведения для каждого журнала.The Azure Functions logger also includes a log level with every log. Параметр LogLevel (Уровень ведения журнала) является перечислением целочисленных значений, которые обозначают относительную важность.LogLevel is an enumeration, and the integer code indicates relative importance:

LogLevelLogLevel КодCode
ТрассировкаTrace 00
ОтладкаDebug 11
СведенияInformation 22
ПредупреждениеWarning 33
ErrorError 44
CriticalCritical 55
NoneNone 66

Уровень ведения журнала None описан в следующем разделе.Log level None is explained in the next section.

Конфигурация журнала в host.jsonLog configuration in host.json

Файл host.json определяет, какой объем информации приложение-функция отправляет в журнал Application Insights.The host.json file configures how much logging a function app sends to Application Insights. В каждой категории вы можете указать минимальный уровень ведения журнала для отправки данных.For each category, you indicate the minimum log level to send. Приведем два примера: первый пример предназначен для среды выполнения Функций версии 2.x и более поздних (с .NET Core), а второй — для среды выполнения версии 1.x.There are two examples: the first example targets version 2.x and later of the Functions runtime (with .NET Core), and the second example is for the version 1.x runtime.

Версия 2.x и более поздниеVersion 2.x and higher

Среда выполнения Функций версии 2.x и более поздних использует иерархию фильтра ведения журнала .NET Core.Version v2.x and later versions of the Functions runtime use the .NET Core logging filter hierarchy.

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

Версия 1.xVersion 1.x

{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "Information",
      "categoryLevels": {
        "Host.Results": "Error",
        "Function": "Error",
        "Host.Aggregator": "Trace"
      }
    }
  }
}

В этом примере настраиваются следующие правила:This example sets up the following rules:

  • Для журналов категории Host.Results или Function в Application Insights отправляются данные с уровнем Error и выше.For logs with category Host.Results or Function, send only Error level and above to Application Insights. Данные журналов с уровнем Warning и ниже игнорируются.Logs for Warning level and below are ignored.
  • Все журналы с категорией Host.Aggregator отправляются в Application Insights.For logs with category Host.Aggregator, send all logs to Application Insights. Уровень ведения журнала Trace — это то же, что в некоторых средствах ведения журналов именуется как Verbose. В файле host.json необходимо использовать Trace.The Trace log level is the same as what some loggers call Verbose, but use Trace in the host.json file.
  • Для всех остальных журналов в Application Insights отправляются данные с уровнем Information и выше.For all other logs, send only Information level and above to Application Insights.

Значение категории в host.json управляет ведением журнала для всех категорий, название которых начинается с аналогичного значения.The category value in host.json controls logging for all categories that begin with the same value. Host в файле host.json управляет ведением журнала для категорий Host.General, Host.Executor, Host.Results и т. д.Host in host.json controls logging for Host.General, Host.Executor, Host.Results, and so on.

Если host.json содержит несколько категорий с одинаковым началом строки, сопоставление начинается с более длинных строк.If host.json includes multiple categories that start with the same string, the longer ones are matched first. Предположим, вы хотите регистрировать все данные среды выполнения без данных Host.Aggregator на уровне Error, но с данными Host.Aggregator на уровне Information.Suppose you want everything from the runtime except Host.Aggregator to log at Error level, but you want Host.Aggregator to log at the Information level:

Версия 2.x и более поздниеVersion 2.x and later

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host": "Error",
      "Function": "Error",
      "Host.Aggregator": "Information"
    }
  }
}

Версия 1.xVersion 1.x

{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "Information",
      "categoryLevels": {
        "Host": "Error",
        "Function": "Error",
        "Host.Aggregator": "Information"
      }
    }
  }
}

Чтобы не вести журналы для определенной категории, установите для нее уровень ведения журнала None.To suppress all logs for a category, you can use log level None. Теперь для этой категории не будут сохраняться никакие журналы, так как более высокий уровень ведения журнала не существует.No logs are written with that category and there's no log level above it.

Настройка агрегатораConfigure the aggregator

Как отмечалось в предыдущем разделе, среда выполнения собирает данные о выполнении функции за определенный период времени.As noted in the previous section, the runtime aggregates data about function executions over a period of time. По умолчанию используется период в 30 секунд или 1000 запусков в зависимости от того, что из этого наступит раньше.The default period is 30 seconds or 1,000 runs, whichever comes first. Этот параметр можно настроить в файле host.json.You can configure this setting in the host.json file. Ниже приведен пример:Here's an example:

{
    "aggregator": {
      "batchSize": 1000,
      "flushTimeout": "00:00:30"
    }
}

Настройка выборкиConfigure sampling

В Application Insights есть функция выборки, которая позволяет избежать создания слишком большого объема данных телеметрии для завершенных выполнений в периоды пиковой нагрузки.Application Insights has a sampling feature that can protect you from producing too much telemetry data on completed executions at times of peak load. Если скорость входящих выполнений превышает заданное пороговое значение, служба Application Insights будет случайным образом игнорировать часть входящих выполнений.When the rate of incoming executions exceeds a specified threshold, Application Insights starts to randomly ignore some of the incoming executions. Максимальное количество выполнений в секунду по умолчанию — 20 (пять в версии 1.x).The default setting for maximum number of executions per second is 20 (five in version 1.x). Вы можете настроить выборку в файле host.json.You can configure sampling in host.json. Ниже приведен пример:Here's an example:

Версия 2.x и более поздниеVersion 2.x and later

{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20,
        "excludedTypes": "Request"
      }
    }
  }
}

В версии 2. x можно исключить определенные типы данных телеметрии из выборки.In version 2.x, you can exclude certain types of telemetry from sampling. В приведенном выше примере данные типа Request исключаются из выборки.In the example above, data of type Request are excluded from sampling. Это гарантирует, что все выполнения функций (запросов) записываются в журнал, а другие типы телеметрии остаются в процессе выборки.This ensures all function executions (requests) are logged while other types of telemetry remain subject to sampling.

Версия 1.xVersion 1.x

{
  "applicationInsights": {
    "sampling": {
      "isEnabled": true,
      "maxTelemetryItemsPerSecond" : 5
    }
  }
}

Запись журналов в функциях C#Write logs in C# functions

В коде функции вы можете сохранять журналы, которые отображаются в виде трассировок в Application Insights.You can write logs in your function code that appear as traces in Application Insights.

ILoggerILogger

Используйте параметр ILogger в функциях вместо параметра TraceWriter.Use an ILogger parameter in your functions instead of a TraceWriter parameter. Журналы, созданные с помощью TraceWriter, тоже отправляются в Application Insights, но ILogger позволяют использовать структурированное ведение журналов.Logs created by using TraceWriter go to Application Insights, but ILogger lets you do structured logging.

Объект ILogger позволяет вызывать для создания журналов методы расширения ILoggerLog<level>.With an ILogger object, you call Log<level> extension methods on ILogger to create logs. Следующий код записывает журнал Information с категорией "Function.<YOUR_FUNCTION_NAME>.User."The following code writes Information logs with category "Function.<YOUR_FUNCTION_NAME>.User."

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger logger)
{
    logger.LogInformation("Request for item with key={itemKey}.", id);

Структурированное ведение журналаStructured logging

Использование параметров в сообщении журнала определяется порядком заполнителей, а не их именами.The order of placeholders, not their names, determines which parameters are used in the log message. Предположим, что у вас есть следующий код:Suppose you have the following code:

string partitionKey = "partitionKey";
string rowKey = "rowKey";
logger.LogInformation("partitionKey={partitionKey}, rowKey={rowKey}", partitionKey, rowKey);

Если вы примените эту же строку сообщения с обратным порядком параметров, в тексте сообщения значения окажутся на неправильных местах.If you keep the same message string and reverse the order of the parameters, the resulting message text would have the values in the wrong places.

Такой метод обработки заполнителей позволяет выполнять структурированное ведение журналов.Placeholders are handled this way so that you can do structured logging. Application Insights сохраняет не только строку сообщения, но и параметры в формате пар "имя-значение".Application Insights stores the parameter name-value pairs and the message string. Благодаря этому все аргументы сообщения становятся полями, по которым можно выполнять запросы.The result is that the message arguments become fields that you can query on.

Если используется метод ведения журнала из предыдущего примера, вы сможете отправить запрос поля customDimensions.prop__rowKey.If your logger method call looks like the previous example, you can query the field customDimensions.prop__rowKey. При этом добавляется префикс prop__, чтобы не возникало конфликтов между полями, которые добавляет среда выполнения и которые добавляет код вашей функции.The prop__ prefix is added to ensure there are no collisions between fields the runtime adds and fields your function code adds.

Исходную строку сообщения можно получить, указав в запросе поле customDimensions.prop__{OriginalFormat}.You can also query on the original message string by referencing the field customDimensions.prop__{OriginalFormat}.

Ниже приведен пример JSON-представления для данных customDimensions.Here's a sample JSON representation of customDimensions data:

{
  "customDimensions": {
    "prop__{OriginalFormat}":"C# Queue trigger function processed: {message}",
    "Category":"Function",
    "LogLevel":"Information",
    "prop__message":"c9519cbf-b1e6-4b9b-bf24-cb7d10b1bb89"
  }
}

Запись в журнал пользовательских метрикCustom metrics logging

В функциях на языке C# вы можете использовать метод расширения LogMetric для ILogger, чтобы создать пользовательские метрики в Application Insights.In C# script functions, you can use the LogMetric extension method on ILogger to create custom metrics in Application Insights. Ниже приведен пример вызова метода.Here's a sample method call:

logger.LogMetric("TestMetric", 1234);

Этот пример кода действует так же, как вызов TrackMetric с использованием API Application Insights для .NET.This code is an alternative to calling TrackMetric by using the Application Insights API for .NET.

Ведение журналов в функциях JavaScriptWrite logs in JavaScript functions

В функциях Node.js для ведения журналов следует использовать context.log.In Node.js functions, use context.log to write logs. Структурированное ведение журнала не используется.Structured logging isn't enabled.

context.log('JavaScript HTTP trigger function processed a request.' + context.invocationId);

Запись в журнал пользовательских метрикCustom metrics logging

При работе в среде выполнения Функций Azure версии 1.x в функциях Node.js вы можете использовать метод context.log.metric, чтобы создавать пользовательские метрики в Application Insights.When you're running on version 1.x of the Functions runtime, Node.js functions can use the context.log.metric method to create custom metrics in Application Insights. Этот метод не поддерживается в версии 2.x и более поздних.This method isn't currently supported in version 2.x and later. Ниже приведен пример вызова метода.Here's a sample method call:

context.log.metric("TestMetric", 1234);

Этот пример кода действует так же, как вызов trackMetric с использованием пакета SDK Node.js для Application Insights.This code is an alternative to calling trackMetric by using the Node.js SDK for Application Insights.

Раздел о записи пользовательской телеметрии в функциях C#Log custom telemetry in C# functions

Для отправки пользовательских данных телеметрии из функций в Application Insights можно использовать зависящую от функций версию пакета SDK Application Insights: Microsoft.Azure.WebJobs.Logging.ApplicationInsights.There is a Functions-specific version of the Application Insights SDK that you can use to send custom telemetry data from your functions to Application Insights: Microsoft.Azure.WebJobs.Logging.ApplicationInsights. Для установки этого пакета используйте следующую команду из командной строки:Use the following command from the command prompt to install this package:

dotnet add package Microsoft.Azure.WebJobs.Logging.ApplicationInsights --version <VERSION>

В этой команде замените <VERSION> версией этого пакета, которая поддерживает установленную версию Microsoft.Azure.WebJobs.In this command, replace <VERSION> with a version of this package that supports your installed version of Microsoft.Azure.WebJobs.

В следующем примере C# используется настраиваемый интерфейс API телеметрии.The following C# examples uses the custom telemetry API. Пример приведен для библиотеки классов .NET, но код Application Insights в скрипте C# будет точно таким же.The example is for a .NET class library, but the Application Insights code is the same for C# script.

Версия 2.x и более поздниеVersion 2.x and later

Среда выполнения версии 2.x или более поздних использует новые функции в Application Insights для выполнения автоматической корреляции данных телеметрии с текущей операцией.Version 2.x and later versions of the runtime use newer features in Application Insights to automatically correlate telemetry with the current operation. Нет необходимости вручную задавать для операции поля Id, ParentId или Name.There's no need to manually set the operation Id, ParentId, or Name fields.

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
using System.Linq;

namespace functionapp0915
{
    public class HttpTrigger2
    {
        private readonly TelemetryClient telemetryClient;

        /// Using dependency injection will guarantee that you use the same configuration for telemetry collected automatically and manually.
        public HttpTrigger2(TelemetryConfiguration telemetryConfiguration)
        {
            this.telemetryClient = new TelemetryClient(telemetryConfiguration);
        }

        [FunctionName("HttpTrigger2")]
        public Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
            HttpRequest req, ExecutionContext context, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            DateTime start = DateTime.UtcNow;

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

            // Track an Event
            var evt = new EventTelemetry("Function called");
            evt.Context.User.Id = name;
            this.telemetryClient.TrackEvent(evt);

            // Track a Metric
            var metric = new MetricTelemetry("Test Metric", DateTime.Now.Millisecond);
            metric.Context.User.Id = name;
            this.telemetryClient.TrackMetric(metric);

            // Track a Dependency
            var dependency = new DependencyTelemetry
            {
                Name = "GET api/planets/1/",
                Target = "swapi.co",
                Data = "https://swapi.co/api/planets/1/",
                Timestamp = start,
                Duration = DateTime.UtcNow - start,
                Success = true
            };
            dependency.Context.User.Id = name;
            this.telemetryClient.TrackDependency(dependency);

            return Task.FromResult<IActionResult>(new OkResult());
        }
    }
}

GetMetric — это рекомендуемый в данный момент интерфейс API для создания метрики.GetMetric is the currently recommended API for creating a metric.

Версия 1.xVersion 1.x

using System;
using System.Net;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Azure.WebJobs;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.Linq;

namespace functionapp0915
{
    public static class HttpTrigger2
    {
        private static string key = TelemetryConfiguration.Active.InstrumentationKey = 
            System.Environment.GetEnvironmentVariable(
                "APPINSIGHTS_INSTRUMENTATIONKEY", EnvironmentVariableTarget.Process);

        private static TelemetryClient telemetryClient = 
            new TelemetryClient() { InstrumentationKey = key };

        [FunctionName("HttpTrigger2")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
            HttpRequestMessage req, ExecutionContext context, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            DateTime start = DateTime.UtcNow;

            // 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;
         
            // Track an Event
            var evt = new EventTelemetry("Function called");
            UpdateTelemetryContext(evt.Context, context, name);
            telemetryClient.TrackEvent(evt);
            
            // Track a Metric
            var metric = new MetricTelemetry("Test Metric", DateTime.Now.Millisecond);
            UpdateTelemetryContext(metric.Context, context, name);
            telemetryClient.TrackMetric(metric);
            
            // Track a Dependency
            var dependency = new DependencyTelemetry
                {
                    Name = "GET api/planets/1/",
                    Target = "swapi.co",
                    Data = "https://swapi.co/api/planets/1/",
                    Timestamp = start,
                    Duration = DateTime.UtcNow - start,
                    Success = true
                };
            UpdateTelemetryContext(dependency.Context, context, name);
            telemetryClient.TrackDependency(dependency);
        }
        
        // Correlate all telemetry with the current Function invocation
        private static void UpdateTelemetryContext(TelemetryContext context, ExecutionContext functionContext, string userName)
        {
            context.Operation.Id = functionContext.InvocationId.ToString();
            context.Operation.ParentId = functionContext.InvocationId.ToString();
            context.Operation.Name = functionContext.FunctionName;
            context.User.Id = userName;
        }
    }    
}

Не вызывайте TrackRequest или StartOperation<RequestTelemetry>, ведь при этом будут отображаться повторные запросы на вызов функции.Don't call TrackRequest or StartOperation<RequestTelemetry> because you'll see duplicate requests for a function invocation. Среда выполнения Функций Azure автоматически отслеживает запросы.The Functions runtime automatically tracks requests.

Не указывайте telemetryClient.Context.Operation.Id.Don't set telemetryClient.Context.Operation.Id. Этот глобальный параметр может вызвать неправильную корреляцию при одновременном выполнении нескольких функций.This global setting causes incorrect correlation when many functions are running simultaneously. Вместо этого создайте экземпляр телеметрии (DependencyTelemetry, EventTelemetry) и измените его свойство Context.Instead, create a new telemetry instance (DependencyTelemetry, EventTelemetry) and modify its Context property. Затем передайте экземпляр телеметрии в соответствующий метод Track в TelemetryClient (TrackDependency(), TrackEvent(), TrackMetric()).Then pass in the telemetry instance to the corresponding Track method on TelemetryClient (TrackDependency(), TrackEvent(), TrackMetric()). Этот метод гарантирует правильность сведений о корреляции телеметрии для текущего вызова функции.This method ensures that the telemetry has the correct correlation details for the current function invocation.

Добавление пользовательской телеметрии в функциях JavaScriptLog custom telemetry in JavaScript functions

Ниже приведены примеры фрагментов кода, которые отправляют пользовательские данные телеметрии с помощью пакета SDK для Application Insights Node.js.Here are sample code snippets that send custom telemetry with the Application Insights Node.js SDK:

Версия 2.x и более поздниеVersion 2.x and later

const appInsights = require("applicationinsights");
appInsights.setup();
const client = appInsights.defaultClient;

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    // Use this with 'tagOverrides' to correlate custom telemetry to the parent function invocation.
    var operationIdOverride = {"ai.operation.id":context.traceContext.traceparent};

    client.trackEvent({name: "my custom event", tagOverrides:operationIdOverride, properties: {customProperty2: "custom property value"}});
    client.trackException({exception: new Error("handled exceptions can be logged with this method"), tagOverrides:operationIdOverride});
    client.trackMetric({name: "custom metric", value: 3, tagOverrides:operationIdOverride});
    client.trackTrace({message: "trace message", tagOverrides:operationIdOverride});
    client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL", tagOverrides:operationIdOverride});
    client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true, tagOverrides:operationIdOverride});

    context.done();
};

Версия 1.xVersion 1.x

const appInsights = require("applicationinsights");
appInsights.setup();
const client = appInsights.defaultClient;

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    // Use this with 'tagOverrides' to correlate custom telemetry to the parent function invocation.
    var operationIdOverride = {"ai.operation.id":context.operationId};

    client.trackEvent({name: "my custom event", tagOverrides:operationIdOverride, properties: {customProperty2: "custom property value"}});
    client.trackException({exception: new Error("handled exceptions can be logged with this method"), tagOverrides:operationIdOverride});
    client.trackMetric({name: "custom metric", value: 3, tagOverrides:operationIdOverride});
    client.trackTrace({message: "trace message", tagOverrides:operationIdOverride});
    client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL", tagOverrides:operationIdOverride});
    client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true, tagOverrides:operationIdOverride});

    context.done();
};

Параметр tagOverrides присваивает параметру operation_Id значение идентификатора вызова функции.The tagOverrides parameter sets the operation_Id to the function's invocation ID. Этот параметр позволяет сопоставлять все автоматически создаваемые и пользовательские данные телеметрии с конкретным вызовом функции.This setting enables you to correlate all of the automatically generated and custom telemetry for a given function invocation.

ЗависимостиDependencies

Функции версии 2 автоматически собирают зависимости для HTTP-запросов, ServiceBus, EventHub и SQL.Functions v2 automatically collects dependencies for HTTP requests, ServiceBus, EventHub, and SQL.

Для отображения зависимостей можно написать пользовательский код.You can write custom code to show the dependencies. Пример такого кода см. в разделе о пользовательских данных телеметрии на C#.For examples, see the sample code in the C# custom telemetry section. Этот пример кода создает в Application Insights карту приложения следующего вида.The sample code results in an application map in Application Insights that looks like the following image:

Схема сопоставления приложений

Примечание

Зависимости записываются на уровне информации.Dependencies are written at Information level. Если фильтр выполняется по предупреждению или выше, эти данные отображаться не будут.If you filter at Warning or above, you won't see any of this data. Кроме того, автоматическая коллекция зависимостей происходит в области, отличной от пользовательской.Also, automatic collection of dependencies happens at non-user scope. Поэтому убедитесь, что для уровня задано по меньшей мере информация вне области пользователя в host.js(т. е. за пределами функции. <YOUR_FUNCTION_NAME>. Ключ пользователя), если необходимо записать эти зависимости.So make sure the level is set to at least Information outside the user scope in your host.json (i.e. outside the Function.<YOUR_FUNCTION_NAME>.User key) if you want those dependencies to be captured.

Включение интеграции с Application InsightsEnable Application Insights integration

Для отправки данных в Application Insights приложению-функции требуется ключ инструментирования для ресурса Application Insights.For a function app to send data to Application Insights, it needs to know the instrumentation key of an Application Insights resource. В параметре приложения должен быть ключ с именем APPINSIGHTS_INSTRUMENTATIONKEY.The key must be in an app setting named APPINSIGHTS_INSTRUMENTATIONKEY.

При создании приложения-функции на портале Azure из командной строки с помощью Azure Functions Core Tools или в Visual Studio Code интеграция с Application Insights включена по умолчанию.When you create your function app in the Azure portal, from the command line by using Azure Functions Core Tools, or by using Visual Studio Code, Application Insights integration is enabled by default. Ресурс Application Insights имеет то же имя, что и приложение-функция, и создается в том же или ближайшем регионе.The Application Insights resource has the same name as your function app, and it's created either in the same region or in the nearest region.

Создание приложения-функции на портале AzureNew function app in the portal

Для проверки создаваемого ресурса Application Insights выберите его, чтобы развернуть окно Application Insights.To review the Application Insights resource being created, select it to expand the Application Insights window. Вы можете задать новое имя ресурса или выбрать другое расположение в географическом регионе Azure, где будут храниться данные.You can change the New resource name or choose a different Location in an Azure geography where you want to store your data.

Включение Application Insights при создании приложения-функции

При выборе команды Создать создается ресурс Application Insights с приложением-функцией, в параметрах приложения которого задано APPINSIGHTS_INSTRUMENTATIONKEY.When you choose Create, an Application Insights resource is created with your function app, which has the APPINSIGHTS_INSTRUMENTATIONKEY set in application settings. Все готово к работе.Everything is ready to go.

Добавление имеющегося приложения-функцииAdd to an existing function app

При создании приложения-функции с помощью Visual Studio необходимо создать ресурс Application Insights.When you create a function app using Visual Studio, you must create the Application Insights resource. Затем ключ инструментирования из этого ресурса можно добавить в качестве параметра приложения в приложение-функцию.You can then add the instrumentation key from that resource as an application setting in your function app.

Функции Azure упрощают добавление Application Insights интеграции в приложение-функцию из [портал Azure].Azure Functions makes it easy to add Application Insights integration to a function app from the Azure portal.

  1. Напортале Azure [портал Azure]найдите и выберите приложение функции, а затем выберите приложение функции.In the Azure portal, search for and select function app, and then choose your function app.

  2. Выберите Application Insights не настроен баннер в верхней части окна.Select the Application Insights is not configured banner at the top of the window. Если вы не видите этот баннер, возможно, приложение уже включено Application Insights.If you don't see this banner, then your app might already have Application Insights enabled.

    Включение Application Insights с помощью портала

  3. Разверните узел изменить ресурс и создайте Application Insights ресурс с помощью параметров, указанных в следующей таблице.Expand Change your resource and create an Application Insights resource by using the settings specified in the following table.

    ПараметрSetting Рекомендуемое значениеSuggested value ОписаниеDescription
    Новое название ресурсаNew resource name Уникальное имя приложенияUnique app name Проще всего использовать имя приложения-функции, которое должно быть уникальным в вашей подписке.It's easiest to use the same name as your function app, which must be unique in your subscription.
    РасположениеLocation Западная ЕвропаWest Europe Если возможно, используйте регион приложения-функции или ближайший от него.If possible, use the same region as your function app, or one that's close to that region.

    Создание ресурса Application Insights

  4. Нажмите кнопку Применить.Select Apply.

    Ресурс Application Insights создается в той же группе ресурсов и подписке, что и приложение-функция.The Application Insights resource is created in the same resource group and subscription as your function app. После создания ресурса закройте окно Application Insights.After the resource is created, close the Application Insights window.

  5. В приложении функции выберите пункт Конфигурация в разделе Параметры, а затем выберите Параметры приложения.In your function app, select Configuration under Settings, and then select Application settings. Если появится параметр APPINSIGHTS_INSTRUMENTATIONKEY, это означает, что для приложения-функции в Azure включена интеграция с Application Insights.If you see a setting named APPINSIGHTS_INSTRUMENTATIONKEY, Application Insights integration is enabled for your function app running in Azure.

Ранние версии решения "Функции" использовали встроенный мониторинг, который больше не рекомендуется.Early versions of Functions used built-in monitoring, which is no longer recommended. При включении интеграции Application Insights для такого приложения-функции необходимо также отключить встроенное ведение журналов.When enabling Application Insights integration for such a function app, you must also disable built-in logging.

Сообщение о проблемахReport issues

Чтобы сообщить о проблеме с интеграцией Функций Azure с Application Insights, внести предложение или отправить запрос, создайте обращение в GitHub.To report an issue with Application Insights integration in Functions, or to make a suggestion or request, create an issue in GitHub.

Журналы потоковой передачиStreaming Logs

При разработке приложения часто требуется узнать, какие записи записываются в журналы практически в реальном времени при работе в Azure.While developing an application, you often want to see what's being written to the logs in near real time when running in Azure.

Существует два способа просмотра потока файлов журнала, создаваемых при выполнении функций.There are two ways to view a stream of log files being generated by your function executions.

  • Встроенная потоковая передача журналов. Платформа Службы приложений позволяет просматривать поток файлов журналов приложений.Built-in log streaming: the App Service platform lets you view a stream of your application log files. Он эквивалентен выходным данным, которые отображаются при отладке функций во время локальной разработки и при использовании вкладки Тест на портале.This is equivalent to the output seen when you debug your functions during local development and when you use the Test tab in the portal. При этом отображаются все данные в журнале.All log-based information is displayed. Дополнительные сведения см. в разделе Потоковая передача журналов.For more information, see Stream logs. Этот потоковый метод поддерживает только один экземпляр и не может использоваться с приложением, которое выполняется в Linux в плане потребления.This streaming method supports only a single instance, and can't be used with an app running on Linux in a Consumption plan.

  • Live Metrics Stream. Если приложение-функция подключено к Application Insights, данные журнала и другие метрики можно просматривать почти в реальном времени на портале Azure с помощью Live Metrics Stream.Live Metrics Stream: when your function app is connected to Application Insights, you can view log data and other metrics in near real-time in the Azure portal using Live Metrics Stream. Используйте этот метод при мониторинге функций, выполняемых в нескольких экземплярах или в Linux в плане потребления.Use this method when monitoring functions running on multiple-instances or on Linux in a Consumption plan. Этот метод использует данные выборки.This method uses sampled data.

Потоки журнала можно просматривать как на портале, так и в большинстве локальных сред разработки.Log streams can be viewed both in the portal and in most local development environments.

ПорталPortal

На портале можно просматривать оба типа потоков журналов.You can view both types of log streams in the portal.

Встроенная потоковая передача журналовBuilt-in log streaming

Чтобы просмотреть журналы потоковой передачи на портале, выберите в приложении-функции вкладку Функции платформы.To view streaming logs in the portal, select the Platform features tab in your function app. Затем в разделе Мониторинг выберите Потоковая передача журнала.Then, under Monitoring, choose Log streaming.

Включение потоковой передачи журналов на портале

При этом приложение будет подключено к службе потоковой передачи журналов, а журналы приложений отобразятся в окне.This connects your app to the log streaming service and application logs are displayed in the window. Вы можете переключаться между режимом отображения журналов для приложения и веб-сервера.You can toggle between Application logs and Web server logs.

Просмотр потоковой передачи журналов на портале

Динамический поток метрикLive Metrics Stream

Чтобы просмотреть Live Metrics Stream для приложения, перейдите на вкладку Обзор приложения-функции.To view the Live Metrics Stream for your app, select the Overview tab of your function app. Если компонент Application Insights включен, в разделе Настроенные функции отображается ссылка Application Insights.When you have Application Insights enables, you see an Application Insights link under Configured features. По этой ссылке можно перейти на страницу Application Insights приложения.This link takes you to the Application Insights page for your app.

В Application Insights выберите Live Metrics Stream.In Application Insights, select Live Metrics Stream. В разделе Пример телеметрии отображаются записи выборки из журнала.Sampled log entries are displayed under Sample Telemetry.

Просмотр Live Metrics Stream на портале

Visual Studio CodeVisual Studio Code

Чтобы включить журналы потоковой передачи для приложения функции в Azure, сделайте следующее:To turn on the streaming logs for your function app in Azure:

  1. Выберите F1, чтобы открыть палитру команд, а затем найдите и выполните команду функции Azure: запуск потоковой передачи журналов.Select F1 to open the command palette, and then search for and run the command Azure Functions: Start Streaming Logs.

  2. Выберите приложение функции в Azure, а затем нажмите кнопку Да , чтобы включить ведение журнала приложений для приложения функции.Select your function app in Azure, and then select Yes to enable application logging for the function app.

  3. Активируйте функции в Azure.Trigger your functions in Azure. Обратите внимание, что данные журнала отображаются в окне Вывод в Visual Studio Code.Notice that log data is displayed in the Output window in Visual Studio Code.

  4. Когда все будет готово, не забудьте выполнить командную команду Azure. Чтобы отключить ведение журнала для приложения функции, закройте журналы потоковой передачи .When you're done, remember to run the command Azure Functions: Stop Streaming Logs to disable logging for the function app.

Core ToolsCore Tools

Встроенная потоковая передача журналовBuilt-in log streaming

Используйте logstream параметр, чтобы начать получать журналы потоковой передачи конкретного приложения-функции, работающего в Azure, как показано в следующем примере:Use the logstream option to start receiving streaming logs of a specific function app running in Azure, as in the following example:

func azure functionapp logstream <FunctionAppName>

Динамический поток метрикLive Metrics Stream

Вы также можете просмотреть Live Metrics Stream для приложения-функции в новом окне браузера, включив --browser параметр, как показано в следующем примере:You can also view the Live Metrics Stream for your function app in a new browser window by including the --browser option, as in the following example:

func azure functionapp logstream <FunctionAppName> --browser

Azure CLIAzure CLI

Вы можете включить потоковую передачу журналов с помощью Azure CLI.You can enable streaming logs by using the Azure CLI. Используйте следующие команды, чтобы войти, выбрать подписку и включить потоковую передачу файлов журнала.Use the following commands to sign in, choose your subscription, and stream log files:

az login
az account list
az account set --subscription <subscriptionNameOrId>
az webapp log tail --resource-group <RESOURCE_GROUP_NAME> --name <FUNCTION_APP_NAME>

Azure PowerShellAzure PowerShell

Вы можете включить потоковую передачу журналов с помощью Azure PowerShell.You can enable streaming logs by using Azure PowerShell. Для PowerShell используйте команду Set-азвебапп , чтобы включить ведение журнала в приложении-функции, как показано в следующем фрагменте кода:For PowerShell, use the Set-AzWebApp command to enable logging on the function app, as shown in the following snippet:

# Enable Logs
Set-AzWebApp -RequestTracingEnabled $True -HttpLoggingEnabled $True -DetailedErrorLoggingEnabled $True -ResourceGroupName $ResourceGroupName -Name $AppName

Дополнительные сведения см. в полном примере кода.For more information, see the complete code example.

Журналы контроллера масштабирования (Предварительная версия)Scale controller logs (preview)

Эта функция предоставляется в предварительной версии.This feature is in preview.

Контроллер масштабирования функций Azure наблюдает за экземплярами узла функций Azure, на котором выполняется приложение.The Azure Functions scale controller monitors instances of the Azure Functions host on which your app runs. Этот контроллер принимает решения о том, когда следует добавлять или удалять экземпляры на основе текущей производительности.This controller makes decisions about when to add or remove instances based on current performance. Чтобы лучше понять, какие решения выполняет контроллер масштабирования для приложения-функции, можно подать журналы контроллера масштабирования как Application Insights или в хранилище BLOB-объектов.You can have the scale controller emit logs to either Application Insights or to Blob storage to better understand the decisions the scale controller is making for your function app.

Чтобы включить эту функцию, добавьте новый параметр приложения с именем SCALE_CONTROLLER_LOGGING_ENABLED .To enable this feature, add a new application setting named SCALE_CONTROLLER_LOGGING_ENABLED. Значение этого параметра должно иметь формат в <DESTINATION>:<VERBOSITY> зависимости от следующих значений:The value of this setting must be of the format <DESTINATION>:<VERBOSITY>, based on the following:

<DESTINATION> Место назначения, в которое отправляются журналы.The destination to which logs are sent. Допустимые значения: AppInsights и Blob.Valid values are AppInsights and Blob.
При использовании AppInsights Убедитесь, что в приложении-функции включен Application Insights.When you use AppInsights, make sure Application Insights is enabled in your function app.
Если для назначения задано значение Blob , то журналы создаются в контейнере больших двоичных объектов с именем azure-functions-scale-controller в учетной записи хранения по умолчанию, заданной в AzureWebJobsStorage параметре приложения.When you set the destination to Blob, logs are created in a blob container named azure-functions-scale-controller in the default storage account set in the AzureWebJobsStorage application setting.
<VERBOSITY> Задает уровень ведения журнала.Specifies the level of logging. Поддерживаются значения None, Warning и Verbose.Supported values are None, Warning, and Verbose.
Если задано значение Verbose , контроллер масштабирования регистрирует причину каждого изменения в количестве рабочих ролей, а также сведения о триггерах, которые учитываются в этих решениях.When set to Verbose, the scale controller logs a reason for every change in the worker count, as well as information about the triggers that factor into those decisions. Подробные журналы содержат предупреждения триггеров и хэши, используемые триггерами до и после запуска контроллера масштабирования.Verbose logs include trigger warnings and the hashes used by the triggers before and after the scale controller runs.

Внимание!

Не оставляйте ведение журнала контроллера масштабирования включенным.Don't leave scale controller logging enabled. Включите ведение журнала, пока не будет собрано достаточно данных, чтобы понять, как работает контроллер масштабирования, а затем отключите его.Enable logging until you have collected enough data to understand how the scale controller is behaving, and then disable it.

Например, следующая команда Azure CLI включает подробное ведение журнала из контроллера масштабирования для Application Insights:For example, the following Azure CLI command turns on verbose logging from the scale controller to Application Insights:

az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:Verbose

В этом примере замените <FUNCTION_APP_NAME> и <RESOURCE_GROUP_NAME> именем приложения функции и именем группы ресурсов соответственно.In this example, replace <FUNCTION_APP_NAME> and <RESOURCE_GROUP_NAME> with the name of your function app and the resource group name, respectively.

Следующая команда Azure CLI отключает ведение журнала, устанавливая уровень детализации None :The following Azure CLI command disables logging by setting the verbosity to None:

az functionapp config appsettings set --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--settings SCALE_CONTROLLER_LOGGING_ENABLED=AppInsights:None

Можно также отключить ведение журнала, удалив SCALE_CONTROLLER_LOGGING_ENABLED параметр с помощью следующей команды Azure CLI:You can also disable logging by removing the SCALE_CONTROLLER_LOGGING_ENABLED setting using the following Azure CLI command:

az functionapp config appsettings delete --name <FUNCTION_APP_NAME> \
--resource-group <RESOURCE_GROUP_NAME> \
--setting-names SCALE_CONTROLLER_LOGGING_ENABLED

Отключение встроенного ведения журналаDisable built-in logging

При включении Application Insights отключите встроенное ведение журнала, которое использует службу хранилища Azure.When you enable Application Insights, disable the built-in logging that uses Azure Storage. Встроенное ведение журнала полезно для тестирования с легкими рабочими нагрузками, но не предназначено для использования в рабочей среде с высокой нагрузкой.The built-in logging is useful for testing with light workloads, but isn't intended for high-load production use. Для мониторинга рабочей среды рекомендуем использовать Application Insights.For production monitoring, we recommend Application Insights. Если в рабочей среде используется встроенное ведение журнала, записи журнала могут быть неполными из-за регулирования службы хранилища Azure.If built-in logging is used in production, the logging record might be incomplete because of throttling on Azure Storage.

Чтобы отключить встроенное ведение журнала, удалите параметр приложения AzureWebJobsDashboard.To disable built-in logging, delete the AzureWebJobsDashboard app setting. Дополнительные сведения о том, как удалять параметры приложения на портале Azure, см. в разделе Параметры приложения статьи Управление приложением-функцией на портале Azure.For information about how to delete app settings in the Azure portal, see the Application settings section of How to manage a function app. Перед удалением параметра приложения убедитесь, что имеющиеся функции в том же приложении-функции не используют этот параметр для триггеров или привязок службы хранилища Azure.Before you delete the app setting, make sure no existing functions in the same function app use the setting for Azure Storage triggers or bindings.

Дальнейшие действияNext steps

Для получения дополнительных сведений см. следующие ресурсы:For more information, see the following resources: