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 Insights.
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 usługi Application Insights opartego 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
Akcja | Wymagane uprawnienia |
---|---|
Sprawdzanie stanu obszaru roboczego | 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. |
Zapisywanie zapytania | 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()
iapp()
. - W jednym zapytaniu można uwzględnić maksymalnie 100 obszarów roboczych usługi Log Analytics lub klasycznych zasobów usługi Application Insights.
- 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 Insights, 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 Insights i wizualizować liczbę żądań niepomyślnie 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 Insights. 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. To wyrażenie służy do dołączania danych dziennika do zapytania usługi Application Insights 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.OperationalInsights/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ń względem klasycznych aplikacji usługi Application Insights przy użyciu funkcji app()
Użyj wyrażenia , app
aby pobrać dane z określonego klasycznego zasobu usługi Application Insights w tej samej grupie zasobów, innej grupie zasobów lub innej subskrypcji. Jeśli używasz zasobu usługi Application Insights opartego 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.