Мониторинг Функций 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.

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

Вы можете протестировать интеграцию Application Insights с приложением-функцией бесплатно.You can try out Application Insights integration with Function Apps 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 для поддерживаемых функций функций Azure.The full list of Application Insights features available to your function app is detailed in Application Insights for Azure Functions supported features.

Включение интеграции с 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.

Новое приложение функции на порталеNew function app in the portal

При создании приложения-функции в портал Azureинтеграция Application Insights включена по умолчанию.When you create your function app in the Azure portal, 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 nearest region.

Чтобы проверить создаваемый ресурс 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

При создании приложения-функции с помощью Azure CLI, Visual Studioили Visual Studio Codeнеобходимо создать ресурс Application Insights.When you create a function app using the Azure CLI, Visual Studio, or Visual Studio Code, 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.

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

  1. На портале выберите Все службы > Приложения-функции. Выберите приложение-функцию и щелкните баннер Application Insights в верхней части окна.In the portal, select All services > Function Apps, select your function app, and then select the Application Insights banner at the top of the window

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

  2. Создайте ресурс Application Insights с помощью параметров, указанных в таблице под рисунком.Create an Application Insights resource by using the settings specified in the table below the image.

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

    ПараметрSetting Рекомендуемое значениеSuggested value ОписаниеDescription
    Имя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.
  3. Нажмите кнопку ОК.Select OK. Ресурс 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.

  4. В приложении-функции выберите Параметры приложения и прокрутите окно вниз до раздела Параметры приложения.Back in your function app, select Application settings, and then scroll down to 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.

Просмотр телеметрии на вкладке "Монитор"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 the Monitor tab.

    Переход на вкладку мониторинга

  2. Выберите периодически обновлять , пока не появится список вызовов функций.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.)

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

  3. Чтобы просмотреть журналы для вызова определенной функции, выберите ссылку на столбец Дата для этого вызова.To see the logs for a particular function invocation, select the Date column link for that invocation.

    Ссылка на сведения о вызове

    Выходные данные ведения журнала для этого вызова отображаются на новой странице.The logging output for that invocation appears in a new page.

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

Вы видите, что обе страницы имеют команду "выполнить" в Application Insights ссылку на запрос Application Insights Analytics, который получает данные.You can see that both pages have a Run in Application Insights link to the Application Insights Analytics query that retrieves the data.

Выполнение в Application Insights

Отобразится следующий запрос.The following query is displayed. Вы видите, что список вызовов ограничен последними 30 днями.You can see that the invocation list is limited to the last 30 days. В списке отображается не более 20 строк (where timestamp > ago(30d) | take 20).The list shows no more than 20 rows (where timestamp > ago(30d) | take 20). Список сведений о вызовах находится за последние 30 дней без ограничений.The invocation details list 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, перейдите на страницу Обзор приложения-функции.To open Application Insights from a function app in the Azure portal, go to the function app's Overview page. В разделе настроенные компонентывыберите Application Insights.Under Configured features, select Application Insights.

Открытие 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:

TabTab Описание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.
СерверыServers Просмотр использования ресурсов и пропускной способности для каждого сервера.View resource utilization and throughput per server. Эти данные можно использовать для отладки в тех случаях, когда функции создают чрезмерную нагрузку на базовые ресурсы.This data can be useful for debugging scenarios where functions are bogging down your underlying resources. Серверы здесь называются экземплярами облачных ролей.Servers are referred to as Cloud role instances.
МетрикиMetrics Создание диаграмм и оповещений на основе метрик.Create charts and alerts that are based on metrics. Метрики включают число вызовов функций, время выполнения и частоту успешных попыток.Metrics include the number of function invocations, execution time, and success rates.
Динамический поток метрик: мгновенные метрики для подробного отслеживанияLive Metrics Stream Просмотр данных метрик по мере их создания в режиме реального времени.View metrics data as it's created in real time.

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

Application Insights Analytics предоставляет доступ ко всем данным телеметрии в виде таблиц в базе данных.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.

Выбор функции аналитики

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

В этом примере показано распределение запросов по рабочим ролям за последние 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
отладочtraces Журналы, созданные средой выполнения и кодом функции.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.

Среда выполнения функций создает журналы с категорией, которая начинается с "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 в версии 1. x среды выполнения функций.If you write logs in your function code, the category is Function in version 1.x of the Functions runtime. В версии 2. x категория имеет Function.<YOUR_FUNCTION_NAME>.User.In version 2.x, the category is Function.<YOUR_FUNCTION_NAME>.User.

Уровни журнала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
ОшибкаError 44
КритическийCritical 55
НетNone 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

Версия V2. 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 log на уровне 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.

В следующих разделах описаны основные категории журналов, создаваемых средой выполнения.The following sections describe the main categories of logs that the runtime creates.

Категория Host.ResultsCategory Host.Results

Эти журналы отображаются в Application Insights как "запросы" (requests).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.AggregatorCategory Host.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.

Запрос по customMetrics

Все эти журналы записываются на уровне 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.

Другие категорииOther categories

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

Запрос по трассировкам

Все журналы с категориями, начинающимися с Host, записываются средой выполнения функций.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.

Журналы, написанные кодом функции, имеют категорию Function и могут быть любым уровнем ведения журнала.Logs written by your function code have category Function and can be any log level.

Настройка агрегатора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
      }
    }
  }
}

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

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

Примечание

Выборка включена по умолчанию.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.

Запись журналов в функциях 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 позволяет вызывать для создания журналов методы расширения ILogger Log<level>.With an ILogger object, you call Log<level> extension methods on ILogger to create logs. Следующий код записывает Information журналы с функцией Category.The following code writes Information logs with category "Function."

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

При использовании версии 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

Вы можете использовать пакет NuGet Microsoft.ApplicationInsights для отправки пользовательских данных телеметрии в Application Insights.You can use the Microsoft.ApplicationInsights NuGet package to send custom telemetry data to Application Insights. В следующем примере C# используется настраиваемый API телеметрии.The following C# example 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.Linq;
using System.Threading.Tasks;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

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());
        }
    }
}

Версия 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()).Then pass in the telemetry instance to the corresponding Track method on TelemetryClient (TrackDependency(), TrackEvent()). Этот метод гарантирует, что данные телеметрии будет иметь правильные сведения о корреляции для текущего вызова функции.This method ensures that the telemetry has the correct correlation details for the current function invocation.

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

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

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

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

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

    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

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

Можно написать пользовательский код для отображения зависимостей.You can write custom code to show the dependencies. Примеры см. в примере кода в C# разделе Custom телеметрии.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:

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

Сообщение о проблемах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. Дополнительные сведения см. в разделе Streaming Logs.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.

Microsoft AzurePortal

На портале можно просматривать оба типа потоков журналов.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 StudioVisual 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 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 StreamLive 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 используйте следующие команды, чтобы добавить учетную запись Azure, выбрать подписку и потоковую передачу файлов журнала:For PowerShell, use the following commands to add your Azure account, choose your subscription, and stream log files:

Add-AzAccount
Get-AzSubscription
Get-AzSubscription -SubscriptionName "<subscription name>" | Select-AzSubscription
Get-AzWebSiteLog -Name <FUNCTION_APP_NAME> -Tail

Отключение встроенного ведения журнала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: