Поделиться через


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

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

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

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

Обзор

В этой процедуре используется соединитель журналов 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.

    Снимок экрана: действие журналов 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": "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"
    }
    
  2. Выберите +Создать шаг и нажмите кнопку +Добавить действие. В разделе "Выбор операции" введите json и выберите "Анализ JSON".

    Снимок экрана: выбор оператора JSON синтаксического анализа.

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

    Снимок экрана: выбор текста.

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

    Снимок экрана: анализ полезных данных JSON.

Добавление действия "Создать"

Действие Создать принимает проанализированные выходные данные JSON и создает объект, который необходимо сохранить в большом двоичном объекте.

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

    Снимок экрана: выбор действия Compose.

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

    Снимок экрана: выбор текста для действия Compose.

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

Действие "Создать большой двоичный объект " записывает в хранилище созданную JSON.

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

    Снимок экрана: выбор действия

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

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

    Снимок экрана: выражение БОЛЬШОго двоичного объекта.

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

    Снимок экрана: создание выражения БОЛЬШОго двоичного объекта.

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

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

Снимок экрана: журнал запусков.

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

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

Снимок экрана: данные 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": "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.