Экспорт данных из рабочей области Log Analytics в учетную запись хранилища с помощью службы Logic Apps

В этой статье описывается метод использования Azure Logic Apps для запроса данных из рабочей области Log Analytics в Azure Monitor и отправки их в службу хранилища Azure. Используйте этот процесс, если необходимо экспортировать данные журналов Azure Monitor для аудита и соответствия сценариям или разрешить другой службе получать эти данные.

Другие методы экспорта

Метод, рассмотренный в этой статье, описывает запланированный экспорт из запроса журнала при помощи логического приложения. Другие варианты экспорта данных для определенных сценариев:

  • Чтобы экспортировать исторические записи из одной таблицы по запросу и диапазону времени в Хранилище BLOB-объектов Azure, выполните задание экспорта (предварительная версия). Задача экспорта — это рекомендуемый встроенный вариант для экспорта исторических данных по запросу в больших объёмах, и на неё не распространяются ограничения на запросы к журналам и на соединители, описанные далее в этой статье.
  • Чтобы экспортировать данные из рабочей области Log Analytics в учетную запись хранения или Центры событий Azure, используйте функцию экспорта данных рабочей области Log Analytics журналов Azure Monitor. См. сведения о экспорте данных рабочей области Log Analytics в Azure Monitor.
  • Одноразовый экспорт с помощью приложения логики. Смотрите соединитель журналов Azure Monitor для Logic Apps.
  • Однократный экспорт на локальный компьютер с помощью скрипта PowerShell. См. статью Invoke-AzOperationalInsightsQueryExport.

Обзор

В этой процедуре используется соединитель журналов Azure Monitor, который позволяет запускать запрос журнала из приложения логики и использовать его выходные данные в других действиях в рабочем процессе. Соединитель Хранилище BLOB-объектов Azure используется в этой процедуре для отправки выходных данных запроса в хранилище. Снимок экрана: обзор Logic Apps.

При экспорте данных из рабочей области 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, но вы можете выбрать любое другое.

Создание рабочего процесса приложения логики

  1. Перейдите к разделу Logic Apps на портале Azure и выберите Добавить. Выберите подписку, группу ресурсов и регион для хранения нового приложения логики. Затем присвойте ему уникальное имя. Вы можете включить параметр Log Analytics для сбора сведений о данных и событиях во время выполнения, как описано в разделе Настройка журналов Azure Monitor и сбор диагностических данных для Azure Logic Apps. Этот параметр не требуется для использования коннектора журналов Azure Monitor. Снимок экрана: создание приложения логики.

  2. Выберите Просмотр и создание, а затем нажмите кнопку Создать. После завершения развертывания выберите "Перейти к ресурсу", чтобы открыть конструктор Logic Apps.

Создание триггера для рабочего процесса

В разделе Начинаем с часто используемого триггера выберите элемент Повторение. Этот параметр создает рабочий процесс приложения логики, который автоматически выполняется через регулярный интервал. В поле "Частота " действия выберите "Час". В поле "Интервал" введите 1 , чтобы запустить рабочий процесс один раз в час. Снимок экрана, показывающий действие «Повторение».

Добавьте действие журналов Azure Monitor

Действие журналов Azure Monitor позволяет указать запрос для выполнения. Запрос журнала, используемый в этом примере, оптимизирован для почасового повторения, настроенного на предыдущем шаге. Он собирает данные, полученные за определённое время выполнения. Например, если рабочий процесс выполняется в 4:35, диапазон времени составляет от 3:00 до 4:00. Чтобы запустить приложение логики с другой частотой, измените запрос на соответствие. Например, для ежедневного повторения задайте startTime в запросе значение startofday(make_datetime(year,month,day,0,0)).

Вас попросят выбрать арендатора, чтобы предоставить доступ к рабочей области Log Analytics с учетной записи, которую рабочий процесс будет использовать для выполнения запроса.

  1. Выберите + Новый шаг, чтобы добавить действие, выполняемое после действия повторения. В разделе " Выбор действия" введите Azure Monitor. Затем выберите Azure Monitor Logs. Снимок экрана, на котором показано действие журналов Azure Monitor.

  2. Выберите Azure Log Analytics — выполните запрос и перечислите результаты. Снимок экрана, показывающий, что журналы Azure Monitor выделены в разделе

  3. Выберите значения Подписка и Группа ресурсов для рабочей области Log Analytics. Выберите рабочую область Log Analytics для типа ресурса. Затем выберите имя рабочей области в разделе "Имя ресурса".

  4. Добавьте следующий запрос журнала в окно запроса :

    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
    
  5. Диапазон времени определяет записи, которые будут включены в запрос на основе столбца TimeGenerated. Значение должно быть больше диапазона времени, выбранного в запросе. Так как этот запрос не использует столбец TimeGenerated , параметр Set in query недоступен. Дополнительные сведения о диапазоне времени см. в разделе "Область запроса". Выберите Последние 4 часа для параметра Диапазон времени. Этот параметр гарантирует, что все записи с временем приема, превышающим TimeGenerated, будут включены в результаты. Снимок экрана: параметры для нового действия журналов Azure Monitor с именем

Добавление действия анализа JSON (необязательно)

Выходные данные действия Выполнить запрос и вывести результаты представлены в формате JSON. Эти данные можно проанализировать и управлять ими в рамках подготовки действия Создания .

Вы можете предоставить схему JSON, описывающую полезные данные, которые вы рассчитываете получить. С помощью этой схемы конструктор выполняет синтаксический анализ содержимого JSON и создает удобные пользовательские токены, представляющие свойства в содержимом JSON. Можно легко ссылаться на эти свойства и использовать их во время рабочего процесса приложения логики.

Пример выходных данных можно использовать на шаге выполнения запроса и списка результатов .

  1. Выберите "Запустить триггер" на ленте Logic Apps. Затем выберите "Выполнить " и скачать и сохранить выходную запись. Для примера запроса на предыдущем шаге используйте следующие примеры выходных данных:

    {
        "TimeGenerated": "2026-07-09T23:11:02.578Z",
        "BlobTime": "2026-07-09T23:00:00Z",
        "OperationName": "Returns Storage Account SAS Token",
        "OperationNameValue": "MICROSOFT.RESOURCES/DEPLOYMENTS/WRITE",
        "Level": "Informational",
        "ActivityStatus": "Started",
        "ResourceGroup": "monitoring",
        "SubscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
        "Category": "Administrative",
        "EventSubmissionTimestamp": "2026-07-09T23:11:02Z",
        "ClientIpAddress": "192.168.1.100",
        "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/monitoring/providers/microsoft.storage/storageaccounts/my-storage-account"
    }
    
  2. Выберите +Создать шаг и нажмите кнопку +Добавить действие. В разделе "Выбор операции" введите json и выберите "Анализ JSON". Снимок экрана, показывающий выбор оператора Parse JSON.

  3. Выберите поле "Содержимое " , чтобы отобразить список значений из предыдущих действий. Выберите Тело из действия Выполнить запрос и вывести результаты. Это выходные данные из запроса журнала. Снимок экрана, показывающий выбор тела.

  4. Скопируйте образец записи, сохраненной ранее. Выберите «Использовать пример полезных данных для создания схемы» и вставьте. Снимок экрана: разбор JSON-данных.

Добавьте действие "Compose"

Действие Композиция принимает проанализированные выходные данные JSON и создает объект, который необходимо сохранить в BLOB.

  1. Выберите +Создать шаг, а затем нажмите кнопку +Добавить действие. В разделе "Выбор операции" введите создать. Затем выберите действие Compose. Снимок экрана: выбор действия Compose.

  2. Выберите поле "Входные данные", чтобы отобразить список значений из предыдущих действий. Выберите Текст из действия Анализ JSON. Этот анализ выходных данных выполняется из запроса журнала. Снимок экрана: выбор текста для действия Compose.

Добавление действия создания BLOB-объектов

Действие Создать blob записывает в хранилище сформированный JSON.

  1. Выберите +Создать шаг, а затем нажмите кнопку +Добавить действие. В разделе "Выбор операции" введите blob. Затем выберите действие Создать BLOB. Снимок экрана: выбор действия

  2. Введите имя подключения к учетной записи хранения в поле "Имя подключения". Затем щелкните значок папки в поле пути к папке, чтобы выбрать контейнер в учетной записи хранения. Выберите Blob name, чтобы просмотреть список значений из предыдущих действий. Выберите выражение и введите выражение , соответствующее интервалу времени. Для этого запроса, который выполняется ежечасно, следующее выражение задает имя объекта BLOB за предыдущий час.

    subtractFromTime(formatDateTime(utcNow(),'yyyy-MM-ddTHH:00:00'), 1,'Hour')
    

    Снимок экрана, показывающий выражение blob.

  3. Выберите поле содержимого Blob, чтобы отобразить список значений из предыдущих действий. Затем выберите выходные данные в разделе "Создание ". Снимок экрана, демонстрирующий создание выражения BLOB.

Проверка рабочего процесса

Чтобы протестировать рабочий процесс, нажмите кнопку "Выполнить". Если рабочий процесс имеет ошибки, они указываются на шаге с проблемой. Можно просмотреть выполнение и подробно изучить каждый этап, чтобы просмотреть входные и выходные данные для расследования сбоев. При необходимости смотрите Устранение неполадок и диагностика сбоев рабочих процессов в Azure Logic Apps. Снимок экрана, показывающий историю запусков.

Просмотр журналов в хранилище

Перейдите в меню учетных записей хранения в портал Azure и выберите свою учетную запись хранения. Выберите плитку Blobs. Затем выберите контейнер, указанный в действии "Создать blob". Выберите один из больших двоичных объектов и выберите команду "Изменить большой двоичный объект". Скриншот, показывающий данные BLOB-объектов.

Шаблон приложения логики

Необязательный шаг анализа 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": "Last 4 hours"
                    }
                },
                "runAfter": {},
                "type": "ApiConnection"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "Recurrence": {
                "evaluatedRecurrence": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "recurrence": {
                    "frequency": "Hour",
                    "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/logic-app-subscription-id/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/azure-monitor-logs-connection-name",
                    "connectionName": "azure-monitor-logs-connection-name",
                    "id": "/subscriptions/logic-app-subscription-id/providers/Microsoft.Web/locations/canadacentral/managedApis/azuremonitorlogs"
                }
            }
        }
    }
}

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

  • Дополнительные сведения о запросах журнала в Azure Monitor см. в этой статье.
  • Дополнительные сведения о Logic Apps.
  • Ознакомьтесь с дополнительными сведениями о Power Automate.