Export dat z pracovního prostoru Log Analytics do účtu úložiště pomocí Logic Apps

Tento článek popisuje metodu použití Azure Logic Apps k dotazování dat z pracovního prostoru služby Log Analytics ve službě Azure Monitor a jejich odeslání do Azure Storage. Tento proces použijte v případě, že potřebujete exportovat data protokolů služby Azure Monitor pro scénáře auditování a dodržování předpisů nebo povolit načtení těchto dat jinou službou.

Další metody exportu

Metoda popisovaná v tomto článku popisuje naplánovaný export z dotazu protokolu pomocí aplikace logiky. Mezi další možnosti exportu dat pro konkrétní scénáře patří:

Přehled

Tento postup používá konektor protokolů služby Azure Monitor, který umožňuje spustit dotaz protokolu z aplikace logiky a použít jeho výstup v jiných akcích pracovního postupu. Konektor Azure Blob Storage se v tomto postupu používá k odeslání výstupu dotazu do úložiště.

Screenshot that shows a Logic Apps overview.

Při exportu dat z pracovního prostoru služby Log Analytics omezte množství dat zpracovávaných pracovním postupem Logic Apps. Vyfiltrujte a agregujte data protokolu v dotazu, abyste snížili požadovaná data. Pokud například potřebujete exportovat události přihlášení, vyfiltrujte požadované události a vyfiltrujte pouze požadovaná pole. Příklad:

SecurityEvent
| where EventID == 4624 or EventID == 4625
| project TimeGenerated , Account , AccountType , Computer

Při exportu dat podle plánu použijte ingestion_time() funkci v dotazu, abyste měli jistotu, že nezmeškáte data s pozdním příchodem. Pokud jsou data zpožděná kvůli problémům se sítí nebo platformou, pomocí doby příjmu dat zajistíte, že se data zahrnou do dalšího spuštění Logic Apps. Příklad najdete v kroku Přidání akce protokolů služby Azure Monitor v části procedury Logic Apps.

Předpoklady

Před zahájením tohoto postupu je nutné splnit následující požadavky:

  • Pracovní prostor Služby Log Analytics: Uživatel, který vytváří aplikaci logiky, musí mít k pracovnímu prostoru alespoň oprávnění ke čtení.
  • Účet úložiště: Účet úložiště nemusí být ve stejném předplatném jako váš pracovní prostor služby Log Analytics. Uživatel, který vytváří aplikaci logiky, musí mít oprávnění k zápisu do účtu úložiště.

omezení Připojení oru

Pracovní prostor služby Log Analytics a dotazy na protokoly ve službě Azure Monitor jsou víceklientské služby, které zahrnují omezení ochrany a izolace zákazníků a zachování kvality služeb. Při dotazování na velké množství dat zvažte následující omezení, která můžou ovlivnit konfiguraci opakování Logic Apps a dotazu protokolu:

  • Dotazy protokolu nemůžou vracet více než 500 000 řádků.
  • Dotazy protokolu nemůžou vracet více než 64 000 000 bajtů.
  • Dotazy protokolu nemůžou běžet déle než 10 minut.
  • Konektor Log Analytics je omezený na 100 volání za minutu.

Procedura Logic Apps

Následující části vás provedou postupem.

Vytvoření kontejneru v účtu úložiště

Pomocí postupu v části Vytvoření kontejneru přidejte kontejner do účtu úložiště pro uložení exportovaných dat. Název použitý pro kontejner v tomto článku je loganalytics-data, ale můžete použít libovolný název.

Vytvoření pracovního postupu aplikace logiky

  1. Na webu Azure Portal přejděte na Logic Apps a vyberte Přidat. Vyberte předplatné, skupinu prostředků a oblast, do které chcete uložit novou aplikaci logiky. Pak ho pojmenujte jedinečným názvem. Nastavení Log Analytics můžete zapnout, abyste shromáždili informace o datech a událostech modulu runtime, jak je popsáno v tématu Nastavení protokolů služby Azure Monitor a shromažďování diagnostických dat pro Azure Logic Apps. Toto nastavení se nevyžaduje pro použití konektoru protokolů služby Azure Monitor.

    Screenshot that shows creating a logic app.

  2. Vyberte Zkontrolovat a vytvořit a potom Vytvořit. Po dokončení nasazení vyberte Přejít k prostředku a otevřete Návrhář pro Logic Apps.

Vytvoření triggeru pro pracovní postup

V části Začít s běžným triggerem vyberte Opakování. Toto nastavení vytvoří pracovní postup aplikace logiky, který se automaticky spustí v pravidelných intervalech. V poli Frekvence akce vyberte Den. Do pole Interval zadejte 1, aby se pracovní postup spustil jednou denně.

Screenshot that shows a Recurrence action.

Přidání akce protokolů služby Azure Monitor

Akce protokolů služby Azure Monitor umožňuje zadat dotaz, který se má spustit. Dotaz protokolu použitý v tomto příkladu je optimalizovaný pro hodinové opakování. Shromažďuje data ingestované pro konkrétní dobu provádění. Pokud se například pracovní postup spustí ve 4:35, bude časový rozsah 3:00 až 4:00. Pokud změníte aplikaci logiky tak, aby běžela s jinou frekvencí, musíte také změnit dotaz. Pokud například nastavíte opakování tak, aby se spouštěla denně, nastavíte startTime v dotazu hodnotu startofday(make_datetime(year,month,day,0,0)).

Zobrazí se výzva k výběru tenanta pro udělení přístupu k pracovnímu prostoru služby Log Analytics pomocí účtu, který pracovní postup použije ke spuštění dotazu.

  1. Vyberte + Nový krok a přidejte akci, která se spustí po akci opakování. V části Zvolit akci zadejte azure monitor. Pak vyberte protokoly služby Azure Monitor.

    Screenshot that shows an Azure Monitor Logs action.

  2. Vyberte Azure Log Analytics – Spusťte výsledky dotazu a seznamu.

    Screenshot that shows Azure Monitor Logs is highlighted under Choose an action.

  3. Vyberte předplatné a skupinu prostředků pro váš pracovní prostor služby Log Analytics. Jako typ prostředku vyberte pracovní prostor služby Log Analytics. Pak v části Název prostředku vyberte název pracovního prostoru.

  4. Do okna Dotazu přidejte následující dotaz protokolu:

    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. Časový rozsah určuje záznamy, které budou zahrnuty do dotazu na základě sloupce TimeGenerated . Hodnota by měla být větší než časový rozsah vybraný v dotazu. Vzhledem k tomu, že tento dotaz nepoužívá sloupec TimeGenerated , není možnost Nastavit v dotazu dostupná. Další informace o časovém rozsahu najdete v tématu Rozsah dotazu. Pro časový rozsah vyberte Posledních 4 hodin. Toto nastavení zajistí, že do výsledků budou zahrnuty všechny záznamy s časem příjmu dat delším než TimeGenerated .

    Screenshot that shows the settings for the new Azure Monitor Logs action named Run query and visualize results.

Přidání akce Parsovat JSON (volitelné)

Výstup akce Spustit dotaz a výsledky seznamu je formátovaný ve formátu JSON. Tato data můžete analyzovat a manipulovat s nimi v rámci přípravy na akci Vytvořit .

Můžete zadat schéma JSON, které popisuje datovou část, kterou očekáváte. Návrhář analyzuje obsah JSON pomocí tohoto schématu a generuje uživatelsky přívětivé tokeny, které představují vlastnosti v obsahu JSON. Tyto vlastnosti pak můžete snadno odkazovat a používat v rámci pracovního postupu aplikace logiky.

Můžete použít ukázkový výstup z kroku Spustit dotaz a zobrazit seznam výsledků .

  1. Na pásu karet Logic Apps vyberte Spustit trigger . Pak vyberte Spustit a stáhnout a uložit výstupní záznam. Pro ukázkový dotaz v předchozím kmeni můžete použít následující ukázkový výstup:

    {
        "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. Vyberte + Nový krok a pak vyberte + Přidat akci. V části Zvolit operaci zadejte json a pak vyberte Parsovat JSON.

    Screenshot that shows selecting a Parse JSON operator.

  3. Výběrem pole Obsah zobrazte seznam hodnot z předchozích aktivit. V akci Spustit dotaz a výsledky seznamu vyberte text. Tento výstup pochází z dotazu protokolu.

    Screenshot that shows selecting a Body.

  4. Zkopírujte ukázkový záznam uložený dříve. Vyberte Použít ukázkovou datovou část k vygenerování schématu a vložení.

    Screenshot that shows parsing a JSON payload.

Přidání akce Vytvořit

Akce Vytvořit provede analyzovaný výstup JSON a vytvoří objekt, který potřebujete uložit do objektu blob.

  1. Vyberte + Nový krok a pak vyberte + Přidat akci. V části Zvolit operaci zadejte psaní. Pak vyberte akci Vytvořit .

    Screenshot that shows selecting a Compose action.

  2. Výběrem pole Vstupy zobrazíte seznam hodnot z předchozích aktivit. V akci Parsovat JSON vyberte text. Tento analyzovaný výstup pochází z dotazu protokolu.

    Screenshot that shows selecting a body for a Compose action.

Přidání akce Vytvořit objekt blob

Akce Vytvořit objekt blob zapíše složený JSON do úložiště.

  1. Vyberte + Nový krok a pak vyberte + Přidat akci. V části Zvolit operaci zadejte objekt blob. Pak vyberte akci Vytvořit objekt blob .

    Screenshot that shows selecting the Create Blob action.

  2. Do pole název Připojení ion zadejte název připojení k vašemu účtu úložiště. Potom v poli Cesta ke složce vyberte kontejner v účtu úložiště. Výběrem názvu objektu blob zobrazíte seznam hodnot z předchozích aktivit. Vyberte Výraz a zadejte výraz, který odpovídá vašemu časovému intervalu. Pro tento dotaz, který se spouští každou hodinu, nastaví následující výraz název objektu blob za předchozí hodinu:

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

    Screenshot that shows a blob expression.

  3. Výběrem pole obsahu objektu blob zobrazte seznam hodnot z předchozích aktivit. Pak vyberte Výstupy v oddílu Vytvořit .

    Screenshot that shows creating a blob expression.

Test pracovního postupu

Pokud chcete pracovní postup otestovat, vyberte Spustit. Pokud pracovní postup obsahuje chyby, jsou uvedené v kroku s problémem. Můžete zobrazit spuštění a přejít k podrobnostem jednotlivých kroků, abyste zobrazili vstup a výstup a prozkoumali selhání. V případě potřeby si prohlédnou téma Řešení potíží a diagnostika selhání pracovního postupu v Azure Logic Apps.

Screenshot that shows Runs history.

Zobrazení protokolů v úložišti

Na webu Azure Portal přejděte do nabídky Účty úložiště a vyberte svůj účet úložiště. Vyberte dlaždici Objekty blob. Pak vyberte kontejner, který jste zadali v akci Vytvořit objekt blob . Vyberte jeden z objektů blob a pak vyberte Upravit objekt blob.

Screenshot that shows blob data.

Šablona aplikace logiky

Volitelný krok Parsovat JSON není součástí šablony.

{
    "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"
                }
            }
        }
    }
}

Další kroky