Dela via


Diagnostisera och felsöka problem med Azure Cosmos DB .NET SDK

GÄLLER FÖR: NoSQL

Den här artikeln beskriver vanliga problem, lösningar, diagnostiksteg och verktyg när du använder .NET SDK med Azure Cosmos DB för NoSQL-konton. .NET SDK tillhandahåller logisk representation på klientsidan för åtkomst till Azure Cosmos DB för NoSQL. I den här artikeln beskrivs verktyg och metoder för att hjälpa dig om du stöter på problem.

Checklista för felsökningsproblem

Överväg följande checklista innan du flyttar programmet till produktion. Om du använder checklistan förhindras flera vanliga problem som du kan se. Du kan också snabbt diagnostisera när ett problem uppstår:

  • Använd den senaste SDK:en. Förhandsversions-SDK:er bör inte användas för produktion. Detta förhindrar att kända problem som redan har åtgärdats uppstår.
  • Granska prestandatipsen och följ de föreslagna metoderna. Detta hjälper till att förhindra skalning, svarstid och andra prestandaproblem.
  • Aktivera SDK-loggning för att felsöka ett problem. Aktivering av loggning kan påverka prestanda så det är bäst att aktivera den endast när du felsöker problem. Du kan aktivera följande loggar:
    • Logga mått med hjälp av Azure Portal. Portalmått visar Telemetri för Azure Cosmos DB, vilket är användbart för att avgöra om problemet motsvarar Azure Cosmos DB eller om det är från klientsidan.
    • Logga diagnostiksträngen från åtgärderna och/eller undantagen.

Ta en titt på avsnittet Vanliga problem och lösningar i den här artikeln.

Kontrollera avsnittet GitHub-problem som övervakas aktivt. Kontrollera om något liknande problem med en lösning redan har lämnats in. Om du inte hittar någon lösning kan du skapa ett GitHub-problem. Du kan öppna en support-tick för brådskande problem.

Samla in diagnostik

Alla svar i SDK, inklusive CosmosException, har en Diagnostics egenskap. Den här egenskapen registrerar all information som rör den enskilda begäran, inklusive om det fanns återförsök eller tillfälliga fel.

Diagnostiken returneras som en sträng. Strängen ändras med varje version eftersom den har förbättrats för felsökning av olika scenarier. Med varje version av SDK:t har strängen icke-bakåtkompatibla ändringar i formateringen. Parsa inte strängen för att undvika icke-bakåtkompatibla ändringar. Följande kodexempel visar hur du läser diagnostikloggar med hjälp av .NET SDK:

try
{
    ItemResponse<Book> response = await this.Container.CreateItemAsync<Book>(item: testItem);
    if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan)
    {
        // Log the response.Diagnostics.ToString() and add any additional info necessary to correlate to other logs 
    }
}
catch (CosmosException cosmosException)
{
    // Log the full exception including the stack trace with: cosmosException.ToString()
    
    // The Diagnostics can be logged separately if required with: cosmosException.Diagnostics.ToString()
}

// When using Stream APIs
ResponseMessage response = await this.Container.CreateItemStreamAsync(partitionKey, stream);
if (response.Diagnostics.GetClientElapsedTime() > ConfigurableSlowRequestTimeSpan || !response.IsSuccessStatusCode)
{
    // Log the diagnostics and add any additional info necessary to correlate to other logs with: response.Diagnostics.ToString()
}

Vanliga fel och lösningar

Allmänna förslag

  • Följ alla aka.ms länkar som ingår i undantagsinformationen.
  • Kör din app i samma Azure-region som ditt Azure Cosmos DB-konto när det är möjligt.
  • Du kan stöta på problem med anslutning/tillgänglighet på grund av brist på resurser på klientdatorn. Vi rekommenderar att du övervakar processoranvändningen på noder som kör Azure Cosmos DB-klienten och skalar upp/ut om de körs med hög belastning.

Kontrollera portalmåtten

Genom att kontrollera portalmåtten kan du avgöra om det är ett problem på klientsidan eller om det finns ett problem med tjänsten. Om måtten till exempel innehåller en hög frekvens av hastighetsbegränsade begäranden (HTTP-statuskod 429) vilket innebär att begäran begränsas kontrollerar du avsnittet Begärandefrekvens för stor .

Designa om

Se vår guide för att utforma motståndskraftiga program med Azure Cosmos DB SDK:er för vägledning om hur du utformar motståndskraftiga program och lär dig vilka som är SDK:s återförsökssemantik.

SNAT

Om din app distribueras på virtuella Azure-datorer utan en offentlig IP-adress upprättar Azure SNAT-portar som standard anslutningar till valfri slutpunkt utanför den virtuella datorn. Antalet anslutningar som tillåts från den virtuella datorn till Azure Cosmos DB-slutpunkten begränsas av Azure SNAT-konfigurationen. Den här situationen kan leda till anslutningsbegränsning, anslutningsstängning eller ovan nämnda tidsgränser för begäranden.

Azure SNAT-portar används endast när den virtuella datorn har en privat IP-adress som ansluter till en offentlig IP-adress. Det finns två lösningar för att undvika Azure SNAT-begränsning (förutsatt att du redan använder en enda klientinstans i hela programmet):

  • Lägg till azure Cosmos DB-tjänstslutpunkten i undernätet för ditt virtuella Azure Virtual Machines-nätverk. Mer information finns i Tjänstslutpunkter för Azure Virtual Network.

    När tjänstslutpunkten är aktiverad skickas inte längre begäranden från en offentlig IP-adress till Azure Cosmos DB. I stället skickas det virtuella nätverket och undernätets identitet. Den här ändringen kan leda till att brandväggen tas bort om endast offentliga IP-adresser tillåts. Om du använder en brandvägg lägger du till ett undernät i brandväggen med hjälp av ACL:er för virtuella nätverk när du aktiverar tjänstslutpunkten.

  • Tilldela en offentlig IP-adress till din virtuella Azure-dator.

Hög nätverksfördröjning

Mer information om felsökning av svarstider finns i felsökningsguiden för svarstider.

Fel vid proxyautentisering

Om du ser fel som visas som HTTP 407:

Response status code does not indicate success: ProxyAuthenticationRequired (407);

Det här felet genereras inte av SDK:t och kommer inte heller från Azure Cosmos DB-tjänsten. Det här är ett fel som beror på nätverkskonfigurationen. En proxy i din nätverkskonfiguration saknar troligen den proxyautentisering som krävs. Om du inte förväntar dig proxyanvändning kontaktar du ditt nätverksteam. Om du använder en proxy kontrollerar du att du ställer in rätt WebProxy-konfigurationCosmosClientOptions.WebProxy när du skapar klientinstansen.

Vanliga frågeproblem

Frågemåtten hjälper dig att avgöra var frågan används för det mesta. Från frågemåtten kan du se hur mycket av det som spenderas på serverdelen jämfört med klienten. Läs mer i frågeprestandaguiden.

Om du får följande fel: Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies: och använder Windows bör du uppgradera till den senaste Windows-versionen.

Nästa steg