Jak przeprowadzić inspekcję operacji płaszczyzny sterowania usługi Azure Cosmos DB

DOTYCZY: Nosql Mongodb Cassandra Gremlin Tabeli

Płaszczyzna sterowania w usłudze Azure Cosmos DB to usługa RESTful, która umożliwia wykonywanie zróżnicowanego zestawu operacji na koncie usługi Azure Cosmos DB. Uwidacznia publiczny model zasobów (na przykład bazę danych, konto) i różne operacje dla użytkowników końcowych w celu wykonywania akcji w modelu zasobów. Operacje płaszczyzny sterowania obejmują zmiany konta lub kontenera usługi Azure Cosmos DB. Na przykład operacje, takie jak tworzenie konta usługi Azure Cosmos DB, dodawanie regionu, aktualizowanie przepływności, tryb failover regionu, dodawanie sieci wirtualnej itp. to niektóre operacje płaszczyzny sterowania. W tym artykule wyjaśniono, jak przeprowadzić inspekcję operacji płaszczyzny sterowania w usłudze Azure Cosmos DB. Operacje płaszczyzny sterowania na kontach usługi Azure Cosmos DB można uruchamiać przy użyciu interfejsu wiersza polecenia platformy Azure, programu PowerShell lub Azure Portal, podczas gdy w przypadku kontenerów użyj interfejsu wiersza polecenia platformy Azure lub programu PowerShell.

Poniżej przedstawiono przykładowe scenariusze, w których pomocne jest przeprowadzanie inspekcji operacji płaszczyzny sterowania:

  • Chcesz uzyskać alert po zmodyfikowaniu reguł zapory dla konta usługi Azure Cosmos DB. Alert jest wymagany do znalezienia nieautoryzowanych modyfikacji reguł, które zarządzają zabezpieczeniami sieci konta usługi Azure Cosmos DB i podejmują szybkie działania.

  • Chcesz uzyskać alert, jeśli nowy region zostanie dodany lub usunięty z konta usługi Azure Cosmos DB. Dodawanie lub usuwanie regionów ma wpływ na wymagania dotyczące rozliczeń i niezależności danych. Ten alert pomoże Ci wykryć przypadkowe dodanie lub usunięcie regionu na koncie.

  • Chcesz uzyskać więcej szczegółów z dzienników diagnostycznych dotyczących tego, co się zmieniło. Na przykład sieć wirtualna została zmieniona.

Wyłączanie dostępu do zapisu metadanych opartych na kluczach

Przed inspekcją operacji płaszczyzny sterowania w usłudze Azure Cosmos DB wyłącz dostęp do zapisu metadanych opartych na kluczach na koncie. Gdy dostęp do zapisu metadanych opartych na kluczach jest wyłączony, klienci łączący się z kontem usługi Azure Cosmos DB za pośrednictwem kluczy kont nie mogą uzyskiwać dostępu do konta. Dostęp do zapisu można wyłączyć, ustawiając disableKeyBasedMetadataWriteAccess właściwość na true. Po ustawieniu tej właściwości zmiany w dowolnym zasobie mogą wystąpić od użytkownika z odpowiednią rolą i poświadczeniami platformy Azure. Aby dowiedzieć się więcej na temat ustawiania tej właściwości, zobacz artykuł Zapobieganie zmianom z zestawów SDK .

Po włączeniu disableKeyBasedMetadataWriteAccess tego elementu, jeśli klienci oparty na zestawie SDK uruchamiają operacje tworzenia lub aktualizowania, zwracany jest błąd "Operacja POST" dla zasobu "ContainerNameorDatabaseName" za pośrednictwem punktu końcowego usługi Azure Cosmos DB . Musisz włączyć dostęp do takich operacji dla konta lub wykonać operacje tworzenia/aktualizacji za pomocą usługi Azure Resource Manager, interfejsu wiersza polecenia platformy Azure lub Azure PowerShell. Aby przełączyć się z powrotem, ustaw wartość disableKeyBasedMetadataWriteAccess na false przy użyciu interfejsu wiersza polecenia platformy Azure zgodnie z opisem w artykule Zapobieganie zmianom z zestawu SDK usługi Azure Cosmos DB . Pamiętaj, aby zmienić wartość disableKeyBasedMetadataWriteAccess na false zamiast true.

Podczas wyłączania dostępu do zapisu metadanych należy wziąć pod uwagę następujące kwestie:

  • Oceń i upewnij się, że aplikacje nie wykonują wywołań metadanych, które zmieniają powyższe zasoby (na przykład utwórz kolekcję, zaktualizuj przepływność, ...) przy użyciu zestawu SDK lub kluczy konta.

  • Po disableKeyBasedMetadataWriteAccess ustawieniu wartości true operacje metadanych wystawione przez zestaw SDK są blokowane. Możesz też użyć Azure Portal, interfejsu wiersza polecenia platformy Azure, Azure PowerShell lub wdrożeń szablonów usługi Azure Resource Manager w celu wykonania tych operacji.

Włączanie dzienników diagnostycznych dla operacji płaszczyzny sterowania

Dzienniki diagnostyczne dla operacji płaszczyzny sterowania można włączyć przy użyciu Azure Portal. Po włączeniu dzienniki diagnostyczne będą rejestrować operację jako parę początkowych i kompletnych zdarzeń z odpowiednimi szczegółami. Na przykład regionFailoverStart i RegionFailoverComplete zakończą zdarzenie trybu failover regionu.

Aby włączyć rejestrowanie na płaszczyźnie sterowania, wykonaj następujące czynności:

  1. Zaloguj się do Azure Portal i przejdź do konta usługi Azure Cosmos DB.

  2. Otwórz okienko Ustawienia diagnostyczne , podaj nazwę dla dzienników do utworzenia.

  3. Wybierz pozycję ControlPlaneRequests jako typ dziennika i wybierz opcję Wyślij do usługi Log Analytics .

  4. Opcjonalnie wyślij dzienniki diagnostyczne do usługi Azure Storage, Azure Event Hubs, usługi Azure Monitor lub innej firmy.

Dzienniki można również przechowywać na koncie magazynu lub przesyłać strumieniowo do centrum zdarzeń. W tym artykule pokazano, jak wysyłać dzienniki do analizy dzienników, a następnie wykonywać zapytania o nie. Po włączeniu dzienników diagnostycznych może upłynąć kilka minut. Wszystkie operacje płaszczyzny sterowania wykonywane po tym punkcie można śledzić. Poniższy zrzut ekranu przedstawia sposób włączania dzienników płaszczyzny sterowania:

Włączanie rejestrowania żądań płaszczyzny sterowania

Wyświetlanie operacji płaszczyzny sterowania

Po włączeniu rejestrowania wykonaj następujące kroki, aby śledzić operacje dla określonego konta:

  1. Zaloguj się w witrynie Azure Portal.

  2. Otwórz kartę Monitor z nawigacji po lewej stronie, a następnie wybierz okienko Dzienniki . Zostanie otwarty interfejs użytkownika, w którym można łatwo uruchamiać zapytania z określonym kontem w zakresie. Uruchom następujące zapytanie, aby wyświetlić dzienniki płaszczyzny sterowania:

    AzureDiagnostics
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="ControlPlaneRequests"
    | where TimeGenerated >= ago(1h)
    

    Poniższe zrzuty ekranu przechwytują dzienniki po zmianie poziomu spójności dla konta usługi Azure Cosmos DB. Wartość activityId_g z wyników różni się od identyfikatora działania operacji:

    Płaszczyzna sterowania rejestruje się po dodaniu sieci wirtualnej

    Poniższe zrzuty ekranu przechwytują dzienniki podczas tworzenia przestrzeni kluczy lub tabeli konta Cassandra oraz aktualizowania przepływności. Dzienniki płaszczyzny sterowania dla operacji tworzenia i aktualizowania bazy danych oraz kontenera są rejestrowane oddzielnie, jak pokazano na poniższym zrzucie ekranu:

    Dzienniki płaszczyzny sterowania po zaktualizowaniu przepływności

Identyfikowanie tożsamości skojarzonej z określoną operacją

Jeśli chcesz jeszcze bardziej debugować, możesz zidentyfikować określoną operację w dzienniku aktywności przy użyciu activityId_g znacznika czasu operacji lub. Sygnatura czasowa jest używana dla niektórych klientów Resource Manager, w których identyfikator działania nie jest jawnie przekazywany. Dziennik aktywności zawiera szczegółowe informacje o tożsamości, z którą zainicjowano operację. Poniższy zrzut ekranu przedstawia sposób znajdowania operacji skojarzonych z nim w dzienniku aktywności za pomocą polecenia activityId_g :

Użyj identyfikatora działania i znajdź operacje

Operacje płaszczyzny sterowania dla konta usługi Azure Cosmos DB

Poniżej przedstawiono operacje płaszczyzny sterowania dostępne na poziomie konta. Większość operacji jest śledzonych na poziomie konta. Te operacje są dostępne jako metryki w usłudze Azure Monitor:

  • Dodano region
  • Usunięto region
  • Konto usunięte
  • Przejście w tryb failover w regionie
  • Utworzone konto
  • Usunięto sieć wirtualną
  • Zaktualizowano ustawienia sieci konta
  • Zaktualizowano ustawienia replikacji konta
  • Zaktualizowano klucze konta
  • Zaktualizowano ustawienia kopii zapasowej konta
  • Zaktualizowano ustawienia diagnostyczne konta

Operacje płaszczyzny sterowania dla bazy danych lub kontenerów

Poniżej przedstawiono operacje płaszczyzny sterowania dostępne na poziomie bazy danych i kontenera. Te operacje są dostępne jako metryki w usłudze Azure Monitor:

  • SQL Database utworzone
  • SQL Database zaktualizowano
  • SQL Database zaktualizowano przepływność
  • SQL Database usunięte
  • Utworzony kontener SQL
  • Zaktualizowano kontener SQL
  • Zaktualizowano przepływność kontenera SQL
  • Usunięty kontener SQL
  • Utworzono przestrzeń kluczy Cassandra
  • Zaktualizowano przestrzeń kluczy Cassandra
  • Zaktualizowano przepływność usługi Cassandra Keyspace
  • Usunięto przestrzeń kluczy Cassandra
  • Utworzona tabela Cassandra
  • Zaktualizowano tabelę Cassandra
  • Zaktualizowano przepływność tabeli Cassandra
  • Usunięto tabelę Cassandra
  • Utworzono bazę danych języka Gremlin
  • Zaktualizowano bazę danych języka Gremlin
  • Zaktualizowano przepływność bazy danych Gremlin
  • Usunięto bazę danych Języka Gremlin
  • Utworzony wykres Gremlin
  • Zaktualizowano wykres Gremlin
  • Zaktualizowano przepływność grafu Gremlin
  • Usunięto graf gremlin
  • Utworzono bazę danych Mongo
  • Zaktualizowano bazę danych Mongo
  • Zaktualizowano przepływność bazy danych Mongo
  • Usunięto bazę danych Mongo
  • Utworzono kolekcję Mongo
  • Zaktualizowano kolekcję Mongo
  • Zaktualizowano przepływność kolekcji Mongo
  • Usunięto kolekcję Mongo
  • Utworzono tabelę AzureTable
  • Zaktualizowano tabelę AzureTable
  • Zaktualizowano przepływność tabeli AzureTable
  • Usunięto tabelę AzureTable

Operacje dziennika diagnostycznego

Poniżej przedstawiono nazwy operacji w dziennikach diagnostycznych dla różnych operacji:

  • RegionAddStart, RegionAddComplete
  • RegionRemoveStart, RegionRemoveComplete
  • AccountDeleteStart, AccountDeleteComplete
  • RegionFailoverStart, RegionFailoverComplete
  • AccountCreateStart, AccountCreateComplete
  • AccountUpdateStart, AccountUpdateComplete
  • VirtualNetworkDeleteStart, VirtualNetworkDeleteComplete
  • DiagnosticLogUpdateStart, DiagnosticLogUpdateComplete

W przypadku operacji specyficznych dla interfejsu API operacja ma następujący format:

  • ApiKind + ApiKindResourceType + OperationType
  • ApiKind + ApiKindResourceType + "Przepływność" + typ operacji

Przykład

  • CassandraKeyspacesTworzenie
  • CassandraKeyspacesUpdate
  • CassandraKeyspacesThroughputUpdate
  • SqlContainersUpdate

Właściwość ResourceDetails zawiera całą treść zasobu jako ładunek żądania i zawiera wszystkie właściwości wymagane do zaktualizowania

Zapytania dziennika diagnostycznego dotyczące operacji płaszczyzny sterowania

Poniżej przedstawiono kilka przykładów pobierania dzienników diagnostycznych dla operacji płaszczyzny sterowania:

AzureDiagnostics 
| where Category startswith "ControlPlane"
| where OperationName contains "Update"
| project httpstatusCode_s, statusCode_s, OperationName, resourceDetails_s, activityId_g
AzureDiagnostics 
| where Category =="ControlPlaneRequests"
| where TimeGenerated >= todatetime('2020-05-14T17:37:09.563Z')
| project TimeGenerated, OperationName, apiKind_s, apiKindResourceType_s, operationType_s, resourceDetails_s
AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName startswith "SqlContainersUpdate"
AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName startswith "SqlContainersThroughputUpdate"

Wykonaj zapytanie w celu pobrania identyfikatora activityId i obiektu wywołującego, który zainicjował operację usuwania kontenera:

(AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName == "SqlContainersDelete"
| where TimeGenerated >= todatetime('9/3/2020, 5:30:29.300 PM')
| summarize by activityId_g )
| join (
AzureActivity
| parse HTTPRequest with * "clientRequestId\": \"" activityId_g "\"" * 
| summarize by Caller, HTTPRequest, activityId_g)
on activityId_g
| project Caller, activityId_g

Wykonaj zapytanie w celu pobrania aktualizacji indeksu lub czasu wygaśnięcia. Następnie możesz porównać dane wyjściowe tego zapytania z wcześniejszą aktualizacją, aby zobaczyć zmianę indeksu lub czasu wygaśnięcia.

AzureDiagnostics
| where Category =="ControlPlaneRequests"
| where  OperationName == "SqlContainersUpdate"
| project resourceDetails_s

Wyjście:

{id:skewed,indexingPolicy:{automatic:true,indexingMode:consistent,includedPaths:[{path:/*,indexes:[]}],excludedPaths:[{path:/_etag/?}],compositeIndexes:[],spatialIndexes:[]},partitionKey:{paths:[/pk],kind:Hash},defaultTtl:1000000,uniqueKeyPolicy:{uniqueKeys:[]},conflictResolutionPolicy:{mode:LastWriterWins,conflictResolutionPath:/_ts,conflictResolutionProcedure:}

Następne kroki