Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Поддержка OpenTelemetry для Функции Azure сейчас доступна в предварительной версии. См. дополнительные условия использования для предварительных версий Microsoft Azure для юридических условий, применимых к функциям Azure, которые пока недоступны.
В этой статье показано, как настроить приложение-функцию для экспорта данных журнала и трассировки в формате OpenTelemetry. Функции Azure генерирует данные телеметрии для выполнения функций как из процесса узла Функций, так и процесса конкретной рабочей роли, в которой выполняется код функции. По умолчанию эти данные телеметрии отправляются в Application Insights с помощью пакета SDK Application Insights. Однако вы можете экспортировать эти данные с помощью семантики OpenTelemetry. Хотя вы по-прежнему можете использовать формат OpenTelemetry для отправки данных в Application Insights, теперь можно экспортировать те же данные в любую другую конечную точку, совместимую с OpenTelemetry.
Совет
Так как эта статья ориентирована на выбранный язык разработки, не забудьте выбрать правильный язык в верхней части статьи.
В настоящее время OpenTelemetry не поддерживается для приложений внутрипроцессного процесса C#.
Эти преимущества можно получить, включив OpenTelemetry в приложении-функции:
- Сопоставляет данные между трассировками и журналами, создаваемыми как на узле, так и в коде приложения.
- Обеспечивает согласованное создание экспортируемых данных телеметрии на основе стандартов.
- Интегрируется с другими поставщиками, которые могут использовать данные, совместимые с OpenTelemetry.
OpenTelemetry включен на уровне приложения-функции как в конфигурации узла (host.json
), так и в проекте кода. Функции также предоставляют оптимизированный клиентом интерфейс для экспорта данных OpenTelemetry из кода функции, выполняющегося в рабочем процессе для конкретного языка.
Включение OpenTelemetry в узле функций
Если включить выходные данные OpenTelemetry в host.json файле приложения-функции, узел экспортирует выходные данные OpenTelemetry независимо от языкового стека, используемого приложением.
Чтобы включить выходные данные OpenTelemetry из узла Функций, обновите файл host.json в проекте кода, чтобы добавить элемент в корневую "telemetryMode": "OpenTelemetry"
коллекцию. С включенной функцией OpenTelemetry файл host.json может выглядеть следующим образом:
{
"version": "2.0",
"telemetryMode": "OpenTelemetry",
...
}
Настройка параметров приложения
Если в файле host.json включена функция OpenTelemetry, конечные точки, на которые отправляются данные, определяются на основе параметров приложения, поддерживаемых OpenTelemetry, в переменных среды приложения.
Создайте определенные параметры приложения в приложении-функции на основе назначения выходных данных OpenTelemetry. Если параметры подключения предоставляются как для Application Insights, так и для экспортера протокола OpenTelemetry (OTLP), данные OpenTelemetry отправляются в обе конечные точки.
APPLICATIONINSIGHTS_CONNECTION_STRING: строка подключения для рабочей области Application Insights. Если этот параметр существует, данные OpenTelemetry отправляются в эту рабочую область. Этот параметр используется для подключения к Application Insights без включения OpenTelemetry. Если у приложения еще нет этого параметра, может потребоваться включить интеграцию Application Insights.
JAVA_APPLICATIONINSIGHTS_ENABLE_TELEMETRY: установите значение true
, чтобы узел функций позволял рабочему процессу Java передавать журналы OpenTelemetry напрямую, что предотвращает дублирование записей на уровне узла.
PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY: установите значение true
, чтобы узел функций позволял рабочему процессу Python передавать журналы OpenTelemetry напрямую, что предотвращает дублирование записей на уровне узла.
Включение OpenTelemetry в приложении
При настройке узла функций для использования OpenTelemetry также следует обновить код приложения для вывода данных OpenTelemetry. Включение OpenTelemetry как в узле, так и в коде приложения обеспечивает лучшую корреляцию между трассировками и журналами, создаваемыми процессом узла Функций, и с помощью рабочего процесса языка.
Способ инструментирования приложения для использования OpenTelemetry зависит от целевой конечной точки OpenTelemetry:
Примеры в этой статье предполагают, что ваше приложение использует IHostApplicationBuilder
, которое доступно в версии 2.x и более поздних версиях Microsoft.Azure.Functions.Worker. Дополнительные сведения см. в руководстве по изолированной рабочей модели C# версии 2.x .
Выполните следующие команды, чтобы установить необходимые сборки в приложении:
dotnet add package Microsoft.Azure.Functions.Worker.OpenTelemetry --version 1.1.0-preview6 dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package Azure.Monitor.OpenTelemetry.Exporter
Добавьте в файл проекта Program.cs следующее
using
:using Azure.Monitor.OpenTelemetry.Exporter;
Способ настройки OpenTelemetry зависит от того, ли используется
IHostBuilder
илиIHostApplicationBuilder
, который был представлен в версии 2.x расширения изолированной рабочей модели .NET.В program.cs добавьте эту строку кода после
ConfigureFunctionsWebApplication
:builder.Services.AddOpenTelemetry() .UseFunctionsWorkerDefaults() .UseAzureMonitorExporter();
Вы можете экспортировать данные на оба конечных пункта OpenTelemetry из одного приложения.
Добавьте необходимые библиотеки в приложение. Способ добавления библиотек зависит от того, развертываете ли вы с помощью Maven или Kotlin и хотите также отправлять данные в Application Insights.
<dependency> <groupId>com.microsoft.azure.functions</groupId> <artifactId>azure-functions-java-opentelemetry</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.azure</groupId> <artifactId>azure-monitor-opentelemetry-autoconfigure</artifactId> <version>1.2.0</version> </dependency>
При необходимости можно добавить этот код для создания настраиваемых диапазонов:
import com.microsoft.azure.functions.opentelemetry.FunctionsOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.context.Scope; Span span = FunctionsOpenTelemetry.startSpan( "com.contoso.PaymentFunction", // tracer name "validateCharge", // span name null, // parent = current context SpanKind.INTERNAL); try (Scope ignored = span.makeCurrent()) { // business logic here } finally { span.end(); }
Установите эти пакеты npm в проекте:
npm install @opentelemetry/api npm install @opentelemetry/auto-instrumentations-node npm install @azure/monitor-opentelemetry-exporter npm install @azure/functions-opentelemetry-instrumentation
Создайте файл кода в проекте, скопируйте и вставьте следующий код в этот новый файл и сохраните его следующим образом
src/index.js
:const { AzureFunctionsInstrumentation } = require('@azure/functions-opentelemetry-instrumentation'); const { AzureMonitorLogExporter, AzureMonitorTraceExporter } = require('@azure/monitor-opentelemetry-exporter'); const { getNodeAutoInstrumentations, getResourceDetectors } = require('@opentelemetry/auto-instrumentations-node'); const { registerInstrumentations } = require('@opentelemetry/instrumentation'); const { detectResourcesSync } = require('@opentelemetry/resources'); const { LoggerProvider, SimpleLogRecordProcessor } = require('@opentelemetry/sdk-logs'); const { NodeTracerProvider, SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-node'); const resource = detectResourcesSync({ detectors: getResourceDetectors() }); const tracerProvider = new NodeTracerProvider({ resource }); tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new AzureMonitorTraceExporter())); tracerProvider.register(); const loggerProvider = new LoggerProvider({ resource }); loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(new AzureMonitorLogExporter())); registerInstrumentations({ tracerProvider, loggerProvider, instrumentations: [getNodeAutoInstrumentations(), new AzureFunctionsInstrumentation()], });
main
Обновите поле в файле package.json, чтобы включить этот новыйsrc/index.js
файл, который может выглядеть следующим образом:"main": "src/{index.js,functions/*.js}"
Создайте файл кода в проекте, скопируйте и вставьте следующий код в этот новый файл и сохраните его следующим образом
src/index.ts
:import { AzureFunctionsInstrumentation } from '@azure/functions-opentelemetry-instrumentation'; import { AzureMonitorLogExporter, AzureMonitorTraceExporter } from '@azure/monitor-opentelemetry-exporter'; import { getNodeAutoInstrumentations, getResourceDetectors } from '@opentelemetry/auto-instrumentations-node'; import { registerInstrumentations } from '@opentelemetry/instrumentation'; import { detectResourcesSync } from '@opentelemetry/resources'; import { LoggerProvider, SimpleLogRecordProcessor } from '@opentelemetry/sdk-logs'; import { NodeTracerProvider, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node'; const resource = detectResourcesSync({ detectors: getResourceDetectors() }); const tracerProvider = new NodeTracerProvider({ resource }); tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new AzureMonitorTraceExporter())); tracerProvider.register(); const loggerProvider = new LoggerProvider({ resource }); loggerProvider.addLogRecordProcessor(new SimpleLogRecordProcessor(new AzureMonitorLogExporter())); registerInstrumentations({ tracerProvider, loggerProvider, instrumentations: [getNodeAutoInstrumentations(), new AzureFunctionsInstrumentation()], });
main
Обновите поле в файле package.json, чтобы включить выходные данные этого новогоsrc/index.ts
файла, которые могут выглядеть следующим образом:"main": "dist/src/{index.js,functions/*.js}"
Внимание
Выходные данные OpenTelemetry в Application Insights из рабочей роли языка в настоящее время не поддерживаются для приложений PowerShell. Вместо этого можно использовать конечную точку экспортера OTLP. Если узел настроен для выходных данных OpenTelemetry в Application Insights, журналы, созданные рабочим процессом PowerShell, по-прежнему перенаправляются, но распределенная трассировка в настоящее время не поддерживается.
Эти инструкции применяются только для экспортера OTLP:
Добавьте параметр приложения с именем
OTEL_FUNCTIONS_WORKER_ENABLED
со значениемTrue
.Создайте папку
Modules
уровня приложения в корне приложения и выполните следующую команду:Save-Module -Name AzureFunctions.PowerShell.OpenTelemetry.SDK
Это устанавливает необходимый
AzureFunctions.PowerShell.OpenTelemetry.SDK
модуль непосредственно в приложении.requirements.psd1
Невозможно использовать файл для автоматической установки этой зависимости, так как управляемые зависимости в настоящее время не поддерживаются в предварительной версии плана потребления Flex.Добавьте этот код в файл profile.ps1:
Import-Module AzureFunctions.PowerShell.OpenTelemetry.SDK -Force -ErrorAction Stop Initialize-FunctionsOpenTelemetry
Убедитесь, что эти библиотеки присутствуют в файле
requirements.txt
, путем снятия комментариев или добавления их вручную.azure-monitor-opentelemetry
Добавьте этот код в
function_app.py
файл основной точки входа:Если вы уже добавили
PYTHON_APPLICATIONINSIGHTS_ENABLE_TELEMETRY=true
в параметры приложения, этот шаг можно пропустить. Чтобы вручную включить коллекцию Application Insights без автоматического инструментирования, добавьте этот код в приложение:from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor()
Ознакомьтесь с документацией по использованию дистрибутива Azure Monitor , чтобы узнать, как настроить пакет SDK.
Рекомендации по OpenTelemetry
При экспорте данных с помощью OpenTelemetry следует учитывать эти текущие рекомендации.
В настоящее время поддерживаются только триггеры HTTP, служебной шины и Центров событий с выходными данными OpenTelemetry.
Если узел настроен для использования OpenTelemetry, портал Azure не поддерживает потоковую передачу журналов или последние трассировки вызовов функций.
Пользовательские диапазоны автоматически включают все атрибуты ресурсов и используют экспортеры, настроенные в приложении.
Когда приложение выполняется за пределами Azure, включая локальную разработку, детектор ресурсов задает
service.name
атрибутjava-function-app
по умолчанию.Используйте эти флаги виртуальной машины Java (JVM) для отключения телеметрии при локальной работе в модульных тестах.
-Dotel.traces.exporter=none
-Dotel.metrics.exporter=none
-Dotel.logs.exporter=none
- Вам не требуется вручную регистрировать ПО промежуточного слоя; рабочий процесс Java автоматически обнаруживает
OpenTelemetryInvocationMiddleware
.
- Диагностика функций Azure на портале Azure — это полезный ресурс для обнаружения и диагностики потенциальных проблем, связанных с мониторингом.
Чтобы получить доступ к диагностике в приложении, выполните приведенные далее действия.
На портале Azure перейдите к ресурсу приложения-функции.
На левой панели выберите "Диагностика и устранение проблем" и найдите приложение-функцию, отсутствующее в приложении телеметрии Application Insights или рабочем процессе OpenTelemetry .
Выберите этот рабочий процесс, выберите метод приема и нажмите кнопку "Далее".
Ознакомьтесь с инструкциями и рекомендациями, предоставленными средством устранения неполадок.