Запрос данных в рабочих областях, приложениях и ресурсах Log Analytics в Azure Monitor

Существует два способа запроса данных из нескольких рабочих областей, приложений и ресурсов:

  • Явно указывая сведения о рабочей области, приложении или ресурсе с помощью выражений рабочей области(), app() или resource(), как описано в этой статье.
  • Неявно с помощью запросов контекста ресурсов. При запросе в контексте определенного ресурса, группы ресурсов или подписки запрос извлекает соответствующие данные из всех рабочих областей, содержащих данные для этих ресурсов. Запросы контекста ресурсов не извлекают данные из классических ресурсов Application Insights.

В этой статье объясняется, как использовать workspace()app()выражения и resource() выражения для запроса данных из нескольких рабочих областей, приложений и ресурсов Log Analytics.

Если вы управляете подписками в других клиентах Microsoft Entra через Azure Lighthouse, вы можете включить рабочие области Log Analytics, созданные в этих клиентах в ваших запросах .

Внимание

Если вы используете ресурс Application Insights на основе рабочей области, данные телеметрии хранятся в рабочей области Log Analytics со всеми другими данными журнала. workspace() Используйте выражение для запроса данных из приложений в нескольких рабочих областях. Запрос между рабочими областями не требуется для запроса данных из нескольких приложений в одной рабочей области.

Требуемые разрешения

Действие Требуемые разрешения
Проверка состояния рабочей области Microsoft.OperationalInsights/workspaces/query/*/readразрешения для рабочих областей Log Analytics, которые вы запрашиваете, например, встроенной ролью Log Analytics Reader.
Сохранение запроса microsoft.operationalinsights/querypacks/queries/action разрешения на пакет запросов, в котором требуется сохранить запрос, как указано встроенной ролью участника Log Analytics, например.

Ограничения

  • Межресурсные и межслужбные запросы не поддерживают параметризованные функции и функции, определение которых включает другие выражения между рабочими областями или межслужбами, включая adx(), , workspace()arg()resource()и.app()
  • Вы можете включить до 100 рабочих областей Log Analytics или классических ресурсов Application Insights в одном запросе.
  • Запросы по большому количеству ресурсов могут существенно замедлить запрос.
  • Запросы между ресурсами в оповещениях поиска по журналам поддерживаются только в текущем API scheduledQueryRules. Если вы используете устаревший API оповещений Log Analytics, вам потребуется перейти на текущую версию API.
  • Ссылки на кросс-ресурс, например другую рабочую область, должны быть явными и не могут быть параметризованы.

Запрос между рабочими областями, приложениями и ресурсами с помощью функций

В этом разделе объясняется, как запрашивать рабочие области, приложения и ресурсы с помощью функций и без использования функции.

Запрос без использования функции

Вы можете запросить несколько ресурсов из любого экземпляра ресурса. Эти ресурсы могут быть рабочими областями и приложениями в сочетании.

Пример запроса в трех рабочих областях:

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

Дополнительные сведения о союзе, где и суммирование операторов см. в разделе операторов объединения, где оператор и оператор суммирование.

Запрос с помощью функции

При использовании запросов между ресурсами для сопоставления данных из нескольких рабочих областей Log Analytics и компонентов Application Insights запрос может стать сложным и сложным для обслуживания. Вы должны использовать функции в запросах журнала Azure Monitor для разделения логики запроса от области ресурсов запроса. Этот метод упрощает структуру запросов. В следующем примере показано, как отслеживать несколько компонентов Application Insights и визуализировать количество неудачных запросов по имени приложения.

Создайте запрос, как показано в следующем примере, который ссылается на область действия компонентов Application Insights. Команда withsource= SourceApp позволяет добавить столбец, который определяет имя приложения, отправившего журнал. Сохраните запрос как функцию с псевдонимом 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

Теперь эту функцию можно использовать в запросе между ресурсами, как показано в следующем примере. Псевдоним applicationsScoping функции возвращает объединение таблицы запросов из всех определенных приложений. После этого с помощью запроса фильтруются неудачные запросы и визуализируются тенденции по приложению. Оператор parse необязателен в этом примере. Он извлекает имя приложения из SourceApp свойства.

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

Примечание.

Этот метод нельзя использовать с оповещениями поиска по журналам, так как проверка доступа к ресурсам правила генерации оповещений, включая рабочие области и приложения, выполняется во время создания оповещений. Добавление новых ресурсов в функцию после создания оповещения не поддерживается. Если вы предпочитаете использовать функцию для определения области ресурсов в оповещениях поиска по журналам, необходимо изменить правило генерации оповещений на портале или с помощью шаблона Azure Resource Manager, чтобы обновить области ресурсов. Кроме того, можно включить список ресурсов в запрос генерации оповещений поиска по журналам.

Запрос между рабочими областями Log Analytics с помощью рабочей области()

workspace() Используйте выражение для получения данных из определенной рабочей области в той же группе ресурсов, другой группе ресурсов или другой подписке. Это выражение можно использовать для включения данных журнала в запрос Application Insights и запроса данных в нескольких рабочих областях в запросе журнала.

Синтаксис

workspace(Идентификатор)

Аргументы

*Identifier*: определяет рабочую область с помощью одного из форматов в следующей таблице.

Идентификатор Description Пример
Идентификатор Идентификатор GUID рабочей области. workspace("000000000-0000-0000-0000-0000000000000")
Идентификатор ресурса Azure Идентификатор ресурса Azure workspace("/subscriptions/000000000-0000-0000-0000-0000000000/resourcegroups/Contoso/providers/Microsoft.OperationalInsights/workspaces/contosoretail")

Примеры

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

Запрос между классическими приложениями Application Insights с помощью app()

app Используйте выражение для получения данных из определенного классического ресурса Application Insights в той же группе ресурсов, другой группе ресурсов или другой подписке. Если вы используете ресурс Application Insights на основе рабочей области, данные телеметрии хранятся в рабочей области Log Analytics со всеми другими данными журнала. workspace() Используйте выражение для запроса данных из приложений в нескольких рабочих областях. Запрос между рабочими областями не требуется для запроса данных из нескольких приложений в одной рабочей области.

Синтаксис

app(Идентификатор)

Аргументы

*Identifier*: определяет приложение с помощью одного из форматов в таблице ниже.

Идентификатор Description Пример
Идентификатор GUID приложения app("000000000-0000-0000-0000-00000000000000")
Идентификатор ресурса Azure Идентификатор ресурса Azure app("/subscriptions/000000000-0000-0000-0000-0000000000/resourcegroups/Fabrikam/providers/microsoft.insights/components/fabrikamapp")

Примеры

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

Сопоставление данных между ресурсами с помощью resource()

Выражение resource используется в запросе Azure Monitor, ограниченном областью ресурса, для получения данных из других ресурсов.

Синтаксис

resource(Идентификатор)

Аргументы

*Identifier*: определяет ресурс, группу ресурсов или подписку, из которой сопоставляются данные.

Идентификатор Description Пример
Ресурс Включает данные для ресурса. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm")
Группа ресурсов или подписка Включает данные для ресурса и всех содержащихся в нем ресурсов. resource("/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcesgroups/myresourcegroup)

Примеры

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

Следующие шаги

Сведения о структурировании данных журнала в Azure Monitor см. в статье "Анализ данных журнала" в Azure Monitor .