Azure Cosmos DB SDK 可檢視性
適用於:NoSQL
Azure Cosmos DB .NET 和 Java SDK 支援分散式追蹤,以協助您監視應用程式。 追蹤要求流程有助於偵錯、分析延遲和效能,以及收集診斷。 使用 OpenTelemetry 來檢測應用程式的追蹤,而 OpenTelemetry 與廠商無關,並且具有一組語意慣例來確保標準化資料格式 (不論您所選擇的匯出工具為何),或使用 Application Insights SDK 或 Azure 監視器 OpenTelemetry Distro。
開始使用
下列 SDK 提供分散式追蹤:
SDK | 支援的版本 | 備註 |
---|---|---|
.NET v3 SDK | >= 3.36.0 |
此功能適用於預覽和非預覽版本。 針對非預覽版本,預設為關閉。 您可以在 中CosmosClientOptions.CosmosClientTelemetryOptions 設定 DisableDistributedTracing = false ,以啟用追蹤。 |
.NET v3 SDK 預覽 | >= 3.33.0-preview |
此功能適用於預覽和非預覽版本。 針對預覽版本,預設為開啟。 您可以在 CosmosClientOptions.CosmosClientTelemetryOptions 中設定 DisableDistributedTracing = true 來停用追蹤。 |
Java v4 SDK | >= 4.43.0 |
追蹤屬性
Azure Cosmos DB 追蹤會遵循 OpenTelemetry 資料庫規格,同時提供數個自訂屬性。 視要求作業而定,您可以看到不同的屬性,而這些屬性是所有要求的核心屬性。
屬性 | 類型 | 描述 |
---|---|---|
net.peer.name |
string | Azure Cosmos DB 主機名稱。 |
db.name |
string | Azure Cosmos DB 資料庫名稱。 |
db.system |
string | 資料庫服務的識別碼。 是所有要求的 cosmosdb 。 |
db.operation |
string | 作業名稱,例如 CreateItemAsync . |
db.cosmosdb.container |
string | Azure Cosmos DB 容器名稱。 |
db.cosmosdb.client_id |
string | 代表唯一用戶端執行個體的識別碼。 |
db.cosmosdb.operation_type |
string | 作業類型,例如 Create . |
db.cosmosdb.connection_mode |
string | 用戶端連線模式。 direct 或 gateway 。 |
db.cosmosdb.status_code |
int | 要求的狀態碼。 |
db.cosmosdb.sub_status_code |
int | 要求的子狀態碼。 |
db.cosmosdb.request_charge |
double | 用於作業的 RU。 |
db.cosmosdb.regions_contacted |
string | Azure Cosmos DB 帳戶中所連絡區域的清單。 |
user_agent.original |
string | Azure Cosmos DB SDK 所產生的完整使用者代理人字串。 |
收集診斷
如果您在追蹤提供者中設定記錄,您可以針對失敗或有高延遲的 Azure Cosmos DB 要求自動取得 診斷 。 這些記錄可協助您診斷失敗和緩慢要求,而不需要任何自訂程式碼來進行擷取。
除了取得失敗要求的診斷記錄之外,您還可以針對何時從成功要求收集診斷設定不同的延遲閾值。 點作業的預設值為 100 毫秒,非點作業的預設值為 500 毫秒。 這些閾值可透過客戶端選項進行調整。
CosmosClientOptions options = new CosmosClientOptions()
{
CosmosClientTelemetryOptions = new CosmosClientTelemetryOptions()
{
DisableDistributedTracing = false,
CosmosThresholdOptions = new CosmosThresholdOptions()
{
PointOperationLatencyThreshold = TimeSpan.FromMilliseconds(100),
NonPointOperationLatencyThreshold = TimeSpan.FromMilliseconds(500)
}
},
};
您可以設定記錄層級來控制您所收到的診斷記錄。
記錄層級 | 描述 |
---|---|
錯誤 | 僅限錯誤的記錄。 |
警告 | 根據已設定的臨界值,記錄錯誤和高延遲要求。 |
資訊 | 沒有特定資訊層級記錄。 此層級中的記錄與使用「警告」相同。 |
根據您的應用程式環境,有不同的方式可以設定記錄層級。 以下是 appSettings.json
中的範例設定:
{
"Logging": {
"LogLevel": {
"Azure-Cosmos-Operation-Request-Diagnostics": "Information"
}
}
}
設定 OpenTelemetry
若要搭配使用 OpenTelemetry 與 Azure Cosmos DB SDK,請將 Azure.Cosmos.Operation
來源新增至您的追蹤提供者。 OpenTelemetry 與許多可內嵌資料的匯出工具相容。 下列範例使用 Azure Monitor OpenTelemetry Exporter
,但您可以選擇設定您想要的任何匯出工具。 視您選擇的導出工具而定,您可能會看到最多幾分鐘的延遲擷取數據。
提示
如果您使用 Azure.Monitor.OpenTelemetry.Exporter
套件,則請確定使用版本 >= 1.0.0-beta.11
。
如果您要使用 ASP.NET Core 和 Azure 監視器,則建議您改用 Azure 監視器 OpenTelemetry Distro。
此範例顯示如何設定 .NET 主控台應用程式的 OpenTelemetry。 請參閱 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();
設定 Application Insights SDK
根據應用程式的撰寫語言和計算環境,有許多方式可以設定 Application Insights。 如需詳細資訊,請參閱 Application Insights 文件。 將數據擷取到 Application Insights 最多可能需要幾分鐘的時間。
注意
針對目標 .NET 環境,使用版本 >= 2.22.0-beta2
的 Application Insights 套件。
下列範例顯示如何設定 .NET 主控台應用程式的 Application Insights。 請參閱 GitHub 上的完整範例。
IServiceCollection services = new ServiceCollection();
services.AddApplicationInsightsTelemetryWorkerService((ApplicationInsightsServiceOptions options) => options.ConnectionString = aiConnectionString);
IServiceProvider serviceProvider = services.BuildServiceProvider();
telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>();
將追蹤資料內嵌至 Application Insights 之後,您可以在 Azure 入口網站中將其可視化,以瞭解應用程式中的要求流程。 以下範例說明來自 Azure 入口網站左側導覽中交易搜尋內跨分割區查詢的追蹤資料。