Wykonywanie zapytań o dane między obszarami roboczymi, aplikacjami i zasobami usługi Log Analytics w usłudze Azure Monitor

Istnieją dwa sposoby wykonywania zapytań dotyczących danych z wielu obszarów roboczych, aplikacji i zasobów:

  • Jawnie, określając informacje o obszarze roboczym, aplikacji lub zasobie przy użyciu wyrażeń workspace(), app()lub resource() zgodnie z opisem w tym artykule.
  • Niejawnie przy użyciu zapytań kontekstu zasobów. Podczas wykonywania zapytań w kontekście określonego zasobu, grupy zasobów lub subskrypcji zapytanie pobiera odpowiednie dane ze wszystkich obszarów roboczych zawierających dane dla tych zasobów. Zapytania kontekstowe zasobów nie pobierają danych z klasycznych zasobów usługi Application Szczegółowe informacje.

W tym artykule wyjaśniono, jak używać workspace()wyrażeń , app()i resource() do wykonywania zapytań dotyczących danych z wielu obszarów roboczych, aplikacji i zasobów usługi Log Analytics.

Jeśli zarządzasz subskrypcjami w innych dzierżawach firmy Microsoft Entra za pośrednictwem usługi Azure Lighthouse, możesz uwzględnić obszary robocze usługi Log Analytics utworzone w tych dzierżawach klientów w zapytaniach .

Ważne

Jeśli używasz zasobu Szczegółowe informacje aplikacji opartej na obszarze roboczym, dane telemetryczne są przechowywane w obszarze roboczym usługi Log Analytics ze wszystkimi innymi danymi dziennika. Użyj wyrażenia , workspace() aby wysyłać zapytania o dane z aplikacji w wielu obszarach roboczych. Nie potrzebujesz zapytania obejmującego wiele obszarów roboczych, aby wykonywać zapytania o dane z wielu aplikacji w tym samym obszarze roboczym.

Wymagane uprawnienia

  • Musisz mieć 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.
  • Aby zapisać zapytanie, musisz mieć microsoft.operationalinsights/querypacks/queries/action uprawnienia do pakietu zapytań, w którym chcesz zapisać zapytanie, zgodnie z wbudowaną rolą Współautor usługi Log Analytics.

Ograniczenia

  • Zapytania obejmujące wiele zasobów i między usługami nie obsługują sparametryzowanych funkcji i funkcji, których definicja obejmuje inne wyrażenia między obszarami roboczymi lub między usługami, w tym adx(), arg(), resource(), , workspace()i app().
  • W jednym zapytaniu można uwzględnić maksymalnie 100 obszarów roboczych usługi Log Analytics lub klasycznych zasobów usługi Application Szczegółowe informacje.
  • Wykonywanie zapytań w dużej liczbie zasobów może znacznie spowolnić wykonywanie zapytań.
  • Zapytania obejmujące wiele zasobów w alertach przeszukiwania dzienników są obsługiwane tylko w bieżącym interfejsie API scheduledQueryRules. Jeśli używasz starszego interfejsu API alertów usługi Log Analytics, musisz przełączyć się do bieżącego interfejsu API.
  • Odwołania do zasobu krzyżowego, takiego jak inny obszar roboczy, powinny być jawne i nie mogą być sparametryzowane.

Wykonywanie zapytań dotyczących obszarów roboczych, aplikacji i zasobów przy użyciu funkcji

W tej sekcji wyjaśniono, jak wykonywać zapytania dotyczące obszarów roboczych, aplikacji i zasobów przy użyciu funkcji z funkcją i bez jej używania.

Wykonywanie zapytań bez używania funkcji

Możesz wykonywać zapytania dotyczące wielu zasobów z dowolnego wystąpienia zasobów. Te zasoby mogą być połączone obszarami roboczymi i aplikacjami.

Przykład zapytania w trzech obszarach roboczych:

union 
  Update, 
  workspace("00000000-0000-0000-0000-000000000001").Update, 
  workspace("00000000-0000-0000-0000-000000000002").Update
| where TimeGenerated >= ago(1h)
| where UpdateState == "Needed"
| summarize dcount(Computer) by Classification

Aby uzyskać więcej informacji na temat unii, gdzie i operatorów sumowania, zobacz operator unii, gdzie operator i operator podsumowania.

Wykonywanie zapytań przy użyciu funkcji

Jeśli używasz zapytań między zasobami do korelowania danych z wielu obszarów roboczych usługi Log Analytics i składników usługi Application Szczegółowe informacje, zapytanie może stać się złożone i trudne do utrzymania. Należy używać funkcji w zapytaniach dziennika usługi Azure Monitor, aby oddzielić logikę zapytania od określania zakresu zasobów zapytań. Ta metoda upraszcza strukturę zapytań. W poniższym przykładzie pokazano, jak można monitorować wiele składników usługi Application Szczegółowe informacje i wizualizować liczbę żądań, które zakończyły się niepowodzeniem według nazwy aplikacji.

Utwórz zapytanie podobne do poniższego przykładu, które odwołuje się do zakresu składników usługi Application Szczegółowe informacje. Polecenie withsource= SourceApp dodaje kolumnę, która wyznacza nazwę aplikacji, która wysłała dziennik. Zapisz zapytanie jako funkcję z aliasem applicationsScoping.

// crossResource function that scopes my Application Insights components
union withsource= SourceApp
app('00000000-0000-0000-0000-000000000000').requests, 
app('00000000-0000-0000-0000-000000000001').requests,
app('00000000-0000-0000-0000-000000000002').requests,
app('00000000-0000-0000-0000-000000000003').requests,
app('00000000-0000-0000-0000-000000000004').requests

Teraz możesz użyć tej funkcji w zapytaniu między zasobami, tak jak w poniższym przykładzie. Alias applicationsScoping funkcji zwraca związek tabeli requests ze wszystkich zdefiniowanych aplikacji. Następnie zapytanie filtruje żądania zakończone niepowodzeniem i wizualizuje trendy według aplikacji. Operator parse jest opcjonalny w tym przykładzie. Wyodrębnia ona nazwę aplikacji z SourceApp właściwości .

applicationsScoping 
| where timestamp > ago(12h)
| where success == 'False'
| parse SourceApp with * '(' applicationId ')' * 
| summarize count() by applicationId, bin(timestamp, 1h) 
| render timechart

Uwaga

Tej metody nie można używać z alertami przeszukiwania dzienników, ponieważ weryfikacja dostępu zasobów reguły alertu, w tym obszarów roboczych i aplikacji, jest wykonywana w czasie tworzenia alertów. Dodawanie nowych zasobów do funkcji po utworzeniu alertu nie jest obsługiwane. Jeśli wolisz używać funkcji do określania zakresu zasobów w alertach przeszukiwania dzienników, musisz edytować regułę alertu w portalu lub przy użyciu szablonu usługi Azure Resource Manager, aby zaktualizować zasoby o określonym zakresie. Alternatywnie możesz uwzględnić listę zasobów w zapytaniu alertu przeszukiwania dzienników.

Wykonywanie zapytań w obszarach roboczych usługi Log Analytics przy użyciu obszaru roboczego()

Użyj wyrażenia , workspace() aby pobrać dane z określonego obszaru roboczego w tej samej grupie zasobów, innej grupie zasobów lub innej subskrypcji. Tego wyrażenia można użyć do uwzględnienia danych dziennika w zapytaniu application Szczegółowe informacje i wykonywania zapytań dotyczących danych w wielu obszarach roboczych w zapytaniu dziennika.

Składnia

workspace(Identyfikator)

Argumenty

*Identifier*: identyfikuje obszar roboczy przy użyciu jednego z formatów w poniższej tabeli.

Identyfikator opis Przykład
ID Identyfikator GUID obszaru roboczego workspace("000000000-0000-0000-0000-0000000000000")
Identyfikator zasobu platformy Azure Identyfikator zasobu platformy Azure workspace("/subscriptions/000000000-0000-0000-0000-0000000000000/resourcegroups/Contoso/providers/Microsoft.Operational Szczegółowe informacje/workspaces/contosoretail")

Przykłady

workspace("00000000-0000-0000-0000-000000000000").Update | count
workspace("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail").Event | count
union 
( workspace("00000000-0000-0000-0000-000000000000").Heartbeat | where Computer == "myComputer"),
(app("00000000-0000-0000-0000-000000000000").requests | where cloud_RoleInstance == "myRoleInstance")
| count  
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat), (app("00000000-0000-0000-0000-000000000000").requests) | where TimeGenerated between(todatetime("2023-03-08 15:00:00") .. todatetime("2023-04-08 15:05:00"))

Wykonywanie zapytań w aplikacjach klasycznych Szczegółowe informacje przy użyciu funkcji app()

Użyj wyrażenia , app aby pobrać dane z określonego klasycznego zasobu aplikacji Szczegółowe informacje w tej samej grupie zasobów, innej grupie zasobów lub innej subskrypcji. Jeśli używasz zasobu Szczegółowe informacje aplikacji opartej na obszarze roboczym, dane telemetryczne są przechowywane w obszarze roboczym usługi Log Analytics ze wszystkimi innymi danymi dziennika. Użyj wyrażenia , workspace() aby wysyłać zapytania o dane z aplikacji w wielu obszarach roboczych. Nie potrzebujesz zapytania obejmującego wiele obszarów roboczych, aby wykonywać zapytania o dane z wielu aplikacji w tym samym obszarze roboczym.

Składnia

app(Identyfikator)

Argumenty

*Identifier*: identyfikuje aplikację przy użyciu jednego z formatów w poniższej tabeli.

Identyfikator opis Przykład
ID Identyfikator GUID aplikacji app("000000000-0000-0000-0000-0000000000000")
Identyfikator zasobu platformy Azure Identyfikator zasobu platformy Azure app("/subscriptions/000000000-0000-0000-0000-0000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp")

Przykłady

app("00000000-0000-0000-0000-000000000000").requests | count
app("/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp").requests | count
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat | where Computer == "myComputer"),
(app("00000000-0000-0000-0000-000000000000").requests | where cloud_RoleInstance == "myColumnInstance")
| count  
union 
(workspace("00000000-0000-0000-0000-000000000000").Heartbeat), (app("00000000-0000-0000-0000-000000000000").requests)
| where TimeGenerated between(todatetime("2023-03-08 15:00:00") .. todatetime("2023-04-08 15:05:00"))

Korelowanie danych między zasobami przy użyciu zasobu()

Wyrażenie resource jest używane w zapytaniu usługi Azure Monitor w zakresie zasobu w celu pobrania danych z innych zasobów.

Składnia

resource(Identyfikator)

Argumenty

*Identifier*: identyfikuje zasób, grupę zasobów lub subskrypcję, z której mają być skorelowane dane.

Identyfikator opis Przykład
Zasób Zawiera dane dla zasobu. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm")
Grupa zasobów lub subskrypcja Zawiera dane dla zasobu i wszystkich zawartych w nim zasobów. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup)

Przykłady

union (Heartbeat),(resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm").Heartbeat) | summarize count() by _ResourceId, TenantId
union (Heartbeat),(resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup).Heartbeat) | summarize count() by _ResourceId, TenantId

Następne kroki

Zobacz Analizowanie danych dziennika w usłudze Azure Monitor , aby zapoznać się z omówieniem zapytań dzienników i strukturą danych dziennika usługi Azure Monitor.