Экспорт данных из рабочей области Log Analytics в учетную запись хранения с помощью Logic Apps
В этой статье описывается метод, который позволяет Azure Logic Apps запрашивать данные из рабочей области Log Analytics в Azure Monitor и отправлять их в служба хранилища Azure. Используйте этот процесс, если необходимо экспортировать данные журналов Azure Monitor для аудита и соответствия сценариям или разрешить другой службе получать эти данные.
Другие методы экспорта
Метод, рассмотренный в этой статье, описывает запланированный экспорт из запроса журнала с помощью приложения логики. Другие варианты экспорта данных для определенных сценариев:
- Чтобы экспортировать данные из рабочей области Log Analytics в учетную запись хранения или Центры событий Azure, используйте функцию экспорта данных рабочей области Log Analytics журналов Azure Monitor. См. сведения о экспорте данных рабочей области Log Analytics в Azure Monitor.
- Одноразовый экспорт с помощью приложения логики. См . соединитель журналов Azure Monitor для Logic Apps.
- Однократный экспорт на локальный компьютер с помощью скрипта PowerShell. См. статью Invoke-AzOperationalInsightsQueryExport.
Обзор
В этой процедуре используется соединитель журналов Azure Monitor, который позволяет запускать запрос журнала из приложения логики и использовать его выходные данные в других действиях в рабочем процессе. Соединитель Хранилище BLOB-объектов Azure используется в этой процедуре для отправки выходных данных запроса в хранилище.
При экспорте данных из рабочей области Log Analytics ограничьте объем данных, обработанных рабочим процессом Logic Apps. Отфильтруйте и агрегируйте данные журнала в запросе, чтобы уменьшить необходимые данные. Например, если необходимо экспортировать события входа, фильтруйте необходимые события и проектируйте только необходимые поля. Например:
SecurityEvent
| where EventID == 4624 or EventID == 4625
| project TimeGenerated , Account , AccountType , Computer
При экспорте данных по расписанию используйте ingestion_time()
функцию в запросе, чтобы убедиться, что вы не пропустите данные с опозданием. Если данные задерживаются из-за проблем с сетью или платформой, использование времени приема гарантирует, что данные включены в следующее выполнение Logic Apps. Пример см. в шаге "Добавление действия журналов Azure Monitor" в разделе процедуры Logic Apps.
Необходимые компоненты
Перед началом этой процедуры необходимо выполнить следующие предварительные требования:
- Рабочая область Log Analytics: пользователь, создающий приложение логики, должен иметь по крайней мере разрешение на чтение рабочей области.
- Учетная запись хранения. Учетная запись хранения не должна находиться в той же подписке, что и рабочая область Log Analytics. Пользователь, создающий приложение логики, должен иметь разрешение на запись в учетную запись хранения.
Ограничения соединителей
Рабочие области Log Analytics и запросы журналов в Azure Monitor — это службы мультитенантности, которые включают ограничения для защиты и изоляции клиентов и поддержания качества обслуживания. При запросе большого объема данных рассмотрите следующие ограничения, которые могут повлиять на настройку повторения Logic Apps и запроса журнала:
- Запросы журнала не могут возвращать более 500 000 строк.
- Запросы журнала не могут возвращать более 64 000 000 байт.
- Запросы журналов не могут выполняться дольше 10 минут.
- Соединитель Log Analytics ограничен 100 вызовами в минуту.
Процедура Logic Apps
В следующих разделах описана процедура.
Создание контейнера в учетной записи хранения
Используйте процедуру создания контейнера для добавления контейнера в учетную запись хранения для хранения экспортированных данных. В этой статье для контейнера используется имя loganalytics-data, но вы можете выбрать любое другое.
Создание рабочего процесса приложения логики
Перейдите к разделу Logic Apps на портале Azure и выберите Добавить. Выберите подписку, группу ресурсов и регион для хранения нового приложения логики. Затем присвойте ему уникальное имя. Вы можете включить параметр Log Analytics для сбора сведений о данных и событиях среды выполнения, как описано в разделе "Настройка журналов Azure Monitor" и сбор диагностика данных для Azure Logic Apps. Этот параметр не требуется для использования соединителя журналов Azure Monitor.
Выберите Просмотр и создание, а затем нажмите кнопку Создать. После завершения развертывания выберите "Перейти к ресурсу", чтобы открыть конструктор Logic Apps.
Создание триггера для рабочего процесса
В разделе Начинаем с часто используемого триггера выберите элемент Повторение. Этот параметр создает рабочий процесс приложения логики, который автоматически выполняется через регулярный интервал. В поле "Частота" действия выберите "День". В поле "Интервал" введите 1, чтобы запустить рабочий процесс один раз в день.
Добавление действия журналов Azure Monitor
Действие журналов Azure Monitor позволяет указать запрос для выполнения. Запрос журнала, используемый в этом примере, оптимизирован для почасового повторения. Он собирает данные, отбираемые в течение определенного времени выполнения. Например, если рабочий процесс выполняется в 4:35, диапазон времени будет составлять от 3:00 до 4:00. Если приложение логики изменится на другую частоту, необходимо также изменить запрос. Например, если для выполнения повторения выполняется ежедневно, в запросе задано значение startTime
startofday(make_datetime(year,month,day,0,0))
.
Вам будет предложено выбрать клиент, чтобы предоставить доступ к рабочей области Log Analytics с учетной записью, которую рабочий процесс будет использовать для выполнения запроса.
Выберите + Новый шаг, чтобы добавить действие, выполняемое после действия повторения. В разделе " Выбор действия" введите Azure Monitor. Затем выберите журналы Azure Monitor.
Выберите Azure Log Analytics — запустите запрос и результаты списка.
Выберите значения Подписка и Группа ресурсов для рабочей области Log Analytics. Выберите рабочую область Log Analytics для типа ресурса. Затем выберите имя рабочей области в разделе "Имя ресурса".
Добавьте следующий запрос журнала в окно запроса :
let dt = now(); let year = datetime_part('year', dt); let month = datetime_part('month', dt); let day = datetime_part('day', dt); let hour = datetime_part('hour', dt); let startTime = make_datetime(year,month,day,hour,0)-1h; let endTime = startTime + 1h - 1tick; AzureActivity | where ingestion_time() between(startTime .. endTime) | project TimeGenerated, BlobTime = startTime, OperationName , OperationNameValue , Level , ActivityStatus , ResourceGroup , SubscriptionId , Category , EventSubmissionTimestamp , ClientIpAddress = parse_json(HTTPRequest).clientIpAddress , ResourceId = _ResourceId
Диапазон времени определяет записи, которые будут включены в запрос на основе столбца TimeGenerated. Значение должно быть больше диапазона времени, выбранного в запросе. Так как этот запрос не использует столбец TimeGenerated , параметр Set in query недоступен. Дополнительные сведения о диапазоне времени см. в разделе "Область запроса". Выберите Последние 4 часа для параметра Диапазон времени. Этот параметр гарантирует, что все записи с временем приема, превышающим время приема, превышающее TimeGenerated , будут включены в результаты.
Добавление действия анализа JSON (необязательно)
Выходные данные действия Выполнить запрос и вывести результаты представлены в формате JSON. Эти данные можно проанализировать и управлять ими в рамках подготовки действия Создания .
Вы можете предоставить схему JSON, описывающую полезные данные, которые вы рассчитываете получить. С помощью этой схемы конструктор выполняет синтаксический анализ содержимого JSON и создает удобные пользовательские токены, представляющие свойства в содержимом JSON. Можно легко ссылаться на эти свойства и использовать их во время рабочего процесса приложения логики.
Пример выходных данных можно использовать на шаге выполнения запроса и списка результатов .
Выберите "Запустить триггер" на ленте Logic Apps. Затем выберите "Выполнить " и скачать и сохранить выходную запись. Для примера запроса в предыдущем стебли можно использовать следующие выходные данные:
{ "TimeGenerated": "2020-09-29T23:11:02.578Z", "BlobTime": "2020-09-29T23:00:00Z", "OperationName": "Returns Storage Account SAS Token", "OperationNameValue": "MICROSOFT.RESOURCES/DEPLOYMENTS/WRITE", "Level": "Informational", "ActivityStatus": "Started", "ResourceGroup": "monitoring", "SubscriptionId": "00000000-0000-0000-0000-000000000000", "Category": "Administrative", "EventSubmissionTimestamp": "2020-09-29T23:11:02Z", "ClientIpAddress": "192.168.1.100", "ResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/monitoring/providers/microsoft.storage/storageaccounts/my-storage-account" }
Выберите +Создать шаг и нажмите кнопку +Добавить действие. В разделе "Выбор операции" введите json и выберите "Анализ JSON".
Выберите поле "Содержимое " , чтобы отобразить список значений из предыдущих действий. Выберите Текст в действии Выполнить запрос и вывести результаты. Это выходные данные из запроса журнала.
Скопируйте образец записи, сохраненной ранее. Выберите " Использовать пример полезных данных" для создания схемы и вставки.
Добавление действия "Создать"
Действие Создать принимает проанализированные выходные данные JSON и создает объект, который необходимо сохранить в большом двоичном объекте.
Выберите +Создать шаг, а затем нажмите кнопку +Добавить действие. В разделе " Выбор операции" введите создание. Затем выберите действие Compose .
Выберите поле "Входные данные", чтобы отобразить список значений из предыдущих действий. Выберите Текст из действия Анализ JSON. Этот анализ выходных данных выполняется из запроса журнала.
Добавление действия создания BLOB-объектов
Действие "Создать большой двоичный объект " записывает в хранилище созданную JSON.
Выберите +Создать шаг, а затем нажмите кнопку +Добавить действие. В разделе " Выбор операции" введите большой двоичный объект. Затем выберите действие "Создать большой двоичный объект ".
Введите имя подключения к учетной записи хранения в поле "Имя подключения". Затем щелкните значок папки в поле пути к папке, чтобы выбрать контейнер в учетной записи хранения. Выберите имя BLOB-объекта, чтобы просмотреть список значений из предыдущих действий. Выберите выражение и введите выражение , соответствующее интервалу времени. Для этого запроса, который выполняется почасово, следующее выражение задает имя большого двоичного объекта за предыдущий час:
subtractFromTime(formatDateTime(utcNow(),'yyyy-MM-ddTHH:00:00'), 1,'Hour')
Выберите поле содержимого BLOB-объектов, чтобы отобразить список значений из предыдущих действий. Затем выберите выходные данные в разделе "Создание ".
Проверка рабочего процесса
Чтобы протестировать рабочий процесс, нажмите кнопку "Выполнить". Если рабочий процесс имеет ошибки, они указываются на шаге с проблемой. Можно просмотреть выполнение и подробно изучить каждый этап, чтобы просмотреть входные и выходные данные для расследования сбоев. При необходимости см . сведения об устранении неполадок и диагностике сбоев рабочих процессов в Azure Logic Apps.
Просмотр журналов в хранилище
Перейдите в меню учетных записей хранения в портал Azure и выберите свою учетную запись хранения. Выберите элемент Большие двоичные объекты. Затем выберите контейнер, указанный в действии "Создать большой двоичный объект ". Выберите один из больших двоичных объектов и выберите команду "Изменить большой двоичный объект".
Шаблон приложения логики
Необязательный шаг анализа JSON не включен в шаблон
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Compose": {
"inputs": "@body('Run_query_and_list_results')",
"runAfter": {
"Run_query_and_list_results": [
"Succeeded"
]
},
"type": "Compose"
},
"Create_blob_(V2)": {
"inputs": {
"body": "@outputs('Compose')",
"headers": {
"ReadFileMetadataFromServer": true
},
"host": {
"connection": {
"name": "@parameters('$connections')['azureblob']['connectionId']"
}
},
"method": "post",
"path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('AccountNameFromSettings'))}/files",
"queries": {
"folderPath": "/logicappexport",
"name": "@{utcNow()}",
"queryParametersSingleEncoded": true
}
},
"runAfter": {
"Compose": [
"Succeeded"
]
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
},
"type": "ApiConnection"
},
"Run_query_and_list_results": {
"inputs": {
"body": "let dt = now();\nlet year = datetime_part('year', dt);\nlet month = datetime_part('month', dt);\nlet day = datetime_part('day', dt);\n let hour = datetime_part('hour', dt);\nlet startTime = make_datetime(year,month,day,hour,0)-1h;\nlet endTime = startTime + 1h - 1tick;\nAzureActivity\n| where ingestion_time() between(startTime .. endTime)\n| project \n TimeGenerated,\n BlobTime = startTime, \n OperationName ,\n OperationNameValue ,\n Level ,\n ActivityStatus ,\n ResourceGroup ,\n SubscriptionId ,\n Category ,\n EventSubmissionTimestamp ,\n ClientIpAddress = parse_json(HTTPRequest).clientIpAddress ,\n ResourceId = _ResourceId ",
"host": {
"connection": {
"name": "@parameters('$connections')['azuremonitorlogs']['connectionId']"
}
},
"method": "post",
"path": "/queryData",
"queries": {
"resourcegroups": "resource-group-name",
"resourcename": "workspace-name",
"resourcetype": "Log Analytics Workspace",
"subscriptions": "workspace-subscription-id",
"timerange": "Set in query"
}
},
"runAfter": {},
"type": "ApiConnection"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"triggers": {
"Recurrence": {
"evaluatedRecurrence": {
"frequency": "Day",
"interval": 1
},
"recurrence": {
"frequency": "Day",
"interval": 1
},
"type": "Recurrence"
}
}
},
"parameters": {
"$connections": {
"value": {
"azureblob": {
"connectionId": "/subscriptions/logic-app-subscription-id/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/blob-connection-name",
"connectionName": "blob-connection-name",
"id": "/subscriptions/logic-app-subscription-id/providers/Microsoft.Web/locations/canadacentral/managedApis/azureblob"
},
"azuremonitorlogs": {
"connectionId": "/subscriptions/blob-connection-name/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/azure-monitor-logs-connection-name",
"connectionName": "azure-monitor-logs-connection-name",
"id": "/subscriptions/blob-connection-name/providers/Microsoft.Web/locations/canadacentral/managedApis/azuremonitorlogs"
}
}
}
}
}
Следующие шаги
- Дополнительные сведения о запросах журнала в Azure Monitor см. в этой статье.
- Дополнительные сведения о Logic Apps.
- Ознакомьтесь с дополнительными сведениями о Power Automate.