Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Пакеты SDK для .NET и Java для Azure Cosmos DB поддерживают распределенную трассировку для мониторинга приложений. Трассировка выполнения запросов полезна при отладке, анализе задержки и производительности, а также сборе диагностических данных. Инструментальная трассировка для ваших приложений с помощью OpenTelemetry, которая является нейтральной в отношении поставщиков и имеет набор семантических соглашений для обеспечения стандартизированного формата данных независимо от выбранного экспортера, или используйте пакет SDK Application Insights или дистрибутив OpenTelemetry Azure Monitor.
Начало работы
Распределенная трассировка доступна в следующих пакетах SDK:
| SDK | Поддерживаемая версия | Примечания. |
|---|---|---|
| Пакет SDK версии 3 для .NET |
>= 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, а также предоставляют несколько настраиваемых атрибутов. Вы можете видеть различные атрибуты в зависимости от операции запроса, и эти атрибуты являются основными атрибутами для всех запросов.
| Атрибут | Тип | Описание: |
|---|---|---|
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 |
INT | Код состояния запроса. |
db.cosmosdb.sub_status_code |
INT | Код подстатуса для запроса. |
db.cosmosdb.request_charge |
двойной | RUs, потребляемые для операции. |
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)
}
},
};
Вы можете настроить уровень журналирования, чтобы управлять тем, какие диагностические журналы вы получаете.
| Уровень журнала | Описание: |
|---|---|
| Ошибка | Журналы только для ошибок. |
| Предупреждение | Журналы ошибок и запросов с высокой задержкой на основе настроенных пороговых значений. |
| Информация | Журналы определенного уровня информации отсутствуют. Журналы на этом уровне такие же, как при использовании уровня "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 Distro.
В этом примере показано, как настроить 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.