Sdílet prostřednictvím


Použití databází sledujících

Funkce databáze follower umožňuje připojit databázi umístěnou v jiném clusteru k vašemu clusteru Azure Data Explorer. Databáze sledujících je připojena v režimu jen pro čtení, což umožňuje zobrazit data a spouštět dotazy na data ingestovaná do vedoucí databáze. Databáze sledujících synchronizuje změny v vodicích databázích. Kvůli synchronizaci dochází k prodlevě dat v dostupnosti několika sekund až několika minut. Délka časové prodlevy závisí na celkové velikosti metadat vodicí databáze. Databáze leaderů a sledujících používají k načtení dat stejný účet úložiště. Vlastníkem úložiště je vedoucí databáze. Databáze sledujícího data zobrazí, aniž by je potřebovala ingestovat. Vzhledem k tomu, že připojená databáze je jen pro čtení, data, tabulky a zásady v databázi nelze upravovat s výjimkou zásad ukládání do mezipaměti, objektů zabezpečení a oprávnění. Připojené databáze nelze odstranit. Musí být odpojeny vedoucím nebo sledujícími a teprve potom mohou být odstraněny.

Připojení databáze k jinému clusteru pomocí funkce sledujícího se používá jako infrastruktura pro sdílení dat mezi organizacemi a týmy. Tato funkce je užitečná k oddělení výpočetních prostředků za účelem ochrany produkčního prostředí před neprodukčními případy použití. Sledování se dá také použít k přidružení nákladů na cluster Azure Data Explorer straně, která spouští dotazy na data.

Ukázky kódu založené na předchozích verzích sady SDK najdete v archivovaného článku.

Které databáze se používají?

  • Cluster může sledovat jednu databázi, několik databází nebo všechny databáze vedoucího clusteru.
  • Jeden cluster může sledovat databáze z několika vedoucích clusterů.
  • Cluster může obsahovat databáze sledujících i vedoucí databáze.

Požadavky

Připojení databáze

Existují různé metody, které můžete použít k připojení databáze. V tomto článku probereme připojení databáze pomocí jazyka C#, Pythonu, PowerShellu nebo šablony Azure Resource Manager. Pokud chcete připojit databázi, musíte mít uživatele, skupinu, instanční objekt nebo spravovanou identitu s alespoň rolí přispěvatele v vedoucím clusteru a clusteru sledujících. Přidání nebo odebrání přiřazení rolí pomocí Azure Portal, PowerShellu, Azure CLI a šablony ARM Přečtěte si další informace o řízení přístupu na základě role v Azure (Azure RBAC) a různých rolích.

Sdílení na úrovni tabulky

Při připojování databáze se dodržují také všechny tabulky, externí tabulky a materializovaná zobrazení. Můžete sdílet konkrétní tabulky, externí tabulky nebo materializovaná zobrazení tak, že nakonfigurujete vlastnosti TableLevelSharingProperties.

TableLevelSharingProperties obsahuje osm polí řetězců: tablesToInclude, , tablesToExclude, externalTablesToInclude, externalTablesToExclude, materializedViewsToInclude, , materializedViewsToExclude, functionsToIncludea functionsToExclude. Maximální počet položek ve všech polích dohromady je 100.

Poznámka

  • Sdílení na úrovni tabulky není podporováno při použití notace "*" všech databází.
  • Pokud jsou zahrnutá materializovaná zobrazení, zahrnou se i jejich zdrojové tabulky.

Příklady

  1. Zahrnout všechny tabulky Není potřeba žádný znak *, protože ve výchozím nastavení následují všechny tabulky:

    tablesToInclude = []
    
  2. Zahrňte všechny tabulky s názvy, které začínají na "Logs":

    tablesToInclude = ["Logs*"]
    
  3. Vyloučit všechny externí tabulky:

    externalTablesToExclude = ["*"]
    
  4. Vyloučit všechna materializovaná zobrazení:

    materializedViewsToExclude=["*"]
    

Přepsání názvu databáze

Volitelně můžete název databáze v clusteru sledujících nastavit tak, aby se odlišil od vedoucího clusteru. Můžete například chtít připojit stejný název databáze z několika vedoucích clusterů ke clusteru sledujících. Pokud chcete zadat jiný název databáze, nakonfigurujte vlastnost DatabaseNameOverride nebo DatabaseNamePrefix.

Připojení databáze pomocí jazyka C#

Požadované balíčky NuGet

Příklad jazyka 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);

Ověření úspěšného připojení databáze

Pokud chcete ověřit úspěšné připojení databáze, vyhledejte připojené databáze v Azure Portal. Můžete ověřit, že databáze byly úspěšně připojeny v clusteru sledujících nebo vedoucích clusterů.

Kontrola clusteru followerů

  1. Přejděte do clusteru sledujících a vyberte Databáze.

  2. V seznamu databází vyhledejte nové databáze jen pro čtení.

    Snímek obrazovky s databázemi sledujících jen pro čtení na portálu

    Tento seznam můžete zobrazit také na stránce přehledu databáze:

    Snímek obrazovky se stránkou přehledu databází se seznamem clusterů sledujících

Kontrola vedoucího clusteru

  1. Přejděte do vedoucího clusteru a vyberte Databáze.

  2. Zkontrolujte, jestli jsou příslušné databáze označené jako SDÍLENÉ S OSTATNÍMI.>Ano.

  3. Přepnutím odkazu na relaci zobrazíte podrobnosti.

    Snímek obrazovky s databázemi sdílenými s ostatními za účelem kontroly vedoucího clusteru

    Můžete si to také prohlédnout na stránce s přehledem databáze:

    Snímek obrazovky s přehledem se seznamem databází sdílených s ostatními

Odpojení databáze followerů

Poznámka

Pokud chcete databázi odpojit od sledujícího nebo vedoucího uživatele, musíte mít v clusteru, ze kterého databázi oddělujete, uživatele, skupinu, instanční objekt nebo spravovanou identitu s alespoň rolí přispěvatele. V následujícím příkladu používáme instanční objekt.

Odpojení připojené databáze sledujích od clusteru sledování pomocí C#**

Cluster followerů může libovolnou připojenou databázi sledování odpojit následujícím způsobem:

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);

Odpojení připojené databáze sledujících od vedoucího clusteru pomocí jazyka C#

Vedoucí cluster může libovolnou připojenou databázi odpojit následujícím způsobem:

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);

Správa objektů zabezpečení, oprávnění a zásad ukládání do mezipaměti

Správa objektů zabezpečení

Při připojování databáze zadejte "výchozí druh úpravy objektů zabezpečení". Ve výchozím nastavení se zkombinují přepsání autorizovaných objektů zabezpečení s kolekcí autorizovaných objektů zabezpečení vedoucí databáze.

Druh Popis
Unie Připojené objekty zabezpečení databáze budou vždy obsahovat původní objekty databáze a další nové objekty zabezpečení přidané do databáze sledujících.
Nahrazení Žádná dědičnost objektů zabezpečení z původní databáze. Pro připojenou databázi se musí vytvořit nové objekty zabezpečení.
Žádný Připojené objekty zabezpečení databáze zahrnují pouze objekty zabezpečení původní databáze bez dalších objektů zabezpečení.

Další informace o použití příkazů pro správu ke konfiguraci autorizovaných objektů zabezpečení najdete v tématu Příkazy pro správu pro správu clusteru sledujících.

Správa oprávnění

Správa oprávnění databáze jen pro čtení je stejná jako u všech typů databází. Pokud chcete přiřadit oprávnění, přečtěte si téma Správa databázových oprávnění v Azure Portal nebo použití příkazů pro správu ke správě rolí zabezpečení databáze.

Konfigurace zásad ukládání do mezipaměti

Správce databáze, který následuje, může upravit zásady ukládání do mezipaměti připojené databáze nebo kterékoli z jejích tabulek v hostitelském clusteru. Ve výchozím nastavení se zdrojová databáze v databázi vedoucího clusteru a zásady ukládání do mezipaměti na úrovni tabulky zkombinují se zásadami definovanými v zásadách přepsání na úrovni databáze a tabulky. Můžete mít například 30denní zásadu ukládání do mezipaměti pro databázi leader pro spouštění měsíčních sestav a třídenní zásadu ukládání do mezipaměti pro databázi sledujících, aby se při řešení potíží dotazovaly pouze na poslední data. Další informace o použití příkazů pro správu ke konfiguraci zásad ukládání do mezipaměti v databázi sledování nebo tabulce najdete v tématu Příkazy pro správu pro správu clusteru sledující.

Poznámky

  • Pokud dojde ke konfliktům mezi databázemi clusterů leader/follower a za všemi databázemi následuje cluster sledujících, vyřeší se následujícím způsobem:
    • Databáze s názvem DB vytvořená v clusteru sledujících má přednost před databází se stejným názvem, která byla vytvořena v vedoucím clusteru. Proto je potřeba databázi databáze v clusteru sledujících odebrat nebo přejmenovat, aby cluster sledujících zahrnoval databázi vedoucí databáze.
    • Databáze s názvem DB , za kterou následují dva nebo více vedoucí clustery, se libovolně vybere z jednoho z vedoucích clusterů a nebude se sledovat více než jednou.
  • Příkazy pro zobrazení protokolu aktivit a historie clusteru spuštěné na clusteru sledujících zobrazí aktivitu a historii v clusteru sledujících a jejich sady výsledků nebudou zahrnovat výsledky vedoucího clusteru nebo clusterů.
    • Příklad: Příkaz spuštěný .show queries v clusteru sledujících zobrazí pouze dotazy spuštěné v databázích následovaných clusterem sledujících, a ne dotazy spuštěné pro stejnou databázi v vedoucím clusteru.

Omezení

  • Sledující a vedoucí clustery musí být ve stejné oblasti.
  • Pokud se u databáze, kterou sledujete, používá ingestování streamování , měl by být v clusteru sledující povolený příjem streamů, aby bylo možné sledovat streamovaná data příjmu dat.
  • Sledování clusteru s šifrováním dat s využitím klíčů spravovaných zákazníkem (CMK) se podporuje s následujícími omezeními:
    • Cluster sledujících ani vedoucí cluster nesledují jiné clustery.
    • Pokud cluster sledujících sleduje vedoucí cluster s povoleným klíčem CMK a přístup vedoucího serveru ke klíči je odvolán, cluster vedoucího serveru i cluster sledujících se pozastaví. V této situaci můžete buď vyřešit problém s cmk a pak obnovit cluster sledujících, nebo můžete odpojit databáze sledujících od clusteru sledujících a pokračovat nezávisle na vedoucím clusteru.
  • Databázi, která je připojená k jinému clusteru, nemůžete před odpojením odstranit.
  • Před odpojením clusteru, který má databázi připojenou k jinému clusteru, není možné odstranit.
  • Vlastnosti sdílení na úrovni tabulky se nepodporují při sledování všech databází.
  • Pokud chcete v databázích sledujících dotazovat externí tabulky, které jako metodu ověřování používají spravovanou identitu, musí se spravovaná identita přidat do clusteru sledujících. Tato funkce nefunguje, pokud jsou vedoucí clustery a clustery sledujících zřízeny v různých tenantech.

Další krok