Поделиться через


Наблюдаемость пакета SDK для Azure Cosmos DB

Пакеты SDK для .NET и Java для Azure Cosmos DB поддерживают распределенную трассировку для мониторинга приложений. Трассировка потока запросов полезна при отладке, анализе задержки и производительности и сборе диагностики. Трассировка инструментов для приложений с помощью OpenTelemetry, которая является нейтральной поставщиком и имеет набор семантических соглашений, чтобы обеспечить стандартизованный формат данных независимо от выбранного экспортера, или использовать пакет SDK Application Insights или дистрибутив OpenTelemetry Azure Monitor.

Начало работы

Распределенная трассировка доступна в следующих пакетах SDK:

SDK Поддерживаемая версия Примечания.
Пакет SDK для .NET версии 3 >= 3.36.0 Эта функция доступна как в предварительной версии, так и в версиях, отличных от предварительной версии. Для версий, отличных от предварительной версии, она отключена по умолчанию. Вы можете включить трассировку, задав параметр DisableDistributedTracing = false в CosmosClientOptions.CosmosClientTelemetryOptions.
Предварительная версия пакета SDK для .NET версии 3 >= 3.33.0-preview Эта функция доступна как в предварительной версии, так и в версиях, отличных от предварительной версии. Для предварительных версий он включен по умолчанию. Трассировку можно отключить, задав параметр DisableDistributedTracing = true, CosmosClientOptions.CosmosClientTelemetryOptions.
Пакет SDK для Java версии 4 >= 4.43.0

Атрибуты трассировки

Трассировки Azure Cosmos DB соответствуют спецификации базы данных OpenTelemetry , а также предоставляют несколько настраиваемых атрибутов. Вы можете видеть различные атрибуты в зависимости от операции запроса, и эти атрибуты являются основными атрибутами для всех запросов.

Свойство Тип Description
net.peer.name струна Имя узла Azure Cosmos DB.
db.name струна Имя базы данных Azure Cosmos DB.
db.system струна Идентификатор службы базы данных. Является cosmosdb для всех запросов.
db.operation струна Имя операции, например. CreateItemAsync.
db.cosmosdb.container струна Имя контейнера Azure Cosmos DB.
db.cosmosdb.client_id струна Идентификатор, представляющий уникальный экземпляр клиента.
db.cosmosdb.operation_type струна Тип операции, например. Create.
db.cosmosdb.connection_mode струна Режим подключения клиента. direct или gateway.
db.cosmosdb.status_code инт Код состояния запроса.
db.cosmosdb.sub_status_code инт Код субстатуса для запроса.
db.cosmosdb.request_charge двойной RU, потребленные в процессе операции.
db.cosmosdb.regions_contacted струна Список регионов, связаемых с учетной записью Azure Cosmos DB.
user_agent.original струна Полная строка user-agent, генерируемая SDK для Azure Cosmos DB.

Сбор диагностических данных

Если вы настроили журналы в поставщике трассировки, вы можете автоматически получить диагностику для запросов Azure Cosmos DB, которые завершились сбоем или имели высокую задержку. Эти журналы помогают диагностировать неудачные и медленные запросы, не требуя написания пользовательского кода для их фиксации.

Помимо получения журналов диагностики для неудачных запросов, можно настроить различные пороговые значения задержки для сбора диагностики из успешных запросов. Значения по умолчанию — 1 секунду для операций с точками и 3 секунды для операций, не относящихся к точкам. Эти пороговые значения можно настроить с помощью параметров клиента.

CosmosClientOptions options = new CosmosClientOptions()
{
    CosmosClientTelemetryOptions = new CosmosClientTelemetryOptions()
    {
        DisableDistributedTracing = false,
        CosmosThresholdOptions = new CosmosThresholdOptions()
        {
            PointOperationLatencyThreshold = TimeSpan.FromMilliseconds(100),
            NonPointOperationLatencyThreshold = TimeSpan.FromMilliseconds(500)
        }
    },
};

Вы можете настроить уровень журнала для управления получаемыми журналами диагностики.

Уровень журнала Description
Ошибка Ведение журналов только для ошибок.
Предупреждение Журналы ошибок и запросов с высокой задержкой на основе настроенных пороговых значений.
Информация Журналы определенного уровня информации отсутствуют. Логи на этом уровне эквивалентны использованию Warning.

В зависимости от среды приложения существуют различные способы настройки уровня журнала. Ниже приведен пример конфигурации в appSettings.json:

{ 
    "Logging": {​
        "LogLevel": {​
            "Azure-Cosmos-Operation-Request-Diagnostics": "Information"​
        }​
    }
}

Настройка OpenTelemetry

Чтобы использовать OpenTelemetry с SDK Azure Cosmos DB, добавьте источник Azure.Cosmos.Operation в поставщик трассировки. OpenTelemetry совместим со многими экспортерами, которые позволяют получать данные. В следующем примере используется Azure Monitor OpenTelemetry Exporter, но вы можете настроить любой экспортер, который вам нужен. В зависимости от выбранного экспортера может появиться задержка приема данных до нескольких минут.

Подсказка

Если вы используете Azure.Monitor.OpenTelemetry.Exporter пакет, убедитесь, что вы используете версию >= 1.0.0-beta.11. Если вы используете ASP.NET Core и Azure Monitor, рекомендуется использовать дистрибутив Azure Monitor OpenTelemetry .

В этом примере показано, как настроить OpenTelemetry для консольного приложения .NET. Полный пример см. на сайте GitHub.

ResourceBuilder resource = ResourceBuilder.CreateDefault().AddService(
            serviceName: serviceName,
            serviceVersion: "1.0.0");

// Set up logging to forward logs to chosen exporter
using ILoggerFactory loggerFactory
    = LoggerFactory.Create(builder => builder
                                        .AddConfiguration(configuration.GetSection("Logging"))
                                        .AddOpenTelemetry(options =>
                                        {
                                            options.IncludeFormattedMessage = true;
                                            options.SetResourceBuilder(resource);
                                            options.AddAzureMonitorLogExporter(o => o.ConnectionString = aiConnectionString); // Set up exporter of your choice
                                        }));
/*.AddFilter(level => level == LogLevel.Error) // Filter  is irrespective of event type or event name*/

AzureEventSourceLogForwarder logforwader = new AzureEventSourceLogForwarder(loggerFactory);
logforwader.Start();

// Configure OpenTelemetry trace provider
AppContext.SetSwitch("Azure.Experimental.EnableActivitySource", true);
_traceProvider = Sdk.CreateTracerProviderBuilder()
    .AddSource("Azure.Cosmos.Operation", // Cosmos DB source for operation level telemetry
               "Sample.Application") 
    .AddAzureMonitorTraceExporter(o => o.ConnectionString = aiConnectionString) // Set up exporter of your choice
    .AddHttpClientInstrumentation() // Added to capture HTTP telemetry
    .SetResourceBuilder(resource)
    .Build();

Настройте SDK для Application Insights

Существует множество различных способов настройки Application Insights в зависимости от языка, в который записывается приложение, и в вычислительной среде. Дополнительные сведения см. в документации по Application Insights. Прием данных в Application Insights может занять до нескольких минут.

Замечание

Используйте версию >= 2.22.0-beta2 пакета Application Insights для целевой среды .NET.

В следующем примере показано, как настроить Application Insights для консольного приложения .NET. Полный пример см. на сайте GitHub.

IServiceCollection services = new ServiceCollection();
services.AddApplicationInsightsTelemetryWorkerService((ApplicationInsightsServiceOptions options) => options.ConnectionString = aiConnectionString);

IServiceProvider serviceProvider = services.BuildServiceProvider();
telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>();

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

Снимок экрана: распределенная трассировка запроса между секциями Azure Cosmos DB в поиске транзакций Application Insights.

Дальнейшие шаги