Sdílet prostřednictvím


Diagnostika a řešení potíží při používání sady .NET SDK služby Azure Cosmos DB

PLATÍ PRO: NoSQL

Tento článek se zabývá běžnými problémy, alternativními řešeními, diagnostickými kroky a nástroji při použití sady .NET SDK s účty Azure Cosmos DB for NoSQL. Sada .NET SDK poskytuje logickou reprezentaci na straně klienta pro přístup ke službě Azure Cosmos DB for NoSQL. Tento článek popisuje nástroje a přístupy, které vám pomůžou v případě jakýchkoli problémů.

Kontrolní seznam pro řešení potíží

Než aplikaci přesunete do produkčního prostředí, zvažte následující kontrolní seznam. Použití kontrolního seznamu zabrání několika běžným problémům, které se můžou zobrazit. Můžete také rychle diagnostikovat, kdy dojde k problému:

  • Použijte nejnovější sadu SDK. Sady Preview SDK by se neměly používat pro produkční prostředí. Tím zabráníte dosažení známých problémů, které už jsou opravené.
  • Projděte si tipy k výkonu a postupujte podle navrhovaných postupů. To pomůže zabránit škálování, latenci a dalším problémům s výkonem.
  • Povolte protokolování sady SDK, abyste mohli problém vyřešit. Povolení protokolování může mít vliv na výkon, takže je nejlepší ho povolit jenom při řešení problémů. Můžete povolit následující protokoly:
    • Protokolujte metriky pomocí webu Azure Portal. Metriky portálu ukazují telemetrii služby Azure Cosmos DB, která je užitečná k určení, jestli problém odpovídá službě Azure Cosmos DB nebo jestli se nachází na straně klienta.
    • Protokolujte řetězec diagnostiky z operací nebo výjimek.

Podívejte se na část Běžné problémy a alternativní řešení v tomto článku.

Projděte si část s problémy GitHubu, která je aktivně monitorovaná. Zkontrolujte, jestli už není nějaký podobný problém s alternativním řešením. Pokud jste nenašli řešení, vytvořte problém na GitHubu. Můžete otevřít zaškrtnutí podpory pro naléhavé problémy.

Zachytávání diagnostiky

Všechny odpovědi v sadě SDK, včetně CosmosException, mají Diagnostics vlastnost. Tato vlastnost zaznamenává všechny informace související s jedním požadavkem, včetně toho, jestli došlo k opakovaným pokusům nebo přechodným selháním.

Diagnostika se vrátí jako řetězec. Řetězec se mění s každou verzí, protože se vylepšuje pro řešení potíží s různými scénáři. U každé verze sady SDK bude řetězec obsahovat zásadní změny formátování. Řetězec neza parsujte, abyste se vyhnuli zásadním změnám. Následující ukázka kódu ukazuje, jak číst diagnostické protokoly pomocí sady .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()
}

Běžné problémy a alternativní řešení

Obecné návrhy

  • Postupujte podle libovolného aka.ms odkazu, který je součástí podrobností o výjimce.
  • Kdykoli je to možné, spusťte aplikaci ve stejné oblasti Azure jako účet služby Azure Cosmos DB.
  • Kvůli nedostatku prostředků na klientském počítači můžete narazit na problémy s připojením nebo dostupností. Doporučujeme monitorovat využití procesoru na uzlech, na kterých běží klient Azure Cosmos DB, a vertikálně navyšovat nebo navyšovat kapacitu, pokud běží s vysokým zatížením.

Kontrola metrik portálu

Kontrola metrik portálu vám pomůže určit, jestli se jedná o problém na straně klienta nebo jestli došlo k problému se službou. Pokud například metriky obsahují vysokou rychlost požadavků omezených rychlostí (stavový kód HTTP 429), což znamená, že požadavek se omezuje, zkontrolujte příliš velkou část Frekvence požadavků.

Návrh opakování

Pokyny k návrhu odolných aplikací pomocí sad SDK služby Azure Cosmos DB najdete v našem průvodci návrhem odolných aplikací a informace o sémantice opakování sady SDK.

SNAT

Pokud je vaše aplikace nasazená ve službě Azure Virtual Machines bez veřejné IP adresy, navazují ve výchozím nastavení porty Azure SNAT připojení k libovolnému koncovému bodu mimo váš virtuální počítač. Počet připojení povolených z virtuálního počítače ke koncovému bodu služby Azure Cosmos DB je omezený konfigurací Azure SNAT. Tato situace může vést k omezování připojení, uzavření připojení nebo výše uvedeným vypršením časového limitu požadavku.

Porty Azure SNAT se používají jenom v případech, kdy se váš virtuální počítač připojuje k veřejné IP adrese. Existují dvě alternativní řešení, jak se vyhnout omezení Azure SNAT (za předpokladu, že už používáte jednu instanci klienta v celé aplikaci):

  • Přidejte koncový bod služby Azure Cosmos DB do podsítě virtuální sítě Azure Virtual Machines. Další informace najdete v tématu Koncové body služby Azure Virtual Network.

    Když je koncový bod služby povolený, požadavky se už do Azure Cosmos DB neposílají z veřejné IP adresy. Místo toho se odešle identita virtuální sítě a podsítě. Tato změna může vést k poklesu brány firewall, pokud jsou povoleny pouze veřejné IP adresy. Pokud používáte bránu firewall, když povolíte koncový bod služby, přidejte do brány firewall podsíť pomocí seznamů ACL virtuální sítě.

  • Přiřaďte virtuálnímu počítači Azure veřejnou IP adresu.

Vysoká latence sítě

Podrobnosti o řešení potíží s latencí najdete v našem průvodci odstraňováním potíží s latencí.

Selhání ověřování proxy serveru

Pokud se zobrazí chyby, které se zobrazují jako HTTP 407:

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

Tato chyba není generována sadou SDK ani ze služby Azure Cosmos DB. Jedná se o chybu související s konfigurací sítě. V konfiguraci sítě pravděpodobně chybí požadované ověření proxy serveru. Pokud použití proxy serveru neočekáváte, obraťte se na síťový tým. Pokud používáte proxy server, ujistěte se, že při vytváření instance klienta nastavujete správnou konfiguraci WebProxy ve službě CosmosClientOptions.WebProxy.

Běžné problémy s dotazy

Metriky dotazů vám pomůžou určit, kde dotaz tráví většinu času. Z metrik dotazů můžete zjistit, kolik z toho se stráví back-endem a klientem. Přečtěte si další informace o průvodci výkonem dotazů.

Pokud dojde k následující chybě: Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies: a používáte Windows, měli byste upgradovat na nejnovější verzi Windows.

Další kroky