Dela via


Exportera data från en Log Analytics-arbetsyta till ett lagringskonto med hjälp av Logic Apps

I den här artikeln beskrivs en metod för att använda Azure Logic Apps för att fråga efter data från en Log Analytics-arbetsyta i Azure Monitor och skicka dem till Azure Storage. Använd den här processen när du behöver exportera dina Azure Monitor-loggar för gransknings- och efterlevnadsscenarier eller för att tillåta att en annan tjänst hämtar dessa data.

Andra exportmetoder

Metoden som beskrivs i den här artikeln beskriver en schemalagd export från en loggfråga med hjälp av en logikapp. Andra alternativ för att exportera data för vissa scenarier är:

Översikt

Den här proceduren använder Anslutningsappen för Azure Monitor-loggar, som gör att du kan köra en loggfråga från en logikapp och använda dess utdata i andra åtgärder i arbetsflödet. Azure Blob Storage-anslutningsappen används i den här proceduren för att skicka frågeutdata till lagring.

Screenshot that shows a Logic Apps overview.

När du exporterar data från en Log Analytics-arbetsyta begränsar du mängden data som bearbetas av ditt Logic Apps-arbetsflöde. Filtrera och aggregera dina loggdata i frågan för att minska de data som krävs. Om du till exempel behöver exportera inloggningshändelser filtrerar du bara efter nödvändiga händelser och projicerar endast de obligatoriska fälten. Till exempel:

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

När du exporterar data enligt ett schema använder du ingestion_time() funktionen i frågan för att se till att du inte missar data som kommer sent. Om data fördröjs på grund av problem med nätverk eller plattformar säkerställer inmatningstiden att data inkluderas i nästa Logic Apps-körning. Ett exempel finns i steget "Lägg till Azure Monitor Logs-åtgärd" i avsnittet Logic Apps-procedur .

Förutsättningar

Följande krav måste slutföras innan du påbörjar den här proceduren:

  • Log Analytics-arbetsyta: Den användare som skapar logikappen måste ha minst läsbehörighet till arbetsytan.
  • Lagringskonto: Lagringskontot behöver inte finnas i samma prenumeration som din Log Analytics-arbetsyta. Användaren som skapar logikappen måste ha skrivbehörighet till lagringskontot.

Anslut eller gränser

Log Analytics-arbetsytor och loggfrågor i Azure Monitor är tjänster för flera innehavare som innehåller gränser för att skydda och isolera kunder och upprätthålla tjänstens kvalitet. När du frågar efter en stor mängd data bör du överväga följande gränser, vilket kan påverka hur du konfigurerar logic apps-upprepningen och loggfrågan:

  • Loggfrågor kan inte returnera fler än 500 000 rader.
  • Loggfrågor kan inte returnera mer än 64 000 000 byte.
  • Loggfrågor kan inte köras längre än 10 minuter.
  • Log Analytics-anslutningsappen är begränsad till 100 anrop per minut.

Logic Apps-procedur

I följande avsnitt går vi igenom proceduren.

Skapa en container i lagringskontot

Använd proceduren i Skapa en container för att lägga till en container i ditt lagringskonto för att lagra exporterade data. Namnet som används för containern i den här artikeln är loganalytics-data, men du kan använda valfritt namn.

Skapa ett arbetsflöde för logikappen

  1. Gå till Logic Apps i Azure-portalen och välj Lägg till. Välj en prenumeration, resursgrupp och region för att lagra den nya logikappen. Ge det sedan ett unikt namn. Du kan aktivera Log Analytics-inställningen för att samla in information om körningsdata och händelser enligt beskrivningen i Konfigurera Azure Monitor-loggar och samla in diagnostikdata för Azure Logic Apps. Den här inställningen krävs inte för att använda Anslutningsappen för Azure Monitor-loggar.

    Screenshot that shows creating a logic app.

  2. Välj Granska + skapa och välj sedan Skapa. När distributionen är klar väljer du Gå till resurs för att öppna Logic Apps Designer.

Skapa en utlösare för arbetsflödet

Under Starta med en vanlig utlösare väljer du Återkommande. Den här inställningen skapar ett arbetsflöde för logikappen som körs automatiskt med jämna mellanrum. I rutan Frekvens i åtgärden väljer du Dag. I rutan Intervall anger du 1 för att köra arbetsflödet en gång per dag.

Screenshot that shows a Recurrence action.

Lägga till en Azure Monitor-loggåtgärd

Med åtgärden Azure Monitor-loggar kan du ange vilken fråga som ska köras. Loggfrågan som används i det här exemplet är optimerad för återkommande varje timme. Den samlar in data som matas in under den specifika körningstiden. Om arbetsflödet till exempel körs 4:35 är tidsintervallet 3:00 till 4:00. Om du ändrar logikappen så att den körs med en annan frekvens måste du också ändra frågan. Om du till exempel anger att upprepningen ska köras dagligen anger startTime du i frågan till startofday(make_datetime(year,month,day,0,0)).

Du uppmanas att välja en klientorganisation för att bevilja åtkomst till Log Analytics-arbetsytan med det konto som arbetsflödet ska använda för att köra frågan.

  1. Välj + Nytt steg för att lägga till en åtgärd som körs efter upprepningsåtgärden. Under Välj en åtgärd anger du azure monitor. Välj sedan Azure Monitor-loggar.

    Screenshot that shows an Azure Monitor Logs action.

  2. Välj Azure Log Analytics – Kör fråge- och listresultat.

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

  3. Välj prenumerationenoch resursgruppen för Log Analytics-arbetsytan. Välj Log Analytics-arbetsyta som resurstyp. Välj sedan arbetsytans namn under Resursnamn.

  4. Lägg till följande loggfråga i frågefönstret :

    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. Tidsintervallet anger de poster som ska ingå i frågan baserat på kolumnen TimeGenerated. Värdet ska vara större än det tidsintervall som valts i frågan. Eftersom den här frågan inte använder kolumnen TimeGenerated är alternativet Ange i fråga inte tillgängligt. Mer information om tidsintervallet finns i Frågeomfång. Välj Senaste 4 timmarna för tidsintervallet. Den här inställningen säkerställer att alla poster med en inmatningstid som är större än TimeGenerated inkluderas i resultatet.

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

Lägg till en Parsa JSON-åtgärd (valfritt)

Utdata från åtgärden Kör fråga och lista resultat formateras i JSON. Du kan parsa dessa data och ändra dem som en del av förberedelsen för åtgärden Skriv .

Du kan ange ett JSON-schema som beskriver den nyttolast som du förväntar dig att få. Designern parsar JSON-innehåll med hjälp av det här schemat och genererar användarvänliga token som representerar egenskaperna i ditt JSON-innehåll. Du kan sedan enkelt referera till och använda dessa egenskaper i logikappens arbetsflöde.

Du kan använda ett exempel på utdata från steget Kör fråga och lista resultat .

  1. Välj Kör utlösare i menyfliksområdet Logic Apps. Välj sedan Kör och ladda ned och spara en utdatapost. För exempelfrågan i föregående stam kan du använda följande exempelutdata:

    {
        "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. Välj + Nytt steg och välj sedan + Lägg till en åtgärd. Under Välj en åtgärd anger du json och väljer sedan Parsa JSON.

    Screenshot that shows selecting a Parse JSON operator.

  3. Välj rutan Innehåll för att visa en lista med värden från tidigare aktiviteter. Välj Brödtext i åtgärden Kör fråga och lista resultat . Dessa utdata kommer från loggfrågan.

    Screenshot that shows selecting a Body.

  4. Kopiera exempelposten som sparades tidigare. Välj Använd exempelnyttolast för att generera schema och klistra in.

    Screenshot that shows parsing a JSON payload.

Lägg till åtgärden Skriv

Åtgärden Skriv tar de parsade JSON-utdata och skapar det objekt som du behöver lagra i bloben.

  1. Välj + Nytt steg och välj sedan + Lägg till en åtgärd. Under Välj en åtgärd anger du Skriv. Välj sedan åtgärden Skriv .

    Screenshot that shows selecting a Compose action.

  2. Välj rutan Indata för att visa en lista med värden från tidigare aktiviteter. Välj Brödtext från åtgärden Parsa JSON . Den här parsade utdatan kommer från loggfrågan.

    Screenshot that shows selecting a body for a Compose action.

Lägg till åtgärden Skapa blob

Åtgärden Skapa blob skriver den sammansatta JSON till lagringen.

  1. Välj + Nytt steg och välj sedan + Lägg till en åtgärd. Under Välj en åtgärd anger du blob. Välj sedan åtgärden Skapa blob .

    Screenshot that shows selecting the Create Blob action.

  2. Ange ett namn för anslutningen till ditt lagringskonto i Anslut ionsnamn. Välj sedan mappikonen i rutan Mappsökväg för att välja containern i ditt lagringskonto. Välj Blobnamn om du vill se en lista med värden från tidigare aktiviteter. Välj Uttryck och ange ett uttryck som matchar ditt tidsintervall. För den här frågan, som körs varje timme, anger följande uttryck blobnamnet per föregående timme:

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

    Screenshot that shows a blob expression.

  3. Välj rutan Blobinnehåll om du vill visa en lista med värden från tidigare aktiviteter. Välj sedan Utdata i avsnittet Skriv .

    Screenshot that shows creating a blob expression.

Testa arbetsflödet

Om du vill testa arbetsflödet väljer du Kör. Om arbetsflödet har fel visas de i steget med problemet. Du kan visa körningarna och öka detaljnivån för varje steg för att visa indata och utdata för att undersöka fel. Se Felsöka och diagnostisera arbetsflödesfel i Azure Logic Apps om det behövs.

Screenshot that shows Runs history.

Visa loggar i lagring

Gå till menyn Lagringskonton i Azure-portalen och välj ditt lagringskonto. Välj panelen Blobar. Välj sedan den container som du angav i åtgärden Skapa blob . Välj en av blobarna och välj sedan Redigera blob.

Screenshot that shows blob data.

Logikappmall

Det valfria Parsa JSON-steget ingår inte i mallen

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

Nästa steg