Udostępnij za pośrednictwem


Korelowanie danych w usłudze Azure Data Explorer i usłudze Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics

Możesz skorelować dane w usługach Azure Data Explorer i Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics i zasobami usługi Application Insights, aby ulepszyć analizę w dziennikach usługi Azure Monitor. Usługa Microsoft Sentinel, która również przechowuje dane w obszarach roboczych usługi Log Analytics, obsługuje zapytania między usługami w usłudze Azure Data Explorer, ale nie w usłudze Azure Resource Graph. W tym artykule wyjaśniono, jak uruchamiać zapytania obejmujące wiele usług z dowolnej usługi, która przechowuje dane w obszarze roboczym usługi Log Analytics.

Uruchamianie zapytań między usługami przy użyciu dowolnych narzędzi klienckich obsługujących zapytania język zapytań Kusto (KQL), w tym internetowego interfejsu użytkownika usługi Log Analytics, skoroszytów, programu PowerShell i interfejsu API REST.

Wymagane uprawnienia

Aby uruchomić zapytanie obejmujące wiele usług, które koreluje dane w usłudze Azure Data Explorer lub Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics, potrzebne są następujące elementy:

  • Microsoft.OperationalInsights/workspaces/query/*/read uprawnienia do obszarów roboczych usługi Log Analytics, które wykonujesz, zgodnie z wbudowaną rolą czytelnika usługi Log Analytics.
  • Uprawnienia czytelnika do zasobów, których dotyczy zapytanie w usłudze Azure Resource Graph.
  • Uprawnienia przeglądarki do tabel, których dotyczy zapytanie w usłudze Azure Data Explorer.

Uwagi dotyczące implementacji

Ogólne zagadnienia dotyczące różnych usług

  • W nazwach baz danych jest rozróżniana wielkość liter.

  • Użyj funkcji i funkcji niesparametryzowanych, których definicja nie obejmuje innych wyrażeń między obszarami roboczymi ani między usługami, w tym adx(), , arg()resource(), workspace(), i app().

  • Zapytania między usługami obsługują tylko pobieranie danych.

  • Zapytania między usługami obsługują tylko polecenia ".show". Ta funkcja umożliwia bezpośrednie odwołowanie się do funkcji tabelarycznej usługi Azure Monitor, Usługi Azure Data Explorer lub usługi Azure Resource Graph. Następujące polecenia są obsługiwane za pomocą zapytania obejmującego wiele usług:

    • .show functions
    • .show function {FunctionName}
    • .show database {DatabaseName} schema as json
  • mv-expand obsługuje maksymalnie 2000 rekordów.

  • Dzienniki usługi Azure Monitor nie obsługują external_table() funkcji, która umożliwia wykonywanie zapytań dotyczących tabel zewnętrznych w usłudze Azure Data Explorer. Aby wysłać zapytanie do tabeli zewnętrznej, zdefiniuj external_table(<external-table-name>) jako funkcję bez parametrów w usłudze Azure Data Explorer. Następnie można wywołać funkcję przy użyciu wyrażenia adx("").<function-name>.

  • Jeśli używasz join operatora zamiast unii, musisz użyć elementu , hint aby połączyć dane w usłudze Azure Data Explorer lub Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics. Użyj witryny Hint.remote={direction of the Log Analytics workspace}.

    Na przykład:

    AzureDiagnostics
    | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
    
  • Identyfikowanie kolumny Sygnatura czasowa w klastrze nie jest obsługiwane. Interfejs API zapytań usługi Log Analytics nie przekazuje filtru czasu.

  • Klastry usługi Data Explorer skonfigurowane z ograniczeniami adresów IP lub usługa Private Link (prywatne punkty końcowe) nie obsługują zapytań obejmujących wiele usług.

Zagadnienia dotyczące zapytań między usługami usługi Azure Resource Graph

  • Podczas wykonywania zapytań dotyczących danych usługi Azure Resource Graph z usługi Azure Monitor:
    • Operator join umożliwia łączenie danych z jednej tabeli usługi Azure Resource Graph z jedną tabelą w obszarze roboczym usługi Log Analytics.
    • Zapytanie zwraca tylko pierwsze 1000 rekordów.
    • Usługa Azure Monitor nie zwraca błędów zapytań usługi Azure Resource Graph.
    • Edytor zapytań usługi Log Analytics oznacza prawidłowe zapytania usługi Azure Resource Graph jako błędy składni.
    • Te operatory nie są obsługiwane: smv-apply(), rand()variancep()variance()stdevp()stdevif()stdev()arg_max()percentilesw()percentilew()arg_min()percentiles()percentile()avg_if()avg()countif()sumif(). varianceif()
  • Usługa Microsoft Sentinel nie obsługuje zapytań między usługami w usłudze Azure Resource Graph.

Wykonywanie zapytań dotyczących danych w usłudze Azure Data Explorer przy użyciu funkcji adx()

Wprowadź identyfikator klastra usługi Azure Data Explorer w zapytaniu w adx ramach wzorca, a następnie nazwę bazy danych i tabelę.

adx('https://help.kusto.windows.net/Samples').StormEvents

Łączenie tabel klastra usługi Azure Data Explorer z obszarem roboczym usługi Log Analytics

union Użyj polecenia , aby połączyć tabele klastra z obszarem roboczym usługi Log Analytics.

Na przykład:

union customEvents, adx('https://help.kusto.windows.net/Samples').StormEvents
| take 10
let CL1 = adx('https://help.kusto.windows.net/Samples').StormEvents;
union customEvents, CL1 | take 10

Napiwek

Format skrócony jest dozwolony: Nazwa_klastra/InitialCatalog. Na przykład adx('help/Samples') jest tłumaczony na adx('help.kusto.windows.net/Samples').

Dołączanie danych z klastra usługi Azure Data Explorer w jednej dzierżawie przy użyciu zasobu usługi Azure Monitor w innej

Zapytania między dzierżawami między usługami nie są obsługiwane. Zalogowaliśmy się do jednej dzierżawy na potrzeby uruchamiania zapytania obejmującego oba zasoby.

Jeśli zasób usługi Azure Data Explorer znajduje się w dzierżawie A, a obszar roboczy usługi Log Analytics znajduje się w dzierżawie B, użyj jednej z następujących metod:

  • Użyj usługi Azure Data Explorer, aby dodać role dla podmiotów zabezpieczeń w różnych dzierżawach. Dodaj swój identyfikator użytkownika w dzierżawie B jako autoryzowanego użytkownika w klastrze usługi Azure Data Explorer. Sprawdź, czy właściwość TrustedExternalTenant w klastrze usługi Azure Data Explorer zawiera dzierżawę B. Uruchom zapytanie krzyżowe w pełni w dzierżawie B.
  • Użyj usługi Lighthouse , aby projektować zasób usługi Azure Monitor w dzierżawie A.

Nawiązywanie połączenia z klastrami usługi Azure Data Explorer z różnych dzierżaw

Narzędzie Kusto Explorer automatycznie loguje Cię do dzierżawy, do której pierwotnie należy konto użytkownika. Aby uzyskać dostęp do zasobów w innych dzierżawach przy użyciu tego samego konta użytkownika, musisz jawnie określić TenantId w parametry połączenia:

Data Source=https://ade.applicationinsights.io/subscriptions/SubscriptionId/resourcegroups/ResourceGroupName;Initial Catalog=NetDefaultDB;AAD Federated Security=True;Authority ID=TenantId

Wykonywanie zapytań dotyczących danych w usłudze Azure Resource Graph przy użyciu funkcji arg() (wersja zapoznawcza)

arg("") Wprowadź wzorzec, a następnie nazwę tabeli usługi Azure Resource Graph.

Na przykład:

arg("").<Azure-Resource-Graph-table-name>

Napiwek

Operator arg() jest teraz dostępny na potrzeby zaawansowanego wyszukiwania zagrożeń na ujednoliconej platformie Microsoft Defender. Ta funkcja umożliwia wykonywanie zapytań tylko o dane usługi Microsoft Sentinel. Przeczytaj więcej na stronie Use arg() operator for Azure Resource Graph queries (Używanie operatora arg() dla zapytań usługi Azure Resource Graph.

Oto kilka przykładowych zapytań usługi Azure Log Analytics, które korzystają z nowych funkcji zapytań między usługami usługi Azure Resource Graph:

  • Filtruj zapytanie usługi Log Analytics na podstawie wyników zapytania usługi Azure Resource Graph:

    arg("").Resources 
    | where type == "microsoft.compute/virtualmachines" and properties.hardwareProfile.vmSize startswith "Standard_D"
    | join (
        Heartbeat
        | where TimeGenerated > ago(1d)
        | distinct Computer
        )
        on $left.name == $right.Computer
    
  • Utwórz regułę alertu, która ma zastosowanie tylko do niektórych zasobów pobranych z zapytania usługi ARG:

    • Wyklucz zasoby na podstawie tagów — na przykład nie wyzwalać alertów dla maszyn wirtualnych za pomocą tagu "Test".

      arg("").Resources
      | where tags.environment=~'Test'
      | project name 
      
    • Pobieranie danych wydajności związanych z wykorzystaniem procesora CPU i filtrowanie zasobów za pomocą tagu "prod".

      InsightsMetrics
      | where Name == "UtilizationPercentage"
      | lookup (
          arg("").Resources 
          | where type == 'microsoft.compute/virtualmachines' 
          | project _ResourceId=tolower(id), tags
          )
          on _ResourceId
      | where tostring(tags.Env) == "Prod"
      

Więcej przypadków użycia:

  • Użyj tagu, aby określić, czy maszyny wirtualne powinny działać 24x7 lub powinny być zamykane w nocy.
  • Pokaż alerty na dowolnym serwerze, który zawiera określoną liczbę rdzeni.

Tworzenie alertu na podstawie zapytania obejmującego wiele usług z obszaru roboczego usługi Log Analytics

Aby utworzyć regułę alertu na podstawie zapytania obejmującego wiele usług z obszaru roboczego usługi Log Analytics, wykonaj kroki opisane w artykule Tworzenie lub edytowanie reguły alertu przeszukiwania dzienników, wybieranie obszaru roboczego usługi Log Analytics na karcie Zakres .

Uwaga

Zapytania między usługami można również uruchamiać z poziomu usług Azure Data Explorer i Azure Resource Graph do obszaru roboczego usługi Log Analytics, wybierając odpowiedni zasób jako zakres alertu.

Łączenie tabel usługi Azure Resource Graph z obszarem roboczym usługi Log Analytics

union Użyj polecenia , aby połączyć tabele klastra z obszarem roboczym usługi Log Analytics.

Na przykład:

union AzureActivity, arg("").Resources
| take 10
let CL1 = arg("").Resources ;
union AzureActivity, CL1 | take 10

Jeśli używasz join operatora zamiast unii, musisz użyć elementu , hint aby połączyć dane w usłudze Azure Resource Graph z danymi w obszarze roboczym usługi Log Analytics. Użyj witryny Hint.remote={Direction of the Log Analytics Workspace}. Na przykład:

Perf | where ObjectName == "Memory" and (CounterName == "Available MBytes Memory")
| extend _ResourceId = replace_string(replace_string(replace_string(_ResourceId, 'microsoft.compute', 'Microsoft.Compute'), 'virtualmachines','virtualMachines'),"resourcegroups","resourceGroups")
| join hint.remote=left (arg("").Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project _ResourceId=id, tags) on _ResourceId | project-away _ResourceId1 | where tostring(tags.env) == "prod"

Następne kroki