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

DOTYCZY: NoSQL MongoDB Kasandra Gremlin Stół

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 ona publiczny model zasobów (na przykład baza 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 na koncie lub kontenerze 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 przeprowadzać 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 witryny Azure Portal, natomiast 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, gdy reguły zapory dla konta usługi Azure Cosmos DB zostaną zmodyfikowane. 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 twoim 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 przeprowadzeniem inspekcji 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.

disableKeyBasedMetadataWriteAccess Jeśli klienci z zestawem SDK uruchamiają operacje tworzenia lub aktualizowania zestawu SDK, zwracany jest błąd "Operacja POST" zasobu "ContainerNameorDatabaseName" jest niedozwolona 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 programu Azure PowerShell. Aby przełączyć się z powrotem, ustaw wartość disableKeyBasedMetadataWriteAccess na false przy użyciu interfejsu wiersza polecenia platformy Azure. Pamiętaj, aby zmienić wartość disableKeyBasedMetadataWriteAccess na false zamiast wartości 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. Alternatywnie możesz użyć witryny Azure Portal, interfejsu wiersza polecenia platformy Azure, programu 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 witryny Azure Portal. Po włączeniu dzienniki diagnostyczne będą rejestrować operację jako parę zdarzeń początkowych i kompletnych z odpowiednimi szczegółami. Na przykład regionFailoverStart i RegionFailoverComplete zakończą zdarzenie trybu failover regionu.

Aby włączyć rejestrowanie operacji płaszczyzny sterowania, wykonaj następujące czynności:

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

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

  3. Wybierz pozycję ControlPlaneRequests dla typu 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, 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 usługi Log Analytics, a następnie wykonywać względem nich zapytania. 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ę Monitorowanie w obszarze nawigacji po lewej stronie, a następnie wybierz okienko Dzienniki. Spowoduje to otwarcie interfejsu 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:

    Dzienniki płaszczyzny sterowania po dodaniu sieci wirtualnej

    Poniższe zrzuty ekranu przechwytują dzienniki podczas tworzenia przestrzeni kluczy lub tabeli konta Cassandra i aktualizowania przepływności. Dzienniki płaszczyzny sterowania dotyczące 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 dodatkowo 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 usługi Resource Manager, w których identyfikator działania nie jest jawnie przekazywany. Dziennik aktywności zawiera szczegółowe informacje o tożsamości, za pomocą której zainicjowano operację. Poniższy zrzut ekranu przedstawia sposób użycia elementu activityId_g w celu znalezienia operacji skojarzonych z nim w dzienniku aktywności:

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 śledzona na poziomie konta. Te operacje są dostępne jako metryki w usłudze Azure Monitor:

  • Dodano region
  • Usunięto region
  • Konto usunięte
  • Przełączony region w tryb failover
  • 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:

  • Utworzono bazę danych SQL Database
  • Zaktualizowano bazę danych SQL Database
  • Zaktualizowano przepływność usługi SQL Database
  • Usunięto bazę danych SQL
  • Utworzony kontener SQL
  • Zaktualizowano kontener SQL
  • Zaktualizowano przepływność kontenera SQL
  • Usunięto kontener SQL
  • Utworzono usługę Cassandra Keyspace
  • Zaktualizowano przestrzeń kluczy Cassandra
  • Zaktualizowano przepływność usługi Cassandra Keyspace
  • Usunięto przestrzeń kluczy Cassandra
  • Utworzono tabelę 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 języka Gremlin
  • Zaktualizowano przepływność programu Gremlin Graph
  • Usunięto wykres języka 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 żądane 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, aby pobrać identyfikator activityId i obiekt wywołujący, 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

output:

{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