Sdílet prostřednictvím


Export dat z pracovního prostoru služby Log Analytics do účtu úložiště s využitím 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ě.

Snímek obrazovky znázorňující přehled Logic Apps

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.

Požadavky

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í konektorů

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.

    Snímek obrazovky znázorňující vytvoření aplikace logiky

  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ě.

Snímek obrazovky znázorňující akci Opakování

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.

    Snímek obrazovky znázorňující akci protokolů služby Azure Monitor

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

    Snímek obrazovky znázorňující zvýrazněné protokoly služby Azure Monitor v části Zvolit akci

  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 .

    Snímek obrazovky znázorňující nastavení nové akce protokolů služby Azure Monitor s názvem Spustit dotaz a vizualizovat výsledky

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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
        "Category": "Administrative",
        "EventSubmissionTimestamp": "2020-09-29T23:11:02Z",
        "ClientIpAddress": "192.168.1.100",
        "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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.

    Snímek obrazovky znázorňující výběr operátoru Parsovat JSON

  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.

    Snímek obrazovky znázorňující výběr textu

  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í.

    Snímek obrazovky znázorňující analýzu datové části JSON

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 .

    Snímek obrazovky znázorňující výběr akce Vytvořit

  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.

    Snímek obrazovky znázorňující výběr textu pro akci Vytvořit

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 .

    Snímek obrazovky znázorňující výběr akce Vytvořit objekt blob

  2. Do názvu připojení 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')
    

    Snímek obrazovky znázorňující výraz objektu blob

  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 .

    Snímek obrazovky znázorňující vytvoření výrazu objektu blob

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.

Snímek obrazovky znázorňující historii spuštění

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.

Snímek obrazovky znázorňující data objektů blob

Š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