Korzystanie z baz danych obserwowanych
Funkcja bazy danych obserwowanej umożliwia dołączenie bazy danych znajdującej się w innym klastrze do klastra usługi Azure Data Explorer. Baza danych obserwowanych jest dołączona w trybie tylko do odczytu, umożliwiając wyświetlanie danych i uruchamianie zapytań dotyczących danych pozyskanych do bazy danych lidera. Baza danych obserwowanych synchronizuje zmiany w bazach danych liderów. Ze względu na synchronizację opóźnienie danych może potrwać od kilku sekund do kilku minut w dostępności danych. Długość opóźnienia zależy od ogólnego rozmiaru metadanych bazy danych lidera. Bazy danych liderów i obserwowanych używają tego samego konta magazynu, aby pobrać dane. Magazyn jest własnością bazy danych lidera. Baza danych obserwowanych wyświetla dane bez konieczności ich pozyskiwania. Ponieważ dołączona baza danych jest bazą danych tylko do odczytu, nie można modyfikować danych, tabel i zasad w bazie danych z wyjątkiem zasad buforowania, podmiotów zabezpieczeń i uprawnień. Nie można usunąć dołączonych baz danych. Muszą być odłączone przez lidera lub zwolennika, a dopiero wtedy można je usunąć.
Dołączanie bazy danych do innego klastra przy użyciu funkcji obserwowania jest używane jako infrastruktura do udostępniania danych między organizacjami i zespołami. Funkcja jest przydatna do segregowania zasobów obliczeniowych w celu ochrony środowiska produkcyjnego przed przypadkami użycia nieprodukcyjnymi. Za pomocą narzędzia obserwowanego można również skojarzyć koszt klastra usługi Azure Data Explorer z partią, która uruchamia zapytania dotyczące danych.
Przykłady kodu oparte na poprzednich wersjach zestawu SDK można znaleźć w zarchiwizowanym artykule.
Które bazy danych są obserwowane?
- Klaster może podążać za jedną bazą danych, kilkoma bazami danych lub wszystkimi bazami danych klastra lidera.
- Pojedynczy klaster może podążać za bazami danych z wielu klastrów liderów.
- Klaster może zawierać zarówno bazy danych obserwowanych, jak i wiodące bazy danych.
Wymagania wstępne
- Subskrypcja platformy Azure. Utwórz bezpłatne konto platformy Azure.
- Klaster i baza danych usługi Azure Data Explorer dla lidera i obserwowanego. Utwórz klaster i bazę danych.
- Baza danych lidera powinna zawierać dane. Dane można pozyskiwać przy użyciu jednej z metod omówionych w omówieniu pozyskiwania.
Dołączanie bazy danych
Istnieją różne metody, których można użyć do dołączania bazy danych. W tym artykule omówiono dołączanie bazy danych przy użyciu języka C#, Python, programu PowerShell lub szablonu usługi Azure Resource Manager. Aby dołączyć bazę danych, musisz mieć użytkownika, grupę, jednostkę usługi lub tożsamość zarządzaną z co najmniej rolą współautora w klastrze liderów i klastrem obserwowanym. Dodawanie lub usuwanie przypisań ról przy użyciu witryny Azure Portal, programu PowerShell, interfejsu wiersza polecenia platformy Azure i szablonu usługi ARM. Dowiedz się więcej na temat kontroli dostępu opartej na rolach (RBAC) platformy Azure i różnych ról.
Uwaga
Wstępne utworzenie bazy danych obserwowanej nie jest konieczne, ponieważ jest ona tworzona podczas procesu załącznika.
Udostępnianie na poziomie tabeli
Podczas dołączania bazy danych wszystkie tabele są również obserwowane tabele zewnętrzne i zmaterializowane widoki. Określone tabele/tabele zewnętrzne/zmaterializowane widoki można udostępniać, konfigurując właściwość "TableLevelSharingProperties".
Element "TableLevelSharingProperties" zawiera osiem tablic ciągów: tablesToInclude
, , , externalTablesToInclude
externalTablesToExclude
tablesToExclude
, materializedViewsToExclude
materializedViewsToInclude
, functionsToInclude
, i functionsToExclude
. Maksymalna liczba wpisów we wszystkich tablicach wynosi 100.
Uwaga
- Udostępnianie na poziomie tabeli nie jest obsługiwane w przypadku używania notacji "*" wszystkich baz danych.
- Po dołączeniu zmaterializowanych widoków ich tabele źródłowe również są uwzględniane.
Przykłady
Poniższy przykład zawiera wszystkie tabele. Domyślnie wszystkie tabele są obserwowane bez użycia notacji "*":
tablesToInclude = []
Poniższy przykład obejmuje wszystkie funkcje. Domyślnie wszystkie funkcje są obserwowane bez użycia notacji "*":
functionsToInclude = []
Poniższy przykład obejmuje wszystkie tabele o nazwach rozpoczynających się od "Dzienniki":
tablesToInclude = ["Logs*"]
Poniższy przykład obejmuje wszystkie tabele zewnętrzne:
externalTablesToExclude = ["*"]
Poniższy przykład obejmuje wszystkie zmaterializowane widoki:
materializedViewsToExclude=["*"]
Zastępowanie nazwy bazy danych
Opcjonalnie możesz ustawić nazwę bazy danych w klastrze obserwowanym inaczej niż klaster liderów. Możesz na przykład dołączyć tę samą nazwę bazy danych z wielu klastrów liderów do klastra obserwowanego. Aby określić inną nazwę bazy danych, skonfiguruj właściwość "DatabaseNameOverride" lub "DatabaseNamePrefix".
Dołączanie bazy danych przy użyciu języka C#
Wymagane pakiety NuGet
- Zainstaluj narzędzie Azure.ResourceManager.Kusto.
- Zainstaluj usługę Azure.Identity na potrzeby uwierzytelniania.
Przykład w języku C#
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfigurations = cluster.GetKustoAttachedDatabaseConfigurations();
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new KustoAttachedDatabaseConfigurationData
{
ClusterResourceId = new ResourceIdentifier($"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}"),
DatabaseName = "<databaseName>", // Can be a specific database name in a leader cluster or * for all databases
DefaultPrincipalsModificationKind = KustoDatabaseDefaultPrincipalsModificationKind.Union,
Location = AzureLocation.NorthCentralUS
};
// Table level sharing properties are not supported when using '*' all databases notation.
if (attachedDatabaseConfigurationData.DatabaseName != "*")
{
// Set up the table level sharing properties - the following is just an example.
attachedDatabaseConfigurationData.TableLevelSharingProperties = new KustoDatabaseTableLevelSharingProperties();
attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToInclude.Add("table1");
attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToExclude.Add("table2");
attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToExclude.Add("exTable1");
attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToInclude.Add("exTable2");
attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToInclude.Add("matTable1");
attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToExclude.Add("matTable2");
attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToInclude.Add("func1");
attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToExclude.Add("func2");
}
await attachedDatabaseConfigurations.CreateOrUpdateAsync(WaitUntil.Completed, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData);
Sprawdź, czy baza danych została pomyślnie dołączona
Aby sprawdzić, czy baza danych została pomyślnie dołączona, znajdź dołączone bazy danych w witrynie Azure Portal. Możesz sprawdzić, czy bazy danych zostały pomyślnie dołączone w klastrach obserwowanych lub liderów.
Sprawdzanie klastra obserwowanych
Przejdź do klastra obserwowanego i wybierz pozycję Bazy danych.
Na liście baz danych wyszukaj nowe bazy danych tylko do odczytu.
Tę listę można również wyświetlić na stronie przeglądu bazy danych:
Sprawdzanie klastra liderów
Przejdź do klastra lidera i wybierz pozycję Bazy danych
Sprawdź, czy odpowiednie bazy danych są oznaczone jako UDOSTĘPNIONE INNYM TAK>
Przełącz link relacji, aby wyświetlić szczegóły.
Można to również wyświetlić na stronie przeglądu bazy danych:
Odłącz bazę danych obserwowanych
Uwaga
Aby odłączyć bazę danych od obserwowanej lub wiodącej strony, musisz mieć użytkownika, grupę, jednostkę usługi lub tożsamość zarządzaną z co najmniej rolą współautora w klastrze, z którego odłączasz bazę danych. W poniższym przykładzie używamy jednostki usługi.
Odłącz dołączoną bazę danych obserwowanych z klastra obserwowanego przy użyciu języka C#**
Klaster obserwowania może odłączyć dowolną dołączoną bazę danych obserwowanych w następujący sposób:
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfiguration = (await cluster.GetKustoAttachedDatabaseConfigurationAsync(attachedDatabaseConfigurationsName)).Value;
await attachedDatabaseConfiguration.DeleteAsync(WaitUntil.Completed);
Odłącz dołączoną bazę danych obserwowanych od klastra lidera przy użyciu języka C#
Klaster liderów może odłączyć dowolną dołączoną bazę danych w następujący sposób:
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, leaderSubscriptionId);
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(leaderResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(leaderClusterName)).Value;
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerResourceGroupName = "followerResourceGroup";
//The cluster and attached database configuration that are created as part of the Prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var followerDatabaseDefinition = new KustoFollowerDatabaseDefinition(
clusterResourceId: new ResourceIdentifier($"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}"),
attachedDatabaseConfigurationName: attachedDatabaseConfigurationsName
);
await cluster.DetachFollowerDatabasesAsync(WaitUntil.Completed, followerDatabaseDefinition);
Zarządzanie zasadami podmiotów zabezpieczeń, uprawnień i buforowania
Zarządzanie podmiotami zabezpieczeń
Podczas dołączania bazy danych określ "domyślny rodzaj modyfikacji podmiotów zabezpieczeń". Wartością domyślną jest połączenie przesłonięć autoryzowanych podmiotów zabezpieczeń z kolekcją bazy danych lidera autoryzowanych podmiotów zabezpieczeń
Rodzaj | Opis |
---|---|
Unia | Dołączone podmioty zabezpieczeń bazy danych zawsze będą zawierać oryginalne podmioty zabezpieczeń bazy danych oraz inne nowe podmioty zabezpieczeń dodane do bazy danych obserwowanej bazy danych. |
Replace | Brak dziedziczenia podmiotów zabezpieczeń z oryginalnej bazy danych. Dla dołączonej bazy danych należy utworzyć nowe podmioty zabezpieczeń. |
Brak | Dołączone podmioty zabezpieczeń bazy danych obejmują tylko podmioty zabezpieczeń oryginalnej bazy danych bez innych podmiotów zabezpieczeń. |
Aby uzyskać więcej informacji na temat używania poleceń zarządzania do konfigurowania autoryzowanych podmiotów zabezpieczeń, zobacz Zarządzanie poleceniami do zarządzania klastrem obserwowanym.
Zarządzaj uprawnieniami
Zarządzanie uprawnieniami bazy danych tylko do odczytu jest takie samo jak w przypadku wszystkich typów baz danych. Aby przypisać uprawnienia, zobacz Zarządzanie uprawnieniami bazy danych w witrynie Azure Portal lub użyj poleceń zarządzania do zarządzania rolami zabezpieczeń bazy danych.
Konfigurowanie zasad buforowania
Administrator bazy danych obserwowanej może zmodyfikować zasady buforowania dołączonej bazy danych lub dowolnej z jej tabel w klastrze hostingu. Ustawieniem domyślnym jest połączenie źródłowej bazy danych w bazie danych klastra wiodącego i zasad buforowania na poziomie tabeli z zasadami zdefiniowanymi w bazie danych i zasadach zastępowania na poziomie tabeli. Możesz na przykład mieć 30-dniowe zasady buforowania w bazie danych lidera do uruchamiania raportowania miesięcznego i trzydniowe zasady buforowania w bazie danych obserwowanych, aby wykonywać zapytania tylko o ostatnie dane na potrzeby rozwiązywania problemów. Aby uzyskać więcej informacji na temat używania poleceń zarządzania do konfigurowania zasad buforowania w bazie danych lub tabeli obserwowanej, zobacz Zarządzanie poleceniami do zarządzania klastrem obserwowanych.
Uwagi
- Jeśli występują konflikty między bazami danych klastrów liderów/obserwowanych, gdy po wszystkich bazach danych następuje klaster obserwowany, są one rozwiązywane w następujący sposób:
- Baza danych o nazwie DB utworzona w klastrze obserwowanym ma pierwszeństwo przed bazą danych o tej samej nazwie, która została utworzona w klastrze liderów. Dlatego baza danych bazy danych w klastrze obserwowanym musi zostać usunięta lub zmieniona nazwa klastra obserwowanego w celu uwzględnienia bazy danych lidera.
- Baza danych o nazwie DB, po której następuje co najmniej dwa klastry liderów, zostanie dowolnie wybrana z jednego z klastrów liderów i nie będzie obserwowana więcej niż raz.
- Polecenia służące do wyświetlania dziennika aktywności i historii klastra uruchomionego w klastrze obserwowanym będą pokazywać aktywność i historię w klastrze obserwowanym, a ich zestawy wyników nie będą zawierać tych wyników klastra lub klastrów liderów.
- Na przykład: polecenie uruchamiane
.show queries
w klastrze obserwowanym spowoduje wyświetlenie tylko zapytań uruchamianych w bazach danych, po których następuje klaster obserwowany, a nie zapytania uruchamiane względem tej samej bazy danych w klastrze liderów.
- Na przykład: polecenie uruchamiane
Ograniczenia
- Obserwowanie i klastry liderów muszą znajdować się w tym samym regionie.
- Jeśli pozyskiwanie przesyłania strumieniowego jest używane w bazie danych, która jest obserwowana, klaster obserwowany powinien być włączony na potrzeby pozyskiwania danych przesyłania strumieniowego, aby zezwolić na następujące dane pozyskiwania strumieniowego.
- Stosowanie klastra z szyfrowaniem danych przy użyciu kluczy zarządzanych przez klienta (CMK) jest obsługiwane z następującymi ograniczeniami:
- Ani klaster kontynuacji, ani klaster liderów nie są obserwowane w innych klastrach.
- Jeśli klaster obserwowany jest po klastrze liderów z włączonym kluczem CMK, a dostęp lidera do klucza zostanie odwołany, zarówno lider, jak i klastry monitora zostaną zawieszone. W takiej sytuacji można rozwiązać problem z kluczem cmK, a następnie wznowić klaster monitora lub odłączyć bazy danych obserwowanych z klastra monitora i wznowić działanie niezależnie od klastra lidera.
- Nie można usunąć bazy danych dołączonej do innego klastra przed odłączeniem.
- Nie można usunąć klastra, który ma bazę danych dołączoną do innego klastra przed odłączeniem go.
- Właściwości udostępniania na poziomie tabeli nie są obsługiwane w przypadku wykonywania wszystkich baz danych.
- W kolejnych bazach danych, aby wysyłać zapytania do tabel zewnętrznych używających tożsamości zarządzanej jako metody uwierzytelniania, tożsamość zarządzana musi zostać dodana do klastra obserwowanego. Ta funkcja nie działa, gdy lider i klastry obserwowane są aprowidowane w różnych dzierżawach.