Diagnozowanie i rozwiązywanie problemów podczas korzystania z zestawu .NET SDK usługi Azure Cosmos DB
DOTYCZY: NoSQL
W tym artykule opisano typowe problemy, obejścia, kroki diagnostyczne i narzędzia podczas korzystania z zestawu SDK platformy .NET z kontami usługi Azure Cosmos DB for NoSQL. Zestaw .NET SDK zapewnia logiczną reprezentację po stronie klienta w celu uzyskania dostępu do usługi Azure Cosmos DB for NoSQL. W tym artykule opisano narzędzia i podejścia pomocne w przypadku napotkania jakichkolwiek problemów.
Lista kontrolna rozwiązywania problemów
Przed przeniesieniem aplikacji do środowiska produkcyjnego należy wziąć pod uwagę następującą listę kontrolną. Użycie listy kontrolnej uniemożliwi kilka typowych problemów, które mogą wystąpić. Możesz również szybko zdiagnozować, gdy wystąpi problem:
- Użyj najnowszego zestawu SDK. Zestawy SDK w wersji zapoznawczej nie powinny być używane w środowisku produkcyjnym. Zapobiegnie to osiągnięciu znanych problemów, które zostały już rozwiązane.
- Zapoznaj się z poradami dotyczącymi wydajności i postępuj zgodnie z sugerowanymi rozwiązaniami. Pomoże to zapobiec skalowaniu, opóźnieniu i innym problemom z wydajnością.
- Włącz rejestrowanie zestawu SDK, aby ułatwić rozwiązywanie problemu. Włączenie rejestrowania może mieć wpływ na wydajność, dlatego najlepiej włączyć je tylko podczas rozwiązywania problemów. Możesz włączyć następujące dzienniki:
- Metryki dzienników przy użyciu witryny Azure Portal. Metryki portalu pokazują telemetrię usługi Azure Cosmos DB, która jest przydatna do określenia, czy problem odpowiada usłudze Azure Cosmos DB, czy też jest po stronie klienta.
- Zarejestruj ciąg diagnostyczny z operacji i/lub wyjątków.
Zapoznaj się z sekcją Typowe problemy i obejścia w tym artykule.
Zapoznaj się z sekcją Problemów z usługą GitHub, która jest aktywnie monitorowana. Sprawdź, czy wystąpił już podobny problem z obejściem. Jeśli nie znajdziesz rozwiązania, zgłoś problem z usługą GitHub. Możesz otworzyć znacznik pomocy technicznej w przypadku pilnych problemów.
Przechwytywanie danych diagnostycznych
Wszystkie odpowiedzi w zestawie SDK, w tym CosmosException
, mają Diagnostics
właściwość . Ta właściwość rejestruje wszystkie informacje związane z pojedynczym żądaniem, w tym w przypadku ponownych prób lub błędów przejściowych.
Diagnostyka jest zwracana jako ciąg. Ciąg zmienia się wraz z każdą wersją, ponieważ został ulepszony do rozwiązywania problemów z różnymi scenariuszami. W przypadku każdej wersji zestawu SDK ciąg będzie miał zmiany powodujące niezgodność w formatowaniu. Nie analizuj ciągu, aby uniknąć zmian powodujących niezgodność. Poniższy przykładowy kod pokazuje, jak odczytywać dzienniki diagnostyczne przy użyciu zestawu SDK platformy .NET:
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()
}
Typowe problemy i ich rozwiązania
Sugestie ogólne
- Postępuj zgodnie z dowolnym
aka.ms
linkiem zawartym w szczegółach wyjątku. - Uruchom aplikację w tym samym regionie świadczenia usługi Azure co konto usługi Azure Cosmos DB, jeśli to możliwe.
- Problemy z łącznością/dostępnością mogą wystąpić z powodu braku zasobów na maszynie klienckiej. Zalecamy monitorowanie użycia procesora CPU na węzłach z uruchomionym klientem usługi Azure Cosmos DB i skalowanie w górę/w poziomie, jeśli są uruchomione przy dużym obciążeniu.
Sprawdzanie metryk portalu
Sprawdzenie metryk portalu pomoże określić, czy jest to problem po stronie klienta, czy występuje problem z usługą. Jeśli na przykład metryki zawierają wysoką częstotliwość żądań ograniczonych szybkością (kod stanu HTTP 429), co oznacza, że żądanie jest ograniczane, sprawdź zbyt dużą sekcję Częstotliwość żądań.
Ponawianie próby projektu
Zapoznaj się z naszym przewodnikiem dotyczącym projektowania odpornych aplikacji przy użyciu zestawów SDK usługi Azure Cosmos DB, aby uzyskać wskazówki dotyczące projektowania odpornych aplikacji i dowiedz się, które są semantyka ponawiania próby zestawu SDK.
SNAT
Jeśli aplikacja jest wdrażana na maszynach wirtualnych platformy Azure bez publicznego adresu IP, domyślnie porty SNAT platformy Azure nawiązują połączenia z dowolnym punktem końcowym poza maszyną wirtualną. Liczba połączeń dozwolonych z maszyny wirtualnej do punktu końcowego usługi Azure Cosmos DB jest ograniczona przez konfigurację protokołu SNAT platformy Azure. Taka sytuacja może prowadzić do ograniczenia przepustowości połączenia, zamknięcia połączenia lub wymienionych powyżej limitów czasu żądania.
Porty SNAT platformy Azure są używane tylko wtedy, gdy maszyna wirtualna ma prywatny adres IP, łączy się z publicznym adresem IP. Istnieją dwa obejścia, aby uniknąć ograniczenia usługi Azure SNAT (pod warunkiem, że używasz już pojedynczego wystąpienia klienta w całej aplikacji):
Dodaj punkt końcowy usługi Azure Cosmos DB do podsieci sieci wirtualnej usługi Azure Virtual Machines. Aby uzyskać więcej informacji, zobacz Punkty końcowe usługi Azure Virtual Network.
Po włączeniu punktu końcowego usługi żądania nie są już wysyłane z publicznego adresu IP do usługi Azure Cosmos DB. Zamiast tego są wysyłane tożsamości sieci wirtualnej i podsieci. Ta zmiana może spowodować porzucenie zapory, jeśli dozwolone są tylko publiczne adresy IP. Jeśli używasz zapory, po włączeniu punktu końcowego usługi dodaj podsieć do zapory przy użyciu list ACL sieci wirtualnej.
Przypisz publiczny adres IP do maszyny wirtualnej platformy Azure.
Duże opóźnienie sieci
Zobacz nasz przewodnik rozwiązywania problemów z opóźnieniami, aby uzyskać szczegółowe informacje na temat rozwiązywania problemów z opóźnieniami.
Błędy uwierzytelniania serwera proxy
Jeśli zobaczysz błędy, które są wyświetlane jako HTTP 407:
Response status code does not indicate success: ProxyAuthenticationRequired (407);
Ten błąd nie jest generowany przez zestaw SDK ani pochodzi z usługi Azure Cosmos DB. Jest to błąd związany z konfiguracją sieci. Serwer proxy w konfiguracji sieci najprawdopodobniej nie ma wymaganego uwierzytelniania serwera proxy. Jeśli nie będziesz używać serwera proxy, skontaktuj się z zespołem ds. sieci. Jeśli używasz serwera proxy, upewnij się, że podczas tworzenia wystąpienia klienta ustawiasz właściwą konfigurację webproxy w usłudze CosmosClientOptions.WebProxy.
Typowe problemy z zapytaniami
Metryki zapytań pomogą określić, gdzie zapytanie spędza większość czasu. Z metryk zapytania możesz zobaczyć, ile z niego jest wydawane na zapleczu a klientem. Dowiedz się więcej na temat przewodnika dotyczącego wydajności zapytań.
Jeśli wystąpi następujący błąd: Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies:
i używasz systemu Windows, należy przeprowadzić uaktualnienie do najnowszej wersji systemu Windows.